Texture.h revision 8164c2d338781c3a3c4a443941070dca5d88f2a7
1ce0537b80087a6225273040a987414b1dd081aa0Romain Guy/*
2ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Copyright (C) 2010 The Android Open Source Project
3ce0537b80087a6225273040a987414b1dd081aa0Romain Guy *
4ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * you may not use this file except in compliance with the License.
6ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * You may obtain a copy of the License at
7ce0537b80087a6225273040a987414b1dd081aa0Romain Guy *
8ce0537b80087a6225273040a987414b1dd081aa0Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9ce0537b80087a6225273040a987414b1dd081aa0Romain Guy *
10ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Unless required by applicable law or agreed to in writing, software
11ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * See the License for the specific language governing permissions and
14ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * limitations under the License.
15ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */
16ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
17ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#ifndef ANDROID_UI_TEXTURE_H
18ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#define ANDROID_UI_TEXTURE_H
19ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
20ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include <GLES2/gl2.h>
21ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
22ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace android {
23ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace uirenderer {
24ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
25ce0537b80087a6225273040a987414b1dd081aa0Romain Guy/**
26ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Represents an OpenGL texture.
27ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */
28ce0537b80087a6225273040a987414b1dd081aa0Romain Guystruct Texture {
2922158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    Texture() {
3022158e139a3d6c6a9787ca0de224e9368f643284Romain Guy        cleanup = false;
319aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy        bitmapSize = 0;
328164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy        wrapS = GL_CLAMP_TO_EDGE;
338164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy        wrapT = GL_CLAMP_TO_EDGE;
3422158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    }
3522158e139a3d6c6a9787ca0de224e9368f643284Romain Guy
36ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    /**
37ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     * Name of the texture.
38ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     */
39ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    GLuint id;
40ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    /**
41fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy     * Generation of the backing bitmap,
42fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy     */
43fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy    uint32_t generation;
44fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy    /**
45ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     * Indicates whether the texture requires blending.
46ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     */
47ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    bool blend;
48ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    /**
49ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     * Width of the backing bitmap.
50ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     */
517d139ba2c331f11e9b485753cc727a0ff202f2a4Romain Guy    uint32_t width;
52ce0537b80087a6225273040a987414b1dd081aa0Romain Guy    /**
53ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     * Height of the backing bitmap.
54ce0537b80087a6225273040a987414b1dd081aa0Romain Guy     */
557d139ba2c331f11e9b485753cc727a0ff202f2a4Romain Guy    uint32_t height;
5622158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    /**
5722158e139a3d6c6a9787ca0de224e9368f643284Romain Guy     * Indicates whether this texture should be cleaned up after use.
5822158e139a3d6c6a9787ca0de224e9368f643284Romain Guy     */
5922158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    bool cleanup;
609aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy    /**
619aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy     * Optional, size of the original bitmap.
629aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy     */
639aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy    uint32_t bitmapSize;
648164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy
658164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy    /**
668164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy     * Last wrap modes set on this texture. Defaults to GL_CLAMP_TO_EDGE.
678164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy     */
688164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy    GLenum wrapS;
698164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy    GLenum wrapT;
70ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // struct Texture
71ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
7222158e139a3d6c6a9787ca0de224e9368f643284Romain Guyclass AutoTexture {
7322158e139a3d6c6a9787ca0de224e9368f643284Romain Guypublic:
7422158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    AutoTexture(const Texture* texture): mTexture(texture) { }
7522158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    ~AutoTexture() {
7622158e139a3d6c6a9787ca0de224e9368f643284Romain Guy        if (mTexture && mTexture->cleanup) {
7722158e139a3d6c6a9787ca0de224e9368f643284Romain Guy            glDeleteTextures(1, &mTexture->id);
7822158e139a3d6c6a9787ca0de224e9368f643284Romain Guy            delete mTexture;
7922158e139a3d6c6a9787ca0de224e9368f643284Romain Guy        }
8022158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    }
8122158e139a3d6c6a9787ca0de224e9368f643284Romain Guy
8222158e139a3d6c6a9787ca0de224e9368f643284Romain Guyprivate:
8322158e139a3d6c6a9787ca0de224e9368f643284Romain Guy    const Texture* mTexture;
8422158e139a3d6c6a9787ca0de224e9368f643284Romain Guy}; // class AutoTexture
8522158e139a3d6c6a9787ca0de224e9368f643284Romain Guy
86ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // namespace uirenderer
87ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // namespace android
88ce0537b80087a6225273040a987414b1dd081aa0Romain Guy
89ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#endif // ANDROID_UI_TEXTURE_H
90