From d91808487fbf3601f3e53b720080a5527d495c38 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Fri, 27 Mar 2026 13:46:18 -0500 Subject: [PATCH] Allow texture to be NULL. --- src/dusk/display/shader/shader.c | 1 - src/duskgl/display/displaygl.c | 3 --- src/duskgl/display/mesh/meshgl.c | 8 +++--- src/duskgl/display/shader/shadergl.c | 39 ++++++++++++---------------- src/dusksdl2/display/displaysdl2.c | 1 + 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/dusk/display/shader/shader.c b/src/dusk/display/shader/shader.c index 2d36f95..ace2c9e 100644 --- a/src/dusk/display/shader/shader.c +++ b/src/dusk/display/shader/shader.c @@ -39,7 +39,6 @@ errorret_t shaderSetTexture( ) { assertNotNull(shader, "Shader cannot be null"); assertStrLenMin(name, 1, "Uniform name cannot be empty"); - assertNotNull(texture, "Texture cannot be null"); errorChain(shaderSetTexturePlatform(shader, name, texture)); errorOk(); } diff --git a/src/duskgl/display/displaygl.c b/src/duskgl/display/displaygl.c index cec37a0..c70ea39 100644 --- a/src/duskgl/display/displaygl.c +++ b/src/duskgl/display/displaygl.c @@ -33,9 +33,6 @@ errorret_t displayOpenGLInit(void) { errorChain(errorGLCheck()); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); errorChain(errorGLCheck()); - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); - glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); errorOk(); } \ No newline at end of file diff --git a/src/duskgl/display/mesh/meshgl.c b/src/duskgl/display/mesh/meshgl.c index b325a73..5a0c147 100644 --- a/src/duskgl/display/mesh/meshgl.c +++ b/src/duskgl/display/mesh/meshgl.c @@ -141,13 +141,13 @@ errorret_t meshDrawGL( MESH_VERTEX_UV_SIZE, GL_FLOAT, stride, - (const GLvoid*)&mesh->vertices[offset].uv + (const GLvoid*)&mesh->vertices[offset].uv[0] ); glVertexPointer( MESH_VERTEX_POS_SIZE, GL_FLOAT, stride, - (const GLvoid*)&mesh->vertices[offset].pos + (const GLvoid*)&mesh->vertices[offset].pos[0] ); // Shader may have model matrix here @@ -155,7 +155,8 @@ errorret_t meshDrawGL( errorChain(shaderLegacyMatrixUpdate()); #endif - glDrawArrays(mesh->primitiveType, offset, count); + // glDrawArrays(mesh->primitiveType, offset, count); + glDrawArrays(mesh->primitiveType, 0, count); errorChain(errorGLCheck()); #else // Modern VAO/VBO rendering @@ -183,5 +184,6 @@ errorret_t meshDisposeGL(meshgl_t *mesh) { glDeleteVertexArrays(1, &mesh->vaoId); errorChain(errorGLCheck()); #endif + errorOk(); } \ No newline at end of file diff --git a/src/duskgl/display/shader/shadergl.c b/src/duskgl/display/shader/shadergl.c index e7fa82a..8d0691f 100644 --- a/src/duskgl/display/shader/shadergl.c +++ b/src/duskgl/display/shader/shadergl.c @@ -209,15 +209,31 @@ errorret_t shaderSetTextureGL( texture_t *texture ) { assertNotNull(shader, "Shader cannot be null"); - assertNotNull(texture, "Texture cannot be null"); assertStrLenMin(name, 1, "Uniform name cannot be empty"); #ifdef DUSK_OPENGL_LEGACY + if(texture == NULL) { + glDisable(GL_TEXTURE_2D); + errorChain(errorGLCheck()); + errorOk(); + } + glEnable(GL_TEXTURE_2D); + errorChain(errorGLCheck()); glBindTexture(GL_TEXTURE_2D, texture->id); + errorChain(errorGLCheck()); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + errorChain(errorGLCheck()); #else + if(texture == NULL) { + glActiveTexture(GL_TEXTURE0); + errorChain(errorGLCheck()); + glBindTexture(GL_TEXTURE_2D, 0); + errorChain(errorGLCheck()); + errorOk(); + } + GLint location; errorChain(shaderParamGetLocationGL(shader, name, &location)); @@ -253,27 +269,6 @@ errorret_t shaderSetTextureGL( errorOk(); } -// errorret_t shaderSetColorGL( -// shadergl_t *shader, -// const char_t *name, -// color_t color -// ) { -// assertNotNull(shader, "Shader cannot be null"); -// assertStrLenMin(name, 1, "Uniform name cannot be empty"); - -// #ifdef DUSK_OPENGL_LEGACY -// assertUnreachable("Cannot set colors on legacy opengl."); -// #else -// GLint location; -// errorChain(shaderParamGetLocationGL(shader, name, &location)); - -// glUniform4f(location, color.r, color.g, color.b, color.a); -// errorChain(errorGLCheck()); -// #endif - -// errorOk(); -// } - errorret_t shaderBindGL(shadergl_t *shader) { #ifdef DUSK_OPENGL_LEGACY assertNotNull(shader, "Cannot bind a null shader."); diff --git a/src/dusksdl2/display/displaysdl2.c b/src/dusksdl2/display/displaysdl2.c index cd68331..e5d4586 100644 --- a/src/dusksdl2/display/displaysdl2.c +++ b/src/dusksdl2/display/displaysdl2.c @@ -52,6 +52,7 @@ errorret_t displaySDL2Init(void) { errorChain(errorGLCheck()); SDL_GL_SetSwapInterval(1); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); errorChain(errorGLCheck()); errorChain(displayOpenGLInit());