Glop.h revision 6c15ffa196fc9b7724c189d833c3435d8db12266
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> 266c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 276c15ffa196fc9b7724c189d833c3435d8db12266Chris Craiknamespace android { 286c15ffa196fc9b7724c189d833c3435d8db12266Chris Craiknamespace uirenderer { 296c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 306c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik/* 316c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Enumerates optional vertex attributes 326c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 336c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Position is always enabled by MeshState, these other attributes 346c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * are enabled/disabled dynamically based on mesh content. 356c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 366c15ffa196fc9b7724c189d833c3435d8db12266Chris Craikenum VertexAttribFlags { 376c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik // NOTE: position attribute always enabled 386c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kTextureCoord_Attrib = 1 << 0, 396c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kColor_Attrib = 1 << 1, 406c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik kAlpha_Attrib = 1 << 2, 416c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik}; 426c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 436c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik/** 446c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Structure containing all data required to issue a single OpenGL draw 456c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * 466c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Includes all of the mesh, fill, and GL state required to perform 476c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * the operation. Pieces of data are either directly copied into the 486c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * structure, or stored as a pointer or GL object reference to data 496c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * managed 506c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 516c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik// TODO: PREVENT_COPY_AND_ASSIGN(...) or similar 526c15ffa196fc9b7724c189d833c3435d8db12266Chris Craikstruct Glop { 536c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Rect bounds; 546c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 556c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Mesh { 566c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik VertexAttribFlags vertexFlags = static_cast<VertexAttribFlags>(0); 576c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint primitiveMode; // GL_TRIANGLES and GL_TRIANGLE_STRIP supported 586c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint vertexBufferObject = 0; 596c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint indexBufferObject = 0; 606c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik int vertexCount; 616c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLsizei stride; 626c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } mesh; 636c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 646c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Fill { 656c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Program* program; 666c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint shaderId; 676c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik GLuint textureId; 686c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 696c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Color { 706c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik float a, r, g, b; 716c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } color; 726c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 736c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik /* TODO 746c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik union shader { 756c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //... 766c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik }; TODO 776c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik union filter { 786c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //color 796c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik //matrix + vector 806c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik }; 816c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 826c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } fill; 836c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 846c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Transform { 856c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 ortho; // TODO: out of op, since this is static per FBO 866c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 modelView; 876c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik Matrix4 canvas; 886c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik bool offset; 896c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } transform; 906c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 916c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik struct Blend { 926c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik static const SkXfermode::Mode kDisable = 936c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik static_cast<SkXfermode::Mode>(SkXfermode::kLastMode + 1); 946c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik SkXfermode::Mode mode; 956c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik bool swapSrcDst; 966c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik } blend; 976c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 986c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik /** 996c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * Additional render state to enumerate: 1006c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * - scissor + (bits for whether each of LTRB needed?) 1016c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik * - stencil mode (draw into, mask, count, etc) 1026c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik */ 1036c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik}; 1046c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 1056c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik} /* namespace uirenderer */ 1066c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik} /* namespace android */ 1076c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik 1086c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik#endif // ANDROID_HWUI_GLOP_H 109