Texture.h revision 5b3b35296e8b2c8d3f07d32bb645d5414db41a1d
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_HWUI_TEXTURE_H
18#define ANDROID_HWUI_TEXTURE_H
19
20#include <GLES2/gl2.h>
21
22namespace android {
23namespace uirenderer {
24
25/**
26 * Represents an OpenGL texture.
27 */
28struct Texture {
29    Texture() {
30        cleanup = false;
31        bitmapSize = 0;
32        wrapS = GL_CLAMP_TO_EDGE;
33        wrapT = GL_CLAMP_TO_EDGE;
34    }
35
36    /**
37     * Name of the texture.
38     */
39    GLuint id;
40    /**
41     * Generation of the backing bitmap,
42     */
43    uint32_t generation;
44    /**
45     * Indicates whether the texture requires blending.
46     */
47    bool blend;
48    /**
49     * Width of the backing bitmap.
50     */
51    uint32_t width;
52    /**
53     * Height of the backing bitmap.
54     */
55    uint32_t height;
56    /**
57     * Indicates whether this texture should be cleaned up after use.
58     */
59    bool cleanup;
60    /**
61     * Optional, size of the original bitmap.
62     */
63    uint32_t bitmapSize;
64
65    /**
66     * Last wrap modes set on this texture. Defaults to GL_CLAMP_TO_EDGE.
67     */
68    GLenum wrapS;
69    GLenum wrapT;
70}; // struct Texture
71
72class AutoTexture {
73public:
74    AutoTexture(const Texture* texture): mTexture(texture) { }
75    ~AutoTexture() {
76        if (mTexture && mTexture->cleanup) {
77            glDeleteTextures(1, &mTexture->id);
78            delete mTexture;
79        }
80    }
81
82private:
83    const Texture* mTexture;
84}; // class AutoTexture
85
86}; // namespace uirenderer
87}; // namespace android
88
89#endif // ANDROID_HWUI_TEXTURE_H
90