Glop.h revision 031888744e24b5c7243ac99ec98b78aff5db1c78
16c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik/* 26c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Copyright (C) 2015 The Android Open Source Project 36c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 46c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 56c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * you may not use this file except in compliance with the License. 66c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * You may obtain a copy of the License at 76c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 86c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 96c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 106c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Unless required by applicable law or agreed to in writing, software 116c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 126c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * See the License for the specific language governing permissions and 146c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * limitations under the License. 156c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 166c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 176c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#ifndef ANDROID_HWUI_GLOP_H 186c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#define ANDROID_HWUI_GLOP_H 196c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 206c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#include "Matrix.h" 216c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#include "Rect.h" 226c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#include "utils/Macros.h" 236c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 246c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#include <GLES2/gl2.h> 256c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#include <GLES2/gl2ext.h> 26031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik#include <SkXfermode.h> 276c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 286c15ffa196fc9b7724c189d833c3435d8db12266Chris Craiknamespace android { 296c15ffa196fc9b7724c189d833c3435d8db12266Chris Craiknamespace uirenderer { 306c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 31031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craikclass Program; 32031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik 336c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik/* 346c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Enumerates optional vertex attributes 356c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 366c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Position is always enabled by MeshState, these other attributes 376c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * are enabled/disabled dynamically based on mesh content. 386c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 396c15ffa196fc9b7724c189d833c3435d8db12266Chris Craikenum VertexAttribFlags { 406c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik // NOTE: position attribute always enabled 416c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kTextureCoord_Attrib = 1 << 0, 426c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kColor_Attrib = 1 << 1, 436c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kAlpha_Attrib = 1 << 2, 446c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik}; 456c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 466c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik/** 476c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Structure containing all data required to issue a single OpenGL draw 486c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 496c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Includes all of the mesh, fill, and GL state required to perform 506c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * the operation. Pieces of data are either directly copied into the 516c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * structure, or stored as a pointer or GL object reference to data 526c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * managed 536c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 546c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik// TODO: PREVENT_COPY_AND_ASSIGN(...) or similar 556c15ffa196fc9b7724c189d833c3435d8db12266Chris Craikstruct Glop { 566c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Rect bounds; 576c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 586c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Mesh { 59031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik VertexAttribFlags vertexFlags; 606c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint primitiveMode; // GL_TRIANGLES and GL_TRIANGLE_STRIP supported 61031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik GLuint vertexBufferObject; 62031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik GLuint indexBufferObject; 636c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik int vertexCount; 646c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLsizei stride; 656c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } mesh; 666c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 676c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Fill { 686c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Program* program; 696c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 706c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Color { 716c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik float a, r, g, b; 726c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } color; 736c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 746c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik /* TODO 756c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik union shader { 766c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //... 776c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik }; TODO 786c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik union filter { 796c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //color 806c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //matrix + vector 816c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik }; 826c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 836c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } fill; 846c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 856c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Transform { 866c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 ortho; // TODO: out of op, since this is static per FBO 876c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 modelView; 886c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 canvas; 896c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik bool offset; 906c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } transform; 916c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 926c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Blend { 93031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik GLenum src; 94031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik GLenum dst; 956c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } blend; 966c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 976c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik /** 986c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Additional render state to enumerate: 996c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * - scissor + (bits for whether each of LTRB needed?) 1006c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * - stencil mode (draw into, mask, count, etc) 1016c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 1026c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik}; 1036c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 1046c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik} /* namespace uirenderer */ 1056c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik} /* namespace android */ 1066c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 1076c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#endif // ANDROID_HWUI_GLOP_H 108