TextureState.h revision 38e0c32852e3b9d8ca4a9d3791577f52536419cb
1/*
2 * Copyright (C) 2015 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#ifndef RENDERSTATE_TEXTURESTATE_H
17#define RENDERSTATE_TEXTURESTATE_H
18
19#include "Vertex.h"
20
21#include <GLES2/gl2.h>
22#include <GLES2/gl2ext.h>
23#include <SkXfermode.h>
24#include <memory>
25
26class SkBitmap;
27
28namespace android {
29namespace uirenderer {
30
31class Texture;
32
33class TextureState {
34    friend class Caches; // TODO: move to RenderState
35public:
36    /**
37     * Activate the specified texture unit. The texture unit must
38     * be specified using an integer number (0 for GL_TEXTURE0 etc.)
39     */
40    void activateTexture(GLuint textureUnit);
41
42    /**
43     * Invalidate the cached value of the active texture unit.
44     */
45    void resetActiveTexture();
46
47    /**
48     * Binds the specified texture as a GL_TEXTURE_2D texture.
49     * All texture bindings must be performed with this method or
50     * bindTexture(GLenum, GLuint).
51     */
52    void bindTexture(GLuint texture);
53
54    /**
55     * Binds the specified texture with the specified render target.
56     * All texture bindings must be performed with this method or
57     * bindTexture(GLuint).
58     */
59    void bindTexture(GLenum target, GLuint texture);
60
61    /**
62     * Deletes the specified texture and clears it from the cache
63     * of bound textures.
64     * All textures must be deleted using this method.
65     */
66    void deleteTexture(GLuint texture);
67
68    /**
69     * Signals that the cache of bound textures should be cleared.
70     * Other users of the context may have altered which textures are bound.
71     */
72    void resetBoundTextures();
73
74    /**
75     * Clear the cache of bound textures.
76     */
77    void unbindTexture(GLuint texture);
78
79private:
80    // total number of texture units available for use
81    static const int kTextureUnitsCount = 4;
82
83    TextureState();
84    GLuint mTextureUnit;
85
86    // Caches texture bindings for the GL_TEXTURE_2D target
87    GLuint mBoundTextures[kTextureUnitsCount];
88};
89
90} /* namespace uirenderer */
91} /* namespace android */
92
93#endif // RENDERSTATE_BLEND_H
94