1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2018 The ANGLE Project Authors. All rights reserved. 3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker // 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Worker // GLES1Renderer.h: Defines GLES1 emulation rendering operations on top of a GLES3 8*8975f5c5SAndroid Build Coastguard Worker // context. Used by Context.h. 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_GLES1_RENDERER_H_ 11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_GLES1_RENDERER_H_ 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "GLES1State.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "angle_gl.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 16*8975f5c5SAndroid Build Coastguard Worker #include "common/hash_containers.h" 17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h" 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker #include <memory> 20*8975f5c5SAndroid Build Coastguard Worker #include <string> 21*8975f5c5SAndroid Build Coastguard Worker #include <unordered_map> 22*8975f5c5SAndroid Build Coastguard Worker 23*8975f5c5SAndroid Build Coastguard Worker namespace gl 24*8975f5c5SAndroid Build Coastguard Worker { 25*8975f5c5SAndroid Build Coastguard Worker class Context; 26*8975f5c5SAndroid Build Coastguard Worker class GLES1State; 27*8975f5c5SAndroid Build Coastguard Worker class Program; 28*8975f5c5SAndroid Build Coastguard Worker class State; 29*8975f5c5SAndroid Build Coastguard Worker class Shader; 30*8975f5c5SAndroid Build Coastguard Worker class ShaderProgramManager; 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker enum class GLES1StateEnables : uint64_t 33*8975f5c5SAndroid Build Coastguard Worker { 34*8975f5c5SAndroid Build Coastguard Worker Lighting = 0, 35*8975f5c5SAndroid Build Coastguard Worker Fog = 1, 36*8975f5c5SAndroid Build Coastguard Worker ClipPlanes = 2, 37*8975f5c5SAndroid Build Coastguard Worker DrawTexture = 3, 38*8975f5c5SAndroid Build Coastguard Worker PointRasterization = 4, 39*8975f5c5SAndroid Build Coastguard Worker PointSprite = 5, 40*8975f5c5SAndroid Build Coastguard Worker RescaleNormal = 6, 41*8975f5c5SAndroid Build Coastguard Worker Normalize = 7, 42*8975f5c5SAndroid Build Coastguard Worker AlphaTest = 8, 43*8975f5c5SAndroid Build Coastguard Worker ShadeModelFlat = 9, 44*8975f5c5SAndroid Build Coastguard Worker ColorMaterial = 10, 45*8975f5c5SAndroid Build Coastguard Worker LightModelTwoSided = 11, 46*8975f5c5SAndroid Build Coastguard Worker LogicOpThroughFramebufferFetch = 12, 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker InvalidEnum = 13, 49*8975f5c5SAndroid Build Coastguard Worker EnumCount = 13, 50*8975f5c5SAndroid Build Coastguard Worker }; 51*8975f5c5SAndroid Build Coastguard Worker 52*8975f5c5SAndroid Build Coastguard Worker constexpr int kClipPlaneCount = 6; 53*8975f5c5SAndroid Build Coastguard Worker constexpr int kTexUnitCount = 4; 54*8975f5c5SAndroid Build Coastguard Worker constexpr int kLightCount = 8; 55*8975f5c5SAndroid Build Coastguard Worker 56*8975f5c5SAndroid Build Coastguard Worker using GLES1StateEnabledBitSet = angle::PackedEnumBitSet<GLES1StateEnables, uint64_t>; 57*8975f5c5SAndroid Build Coastguard Worker 58*8975f5c5SAndroid Build Coastguard Worker struct GLES1ShaderState 59*8975f5c5SAndroid Build Coastguard Worker { 60*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState(); 61*8975f5c5SAndroid Build Coastguard Worker ~GLES1ShaderState(); 62*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState(const GLES1ShaderState &other); 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker size_t hash() const; 65*8975f5c5SAndroid Build Coastguard Worker 66*8975f5c5SAndroid Build Coastguard Worker GLES1StateEnabledBitSet mGLES1StateEnabled; 67*8975f5c5SAndroid Build Coastguard Worker 68*8975f5c5SAndroid Build Coastguard Worker using BoolLightArray = bool[kLightCount]; 69*8975f5c5SAndroid Build Coastguard Worker using BoolTexArray = bool[kTexUnitCount]; 70*8975f5c5SAndroid Build Coastguard Worker using BoolClipPlaneArray = bool[kClipPlaneCount]; 71*8975f5c5SAndroid Build Coastguard Worker using UintTexArray = uint16_t[kTexUnitCount]; 72*8975f5c5SAndroid Build Coastguard Worker 73*8975f5c5SAndroid Build Coastguard Worker BoolTexArray tex2DEnables = {false, false, false, false}; 74*8975f5c5SAndroid Build Coastguard Worker BoolTexArray texCubeEnables = {false, false, false, false}; 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker UintTexArray tex2DFormats = {GL_RGBA, GL_RGBA, GL_RGBA, GL_RGBA}; 77*8975f5c5SAndroid Build Coastguard Worker 78*8975f5c5SAndroid Build Coastguard Worker UintTexArray texEnvModes = {}; 79*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineRgbs = {}; 80*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineAlphas = {}; 81*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc0Rgbs = {}; 82*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc0Alphas = {}; 83*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc1Rgbs = {}; 84*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc1Alphas = {}; 85*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc2Rgbs = {}; 86*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineSrc2Alphas = {}; 87*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp0Rgbs = {}; 88*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp0Alphas = {}; 89*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp1Rgbs = {}; 90*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp1Alphas = {}; 91*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp2Rgbs = {}; 92*8975f5c5SAndroid Build Coastguard Worker UintTexArray texCombineOp2Alphas = {}; 93*8975f5c5SAndroid Build Coastguard Worker 94*8975f5c5SAndroid Build Coastguard Worker BoolTexArray pointSpriteCoordReplaces = {}; 95*8975f5c5SAndroid Build Coastguard Worker 96*8975f5c5SAndroid Build Coastguard Worker BoolLightArray lightEnables = {}; 97*8975f5c5SAndroid Build Coastguard Worker 98*8975f5c5SAndroid Build Coastguard Worker BoolClipPlaneArray clipPlaneEnables = {}; 99*8975f5c5SAndroid Build Coastguard Worker 100*8975f5c5SAndroid Build Coastguard Worker AlphaTestFunc alphaTestFunc = {}; 101*8975f5c5SAndroid Build Coastguard Worker 102*8975f5c5SAndroid Build Coastguard Worker FogMode fogMode = {}; 103*8975f5c5SAndroid Build Coastguard Worker }; 104*8975f5c5SAndroid Build Coastguard Worker 105*8975f5c5SAndroid Build Coastguard Worker bool operator==(const GLES1ShaderState &a, const GLES1ShaderState &b); 106*8975f5c5SAndroid Build Coastguard Worker bool operator!=(const GLES1ShaderState &a, const GLES1ShaderState &b); 107*8975f5c5SAndroid Build Coastguard Worker 108*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 109*8975f5c5SAndroid Build Coastguard Worker 110*8975f5c5SAndroid Build Coastguard Worker namespace std 111*8975f5c5SAndroid Build Coastguard Worker { 112*8975f5c5SAndroid Build Coastguard Worker template <> 113*8975f5c5SAndroid Build Coastguard Worker struct hash<gl::GLES1ShaderState> 114*8975f5c5SAndroid Build Coastguard Worker { 115*8975f5c5SAndroid Build Coastguard Worker size_t operator()(const gl::GLES1ShaderState &key) const { return key.hash(); } 116*8975f5c5SAndroid Build Coastguard Worker }; 117*8975f5c5SAndroid Build Coastguard Worker } // namespace std 118*8975f5c5SAndroid Build Coastguard Worker 119*8975f5c5SAndroid Build Coastguard Worker namespace gl 120*8975f5c5SAndroid Build Coastguard Worker { 121*8975f5c5SAndroid Build Coastguard Worker 122*8975f5c5SAndroid Build Coastguard Worker class GLES1Renderer final : angle::NonCopyable 123*8975f5c5SAndroid Build Coastguard Worker { 124*8975f5c5SAndroid Build Coastguard Worker public: 125*8975f5c5SAndroid Build Coastguard Worker GLES1Renderer(); 126*8975f5c5SAndroid Build Coastguard Worker ~GLES1Renderer(); 127*8975f5c5SAndroid Build Coastguard Worker 128*8975f5c5SAndroid Build Coastguard Worker void onDestroy(Context *context, State *state); 129*8975f5c5SAndroid Build Coastguard Worker 130*8975f5c5SAndroid Build Coastguard Worker angle::Result prepareForDraw(PrimitiveMode mode, 131*8975f5c5SAndroid Build Coastguard Worker Context *context, 132*8975f5c5SAndroid Build Coastguard Worker State *glState, 133*8975f5c5SAndroid Build Coastguard Worker GLES1State *gles1State); 134*8975f5c5SAndroid Build Coastguard Worker 135*8975f5c5SAndroid Build Coastguard Worker static int VertexArrayIndex(ClientVertexArrayType type, const GLES1State &gles1); 136*8975f5c5SAndroid Build Coastguard Worker static ClientVertexArrayType VertexArrayType(int attribIndex); 137*8975f5c5SAndroid Build Coastguard Worker static int TexCoordArrayIndex(unsigned int unit); 138*8975f5c5SAndroid Build Coastguard Worker 139*8975f5c5SAndroid Build Coastguard Worker void drawTexture(Context *context, 140*8975f5c5SAndroid Build Coastguard Worker State *glState, 141*8975f5c5SAndroid Build Coastguard Worker GLES1State *gles1State, 142*8975f5c5SAndroid Build Coastguard Worker float x, 143*8975f5c5SAndroid Build Coastguard Worker float y, 144*8975f5c5SAndroid Build Coastguard Worker float z, 145*8975f5c5SAndroid Build Coastguard Worker float width, 146*8975f5c5SAndroid Build Coastguard Worker float height); 147*8975f5c5SAndroid Build Coastguard Worker 148*8975f5c5SAndroid Build Coastguard Worker private: 149*8975f5c5SAndroid Build Coastguard Worker using Mat4Uniform = float[16]; 150*8975f5c5SAndroid Build Coastguard Worker using Vec4Uniform = float[4]; 151*8975f5c5SAndroid Build Coastguard Worker using Vec3Uniform = float[3]; 152*8975f5c5SAndroid Build Coastguard Worker 153*8975f5c5SAndroid Build Coastguard Worker Shader *getShader(ShaderProgramID handle) const; 154*8975f5c5SAndroid Build Coastguard Worker Program *getProgram(ShaderProgramID handle) const; 155*8975f5c5SAndroid Build Coastguard Worker 156*8975f5c5SAndroid Build Coastguard Worker angle::Result compileShader(Context *context, 157*8975f5c5SAndroid Build Coastguard Worker ShaderType shaderType, 158*8975f5c5SAndroid Build Coastguard Worker const char *src, 159*8975f5c5SAndroid Build Coastguard Worker ShaderProgramID *shaderOut); 160*8975f5c5SAndroid Build Coastguard Worker angle::Result linkProgram(Context *context, 161*8975f5c5SAndroid Build Coastguard Worker State *glState, 162*8975f5c5SAndroid Build Coastguard Worker ShaderProgramID vshader, 163*8975f5c5SAndroid Build Coastguard Worker ShaderProgramID fshader, 164*8975f5c5SAndroid Build Coastguard Worker const angle::HashMap<GLint, std::string> &attribLocs, 165*8975f5c5SAndroid Build Coastguard Worker ShaderProgramID *programOut); 166*8975f5c5SAndroid Build Coastguard Worker angle::Result initializeRendererProgram(Context *context, 167*8975f5c5SAndroid Build Coastguard Worker State *glState, 168*8975f5c5SAndroid Build Coastguard Worker GLES1State *gles1State); 169*8975f5c5SAndroid Build Coastguard Worker 170*8975f5c5SAndroid Build Coastguard Worker void setUniform1i(Context *context, 171*8975f5c5SAndroid Build Coastguard Worker ProgramExecutable *executable, 172*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 173*8975f5c5SAndroid Build Coastguard Worker GLint value); 174*8975f5c5SAndroid Build Coastguard Worker void setUniform1ui(ProgramExecutable *executable, UniformLocation location, GLuint value); 175*8975f5c5SAndroid Build Coastguard Worker void setUniform1iv(Context *context, 176*8975f5c5SAndroid Build Coastguard Worker ProgramExecutable *executable, 177*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 178*8975f5c5SAndroid Build Coastguard Worker GLint count, 179*8975f5c5SAndroid Build Coastguard Worker const GLint *value); 180*8975f5c5SAndroid Build Coastguard Worker void setUniformMatrix4fv(ProgramExecutable *executable, 181*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 182*8975f5c5SAndroid Build Coastguard Worker GLint count, 183*8975f5c5SAndroid Build Coastguard Worker GLboolean transpose, 184*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value); 185*8975f5c5SAndroid Build Coastguard Worker void setUniform4fv(ProgramExecutable *executable, 186*8975f5c5SAndroid Build Coastguard Worker 187*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 188*8975f5c5SAndroid Build Coastguard Worker GLint count, 189*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value); 190*8975f5c5SAndroid Build Coastguard Worker void setUniform3fv(ProgramExecutable *executable, 191*8975f5c5SAndroid Build Coastguard Worker 192*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 193*8975f5c5SAndroid Build Coastguard Worker GLint count, 194*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value); 195*8975f5c5SAndroid Build Coastguard Worker void setUniform2fv(ProgramExecutable *executable, 196*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 197*8975f5c5SAndroid Build Coastguard Worker GLint count, 198*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value); 199*8975f5c5SAndroid Build Coastguard Worker void setUniform1f(ProgramExecutable *executable, UniformLocation location, GLfloat value); 200*8975f5c5SAndroid Build Coastguard Worker void setUniform1fv(ProgramExecutable *executable, 201*8975f5c5SAndroid Build Coastguard Worker UniformLocation location, 202*8975f5c5SAndroid Build Coastguard Worker GLint count, 203*8975f5c5SAndroid Build Coastguard Worker const GLfloat *value); 204*8975f5c5SAndroid Build Coastguard Worker 205*8975f5c5SAndroid Build Coastguard Worker void setAttributesEnabled(Context *context, 206*8975f5c5SAndroid Build Coastguard Worker State *glState, 207*8975f5c5SAndroid Build Coastguard Worker GLES1State *gles1State, 208*8975f5c5SAndroid Build Coastguard Worker AttributesMask mask); 209*8975f5c5SAndroid Build Coastguard Worker 210*8975f5c5SAndroid Build Coastguard Worker static constexpr int kVertexAttribIndex = 0; 211*8975f5c5SAndroid Build Coastguard Worker static constexpr int kNormalAttribIndex = 1; 212*8975f5c5SAndroid Build Coastguard Worker static constexpr int kColorAttribIndex = 2; 213*8975f5c5SAndroid Build Coastguard Worker static constexpr int kPointSizeAttribIndex = 3; 214*8975f5c5SAndroid Build Coastguard Worker static constexpr int kTextureCoordAttribIndexBase = 4; 215*8975f5c5SAndroid Build Coastguard Worker 216*8975f5c5SAndroid Build Coastguard Worker bool mRendererProgramInitialized; 217*8975f5c5SAndroid Build Coastguard Worker ShaderProgramManager *mShaderPrograms; 218*8975f5c5SAndroid Build Coastguard Worker 219*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState mShaderState = {}; 220*8975f5c5SAndroid Build Coastguard Worker 221*8975f5c5SAndroid Build Coastguard Worker const char *getShaderBool(GLES1StateEnables state); 222*8975f5c5SAndroid Build Coastguard Worker void addShaderDefine(std::stringstream &outStream, 223*8975f5c5SAndroid Build Coastguard Worker GLES1StateEnables state, 224*8975f5c5SAndroid Build Coastguard Worker const char *enableString); 225*8975f5c5SAndroid Build Coastguard Worker void addShaderUint(std::stringstream &outStream, const char *name, uint16_t value); 226*8975f5c5SAndroid Build Coastguard Worker void addShaderUintTexArray(std::stringstream &outStream, 227*8975f5c5SAndroid Build Coastguard Worker const char *texString, 228*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState::UintTexArray &texState); 229*8975f5c5SAndroid Build Coastguard Worker void addShaderBoolTexArray(std::stringstream &outStream, 230*8975f5c5SAndroid Build Coastguard Worker const char *texString, 231*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState::BoolTexArray &texState); 232*8975f5c5SAndroid Build Coastguard Worker void addShaderBoolLightArray(std::stringstream &outStream, 233*8975f5c5SAndroid Build Coastguard Worker const char *name, 234*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState::BoolLightArray &value); 235*8975f5c5SAndroid Build Coastguard Worker void addShaderBoolClipPlaneArray(std::stringstream &outStream, 236*8975f5c5SAndroid Build Coastguard Worker const char *name, 237*8975f5c5SAndroid Build Coastguard Worker GLES1ShaderState::BoolClipPlaneArray &value); 238*8975f5c5SAndroid Build Coastguard Worker void addVertexShaderDefs(std::stringstream &outStream); 239*8975f5c5SAndroid Build Coastguard Worker void addFragmentShaderDefs(std::stringstream &outStream); 240*8975f5c5SAndroid Build Coastguard Worker 241*8975f5c5SAndroid Build Coastguard Worker struct GLES1ProgramState 242*8975f5c5SAndroid Build Coastguard Worker { 243*8975f5c5SAndroid Build Coastguard Worker ShaderProgramID program; 244*8975f5c5SAndroid Build Coastguard Worker 245*8975f5c5SAndroid Build Coastguard Worker UniformLocation projMatrixLoc; 246*8975f5c5SAndroid Build Coastguard Worker UniformLocation modelviewMatrixLoc; 247*8975f5c5SAndroid Build Coastguard Worker UniformLocation textureMatrixLoc; 248*8975f5c5SAndroid Build Coastguard Worker UniformLocation modelviewInvTrLoc; 249*8975f5c5SAndroid Build Coastguard Worker 250*8975f5c5SAndroid Build Coastguard Worker // Texturing 251*8975f5c5SAndroid Build Coastguard Worker std::array<UniformLocation, kTexUnitCount> tex2DSamplerLocs; 252*8975f5c5SAndroid Build Coastguard Worker std::array<UniformLocation, kTexUnitCount> texCubeSamplerLocs; 253*8975f5c5SAndroid Build Coastguard Worker 254*8975f5c5SAndroid Build Coastguard Worker UniformLocation textureEnvColorLoc; 255*8975f5c5SAndroid Build Coastguard Worker UniformLocation rgbScaleLoc; 256*8975f5c5SAndroid Build Coastguard Worker UniformLocation alphaScaleLoc; 257*8975f5c5SAndroid Build Coastguard Worker 258*8975f5c5SAndroid Build Coastguard Worker // Alpha test 259*8975f5c5SAndroid Build Coastguard Worker UniformLocation alphaTestRefLoc; 260*8975f5c5SAndroid Build Coastguard Worker 261*8975f5c5SAndroid Build Coastguard Worker // Shading, materials, and lighting 262*8975f5c5SAndroid Build Coastguard Worker UniformLocation materialAmbientLoc; 263*8975f5c5SAndroid Build Coastguard Worker UniformLocation materialDiffuseLoc; 264*8975f5c5SAndroid Build Coastguard Worker UniformLocation materialSpecularLoc; 265*8975f5c5SAndroid Build Coastguard Worker UniformLocation materialEmissiveLoc; 266*8975f5c5SAndroid Build Coastguard Worker UniformLocation materialSpecularExponentLoc; 267*8975f5c5SAndroid Build Coastguard Worker 268*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightModelSceneAmbientLoc; 269*8975f5c5SAndroid Build Coastguard Worker 270*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightAmbientsLoc; 271*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightDiffusesLoc; 272*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightSpecularsLoc; 273*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightPositionsLoc; 274*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightDirectionsLoc; 275*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightSpotlightExponentsLoc; 276*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightSpotlightCutoffAnglesLoc; 277*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightAttenuationConstsLoc; 278*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightAttenuationLinearsLoc; 279*8975f5c5SAndroid Build Coastguard Worker UniformLocation lightAttenuationQuadraticsLoc; 280*8975f5c5SAndroid Build Coastguard Worker 281*8975f5c5SAndroid Build Coastguard Worker // Fog 282*8975f5c5SAndroid Build Coastguard Worker UniformLocation fogDensityLoc; 283*8975f5c5SAndroid Build Coastguard Worker UniformLocation fogStartLoc; 284*8975f5c5SAndroid Build Coastguard Worker UniformLocation fogEndLoc; 285*8975f5c5SAndroid Build Coastguard Worker UniformLocation fogColorLoc; 286*8975f5c5SAndroid Build Coastguard Worker 287*8975f5c5SAndroid Build Coastguard Worker // Clip planes 288*8975f5c5SAndroid Build Coastguard Worker UniformLocation clipPlanesLoc; 289*8975f5c5SAndroid Build Coastguard Worker 290*8975f5c5SAndroid Build Coastguard Worker // Logic op 291*8975f5c5SAndroid Build Coastguard Worker UniformLocation logicOpLoc; 292*8975f5c5SAndroid Build Coastguard Worker 293*8975f5c5SAndroid Build Coastguard Worker // Point rasterization 294*8975f5c5SAndroid Build Coastguard Worker UniformLocation pointSizeMinLoc; 295*8975f5c5SAndroid Build Coastguard Worker UniformLocation pointSizeMaxLoc; 296*8975f5c5SAndroid Build Coastguard Worker UniformLocation pointDistanceAttenuationLoc; 297*8975f5c5SAndroid Build Coastguard Worker 298*8975f5c5SAndroid Build Coastguard Worker // Draw texture 299*8975f5c5SAndroid Build Coastguard Worker UniformLocation drawTextureCoordsLoc; 300*8975f5c5SAndroid Build Coastguard Worker UniformLocation drawTextureDimsLoc; 301*8975f5c5SAndroid Build Coastguard Worker UniformLocation drawTextureNormalizedCropRectLoc; 302*8975f5c5SAndroid Build Coastguard Worker }; 303*8975f5c5SAndroid Build Coastguard Worker 304*8975f5c5SAndroid Build Coastguard Worker struct GLES1UniformBuffers 305*8975f5c5SAndroid Build Coastguard Worker { 306*8975f5c5SAndroid Build Coastguard Worker std::array<Mat4Uniform, kTexUnitCount> textureMatrices; 307*8975f5c5SAndroid Build Coastguard Worker 308*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kTexUnitCount> texEnvColors; 309*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kTexUnitCount> texEnvRgbScales; 310*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kTexUnitCount> texEnvAlphaScales; 311*8975f5c5SAndroid Build Coastguard Worker 312*8975f5c5SAndroid Build Coastguard Worker // Lighting 313*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kLightCount> lightAmbients; 314*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kLightCount> lightDiffuses; 315*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kLightCount> lightSpeculars; 316*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kLightCount> lightPositions; 317*8975f5c5SAndroid Build Coastguard Worker std::array<Vec3Uniform, kLightCount> lightDirections; 318*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kLightCount> spotlightExponents; 319*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kLightCount> spotlightCutoffAngles; 320*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kLightCount> attenuationConsts; 321*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kLightCount> attenuationLinears; 322*8975f5c5SAndroid Build Coastguard Worker std::array<GLfloat, kLightCount> attenuationQuadratics; 323*8975f5c5SAndroid Build Coastguard Worker 324*8975f5c5SAndroid Build Coastguard Worker // Clip planes 325*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kClipPlaneCount> clipPlanes; 326*8975f5c5SAndroid Build Coastguard Worker 327*8975f5c5SAndroid Build Coastguard Worker // Texture crop rectangles 328*8975f5c5SAndroid Build Coastguard Worker std::array<Vec4Uniform, kTexUnitCount> texCropRects; 329*8975f5c5SAndroid Build Coastguard Worker }; 330*8975f5c5SAndroid Build Coastguard Worker 331*8975f5c5SAndroid Build Coastguard Worker struct GLES1UberShaderState 332*8975f5c5SAndroid Build Coastguard Worker { 333*8975f5c5SAndroid Build Coastguard Worker GLES1UniformBuffers uniformBuffers; 334*8975f5c5SAndroid Build Coastguard Worker GLES1ProgramState programState; 335*8975f5c5SAndroid Build Coastguard Worker }; 336*8975f5c5SAndroid Build Coastguard Worker 337*8975f5c5SAndroid Build Coastguard Worker GLES1UberShaderState &getUberShaderState() 338*8975f5c5SAndroid Build Coastguard Worker { 339*8975f5c5SAndroid Build Coastguard Worker ASSERT(mUberShaderState.find(mShaderState) != mUberShaderState.end()); 340*8975f5c5SAndroid Build Coastguard Worker return mUberShaderState[mShaderState]; 341*8975f5c5SAndroid Build Coastguard Worker } 342*8975f5c5SAndroid Build Coastguard Worker 343*8975f5c5SAndroid Build Coastguard Worker angle::HashMap<GLES1ShaderState, GLES1UberShaderState> mUberShaderState; 344*8975f5c5SAndroid Build Coastguard Worker 345*8975f5c5SAndroid Build Coastguard Worker bool mDrawTextureEnabled = false; 346*8975f5c5SAndroid Build Coastguard Worker GLfloat mDrawTextureCoords[4] = {0.0f, 0.0f, 0.0f, 0.0f}; 347*8975f5c5SAndroid Build Coastguard Worker GLfloat mDrawTextureDims[2] = {0.0f, 0.0f}; 348*8975f5c5SAndroid Build Coastguard Worker }; 349*8975f5c5SAndroid Build Coastguard Worker 350*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 351*8975f5c5SAndroid Build Coastguard Worker 352*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_GLES1_RENDERER_H_ 353