3 #define GL_GLEXT_PROTOTYPES
52 GLES2Renderer::GLES2Renderer()
80 auto vendor = (
char*)glGetString(GL_VENDOR);
81 return string(vendor);
85 auto renderer = (
char*)glGetString(GL_RENDERER);
86 return string(renderer) +
" [GLES2]";
105 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
107 glEnable(GL_DEPTH_TEST);
108 glEnable(GL_CULL_FACE);
109 glDepthFunc(GL_LEQUAL);
110 glBlendEquation(GL_FUNC_ADD);
115 for (
auto i = 0; i < rendererContext.lights.size(); i++) {
116 rendererContext.lights[i].spotCosCutoff =
static_cast<float>(Math::cos(Math::PI / 180.0f * 180.0f));
118 rendererContext.textureMatrix.identity();
185 int32_t
GLES2Renderer::loadShader(int32_t type,
const string& pathName,
const string& fileName,
const string& definitions,
const string& functions)
188 int32_t shaderId = glCreateShader(type);
190 if (shaderId == 0)
return 0;
192 auto shaderSource = StringTools::replace(
193 StringTools::replace(
194 FileSystem::getInstance()->getContentAsString(pathName, fileName),
201 auto shaderSourceNullTerminated = shaderSource +
"\0";
203 array<const char*, 1> shaderSourceNullTerminatedArray = { shaderSourceNullTerminated.data() };
204 glShaderSource(shaderId, 1, shaderSourceNullTerminatedArray.data(),
nullptr);
206 glCompileShader(shaderId);
208 int32_t compileStatus;
209 glGetShaderiv(shaderId, GL_COMPILE_STATUS, &compileStatus);
210 if (compileStatus == 0) {
212 int32_t infoLogLength;
213 glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &infoLogLength);
214 string infoLog(infoLogLength,
static_cast<char>(0));
215 glGetShaderInfoLog(shaderId, infoLogLength, &infoLogLength, infoLog.data());
219 string(
"GLES2Renderer::loadShader") +
221 to_string(shaderId) +
226 string(
": failed: ") +
230 Console::println(shaderSource);
232 glDeleteShader(shaderId);
242 glUseProgram(programId);
247 return glCreateProgram();
252 glAttachShader(programId, shaderId);
257 glLinkProgram(programId);
260 glGetProgramiv(programId, GL_LINK_STATUS, &linkStatus);
261 if (linkStatus == 0) {
263 int32_t infoLogLength;
264 glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &infoLogLength);
265 string infoLog(infoLogLength,
static_cast<char>(0));
266 glGetProgramInfoLog(programId, infoLogLength, &infoLogLength, infoLog.data());
270 string(
"GLES2Renderer::linkProgram") +
272 to_string(programId) +
286 auto uniformLocation = glGetUniformLocation(programId, name.c_str());
288 return uniformLocation;
293 glUniform1i(uniformId, value);
298 glUniform1f(uniformId, value);
303 glUniformMatrix3fv(uniformId, 1,
false, data.data());
308 glUniformMatrix4fv(uniformId, 1,
false, data.data());
313 glUniformMatrix4fv(uniformId, count,
false, (
float*)data->
getBuffer());
318 glUniform4fv(uniformId, 1, data.data());
323 glUniform3fv(uniformId, 1, data.data());
328 glUniform2fv(uniformId, 1, data.data());
333 glBindAttribLocation(programId, location, (name).c_str());
349 glClearColor(red, green, blue, alpha);
354 glEnable(GL_CULL_FACE);
359 glDisable(GL_CULL_FACE);
364 glFrontFace(frontFace);
369 glCullFace(cullFace);
374 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
379 glBlendFunc(GL_ONE, GL_ONE);
400 glDisable(GL_DEPTH_TEST);
405 glEnable(GL_DEPTH_TEST);
411 glDepthFunc(depthFunction);
416 glColorMask(red, green, blue, alpha);
428 glGenTextures(1, &textureId);
434 uint32_t depthTextureId;
436 glGenTextures(1, &depthTextureId);
437 glBindTexture(GL_TEXTURE_2D, depthTextureId);
439 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
nullptr);
441 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
442 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
443 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
444 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
446 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
447 return depthTextureId;
452 uint32_t colorBufferTextureId;
454 glGenTextures(1, &colorBufferTextureId);
455 glBindTexture(GL_TEXTURE_2D, colorBufferTextureId);
457 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
459 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
460 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
461 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
462 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
464 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
465 return colorBufferTextureId;
469 Console::println(
"GLES2Renderer::createGBufferGeometryTexture(): Not implemented");
474 Console::println(
"GLES2Renderer::createGBufferColorTexture(): Not implemented");
492 textureTextureData.getBuffer()
497 glGenerateMipmap(GL_TEXTURE_2D);
499 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
500 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
502 if (texture->
isUseMipMap() ==
true) glGenerateMipmap(GL_TEXTURE_2D);
504 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
505 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
518 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
break;
520 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
break;
522 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_NEAREST:GL_NEAREST);
break;
524 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_NEAREST:GL_NEAREST);
break;
526 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_LINEAR:GL_LINEAR);
break;
528 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR);
break;
532 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
break;
534 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
break;
536 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_NEAREST:GL_NEAREST);
break;
538 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_NEAREST:GL_NEAREST);
break;
540 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_LINEAR:GL_LINEAR);
break;
542 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR);
break;
553 GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
561 textureTextureData.getBuffer()
569 GL_TEXTURE_CUBE_MAP_POSITIVE_X,
577 textureTextureData.getBuffer()
585 GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
593 textureTextureData.getBuffer()
601 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
609 textureTextureData.getBuffer()
617 GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
625 textureTextureData.getBuffer()
633 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
641 textureTextureData.getBuffer()
644 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
645 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
646 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
647 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
654 glGenTextures(1, &textureId);
655 glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
656 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
657 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
658 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
659 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
661 GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
672 GL_TEXTURE_CUBE_MAP_POSITIVE_X,
683 GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
694 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
705 GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
716 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
726 glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
732 glBindTexture(GL_TEXTURE_2D, textureId);
733 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,
nullptr);
734 glBindTexture(GL_TEXTURE_2D, 0);
739 glBindTexture(GL_TEXTURE_2D, textureId);
740 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
741 glBindTexture(GL_TEXTURE_2D, 0);
745 Console::println(
"GLES2Renderer::resizeGBufferGeometryTexture(): Not implemented");
749 Console::println(
"GLES2Renderer::resizeGBufferColorTexture(): Not implemented");
754 glBindTexture(GL_TEXTURE_2D, textureId);
759 glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
765 glDeleteTextures(1, (
const uint32_t*)&textureId);
771 uint32_t frameBufferId;
773 glGenFramebuffers(1, &frameBufferId);
774 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
776 if (depthBufferTextureId !=
ID_NONE) {
777 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthBufferTextureId, 0);
780 if (colorBufferTextureId !=
ID_NONE) {
781 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBufferTextureId, 0);
785 if (cubeMapTextureId !=
ID_NONE) {
786 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, cubeMapTextureIndex, cubeMapTextureId, 0);
792 auto fboStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
793 if (fboStatus != GL_FRAMEBUFFER_COMPLETE) {
794 Console::println(
string(
"GL_FRAMEBUFFER_COMPLETE_EXT failed, CANNOT use FBO: "+ to_string(fboStatus)));
797 glBindFramebuffer(GL_FRAMEBUFFER, 0);
798 return frameBufferId;
802 int32_t depthBufferTextureId,
803 int32_t geometryBufferTextureId1,
804 int32_t geometryBufferTextureId2,
805 int32_t geometryBufferTextureId3,
806 int32_t colorBufferTextureId1,
807 int32_t colorBufferTextureId2,
808 int32_t colorBufferTextureId3,
809 int32_t colorBufferTextureId4,
810 int32_t colorBufferTextureId5
812 Console::println(
string(
"GLES2Renderer::createGeometryBufferObject()::not implemented yet"));
818 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
823 glDeleteFramebuffers(1, (
const uint32_t*)&frameBufferId);
828 vector<int32_t> bufferObjectIds;
829 bufferObjectIds.resize(buffers);
830 glGenBuffers(buffers, (uint32_t*)bufferObjectIds.data());
831 for (
auto bufferObjectId: bufferObjectIds)
vbosUsage[bufferObjectId] = useGPUMemory ==
true?GL_STATIC_DRAW:GL_STREAM_DRAW;
832 return bufferObjectIds;
837 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
839 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
845 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
847 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
853 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
855 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
861 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjectId);
862 glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data->
getBuffer(),
vbosUsage[bufferObjectId]);
863 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,
ID_NONE);
869 Console::println(
"GLES2Renderer::uploadIndicesBufferObject()::not implemented");
874 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjectId);
879 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
880 glEnableVertexAttribArray(1);
881 glVertexAttribPointer(1, 1, GL_FLOAT,
false, 0, 0LL);
886 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
887 glEnableVertexAttribArray(2);
888 glVertexAttribPointer(2, 2, GL_FLOAT,
false, 0, 0LL);
893 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
894 glEnableVertexAttribArray(0);
895 glVertexAttribPointer(0, 3, GL_FLOAT,
false, 0, 0LL);
900 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
901 glEnableVertexAttribArray(0);
902 glVertexAttribPointer(0, 2, GL_FLOAT,
false, 0, 0LL);
907 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
908 glEnableVertexAttribArray(1);
909 glVertexAttribPointer(1, 3, GL_FLOAT,
false, 0, 0LL);
914 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
915 glEnableVertexAttribArray(3);
916 glVertexAttribPointer(3, 4, GL_FLOAT,
false, 0, 0LL);
921 Console::println(
"GLES2Renderer::bindTangentsBufferObject()::not implemented");
926 Console::println(
"GLES2Renderer::bindBitangentsBufferObject()::not implemented");
930 Console::println(
string(
"GLES2Renderer::bindModelViewMatricesBufferObject()::not implemented yet"));
934 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
935 glEnableVertexAttribArray(10);
936 glVertexAttribPointer(10, 4, GL_FLOAT,
false, 0, 0LL);
940 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
941 glEnableVertexAttribArray(11);
942 glVertexAttribPointer(11, 4, GL_FLOAT,
false, 0, 0LL);
946 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
947 glEnableVertexAttribArray(4);
948 glVertexAttribPointer(4, 3, GL_FLOAT,
false, 0, 0LL);
952 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
953 glEnableVertexAttribArray(1);
954 glVertexAttribPointer(1, 2, GL_FLOAT,
false, 0, 0LL);
958 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
959 glEnableVertexAttribArray(5);
960 glVertexAttribPointer(5, 1, GL_FLOAT,
false, 0, 0LL);
964 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
965 glEnableVertexAttribArray(6);
966 glVertexAttribPointer(6, 2, GL_FLOAT,
false, 0, 0LL);
971 Console::println(
string(
"GLES2Renderer::drawInstancedIndexedTrianglesFromBufferObjects()::not implemented yet"));
976 #define BUFFER_OFFSET(i) ((void*)(i))
977 glDrawElements(GL_TRIANGLES, triangles * 3, GL_UNSIGNED_SHORT,
BUFFER_OFFSET(
static_cast<int64_t
>(trianglesOffset) * 3LL * 2LL));
984 Console::println(
string(
"GL2Renderer::drawInstancedTrianglesFromBufferObjects()::not implemented yet"));
989 glDrawArrays(GL_TRIANGLES, trianglesOffset * 3, triangles * 3);
997 glDrawArrays(GL_POINTS, pointsOffset, points);
1004 glLineWidth(lineWidth);
1009 glDrawArrays(GL_LINES, pointsOffset, points);
1016 glDisableVertexAttribArray(0);
1017 glDisableVertexAttribArray(1);
1018 glDisableVertexAttribArray(2);
1019 glDisableVertexAttribArray(3);
1020 glDisableVertexAttribArray(4);
1021 glBindBuffer(GL_ARRAY_BUFFER, 0);
1022 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
1027 for (
auto& bufferObjectId: bufferObjectIds)
vbosUsage.erase(bufferObjectId);
1028 glDeleteBuffers(bufferObjectIds.size(), (
const uint32_t*)bufferObjectIds.data());
1040 glActiveTexture(GL_TEXTURE0 + textureUnit);
1056 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
1057 glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
1058 glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1060 glDisable(GL_DEPTH_TEST);
1061 glDisable(GL_CULL_FACE);
1066 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
1067 glDisable(GL_BLEND);
1068 glEnable(GL_DEPTH_TEST);
1069 glEnable(GL_CULL_FACE);
1073 Console::println(
"GLES2Renderer::dispatchCompute(): Not implemented");
1077 Console::println(
"GLES2Renderer::memoryBarrier(): Not implemented");
1081 Console::println(
"GLES2Renderer::uploadSkinningBufferObject(): Not implemented");
1085 Console::println(
"GLES2Renderer::uploadSkinningBufferObject(): Not implemented");
1089 Console::println(
"GLES2Renderer::bindSkinningVerticesBufferObject(): Not implemented");
1093 Console::println(
"GLES2Renderer::bindSkinningNormalsBufferObject(): Not implemented");
1097 Console::println(
"GLES2Renderer::bindSkinningVertexJointsBufferObject(): Not implemented");
1101 Console::println(
"GLES2Renderer::bindSkinningVertexJointIdxsBufferObject(): Not implemented");
1105 Console::println(
"GLES2Renderer::bindSkinningVertexJointWeightsBufferObject(): Not implemented");
1109 Console::println(
"GLES2Renderer::bindSkinningVerticesResultBufferObject(): Not implemented");
1113 Console::println(
"GLES2Renderer::bindSkinningNormalsResultBufferObject(): Not implemented");
1117 Console::println(
"GLES2Renderer::bindSkinningMatricesBufferObject(): Not implemented");
1148 auto error = glGetError();
1149 if (error != GL_NO_ERROR) {
1150 Console::println(
string(
"OpenGL Error: (" + to_string(error) +
") @:"));
TextureFilter getMinFilter() const
ByteBuffer getRGBTextureData()
uint8_t getRGBDepthBitsPerPixel() const
uint16_t getTextureHeight() const
TextureFilter getMagFilter() const
uint16_t getTextureWidth() const
@ TEXTUREFILTER_LINEAR_MIPMAP_LINEAR
@ TEXTUREFILTER_LINEAR_MIPMAP_NEAREST
@ TEXTUREFILTER_NEAREST_MIPMAP_NEAREST
@ TEXTUREFILTER_NEAREST_MIPMAP_LINEAR
uint16_t getAtlasSize() const
void setClearColor(float red, float green, float blue, float alpha) override
Set up clear color.
void enableDepthBufferWriting() override
Enable depth buffer writing.
const string getShaderVersion() override
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.
map< uint32_t, int32_t > vbosUsage
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.
bool isGLCLAvailable() override
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.
bool isSupportingMultithreadedRendering() override
int32_t getTextureUnits() override
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 string getRenderer() override
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.
bool isSupportingIntegerProgramAttributes() override
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.
const string getVendor() override
void uploadBufferObject(int contextIdx, int32_t bufferObjectId, int32_t size, FloatBuffer *data) override
Uploads buffer data to buffer object.
void memoryBarrier() override
Memory barrier.
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.
bool isPBRAvailable() override
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.
bool isNormalMappingAvailable() override
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.
void finishFrame() override
Finish frame.
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.
bool isSpecularMappingAvailable() override
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.
bool isComputeShaderAvailable() override
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.
bool isUsingShortIndices() override
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.
bool isTextureCompressionAvailable() override
void setProgramUniformFloatVec2(int contextIdx, int32_t uniformId, const array< float, 2 > &data) override
Set up a float vec2 uniform value.
bool isDeferredShadingAvailable() override
void bindSolidColorsBufferObject(int contextIdx, int32_t bufferObjectId) override
Bind solid colors buffer object.
bool isUsingProgramAttributeLocation() override
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Z
int32_t SHADER_FRAGMENT_SHADER
Renderer_Statistics statistics
int32_t SHADER_COMPUTE_SHADER
int32_t SHADER_VERTEX_SHADER
int32_t CLEAR_COLOR_BUFFER_BIT
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_X
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Y
vector< Renderer_Context > rendererContexts
int32_t CUBEMAPTEXTUREINDEX_NEGATIVE_Y
virtual void onBindTexture(int contextIdx, int32_t textureId)=0
On bind texture event.
RendererType rendererType
int32_t DEPTHFUNCTION_ALWAYS
int32_t DEPTHFUNCTION_LESSEQUAL
int32_t DEPTHFUNCTION_GREATEREQUAL
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_Z
int32_t CONTEXTINDEX_DEFAULT
int32_t DEPTHFUNCTION_EQUAL
int32_t FRAMEBUFFER_DEFAULT
int32_t CUBEMAPTEXTUREINDEX_POSITIVE_X
int32_t CLEAR_DEPTH_BUFFER_BIT
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
File system singleton class.
const uint8_t * getBuffer() const
Bean holding light properties.
uint32_t disposedTextures
int64_t memoryUsageShared