TDME2  1.9.200
GLES2Renderer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <array>
4 #include <string>
5 #include <unordered_map>
6 #include <vector>
7 
8 #include <tdme/tdme.h>
10 #include <tdme/engine/fwd-tdme.h>
12 #include <tdme/math/fwd-tdme.h>
14 
15 using std::array;
16 using std::string;
17 using std::unordered_map;
18 using std::vector;
19 
27 
28 /**
29  * OpenGL ES2 renderer
30  * @author Andreas Drewke
31  */
33 {
34 private:
35  map<uint32_t, int32_t> vbosUsage;
37 
38 public:
39  // forbid class copy
41 
42  /**
43  * Public constructor
44  */
45  GLES2Renderer();
46 
47  // overridden methods
48  const string getVendor() override;
49  const string getRenderer() override;
50  const string getShaderVersion() override;
51  bool isSupportingMultithreadedRendering() override;
52  void initialize() override;
53  void initializeFrame() override;
54  void finishFrame() override;
55  bool isTextureCompressionAvailable() override;
56  bool isUsingProgramAttributeLocation() override;
58  bool isSpecularMappingAvailable() override;
59  bool isNormalMappingAvailable() override;
60  bool isInstancedRenderingAvailable() override;
61  bool isPBRAvailable() override;
62  bool isComputeShaderAvailable() override;
63  bool isGLCLAvailable() override;
64  bool isUsingShortIndices() override;
65  bool isDeferredShadingAvailable() override;
66  int32_t getTextureUnits() override;
67  int32_t loadShader(int32_t type, const string& pathName, const string& fileName, const string& definitions = string(), const string& functions = string()) override;
68  void useProgram(int contextIdx, int32_t programId) override;
69  int32_t createProgram(int type) override;
70  void attachShaderToProgram(int32_t programId, int32_t shaderId) override;
71  bool linkProgram(int32_t programId) override;
72  int32_t getProgramUniformLocation(int32_t programId, const string& name) override;
73  void setProgramUniformInteger(int contextIdx, int32_t uniformId, int32_t value) override;
74  void setProgramUniformFloat(int contextIdx, int32_t uniformId, float value) override;
75  void setProgramUniformFloatMatrix3x3(int contextIdx, int32_t uniformId, const array<float, 9>& data) override;
76  void setProgramUniformFloatMatrix4x4(int contextIdx, int32_t uniformId, const array<float, 16>& data) override;
77  void setProgramUniformFloatMatrices4x4(int contextIdx, int32_t uniformId, int32_t count, FloatBuffer* data) override;
78  void setProgramUniformFloatVec4(int contextIdx, int32_t uniformId, const array<float, 4>& data) override;
79  void setProgramUniformFloatVec3(int contextIdx, int32_t uniformId, const array<float, 3>& data) override;
80  void setProgramUniformFloatVec2(int contextIdx, int32_t uniformId, const array<float, 2>& data) override;
81  void setProgramAttributeLocation(int32_t programId, int32_t location, const string& name) override;
82  void setViewPort(int32_t width, int32_t height) override;
83  void updateViewPort() override;
84  void setClearColor(float red, float green, float blue, float alpha) override;
85  void enableCulling(int contextIdx) override;
86  void disableCulling(int contextIdx) override;
87  void setFrontFace(int contextIdx, int32_t frontFace) override;
88  void setCullFace(int32_t cullFace) override;
89  void enableBlending() override;
90  void enableAdditionBlending() override;
91  void disableBlending() override;
92  void enableDepthBufferWriting() override;
93  void disableDepthBufferWriting() override;
94  void disableDepthBufferTest() override;
95  void enableDepthBufferTest() override;
96  void setDepthFunction(int32_t depthFunction) override;
97  void setColorMask(bool red, bool green, bool blue, bool alpha) override;
98  void clear(int32_t mask) override;
99  int32_t createTexture() override;
100  int32_t createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex) override;
101  int32_t createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex) override;
102  int32_t createGBufferGeometryTexture(int32_t width, int32_t height) override;
103  int32_t createGBufferColorTexture(int32_t width, int32_t height) override;
104  void uploadTexture(int contextIdx, Texture* texture) override;
105  void uploadCubeMapTexture(int contextIdx, Texture* textureLeft, Texture* textureRight, Texture* textureTop, Texture* textureBottom, Texture* textureFront, Texture* textureBack) override;
106  int32_t createCubeMapTexture(int contextIdx, int32_t width, int32_t height) override;
107  void resizeDepthBufferTexture(int32_t textureId, int32_t width, int32_t height) override;
108  void resizeColorBufferTexture(int32_t textureId, int32_t width, int32_t height) override;
109  void resizeGBufferGeometryTexture(int32_t textureId, int32_t width, int32_t height) override;
110  void resizeGBufferColorTexture(int32_t textureId, int32_t width, int32_t height) override;
111  void bindTexture(int contextIdx, int32_t textureId) override;
112  void bindCubeMapTexture(int contextIdx, int32_t textureId) override;
113  void disposeTexture(int32_t textureId) override;
114  int32_t createFramebufferObject(int32_t depthBufferTextureId, int32_t colorBufferTextureId, int32_t cubeMapTextureId = 0, int32_t cubeMapTextureIndex = 0) override;
116  int32_t depthBufferTextureId,
117  int32_t geometryBufferTextureId1,
118  int32_t geometryBufferTextureId2,
119  int32_t geometryBufferTextureId3,
120  int32_t colorBufferTextureId1,
121  int32_t colorBufferTextureId2,
122  int32_t colorBufferTextureId3,
123  int32_t colorBufferTextureId4,
124  int32_t colorBufferTextureId5
125  ) override;
126  void bindFrameBuffer(int32_t frameBufferId) override;
127  void disposeFrameBufferObject(int32_t frameBufferId) override;
128  vector<int32_t> createBufferObjects(int32_t buffers, bool useGPUMemory, bool shared) override;
129  void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer* data) override;
130  void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, ShortBuffer* data) override;
131  void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, IntBuffer* data) override;
132  void uploadIndicesBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, ShortBuffer* data) override;
133  void uploadIndicesBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, IntBuffer* data) override;
134  void bindIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override;
135  void bindSolidColorsBufferObject(int contextIdx, int32_t bufferObjectId) override;
136  void bindTextureCoordinatesBufferObject(int contextIdx, int32_t bufferObjectId) override;
137  void bindVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override;
138  void bindVertices2BufferObject(int contextIdx, int32_t bufferObjectId) override;
139  void bindNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override;
140  void bindColorsBufferObject(int contextIdx, int32_t bufferObjectId) override;
141  void bindTangentsBufferObject(int contextIdx, int32_t bufferObjectId) override;
142  void bindBitangentsBufferObject(int contextIdx, int32_t bufferObjectId) override;
143  void bindModelMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override;
144  void bindEffectColorMulsBufferObject(int contextIdx, int32_t bufferObjectId, int32_t divisor) override;
145  void bindEffectColorAddsBufferObject(int contextIdx, int32_t bufferObjectId, int32_t divisor) override;
146  void bindOriginsBufferObject(int contextIdx, int32_t bufferObjectId) override;
147  void bindTextureSpriteIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override;
148  void bindPointSizesBufferObject(int contextIdx, int32_t bufferObjectId) override;
149  void bindSpriteSheetDimensionBufferObject(int contextIdx, int32_t bufferObjectId) override;
150  void drawInstancedIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, int32_t instances) override;
151  void drawIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override;
152  void drawInstancedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, int32_t instances) override;
153  void drawTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override;
154  void drawPointsFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override;
155  void setLineWidth(float lineWidth) override;
156  void drawLinesFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override;
157  void unbindBufferObjects(int contextIdx) override;
158  void disposeBufferObjects(vector<int32_t>& bufferObjectIds) override;
159  int32_t getTextureUnit(int contextIdx) override;
160  void setTextureUnit(int contextIdx, int32_t textureUnit) override;
161  float readPixelDepth(int32_t x, int32_t y) override;
162  ByteBuffer* readPixels(int32_t x, int32_t y, int32_t width, int32_t height) override;
163  void initGuiMode() override;
164  void doneGuiMode() override;
165 
166  // overridden methods for skinning on GPU via compute shader
167  void dispatchCompute(int contextIdx, int32_t numGroupsX, int32_t numGroupsY, int32_t numGroupsZ) override;
168  void memoryBarrier() override;
169  void uploadSkinningBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer* data) override;
170  void uploadSkinningBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, IntBuffer* data) override;
171  void bindSkinningVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override;
172  void bindSkinningNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override;
173  void bindSkinningVertexJointsBufferObject(int contextIdx, int32_t bufferObjectId) override;
174  void bindSkinningVertexJointIdxsBufferObject(int contextIdx, int32_t bufferObjectId) override;
175  void bindSkinningVertexJointWeightsBufferObject(int contextIdx, int32_t bufferObjectId) override;
176  void bindSkinningVerticesResultBufferObject(int contextIdx, int32_t bufferObjectId) override;
177  void bindSkinningNormalsResultBufferObject(int contextIdx, int32_t bufferObjectId) override;
178  void bindSkinningMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override;
179 
180  //
181  void setVSync(bool vSync) override;
182 
183  //
184  const Renderer_Statistics getStatistics() override;
185 private:
186  /**
187  * Checks if GL error did occour
188  */
189  void checkGLError();
190 
191 };
Frame buffer class.
Definition: FrameBuffer.h:22
Texture entity.
Definition: Texture.h:24
void setClearColor(float red, float green, float blue, float alpha) override
Set up clear color.
void enableDepthBufferWriting() override
Enable depth buffer writing.
void bindSpriteSheetDimensionBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind sprite sheet dimension buffer object.
void bindTexture(int contextIdx, int32_t textureId) override
Binds a texture with given id or unbinds when using ID_NONE.
void clear(int32_t mask) override
Clear render buffer with given mask.
void bindTangentsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind tangents buffer object.
void disposeBufferObjects(vector< int32_t > &bufferObjectIds) override
Disposes a frame buffer object.
int32_t getTextureUnit(int contextIdx) override
Get texture unit.
void setProgramUniformFloatMatrix3x3(int contextIdx, int32_t uniformId, const array< float, 9 > &data) override
Set up a float matrix 3x3 uniform value.
void doneGuiMode() override
Set up renderer for 3d rendering.
void setColorMask(bool red, bool green, bool blue, bool alpha) override
Set up GL rendering colormask.
void bindTextureCoordinatesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind texture coordinates buffer object.
void bindSkinningVertexJointWeightsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joint weights buffer object.
void dispatchCompute(int contextIdx, int32_t numGroupsX, int32_t numGroupsY, int32_t numGroupsZ) override
Dispatch compute.
void attachShaderToProgram(int32_t programId, int32_t shaderId) override
Attaches a shader to a program.
void setFrontFace(int contextIdx, int32_t frontFace) override
Set up clock wise or counter clock wise faces as front face.
void setTextureUnit(int contextIdx, int32_t textureUnit) override
Sets up texture unit.
void drawLinesFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override
Draw lines from buffer objects.
void disableBlending() override
Disables blending.
void setProgramAttributeLocation(int32_t programId, int32_t location, const string &name) override
Bind attribute to a input location.
void setViewPort(int32_t width, int32_t height) override
Set up viewport parameter.
void bindSkinningVerticesResultBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertices result buffer object.
void setProgramUniformFloat(int contextIdx, int32_t uniformId, float value) override
Set up a float uniform value.
const Renderer_Statistics getStatistics() override
void initialize() override
Initialize renderer.
void setVSync(bool vSync) override
Enable/Disable v-sync.
int32_t createGBufferColorTexture(int32_t width, int32_t height) override
Creates a geometry buffer color RGBA texture.
void setProgramUniformFloatVec3(int contextIdx, int32_t uniformId, const array< float, 3 > &data) override
Set up a float vec3 uniform value.
void bindEffectColorAddsBufferObject(int contextIdx, int32_t bufferObjectId, int32_t divisor) override
Bind effect color adds buffer object.
void disposeFrameBufferObject(int32_t frameBufferId) override
Disposes a frame buffer object.
void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data) override
Uploads buffer data to buffer object.
void setProgramUniformInteger(int contextIdx, int32_t uniformId, int32_t value) override
Set up a integer uniform value.
int32_t getProgramUniformLocation(int32_t programId, const string &name) override
Returns location of given uniform variable.
void disableDepthBufferWriting() override
Disable depth buffer writing.
void bindSkinningVertexJointIdxsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joint indices buffer object.
void bindNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind normals buffer object.
void drawPointsFromBufferObjects(int contextIdx, int32_t points, int32_t pointsOffset) override
Draw points from buffer objects.
void drawInstancedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, int32_t instances) override
Draw instanced triangles from buffer objects.
void disposeTexture(int32_t textureId) override
Dispose a texture.
int32_t createColorBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex) override
Creates a color buffer texture.
void disableCulling(int contextIdx) override
Disable culling.
void bindEffectColorMulsBufferObject(int contextIdx, int32_t bufferObjectId, int32_t divisor) override
Bind effect color muls buffer object.
int32_t createCubeMapTexture(int contextIdx, int32_t width, int32_t height) override
Create cube map texture from frame buffers.
int32_t createFramebufferObject(int32_t depthBufferTextureId, int32_t colorBufferTextureId, int32_t cubeMapTextureId=0, int32_t cubeMapTextureIndex=0) override
Creates a frame buffer object with depth texture attached.
int32_t createDepthBufferTexture(int32_t width, int32_t height, int32_t cubeMapTextureId, int32_t cubeMapTextureIndex) override
Creates a depth buffer texture.
void bindCubeMapTexture(int contextIdx, int32_t textureId) override
Binds a cube map texture with given id or unbinds when using ID_NONE.
void setProgramUniformFloatVec4(int contextIdx, int32_t uniformId, const array< float, 4 > &data) override
Set up a float vec4 uniform value.
void setDepthFunction(int32_t depthFunction) override
Set up depth function.
void uploadCubeMapTexture(int contextIdx, Texture *textureLeft, Texture *textureRight, Texture *textureTop, Texture *textureBottom, Texture *textureFront, Texture *textureBack) override
Uploads cube map texture data to current bound texture.
void bindFrameBuffer(int32_t frameBufferId) override
Enables a framebuffer to be rendered.
int32_t loadShader(int32_t type, const string &pathName, const string &fileName, const string &definitions=string(), const string &functions=string()) override
Loads a shader.
void resizeDepthBufferTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a depth texture.
void resizeGBufferGeometryTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a geometry buffer geometry texture.
bool isInstancedRenderingAvailable() override
Checks if instanced rendering is available.
void drawTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override
Draw triangles from buffer objects.
void initGuiMode() override
Set up renderer for GUI rendering.
void bindSkinningVertexJointsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertex joints buffer object.
void setCullFace(int32_t cullFace) override
Sets up which face will be culled.
void enableBlending() override
Enables blending.
void uploadIndicesBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, ShortBuffer *data) override
Uploads buffer data to buffer object.
bool linkProgram(int32_t programId) override
Links attached shaders to a program.
void setProgramUniformFloatMatrix4x4(int contextIdx, int32_t uniformId, const array< float, 16 > &data) override
Set up a float matrix 4x4 uniform value.
void enableCulling(int contextIdx) override
Enable culling.
void bindOriginsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind origins buffer object.
int32_t createProgram(int type) override
Creates a shader program.
void bindIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind indices buffer object.
void initializeFrame() override
Pre Frame Initialization.
int32_t createGBufferGeometryTexture(int32_t width, int32_t height) override
Creates a geometry buffer geometry texture.
void uploadSkinningBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data) override
Upload skinning buffer object.
void enableAdditionBlending() override
Enable blending with c = a + b.
void bindVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind vertices buffer object.
void drawInstancedIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset, int32_t instances) override
Draw instanced indexed triangles from buffer objects.
void bindVertices2BufferObject(int contextIdx, int32_t bufferObjectId) override
Bind vertices 2 buffer object.
void useProgram(int contextIdx, int32_t programId) override
Use shader program.
void bindColorsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind colors buffer object.
void bindPointSizesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind point sizes buffer object.
void bindSkinningVerticesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning vertices buffer object.
void bindBitangentsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind bitangents buffer object.
void bindSkinningNormalsResultBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning normals result buffer object.
void setProgramUniformFloatMatrices4x4(int contextIdx, int32_t uniformId, int32_t count, FloatBuffer *data) override
Set up a float matrices 4x4 uniform values.
void resizeGBufferColorTexture(int32_t textureId, int32_t width, int32_t height) override
Resizes a geometry buffer color RGBA texture.
void bindSkinningMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning matrices result buffer object.
int32_t createGeometryBufferObject(int32_t depthBufferTextureId, int32_t geometryBufferTextureId1, int32_t geometryBufferTextureId2, int32_t geometryBufferTextureId3, int32_t colorBufferTextureId1, int32_t colorBufferTextureId2, int32_t colorBufferTextureId3, int32_t colorBufferTextureId4, int32_t colorBufferTextureId5) override
Creates a geometry frame buffer object.
vector< int32_t > createBufferObjects(int32_t buffers, bool useGPUMemory, bool shared) override
Generate buffer objects for vertex data and such.
void updateViewPort() override
Update viewport.
void bindModelMatricesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind model matrices buffer object.
void drawIndexedTrianglesFromBufferObjects(int contextIdx, int32_t triangles, int32_t trianglesOffset) override
Draw indexed triangles from buffer objects.
void disableDepthBufferTest() override
Disable depth buffer test.
void bindSkinningNormalsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind skinning normal buffer object.
void unbindBufferObjects(int contextIdx) override
Unbind buffer objects.
int32_t createTexture() override
Creates a texture.
float readPixelDepth(int32_t x, int32_t y) override
Reads a pixel depth.
void uploadTexture(int contextIdx, Texture *texture) override
Uploads texture data to current bound texture.
void checkGLError()
Checks if GL error did occour.
void setLineWidth(float lineWidth) override
Set line width.
ByteBuffer * readPixels(int32_t x, int32_t y, int32_t width, int32_t height) override
Read pixels.
void enableDepthBufferTest() override
Enable depth buffer test.
void resizeColorBufferTexture(int32_t textureId, int32_t width, int32_t height) override
Resize color buffer texture.
void bindTextureSpriteIndicesBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind texture and sprite indices buffer object.
void setProgramUniformFloatVec2(int contextIdx, int32_t uniformId, const array< float, 2 > &data) override
Set up a float vec2 uniform value.
void bindSolidColorsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind solid colors buffer object.
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Byte buffer class.
Definition: ByteBuffer.h:27
Float buffer class.
Definition: FloatBuffer.h:18
Integer buffer class.
Definition: IntBuffer.h:14
Short buffer class.
Definition: ShortBuffer.h:14
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6