5 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__linux__) || defined(_WIN32) || defined(__HAIKU__)
58 GL2Renderer::GL2Renderer()
87 auto vendor = glGetString(GL_VENDOR);
88 return string((
char*)vendor);
92 auto renderer = glGetString(GL_RENDERER);
93 return string((
char*)renderer) +
" [GL2/3]";
116 glShadeModel(GL_SMOOTH);
117 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
119 glEnable(GL_DEPTH_TEST);
120 glEnable(GL_CULL_FACE);
121 glDepthFunc(GL_LEQUAL);
122 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
123 glBlendEquation(GL_FUNC_ADD);
125 glEnable(GL_POINT_SPRITE);
126 glEnable(GL_PROGRAM_POINT_SIZE_EXT);
131 for (
auto i = 0; i < rendererContext.lights.size(); i++) {
132 rendererContext.lights[i].spotCosCutoff =
static_cast<float>(Math::cos(Math::PI / 180.0f * 180.0f));
134 rendererContext.textureMatrix.identity();
195 int32_t
GL2Renderer::loadShader(int32_t type,
const string& pathName,
const string& fileName,
const string& definitions,
const string& functions)
198 int32_t shaderId = glCreateShader(type);
200 if (shaderId == 0)
return 0;
202 auto shaderSource = StringTools::replace(
203 StringTools::replace(
204 FileSystem::getInstance()->getContentAsString(pathName, fileName),
212 shaderSource = StringTools::replace(shaderSource,
"#version 100",
"#version 120");
213 shaderSource = StringTools::replace(shaderSource,
"\r",
"");
217 shaderSource.clear();
220 if (StringTools::startsWith(line,
"precision") ==
true)
continue;
221 shaderSource+= line +
"\n";
224 auto shaderSourceNullTerminated = shaderSource +
"\0";
226 array<const char*, 1> shaderSourceNullTerminatedArray = { shaderSourceNullTerminated.data() };
227 glShaderSource(shaderId, 1, shaderSourceNullTerminatedArray.data(),
nullptr);
229 glCompileShader(shaderId);
231 int32_t compileStatus;
232 glGetShaderiv(shaderId, GL_COMPILE_STATUS, &compileStatus);
233 if (compileStatus == 0) {
235 int32_t infoLogLength;
236 glGetShaderiv(shaderId, GL_INFO_LOG_LENGTH, &infoLogLength);
237 string infoLog(infoLogLength,
static_cast<char>(0));
238 glGetShaderInfoLog(shaderId, infoLogLength, &infoLogLength, infoLog.data());
242 string(
"GL2Renderer::loadShader") +
244 to_string(shaderId) +
249 string(
": failed: ") +
253 Console::println(shaderSource);
255 glDeleteShader(shaderId);
265 glUseProgram(programId);
270 return glCreateProgram();
275 glAttachShader(programId, shaderId);
280 glLinkProgram(programId);
283 glGetProgramiv(programId, GL_LINK_STATUS, &linkStatus);
284 if (linkStatus == 0) {
286 int32_t infoLogLength;
287 glGetProgramiv(programId, GL_INFO_LOG_LENGTH, &infoLogLength);
288 string infoLog(infoLogLength,
static_cast<char>(0));
289 glGetProgramInfoLog(programId, infoLogLength, &infoLogLength, infoLog.data());
293 string(
"GL2Renderer::linkProgram") +
295 to_string(programId) +
309 auto uniformLocation = glGetUniformLocation(programId, (name).c_str());
310 return uniformLocation;
315 glUniform1i(uniformId, value);
320 glUniform1f(uniformId, value);
325 glUniformMatrix4fv(uniformId, count,
false, (
float*)data->
getBuffer());
330 glUniformMatrix3fv(uniformId, 1,
false, data.data());
335 glUniformMatrix4fv(uniformId, 1,
false, data.data());
340 glUniform4fv(uniformId, 1, data.data());
345 glUniform3fv(uniformId, 1, data.data());
350 glUniform2fv(uniformId, 1, data.data());
355 glBindAttribLocation(programId, location, (name).c_str());
371 glClearColor(red, green, blue, alpha);
376 glEnable(GL_CULL_FACE);
381 glDisable(GL_CULL_FACE);
386 glFrontFace(frontFace);
391 glCullFace(cullFace);
396 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
401 glBlendFunc(GL_ONE, GL_ONE);
422 glDisable(GL_DEPTH_TEST);
427 glEnable(GL_DEPTH_TEST);
432 glDepthFunc(depthFunction);
437 glColorMask(red, green, blue, alpha);
449 glGenTextures(1, &textureId);
455 uint32_t depthTextureId;
457 glGenTextures(1, &depthTextureId);
458 glBindTexture(GL_TEXTURE_2D, depthTextureId);
460 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT,
nullptr);
462 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
463 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
464 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
465 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
467 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
468 return depthTextureId;
473 uint32_t colorBufferTextureId;
475 glGenTextures(1, &colorBufferTextureId);
476 glBindTexture(GL_TEXTURE_2D, colorBufferTextureId);
478 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
static_cast<Buffer*
>(
nullptr));
480 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
481 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
482 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
483 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
485 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
486 return colorBufferTextureId;
490 Console::println(
"GL2Renderer::createGBufferGeometryTexture(): Not implemented");
495 Console::println(
"GL2Renderer::createGBufferColorTexture(): Not implemented");
513 textureTextureData.getBuffer()
518 glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS, &maxLodBias);
519 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, -Math::clamp(
static_cast<float>(texture->
getAtlasSize()) * 0.125f, 0.0f, maxLodBias));
520 auto borderSize = 32;
522 while (borderSize > 4) {
526 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
527 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, maxLevel - 1);
528 glGenerateMipmap(GL_TEXTURE_2D);
530 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
531 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
533 if (texture->
isUseMipMap() ==
true) glGenerateMipmap(GL_TEXTURE_2D);
535 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
536 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
538 float color[4] = {0.0f, 0.0f, 0.0f, 0.0f};
546 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
break;
548 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
break;
550 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_NEAREST:GL_NEAREST);
break;
552 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_NEAREST:GL_NEAREST);
break;
554 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_LINEAR:GL_LINEAR);
break;
556 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR);
break;
560 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
break;
562 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
break;
564 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_NEAREST:GL_NEAREST);
break;
566 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_NEAREST:GL_NEAREST);
break;
568 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_NEAREST_MIPMAP_LINEAR:GL_LINEAR);
break;
570 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, texture->
isUseMipMap() ==
true?GL_LINEAR_MIPMAP_LINEAR:GL_LINEAR);
break;
581 GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
589 textureTextureData.getBuffer()
597 GL_TEXTURE_CUBE_MAP_POSITIVE_X,
605 textureTextureData.getBuffer()
613 GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
621 textureTextureData.getBuffer()
629 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
637 textureTextureData.getBuffer()
645 GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
653 textureTextureData.getBuffer()
661 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
669 textureTextureData.getBuffer()
672 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
673 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
674 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
675 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
676 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
683 glGenTextures(1, &textureId);
684 glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
685 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
686 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
687 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
688 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
689 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
691 GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
702 GL_TEXTURE_CUBE_MAP_POSITIVE_X,
713 GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
724 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
735 GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
746 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
756 glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
762 glBindTexture(GL_TEXTURE_2D, textureId);
763 glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT,
nullptr);
764 glBindTexture(GL_TEXTURE_2D, 0);
769 glBindTexture(GL_TEXTURE_2D, textureId);
770 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE,
nullptr);
771 glBindTexture(GL_TEXTURE_2D, 0);
775 Console::println(
"GL2Renderer::resizeGBufferGeometryTexture(): Not implemented");
779 Console::println(
"GL2Renderer::resizeGBufferColorTexture(): Not implemented");
784 glBindTexture(GL_TEXTURE_2D, textureId);
789 glBindTexture(GL_TEXTURE_CUBE_MAP, textureId);
795 glDeleteTextures(1, (
const uint32_t*)&textureId);
802 uint32_t frameBufferId;
803 glGenFramebuffers(1, &frameBufferId);
804 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
806 if (depthBufferTextureId !=
ID_NONE) {
808 glFramebufferTextureEXT(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthBufferTextureId, 0);
810 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthBufferTextureId, 0);
814 if (colorBufferTextureId !=
ID_NONE) {
816 glFramebufferTextureEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, colorBufferTextureId, 0);
818 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBufferTextureId, 0);
820 glDrawBuffer(GL_COLOR_ATTACHMENT0);
821 glReadBuffer(GL_COLOR_ATTACHMENT0);
823 if (cubeMapTextureId !=
ID_NONE) {
824 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, cubeMapTextureIndex, cubeMapTextureId, 0);
826 glDrawBuffer(GL_NONE);
827 glReadBuffer(GL_NONE);
830 int32_t fboStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
831 if (fboStatus != GL_FRAMEBUFFER_COMPLETE) {
832 Console::println(
string(
"GL_FRAMEBUFFER_COMPLETE_EXT failed, CANNOT use FBO: ") + to_string(fboStatus));
835 glBindFramebuffer(GL_FRAMEBUFFER, 0);
836 return frameBufferId;
840 int32_t depthBufferTextureId,
841 int32_t geometryBufferTextureId1,
842 int32_t geometryBufferTextureId2,
843 int32_t geometryBufferTextureId3,
844 int32_t colorBufferTextureId1,
845 int32_t colorBufferTextureId2,
846 int32_t colorBufferTextureId3,
847 int32_t colorBufferTextureId4,
848 int32_t colorBufferTextureId5
850 Console::println(
string(
"GL2Renderer::createGeometryBufferObject()::not implemented yet"));
856 glBindFramebuffer(GL_FRAMEBUFFER, frameBufferId);
861 glDeleteFramebuffers(1, (uint32_t*)&frameBufferId);
866 vector<int32_t> bufferObjectIds;
867 bufferObjectIds.resize(buffers);
868 glGenBuffers(buffers, (uint32_t*)bufferObjectIds.data());
869 for (
auto bufferObjectId: bufferObjectIds)
vbosUsage[bufferObjectId] = useGPUMemory ==
true?GL_STATIC_DRAW:GL_STREAM_DRAW;
870 return bufferObjectIds;
875 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
877 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
883 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
885 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
891 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
893 glBindBuffer(GL_ARRAY_BUFFER,
ID_NONE);
899 Console::println(
string(
"GL2Renderer::uploadIndicesBufferObject()::not implemented yet"));
904 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjectId);
905 glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, data->
getBuffer(),
vbosUsage[bufferObjectId]);
906 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,
ID_NONE);
912 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferObjectId);
917 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
918 glEnableVertexAttribArray(1);
919 glVertexAttribPointer(1, 1, GL_FLOAT,
false, 0, 0LL);
924 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
925 glEnableVertexAttribArray(2);
926 glVertexAttribPointer(2, 2, GL_FLOAT,
false, 0, 0LL);
931 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
932 glEnableVertexAttribArray(0);
933 glVertexAttribPointer(0, 3, GL_FLOAT,
false, 0, 0LL);
938 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
939 glEnableVertexAttribArray(0);
940 glVertexAttribPointer(0, 2, GL_FLOAT,
false, 0, 0LL);
945 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
946 glEnableVertexAttribArray(1);
947 glVertexAttribPointer(1, 3, GL_FLOAT,
false, 0, 0LL);
952 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
953 glEnableVertexAttribArray(3);
954 glVertexAttribPointer(3, 4, GL_FLOAT,
false, 0, 0LL);
959 Console::println(
string(
"GL2Renderer::bindTangentsBufferObject()::not implemented yet"));
964 Console::println(
string(
"GL2Renderer::bindBitangentsBufferObject()::not implemented yet"));
968 Console::println(
string(
"GL2Renderer::bindModelViewMatricesBufferObject()::not implemented yet"));
972 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
973 glEnableVertexAttribArray(10);
974 glVertexAttribPointer(10, 4, GL_FLOAT,
false, 0, 0LL);
978 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
979 glEnableVertexAttribArray(11);
980 glVertexAttribPointer(11, 4, GL_FLOAT,
false, 0, 0LL);
984 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
985 glEnableVertexAttribArray(4);
986 glVertexAttribPointer(4, 3, GL_FLOAT,
false, 0, 0LL);
990 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
991 glEnableVertexAttribArray(1);
992 glVertexAttribPointer(1, 2, GL_FLOAT,
false, 0, 0LL);
996 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
997 glEnableVertexAttribArray(5);
998 glVertexAttribPointer(5, 1, GL_FLOAT,
false, 0, 0LL);
1002 glBindBuffer(GL_ARRAY_BUFFER, bufferObjectId);
1003 glEnableVertexAttribArray(6);
1004 glVertexAttribPointer(6, 2, GL_FLOAT,
false, 0, 0LL);
1009 Console::println(
string(
"GL2Renderer::drawInstancedIndexedTrianglesFromBufferObjects()::not implemented yet"));
1014 #define BUFFER_OFFSET(i) ((void*)(i))
1015 glDrawElements(GL_TRIANGLES, triangles * 3, GL_UNSIGNED_INT,
BUFFER_OFFSET(
static_cast<int64_t
>(trianglesOffset) * 3LL * 4LL));
1022 Console::println(
string(
"GL2Renderer::drawInstancedTrianglesFromBufferObjects()::not implemented yet"));
1027 glDrawArrays(GL_TRIANGLES, trianglesOffset * 3, triangles * 3);
1035 glDrawArrays(GL_POINTS, pointsOffset, points);
1042 glLineWidth(lineWidth);
1047 glDrawArrays(GL_LINES, pointsOffset, points);
1054 glDisableVertexAttribArray(0);
1055 glDisableVertexAttribArray(1);
1056 glDisableVertexAttribArray(2);
1057 glDisableVertexAttribArray(3);
1058 glBindBuffer(GL_ARRAY_BUFFER, 0);
1059 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
1064 for (
auto bufferObjectId: bufferObjectIds)
vbosUsage.erase(bufferObjectId);
1065 glDeleteBuffers(bufferObjectIds.size(), (
const uint32_t*)bufferObjectIds.data());
1077 glActiveTexture(GL_TEXTURE0 + textureUnit);
1083 glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth);
1089 auto pixelBuffer = ByteBuffer::allocate(width * height * 4);
1090 glPixelStorei(GL_PACK_ALIGNMENT, 1);
1091 glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixelBuffer->getBuffer());
1098 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
1099 glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
1100 glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1102 glDisable(GL_DEPTH_TEST);
1103 glDisable(GL_CULL_FACE);
1110 glBindTexture(GL_TEXTURE_2D,
ID_NONE);
1111 glDisable(GL_BLEND);
1112 glEnable(GL_DEPTH_TEST);
1113 glEnable(GL_CULL_FACE);
1117 Console::println(
"GL2Renderer::dispatchCompute(): Not implemented");
1121 Console::println(
"GL2Renderer::memoryBarrier(): Not implemented");
1125 Console::println(
"GL2Renderer::uploadSkinningBufferObject(): Not implemented");
1129 Console::println(
"GL2Renderer::uploadSkinningBufferObject(): Not implemented");
1133 Console::println(
"GL2Renderer::bindSkinningVerticesBufferObject(): Not implemented");
1137 Console::println(
"GL2Renderer::bindSkinningNormalsBufferObject(): Not implemented");
1141 Console::println(
"GL2Renderer::bindSkinningVertexJointsBufferObject(): Not implemented");
1145 Console::println(
"GL2Renderer::bindSkinningVertexJointIdxsBufferObject(): Not implemented");
1149 Console::println(
"GL2Renderer::bindSkinningVertexJointWeightsBufferObject(): Not implemented");
1153 Console::println(
"GL2Renderer::bindSkinningVerticesResultBufferObject(): Not implemented");
1157 Console::println(
"GL2Renderer::bindSkinningNormalsResultBufferObject(): Not implemented");
1161 Console::println(
"GL2Renderer::bindSkinningMatricesBufferObject(): Not implemented");
TextureFilter getMinFilter() const
@ CLAMPMODE_TRANSPARENTPIXEL
ByteBuffer getRGBTextureData()
uint8_t getRGBDepthBitsPerPixel() const
uint16_t getTextureHeight() const
TextureFilter getMagFilter() const
uint16_t getTextureWidth() const
ClampMode getClampMode() 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.
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.
unordered_map< uint32_t, int32_t > vbosUsage
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 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
const string & nextToken()
void tokenize(const string &str, const string &delimiters, bool emptyTokens=false)
Tokenize.
Bean holding light properties.
uint32_t disposedTextures
int64_t memoryUsageShared