Patch.h revision a5ef39a21683189e5906c9f252b997f0508e350d
1f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/* 2f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Copyright (C) 2010 The Android Open Source Project 3f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 4f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * you may not use this file except in compliance with the License. 6f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * You may obtain a copy of the License at 7f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 8f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * 10f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * Unless required by applicable law or agreed to in writing, software 11f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * See the License for the specific language governing permissions and 14f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * limitations under the License. 15f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy */ 16f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_PATCH_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_PATCH_H 19f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 20f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include <sys/types.h> 21f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 2203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy#include <GLES2/gl2.h> 2303750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 245b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#include <utils/Vector.h> 255b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy 265b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#include "Rect.h" 27f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy#include "Vertex.h" 284bb942083a0d4db746adf95349108dd8ef842e32Romain Guy#include "utils/Compare.h" 29f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 30f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace android { 31f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guynamespace uirenderer { 32f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 334bb942083a0d4db746adf95349108dd8ef842e32Romain Guy/////////////////////////////////////////////////////////////////////////////// 344bb942083a0d4db746adf95349108dd8ef842e32Romain Guy// 9-patch structures 354bb942083a0d4db746adf95349108dd8ef842e32Romain Guy/////////////////////////////////////////////////////////////////////////////// 364bb942083a0d4db746adf95349108dd8ef842e32Romain Guy 37f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy/** 38f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * An OpenGL patch. This contains an array of vertices and an array of 39f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy * indices to render the vertices. 40f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy */ 41f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guystruct Patch { 424bb942083a0d4db746adf95349108dd8ef842e32Romain Guy Patch(const uint32_t xCount, const uint32_t yCount, const int8_t emptyQuads = 0); 43fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy ~Patch(); 44f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 45759ea80dca64ad652110a129e0d8bf93fea79f61Romain Guy void updateVertices(const float bitmapWidth, const float bitmapHeight, 466f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy float left, float top, float right, float bottom); 476f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy 486f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy void updateColorKey(const uint32_t colorKey); 496f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy void copy(const int32_t* xDivs, const int32_t* yDivs); 506f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy bool matches(const int32_t* xDivs, const int32_t* yDivs, const uint32_t colorKey); 51f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 5203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy GLuint meshBuffer; 53f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy uint32_t verticesCount; 545b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy bool hasEmptyQuads; 55a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy#if RENDER_LAYERS_AS_REGIONS 56a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy Vector<Rect> quads; 57a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy#endif 58fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guy 59fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6cRomain Guyprivate: 6003750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy TextureVertex* mVertices; 616f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy bool mUploaded; 626f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy 636f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy int32_t* mXDivs; 646f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy int32_t* mYDivs; 656f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy uint32_t mColorKey; 666f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy 67a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy uint32_t mXCount; 68a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy uint32_t mYCount; 69a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy int8_t mEmptyQuads; 70a5ef39a21683189e5906c9f252b997f0508e350dRomain Guy 716f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy void copy(const int32_t* yDivs); 7203750a067e818ca7fbd0f590e2ff6a8fded21e6cRomain Guy 735b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy void generateRow(TextureVertex*& vertex, float y1, float y2, 746f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy float v1, float v2, float stretchX, float width, float bitmapWidth, 756f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy uint32_t& quadCount); 765b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy void generateQuad(TextureVertex*& vertex, 77759ea80dca64ad652110a129e0d8bf93fea79f61Romain Guy float x1, float y1, float x2, float y2, 784bb942083a0d4db746adf95349108dd8ef842e32Romain Guy float u1, float v1, float u2, float v2, 796f72bebe92a4db7b5dc83f4ac5b5fd02e3b4e2cdRomain Guy uint32_t& quadCount); 80f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // struct Patch 81f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 82f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace uirenderer 83f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy}; // namespace android 84f7f93556c8fcc640ab5adef79d021a80a72a645aRomain Guy 855b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_PATCH_H 86