From 6c3305be10c1649e9e768f849b193b5d27201975 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sat, 1 Mar 2025 22:33:49 -0600 Subject: [PATCH] Fixed flicking on AMD --- src/duskgl/display/render.c | 8 ++++++++ src/duskgl/display/shader/data/transforms.c | 6 +++++- src/duskglfw/display/window.c | 16 ++++++++++++---- src/duskglfw/display/window.h | 4 ++-- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/duskgl/display/render.c b/src/duskgl/display/render.c index 37480f4..c0e266f 100644 --- a/src/duskgl/display/render.c +++ b/src/duskgl/display/render.c @@ -10,17 +10,25 @@ #include "display/scene.h" #include "display/shader/shadermanager.h" #include "display/quad.h" +#include "display/window.h" render_t RENDER; void renderInit() { memset(&RENDER, 0, sizeof(render_t)); + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + assertNoGLError(); shaderManagerInit(); quadInit(); } void renderUpdate() { + glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + assertNoGLError(); + // Update shader stuff shaderManagerUpdate(); diff --git a/src/duskgl/display/shader/data/transforms.c b/src/duskgl/display/shader/data/transforms.c index 9876236..1e35ad2 100644 --- a/src/duskgl/display/shader/data/transforms.c +++ b/src/duskgl/display/shader/data/transforms.c @@ -12,10 +12,14 @@ shaderbuffer_t TRANSFORMS_BUFFER; transformsdata_t TRANSFORMS_DATA; void transformsInit() { + memset(&TRANSFORMS_DATA, 0, sizeof(transformsdata_t)); shaderBufferInit(&TRANSFORMS_BUFFER, sizeof(transformsdata_t)); glm_mat4_identity(TRANSFORMS_DATA.projection); glm_mat4_identity(TRANSFORMS_DATA.view); + + TRANSFORMS_DATA.resolution[0] = WINDOW_WIDTH; + TRANSFORMS_DATA.resolution[1] = WINDOW_HEIGHT; } void transformsUpdate() { @@ -25,7 +29,7 @@ void transformsUpdate() { glm_perspective( glm_rad(45.0f), TRANSFORMS_DATA.resolution[0] / TRANSFORMS_DATA.resolution[1], - 0.1f, + 1.0f, 100.0f, TRANSFORMS_DATA.projection ); diff --git a/src/duskglfw/display/window.c b/src/duskglfw/display/window.c index ecb393f..0493ddb 100644 --- a/src/duskglfw/display/window.c +++ b/src/duskglfw/display/window.c @@ -8,8 +8,8 @@ #include "window.h" GLFWwindow* window; -int32_t WINDOW_WIDTH; -int32_t WINDOW_HEIGHT; +uint32_t WINDOW_WIDTH; +uint32_t WINDOW_HEIGHT; int32_t windowInit() { // Initialize GLFW @@ -29,14 +29,21 @@ int32_t windowInit() { glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); glfwWindowHint(GLFW_MAXIMIZED, GLFW_FALSE); + glfwWindowHint(GLFW_VISIBLE, GLFW_TRUE); + glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE); window = glfwCreateWindow( WINDOW_WIDTH_DEFAULT, WINDOW_HEIGHT_DEFAULT, "Dusk", NULL, NULL ); + + WINDOW_WIDTH = WINDOW_WIDTH_DEFAULT; + WINDOW_HEIGHT = WINDOW_HEIGHT_DEFAULT; + if(!window) { glfwTerminate(); return -2; @@ -44,8 +51,9 @@ int32_t windowInit() { // Make the window's context current glfwMakeContextCurrent(window); + glfwSwapInterval(1); - // Get initial framebuffer size + // Get initial framebuffer sizeglfwCreateWindow glfwGetFramebufferSize(window, &WINDOW_WIDTH, &WINDOW_HEIGHT); // Load OpenGL functions using glad or another loader here if necessary @@ -61,7 +69,7 @@ bool_t windowShouldClose() { void windowUpdate() { glfwSwapBuffers(window); glfwPollEvents(); - + glfwGetFramebufferSize(window, &WINDOW_WIDTH, &WINDOW_HEIGHT); } diff --git a/src/duskglfw/display/window.h b/src/duskglfw/display/window.h index be2722a..e2df8b6 100644 --- a/src/duskglfw/display/window.h +++ b/src/duskglfw/display/window.h @@ -13,8 +13,8 @@ #define WINDOW_HEIGHT_DEFAULT SCREEN_HEIGHT*3 extern GLFWwindow* window; -extern int32_t WINDOW_WIDTH; -extern int32_t WINDOW_HEIGHT; +extern uint32_t WINDOW_WIDTH; +extern uint32_t WINDOW_HEIGHT; /** * Initializes the game render window.