diff --git a/src/modules/graphics/opengl/OpenGL.cpp b/src/modules/graphics/opengl/OpenGL.cpp index 1d49cb24d..b9120085a 100644 --- a/src/modules/graphics/opengl/OpenGL.cpp +++ b/src/modules/graphics/opengl/OpenGL.cpp @@ -89,6 +89,24 @@ void initializeContext() glGetIntegerv(GL_TEXTURE_BINDING_2D, (GLint *) &textureUnits[0]); } + + // Set the 'default' texture (id 0) as a repeating white pixel. + // Otherwise, texture2D inside a shader would return black when drawing graphics primitives, + // which would create the need to use different "passthrough" shaders for untextured primitives vs images. + + GLuint curtexture = textureUnits[curTextureUnit]; + bindTexture(0); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + + GLubyte pixel = 255; + glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, 1, 1, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, &pixel); + + bindTexture(curtexture); } void uninitializeContext()