Glop.h revision 922d3a7f6f8c1c05a996ee3e91e8cbadfff560c9
1c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala/* 2c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Copyright (C) 2015 The Android Open Source Project 3c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 4c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * you may not use this file except in compliance with the License. 6c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * You may obtain a copy of the License at 7c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 8c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 10c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * See the License for the specific language governing permissions and 14c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * limitations under the License. 15c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 16c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 17c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#ifndef ANDROID_HWUI_GLOP_H 18c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#define ANDROID_HWUI_GLOP_H 19c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 20c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "FloatColor.h" 21c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "Matrix.h" 22c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "Program.h" 23c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "Rect.h" 24c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "SkiaShader.h" 25c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include "utils/Macros.h" 26c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 27c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include <GLES2/gl2.h> 28c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include <GLES2/gl2ext.h> 29c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#include <SkXfermode.h> 30c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 31c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalanamespace android { 32c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalanamespace uirenderer { 33c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 34c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalaclass Program; 35c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalaclass RoundRectClipState; 36c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalaclass Texture; 37c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 38c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala/* 39c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Enumerates optional vertex attributes 40c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 41c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Position is always enabled by MeshState, these other attributes 42c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * are enabled/disabled dynamically based on mesh content. 43c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 44c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalaenum VertexAttribFlags { 45c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala kNone_Attrib = 0, 46c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala kTextureCoord_Attrib = 1 << 0, 47c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala kColor_Attrib = 1 << 1, 48c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala kAlpha_Attrib = 1 << 2, 49c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala}; 50c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 51c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala/** 52c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Structure containing all data required to issue an OpenGL draw 53c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 54c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Includes all of the mesh, fill, and GL state required to perform 55c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * the operation. Pieces of data are either directly copied into the 56c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * structure, or stored as a pointer or GL object reference to data 57c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * managed. 58c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 59c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Eventually, a Glop should be able to be drawn multiple times from 60c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * a single construction, up until GL context destruction. Currently, 61c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * vertex/index/Texture/RoundRectClipState pointers prevent this from 62c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * being safe. 63c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 64c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala// TODO: PREVENT_COPY_AND_ASSIGN(...) or similar 65c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvalastruct Glop { 66c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala /* 67c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Stores mesh - vertex and index data. 68c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 69c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * buffer objects and void*s are mutually exclusive 70c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * indices are optional, currently only GL_UNSIGNED_SHORT supported 71c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 72c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala struct Mesh { 73c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala VertexAttribFlags vertexFlags; 74c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLuint primitiveMode; // GL_TRIANGLES and GL_TRIANGLE_STRIP supported 75c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLuint vertexBufferObject; 76c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLuint indexBufferObject; 77c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala const void* vertices; 78c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala const void* indices; 79c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala int elementCount; 80c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLsizei stride; 81c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLvoid* texCoordOffset; 82c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala TextureVertex mappedVertices[4]; 83c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala } mesh; 84c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 85c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala struct Fill { 86c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala Program* program; 87c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 88c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala Texture* texture; 89c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLenum textureFilter; 90c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLenum textureClamp; 91c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 92c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala bool colorEnabled; 93c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala FloatColor color; 94c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 95c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala ProgramDescription::ColorFilterMode filterMode; 96c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala union Filter { 97c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala struct Matrix { 98c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala float matrix[16]; 99c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala float vector[4]; 100c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala } matrix; 101c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala FloatColor color; 102c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala } filter; 103c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 104c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala SkiaShaderData skiaShaderData; 105b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk } fill; 106b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk 107b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk struct Transform { 108b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk Matrix4 ortho; // TODO: out of op, since this is static per FBO 109b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk Matrix4 modelView; 110b2119af7f4ced0ecfefd4c7388f86b4e3a3ea7d8Ruben Brunk Matrix4 canvas; 111cc776718c0be7c31fe5ab4fc1446d377be60369fRuben Brunk bool fudgingOffset; 112cc776718c0be7c31fe5ab4fc1446d377be60369fRuben Brunk } transform; 113cc776718c0be7c31fe5ab4fc1446d377be60369fRuben Brunk 114c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala const RoundRectClipState* roundRectClipState; 115c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 116c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala /** 117c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Blending to be used by this draw - both GL_NONE if blending is disabled. 118c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * 119c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Defined by fill step, but can be force-enabled by presence of kAlpha_Attrib 120c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 121c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala struct Blend { 122c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLenum src; 123c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala GLenum dst; 124c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala } blend; 125c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 126c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala /** 127c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Bounds of the drawing command in layer space. Only mapped into layer 128c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * space once GlopBuilder::build() is called. 129c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 130c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala Rect bounds; 131c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 132c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala /** 133c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * Additional render state to enumerate: 134c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * - scissor + (bits for whether each of LTRB needed?) 135c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala * - stencil mode (draw into, mask, count, etc) 136c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala */ 137c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala}; 138c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 139c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala} /* namespace uirenderer */ 140c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala} /* namespace android */ 141c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala 142c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala#endif // ANDROID_HWUI_GLOP_H 143c2d6427f693f1847100c8f4b9a4aff6c1a12bb29Eino-Ville Talvala