summaryrefslogtreecommitdiffstats
path: root/gfx/angle/checkout/src/libANGLE/GLES1Renderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/checkout/src/libANGLE/GLES1Renderer.h')
-rw-r--r--gfx/angle/checkout/src/libANGLE/GLES1Renderer.h275
1 files changed, 275 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/libANGLE/GLES1Renderer.h b/gfx/angle/checkout/src/libANGLE/GLES1Renderer.h
new file mode 100644
index 0000000000..869529742d
--- /dev/null
+++ b/gfx/angle/checkout/src/libANGLE/GLES1Renderer.h
@@ -0,0 +1,275 @@
+//
+// Copyright 2018 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// GLES1Renderer.h: Defines GLES1 emulation rendering operations on top of a GLES3
+// context. Used by Context.h.
+
+#ifndef LIBANGLE_GLES1_RENDERER_H_
+#define LIBANGLE_GLES1_RENDERER_H_
+
+#include "angle_gl.h"
+#include "common/angleutils.h"
+#include "libANGLE/angletypes.h"
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+namespace gl
+{
+class Context;
+class GLES1State;
+class Program;
+class State;
+class Shader;
+class ShaderProgramManager;
+
+class GLES1Renderer final : angle::NonCopyable
+{
+ public:
+ GLES1Renderer();
+ ~GLES1Renderer();
+
+ void onDestroy(Context *context, State *state);
+
+ angle::Result prepareForDraw(PrimitiveMode mode, Context *context, State *glState);
+
+ static int VertexArrayIndex(ClientVertexArrayType type, const GLES1State &gles1);
+ static ClientVertexArrayType VertexArrayType(int attribIndex);
+ static int TexCoordArrayIndex(unsigned int unit);
+
+ void drawTexture(Context *context,
+ State *glState,
+ float x,
+ float y,
+ float z,
+ float width,
+ float height);
+
+ static constexpr int kTexUnitCount = 4;
+
+ private:
+ using Mat4Uniform = float[16];
+ using Vec4Uniform = float[4];
+ using Vec3Uniform = float[3];
+
+ Shader *getShader(ShaderProgramID handle) const;
+ Program *getProgram(ShaderProgramID handle) const;
+
+ angle::Result compileShader(Context *context,
+ ShaderType shaderType,
+ const char *src,
+ ShaderProgramID *shaderOut);
+ angle::Result linkProgram(Context *context,
+ State *glState,
+ ShaderProgramID vshader,
+ ShaderProgramID fshader,
+ const angle::HashMap<GLint, std::string> &attribLocs,
+ ShaderProgramID *programOut);
+ angle::Result initializeRendererProgram(Context *context, State *glState);
+
+ void setUniform1i(Context *context,
+ Program *programObject,
+ UniformLocation location,
+ GLint value);
+ void setUniform1iv(Context *context,
+ Program *programObject,
+ UniformLocation location,
+ GLint count,
+ const GLint *value);
+ void setUniformMatrix4fv(Program *programObject,
+ UniformLocation location,
+ GLint count,
+ GLboolean transpose,
+ const GLfloat *value);
+ void setUniform4fv(Program *programObject,
+ UniformLocation location,
+ GLint count,
+ const GLfloat *value);
+ void setUniform3fv(Program *programObject,
+ UniformLocation location,
+ GLint count,
+ const GLfloat *value);
+ void setUniform2fv(Program *programObject,
+ UniformLocation location,
+ GLint count,
+ const GLfloat *value);
+ void setUniform1f(Program *programObject, UniformLocation location, GLfloat value);
+ void setUniform1fv(Program *programObject,
+ UniformLocation location,
+ GLint count,
+ const GLfloat *value);
+
+ void setAttributesEnabled(Context *context, State *glState, AttributesMask mask);
+
+ static constexpr int kLightCount = 8;
+ static constexpr int kClipPlaneCount = 6;
+
+ static constexpr int kVertexAttribIndex = 0;
+ static constexpr int kNormalAttribIndex = 1;
+ static constexpr int kColorAttribIndex = 2;
+ static constexpr int kPointSizeAttribIndex = 3;
+ static constexpr int kTextureCoordAttribIndexBase = 4;
+
+ bool mRendererProgramInitialized;
+ ShaderProgramManager *mShaderPrograms;
+
+ struct GLES1ProgramState
+ {
+ ShaderProgramID program;
+
+ UniformLocation projMatrixLoc;
+ UniformLocation modelviewMatrixLoc;
+ UniformLocation textureMatrixLoc;
+ UniformLocation modelviewInvTrLoc;
+
+ // Texturing
+ UniformLocation enableTexture2DLoc;
+ UniformLocation enableTextureCubeMapLoc;
+ std::array<UniformLocation, kTexUnitCount> tex2DSamplerLocs;
+ std::array<UniformLocation, kTexUnitCount> texCubeSamplerLocs;
+
+ UniformLocation textureFormatLoc;
+
+ UniformLocation textureEnvModeLoc;
+ UniformLocation combineRgbLoc;
+ UniformLocation combineAlphaLoc;
+ UniformLocation src0rgbLoc;
+ UniformLocation src0alphaLoc;
+ UniformLocation src1rgbLoc;
+ UniformLocation src1alphaLoc;
+ UniformLocation src2rgbLoc;
+ UniformLocation src2alphaLoc;
+ UniformLocation op0rgbLoc;
+ UniformLocation op0alphaLoc;
+ UniformLocation op1rgbLoc;
+ UniformLocation op1alphaLoc;
+ UniformLocation op2rgbLoc;
+ UniformLocation op2alphaLoc;
+ UniformLocation textureEnvColorLoc;
+ UniformLocation rgbScaleLoc;
+ UniformLocation alphaScaleLoc;
+ UniformLocation pointSpriteCoordReplaceLoc;
+
+ // Alpha test
+ UniformLocation enableAlphaTestLoc;
+ UniformLocation alphaFuncLoc;
+ UniformLocation alphaTestRefLoc;
+
+ // Shading, materials, and lighting
+ UniformLocation shadeModelFlatLoc;
+ UniformLocation enableLightingLoc;
+ UniformLocation enableRescaleNormalLoc;
+ UniformLocation enableNormalizeLoc;
+ UniformLocation enableColorMaterialLoc;
+
+ UniformLocation materialAmbientLoc;
+ UniformLocation materialDiffuseLoc;
+ UniformLocation materialSpecularLoc;
+ UniformLocation materialEmissiveLoc;
+ UniformLocation materialSpecularExponentLoc;
+
+ UniformLocation lightModelSceneAmbientLoc;
+ UniformLocation lightModelTwoSidedLoc;
+
+ UniformLocation lightEnablesLoc;
+ UniformLocation lightAmbientsLoc;
+ UniformLocation lightDiffusesLoc;
+ UniformLocation lightSpecularsLoc;
+ UniformLocation lightPositionsLoc;
+ UniformLocation lightDirectionsLoc;
+ UniformLocation lightSpotlightExponentsLoc;
+ UniformLocation lightSpotlightCutoffAnglesLoc;
+ UniformLocation lightAttenuationConstsLoc;
+ UniformLocation lightAttenuationLinearsLoc;
+ UniformLocation lightAttenuationQuadraticsLoc;
+
+ // Fog
+ UniformLocation fogEnableLoc;
+ UniformLocation fogModeLoc;
+ UniformLocation fogDensityLoc;
+ UniformLocation fogStartLoc;
+ UniformLocation fogEndLoc;
+ UniformLocation fogColorLoc;
+
+ // Clip planes
+ UniformLocation enableClipPlanesLoc;
+ UniformLocation clipPlaneEnablesLoc;
+ UniformLocation clipPlanesLoc;
+
+ // Point rasterization
+ UniformLocation pointRasterizationLoc;
+ UniformLocation pointSizeMinLoc;
+ UniformLocation pointSizeMaxLoc;
+ UniformLocation pointDistanceAttenuationLoc;
+ UniformLocation pointSpriteEnabledLoc;
+
+ // Draw texture
+ UniformLocation enableDrawTextureLoc;
+ UniformLocation drawTextureCoordsLoc;
+ UniformLocation drawTextureDimsLoc;
+ UniformLocation drawTextureNormalizedCropRectLoc;
+ };
+
+ struct GLES1UniformBuffers
+ {
+ std::array<Mat4Uniform, kTexUnitCount> textureMatrices;
+ std::array<GLint, kTexUnitCount> tex2DEnables;
+ std::array<GLint, kTexUnitCount> texCubeEnables;
+
+ std::array<GLint, kTexUnitCount> texEnvModes;
+ std::array<GLint, kTexUnitCount> texCombineRgbs;
+ std::array<GLint, kTexUnitCount> texCombineAlphas;
+
+ std::array<GLint, kTexUnitCount> texCombineSrc0Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineSrc0Alphas;
+ std::array<GLint, kTexUnitCount> texCombineSrc1Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineSrc1Alphas;
+ std::array<GLint, kTexUnitCount> texCombineSrc2Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineSrc2Alphas;
+ std::array<GLint, kTexUnitCount> texCombineOp0Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineOp0Alphas;
+ std::array<GLint, kTexUnitCount> texCombineOp1Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineOp1Alphas;
+ std::array<GLint, kTexUnitCount> texCombineOp2Rgbs;
+ std::array<GLint, kTexUnitCount> texCombineOp2Alphas;
+ std::array<Vec4Uniform, kTexUnitCount> texEnvColors;
+ std::array<GLfloat, kTexUnitCount> texEnvRgbScales;
+ std::array<GLfloat, kTexUnitCount> texEnvAlphaScales;
+ std::array<GLint, kTexUnitCount> pointSpriteCoordReplaces;
+
+ // Lighting
+ std::array<GLint, kLightCount> lightEnables;
+ std::array<Vec4Uniform, kLightCount> lightAmbients;
+ std::array<Vec4Uniform, kLightCount> lightDiffuses;
+ std::array<Vec4Uniform, kLightCount> lightSpeculars;
+ std::array<Vec4Uniform, kLightCount> lightPositions;
+ std::array<Vec3Uniform, kLightCount> lightDirections;
+ std::array<GLfloat, kLightCount> spotlightExponents;
+ std::array<GLfloat, kLightCount> spotlightCutoffAngles;
+ std::array<GLfloat, kLightCount> attenuationConsts;
+ std::array<GLfloat, kLightCount> attenuationLinears;
+ std::array<GLfloat, kLightCount> attenuationQuadratics;
+
+ // Clip planes
+ std::array<GLint, kClipPlaneCount> clipPlaneEnables;
+ std::array<Vec4Uniform, kClipPlaneCount> clipPlanes;
+
+ // Texture crop rectangles
+ std::array<Vec4Uniform, kTexUnitCount> texCropRects;
+ };
+
+ GLES1UniformBuffers mUniformBuffers;
+ GLES1ProgramState mProgramState;
+
+ bool mDrawTextureEnabled = false;
+ GLfloat mDrawTextureCoords[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+ GLfloat mDrawTextureDims[2] = {0.0f, 0.0f};
+};
+
+} // namespace gl
+
+#endif // LIBANGLE_GLES1_RENDERER_H_