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 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_TEXTURE_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_TEXTURE_H 19ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 20ce0537b80087a6225273040a987414b1dd081aa0Romain Guy#include <GLES2/gl2.h> 21ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 22ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace android { 23ce0537b80087a6225273040a987414b1dd081aa0Romain Guynamespace uirenderer { 24ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 258aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyclass Caches; 263b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guyclass UvMapper; 273b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 28ce0537b80087a6225273040a987414b1dd081aa0Romain Guy/** 29ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Represents an OpenGL texture. 30ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */ 318aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyclass Texture { 328aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guypublic: 338aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy Texture(); 348aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy Texture(Caches& caches); 359ace8f5e79e76893fe4ca9e4d10f6c4056330485Romain Guy 36a404e16e4933857464046d763ed7629cd0c86cbfRomain Guy virtual ~Texture() { } 37a404e16e4933857464046d763ed7629cd0c86cbfRomain Guy 388aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy inline void setWrap(GLenum wrap, bool bindTexture = false, bool force = false, 39d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy GLenum renderTarget = GL_TEXTURE_2D) { 40d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy setWrapST(wrap, wrap, bindTexture, force, renderTarget); 41d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy } 42d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy 43a404e16e4933857464046d763ed7629cd0c86cbfRomain Guy virtual void setWrapST(GLenum wrapS, GLenum wrapT, bool bindTexture = false, 448aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy bool force = false, GLenum renderTarget = GL_TEXTURE_2D); 45e3c26851dc315b730ea0fe5ef35bb1db81f6d675Romain Guy 468aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy inline void setFilter(GLenum filter, bool bindTexture = false, bool force = false, 47d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy GLenum renderTarget = GL_TEXTURE_2D) { 48d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy setFilterMinMag(filter, filter, bindTexture, force, renderTarget); 49d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy } 50d21b6e1fe337b35f62cf2028e9bd0637fd009a75Romain Guy 51a404e16e4933857464046d763ed7629cd0c86cbfRomain Guy virtual void setFilterMinMag(GLenum min, GLenum mag, bool bindTexture = false, 528aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy bool force = false, GLenum renderTarget = GL_TEXTURE_2D); 5322158e139a3d6c6a9787ca0de224e9368f643284Romain Guy 54ce0537b80087a6225273040a987414b1dd081aa0Romain Guy /** 55be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy * Convenience method to call glDeleteTextures() on this texture's id. 56be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy */ 57be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy void deleteTexture() const; 58be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy 59be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy /** 60ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Name of the texture. 61ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */ 62ce0537b80087a6225273040a987414b1dd081aa0Romain Guy GLuint id; 63ce0537b80087a6225273040a987414b1dd081aa0Romain Guy /** 64fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy * Generation of the backing bitmap, 65fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy */ 66fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy uint32_t generation; 67fe8809471a40cac8acc984adfa51c39e13e83947Romain Guy /** 68ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Indicates whether the texture requires blending. 69ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */ 70ce0537b80087a6225273040a987414b1dd081aa0Romain Guy bool blend; 71ce0537b80087a6225273040a987414b1dd081aa0Romain Guy /** 72ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Width of the backing bitmap. 73ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */ 747d139ba2c331f11e9b485753cc727a0ff202f2a4Romain Guy uint32_t width; 75ce0537b80087a6225273040a987414b1dd081aa0Romain Guy /** 76ce0537b80087a6225273040a987414b1dd081aa0Romain Guy * Height of the backing bitmap. 77ce0537b80087a6225273040a987414b1dd081aa0Romain Guy */ 787d139ba2c331f11e9b485753cc727a0ff202f2a4Romain Guy uint32_t height; 7922158e139a3d6c6a9787ca0de224e9368f643284Romain Guy /** 8022158e139a3d6c6a9787ca0de224e9368f643284Romain Guy * Indicates whether this texture should be cleaned up after use. 8122158e139a3d6c6a9787ca0de224e9368f643284Romain Guy */ 8222158e139a3d6c6a9787ca0de224e9368f643284Romain Guy bool cleanup; 839aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy /** 849aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy * Optional, size of the original bitmap. 859aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy */ 869aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4Romain Guy uint32_t bitmapSize; 87713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5Romain Guy /** 88713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5Romain Guy * Indicates whether this texture will use trilinear filtering. 89713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5Romain Guy */ 90713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5Romain Guy bool mipMap; 918164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy 923b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy /** 933b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * Optional, pointer to a texture coordinates mapper. 943b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy */ 953b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy const UvMapper* uvMapper; 963b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 97860d155f866cc15a725e7ce03763280987f24901John Reck /** 98860d155f866cc15a725e7ce03763280987f24901John Reck * Whether or not the Texture is marked in use and thus not evictable for 99860d155f866cc15a725e7ce03763280987f24901John Reck * the current frame. This is reset at the start of a new frame. 100860d155f866cc15a725e7ce03763280987f24901John Reck */ 101860d155f866cc15a725e7ce03763280987f24901John Reck bool isInUse; 102860d155f866cc15a725e7ce03763280987f24901John Reck 103713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5Romain Guyprivate: 1048164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy /** 1058164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy * Last wrap modes set on this texture. Defaults to GL_CLAMP_TO_EDGE. 1068164c2d338781c3a3c4a443941070dca5d88f2a7Romain Guy */ 1078aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum mWrapS; 1088aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum mWrapT; 1099ace8f5e79e76893fe4ca9e4d10f6c4056330485Romain Guy 1109ace8f5e79e76893fe4ca9e4d10f6c4056330485Romain Guy /** 1119ace8f5e79e76893fe4ca9e4d10f6c4056330485Romain Guy * Last filters set on this texture. Defaults to GL_NEAREST. 1129ace8f5e79e76893fe4ca9e4d10f6c4056330485Romain Guy */ 1138aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum mMinFilter; 1148aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy GLenum mMagFilter; 1158aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy 1168aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy bool mFirstFilter; 1178aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy bool mFirstWrap; 118e3c26851dc315b730ea0fe5ef35bb1db81f6d675Romain Guy 1198aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy Caches& mCaches; 120ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // struct Texture 121ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 12222158e139a3d6c6a9787ca0de224e9368f643284Romain Guyclass AutoTexture { 12322158e139a3d6c6a9787ca0de224e9368f643284Romain Guypublic: 12422158e139a3d6c6a9787ca0de224e9368f643284Romain Guy AutoTexture(const Texture* texture): mTexture(texture) { } 12522158e139a3d6c6a9787ca0de224e9368f643284Romain Guy ~AutoTexture() { 12622158e139a3d6c6a9787ca0de224e9368f643284Romain Guy if (mTexture && mTexture->cleanup) { 127be1b127c7bec252e0c6ab0e06ed6babed07d496fRomain Guy mTexture->deleteTexture(); 12822158e139a3d6c6a9787ca0de224e9368f643284Romain Guy delete mTexture; 12922158e139a3d6c6a9787ca0de224e9368f643284Romain Guy } 13022158e139a3d6c6a9787ca0de224e9368f643284Romain Guy } 13122158e139a3d6c6a9787ca0de224e9368f643284Romain Guy 13222158e139a3d6c6a9787ca0de224e9368f643284Romain Guyprivate: 13322158e139a3d6c6a9787ca0de224e9368f643284Romain Guy const Texture* mTexture; 13422158e139a3d6c6a9787ca0de224e9368f643284Romain Guy}; // class AutoTexture 13522158e139a3d6c6a9787ca0de224e9368f643284Romain Guy 136ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // namespace uirenderer 137ce0537b80087a6225273040a987414b1dd081aa0Romain Guy}; // namespace android 138ce0537b80087a6225273040a987414b1dd081aa0Romain Guy 1395b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_TEXTURE_H 140