diff --git a/cmake/targets/linux.cmake b/cmake/targets/linux.cmake index 40723585..e83e87a4 100644 --- a/cmake/targets/linux.cmake +++ b/cmake/targets/linux.cmake @@ -28,7 +28,7 @@ target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC DUSK_SDL2 DUSK_OPENGL - # DUSK_OPENGL_LEGACY + DUSK_OPENGL_LEGACY DUSK_LINUX DUSK_DISPLAY_SIZE_DYNAMIC DUSK_DISPLAY_WIDTH_DEFAULT=640 diff --git a/src/dusk/display/display.c b/src/dusk/display/display.c index ea23d6a3..e66386cb 100644 --- a/src/dusk/display/display.c +++ b/src/dusk/display/display.c @@ -31,6 +31,10 @@ errorret_t displayInit(void) { #ifdef displayPlatformInit errorChain(displayPlatformInit()); #endif + errorChain(textureInit( + &TEXTURE_WHITE, 4, 4, + TEXTURE_FORMAT_RGBA, (texturedata_t){ .rgbaColors = TEXTURE_WHITE_PIXELS } + )); errorChain(quadInit()); errorChain(cubeInit()); errorChain(frameBufferInitBackBuffer()); diff --git a/src/dusk/display/texture/texture.c b/src/dusk/display/texture/texture.c index 99b2894c..ce58713d 100644 --- a/src/dusk/display/texture/texture.c +++ b/src/dusk/display/texture/texture.c @@ -11,6 +11,14 @@ #include "util/math.h" #include "display/display.h" +texture_t TEXTURE_WHITE; +color_t TEXTURE_WHITE_PIXELS[4*4] = { + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, + COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, COLOR_WHITE, +}; + errorret_t textureInit( texture_t *texture, const int32_t width, diff --git a/src/dusk/display/texture/texture.h b/src/dusk/display/texture/texture.h index cb6f2020..4c775e2d 100644 --- a/src/dusk/display/texture/texture.h +++ b/src/dusk/display/texture/texture.h @@ -28,6 +28,9 @@ typedef union texturedata_u { color_t *rgbaColors; } texturedata_t; +extern texture_t TEXTURE_WHITE; +extern color_t TEXTURE_WHITE_PIXELS[4*4]; + /** * Initializes a texture. * diff --git a/src/dusk/engine/engine.c b/src/dusk/engine/engine.c index 1155a8c7..26deff65 100644 --- a/src/dusk/engine/engine.c +++ b/src/dusk/engine/engine.c @@ -82,7 +82,7 @@ errorret_t engineInit(const int32_t argc, const char_t **argv) { )); shadermaterial_t *mat = entityMaterialGetShaderMaterial(ent1, ent1Mat); - mat->unlit.color = COLOR_WHITE; + mat->unlit.color = COLOR_BLACK; mat->unlit.texture = &TEXTURE; // EOF @@ -102,7 +102,11 @@ errorret_t engineUpdate(void) { vec3 rotation; entityPositionGetRotation(ent1, ent1Pos, rotation); - rotation[1] += 0.01f; + #if DUSK_TIME_DYNAMIC + rotation[1] += 2.0f * TIME.dynamicDelta; + #else + rotation[1] += 2.0f * TIME.delta; + #endif entityPositionSetRotation(ent1, ent1Pos, rotation); uiUpdate(); diff --git a/src/duskgl/display/mesh/meshgl.c b/src/duskgl/display/mesh/meshgl.c index ffe6f9a9..df137a94 100644 --- a/src/duskgl/display/mesh/meshgl.c +++ b/src/duskgl/display/mesh/meshgl.c @@ -153,11 +153,7 @@ errorret_t meshDrawGL( ); // Shader may have model matrix here - #ifdef DUSK_OPENGL_LEGACY - errorChain(shaderLegacyMatrixUpdate()); - #endif - - // glDrawArrays(mesh->primitiveType, offset, count); + errorChain(shaderLegacyMatrixUpdate()); glDrawArrays(mesh->primitiveType, 0, count); errorChain(errorGLCheck()); #else diff --git a/src/duskgl/display/shader/shadergl.c b/src/duskgl/display/shader/shadergl.c index 65a55fe2..54d560a0 100644 --- a/src/duskgl/display/shader/shadergl.c +++ b/src/duskgl/display/shader/shadergl.c @@ -223,6 +223,9 @@ errorret_t shaderSetTextureGL( "Only one texture supported in legacy opengl." ); + // glActiveTexture(GL_TEXTURE0); + errorChain(errorGLCheck()); + if(texture == NULL) { glDisable(GL_TEXTURE_2D); errorChain(errorGLCheck()); @@ -233,9 +236,23 @@ errorret_t shaderSetTextureGL( errorChain(errorGLCheck()); glBindTexture(GL_TEXTURE_2D, texture->id); errorChain(errorGLCheck()); + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); + // errorChain(errorGLCheck()); + #else assertNotNull(shader->definition, "Shader definition cannot be null"); assertNotNull(shader->definition->setTexture, "Shader cannot do textures."); @@ -254,8 +271,46 @@ errorret_t shaderSetColorGL( assertStrLenMin(name, 1, "Uniform name cannot be empty"); #ifdef DUSK_OPENGL_LEGACY - glColor4ub(color.r, color.g, color.b, color.a); - errorChain(errorGLCheck()); + // if(color.a == 0) { + // glDisable(GL_TEXTURE_2D); + // errorChain(errorGLCheck()); + // errorOk(); + // } + + // glActiveTexture(GL_TEXTURE1); + // errorChain(errorGLCheck()); + + // if(color.r == 255 && color.g == 255 && color.b == 255) { + // glDisable(GL_TEXTURE_2D); + // errorChain(errorGLCheck()); + // errorOk(); + // } + + // glEnable(GL_TEXTURE_2D); + // errorChain(errorGLCheck()); + // glBindTexture(GL_TEXTURE_2D, TEXTURE_WHITE.id); + // errorChain(errorGLCheck()); + + // GLfloat tint[4] = { + // ((float_t)color.r) / 255.0f, + // ((float_t)color.g) / 255.0f, + // ((float_t)color.b) / 255.0f, + // ((float_t)color.a) / 255.0f + // }; + // glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, tint); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT); + // errorChain(errorGLCheck()); + // glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); + // errorChain(errorGLCheck()); #else GLint location; errorChain(shaderParamGetLocationGL(shader, name, &location)); diff --git a/src/duskgl/display/shader/shadergl.h b/src/duskgl/display/shader/shadergl.h index b1e0db27..bc1d0a65 100644 --- a/src/duskgl/display/shader/shadergl.h +++ b/src/duskgl/display/shader/shadergl.h @@ -22,7 +22,6 @@ typedef struct { errorret_t (*setMaterial)(shadergl_t *, const shadermaterial_t *); #ifdef DUSK_OPENGL_LEGACY - void *nothing; #else errorret_t (*setTexture)(shadergl_t *, const char_t *, texture_t *); diff --git a/src/duskgl/display/shader/shaderunlitgl.c b/src/duskgl/display/shader/shaderunlitgl.c index b5d009ed..18c4742d 100644 --- a/src/duskgl/display/shader/shaderunlitgl.c +++ b/src/duskgl/display/shader/shaderunlitgl.c @@ -10,8 +10,7 @@ #ifdef DUSK_OPENGL_LEGACY shaderdefinition_t SHADER_UNLIT_DEFINITION = { - .platform = { 0 }, - .upload = shaderUnlitUpload + .setMaterial = shaderUnlitSetMaterial, }; #else errorret_t shaderUnlitSetTextureGL(