This commit is contained in:
tavo 2025-10-30 22:23:21 -06:00
parent 0e15a6885a
commit 71b06fbb0e
2 changed files with 41 additions and 37 deletions

View file

@ -1,7 +1,6 @@
# Empty window # Empty window
```c ```c
#include <stdio.h>
#include <GL/glew.h> #include <GL/glew.h>
#include <GLFW/glfw3.h> #include <GLFW/glfw3.h>
#include <cglm/cglm.h> #include <cglm/cglm.h>
@ -11,29 +10,22 @@
#include <skr/skr.h> #include <skr/skr.h>
int main(void) { int main(void) {
SkrState state = SkrInit(&(SkrWindow){ SkrState state = SkrInit(
.Title = "Hello SKR", &(SkrWindow){
.Width = 800, .Title = "Hello SKR",
.Height = 600, .Width = 800,
}); .Height = 600,
},
SKR_BACKEND_API_GL);
if (!SKR_OK) { glewInit();
fprintf(stderr, "Failed to init window: %s\n", SKR_LAST_ERROR);
return 1;
}
if (glewInit() != GLEW_OK) { SkrTriangle(&state);
fprintf(stderr, "Failed to init GLEW\n");
return 1;
}
// SkrTriangle(&state); while (!SkrShouldClose(&state)) {
while (!SkrWindowShouldClose(state.Window)) {
SkrRendererRender(&state); SkrRendererRender(&state);
} }
SkrFinalize(&state);
return 0; return 0;
} }
``` ```

View file

@ -509,6 +509,8 @@ typedef struct SkrState {
} Backend; } Backend;
} SkrState; } SkrState;
static bool m_skr_renderer_initialized = false;
/** /**
* @internal * @internal
* @brief Set the last error message with source metadata. * @brief Set the last error message with source metadata.
@ -1048,12 +1050,31 @@ static inline void m_skr_gl_renderer_finalize(SkrState* s) {
glUseProgram(0); glUseProgram(0);
} }
static inline void m_skr_renderer_finalize(SkrState* s) {
if (s->Backend.GL) {
m_skr_gl_renderer_finalize(s);
if (s->Window->Backend.Type == SKR_BACKEND_WINDOW_GLFW) {
glfwTerminate();
}
}
s->Models = NULL;
s->ModelCount = 0;
s->Window = NULL;
}
/** /**
* @internal * @internal
* @brief GLFW check if a GLFW window should close. * @brief GLFW check if a GLFW window should close.
*/ */
static inline int m_skr_gl_glfw_should_close(SkrWindow* w) { static inline int m_skr_gl_glfw_should_close(SkrState* s) {
return glfwWindowShouldClose(w->Backend.Handler.GLFW); if (glfwWindowShouldClose(s->Window->Backend.Handler.GLFW)) {
m_skr_renderer_finalize(s);
return 1;
}
return 0;
} }
/** /**
@ -1177,9 +1198,9 @@ static inline SkrState SkrInit(SkrWindow* w, int backend) {
return s; return s;
} }
static inline int SkrWindowShouldClose(SkrWindow* w) { static inline int SkrShouldClose(SkrState* s) {
if (SKR_BACKEND_WINDOW == SKR_BACKEND_WINDOW_GLFW) { if (SKR_BACKEND_WINDOW == SKR_BACKEND_WINDOW_GLFW) {
return m_skr_gl_glfw_should_close(w); return m_skr_gl_glfw_should_close(s);
} }
return 0; return 0;
@ -1239,7 +1260,7 @@ static inline void m_skr_gl_renderer_init(SkrState* s) {
} }
} }
static inline void SkrRendererInit(SkrState* s) { static inline void m_skr_renderer_init(SkrState* s) {
if (!s) if (!s)
return; return;
@ -1251,6 +1272,11 @@ static inline void SkrRendererRender(SkrState* s) {
if (!s || !s->Window) if (!s || !s->Window)
return; return;
if (!m_skr_renderer_initialized) {
m_skr_gl_renderer_init(s);
m_skr_renderer_initialized = true;
}
if (SKR_BACKEND_WINDOW == SKR_BACKEND_WINDOW_GLFW) { if (SKR_BACKEND_WINDOW == SKR_BACKEND_WINDOW_GLFW) {
if (s->Backend.GL) { if (s->Backend.GL) {
m_skr_gl_glfw_renderer_render(s); m_skr_gl_glfw_renderer_render(s);
@ -1258,20 +1284,6 @@ static inline void SkrRendererRender(SkrState* s) {
} }
} }
static inline void SkrFinalize(SkrState* s) {
if (s->Backend.GL) {
m_skr_gl_renderer_finalize(s);
if (s->Window->Backend.Type == SKR_BACKEND_WINDOW_GLFW) {
glfwTerminate();
}
}
s->Models = NULL;
s->ModelCount = 0;
s->Window = NULL;
}
static inline void m_skr_gl_triangle(SkrState* s) { static inline void m_skr_gl_triangle(SkrState* s) {
static const char* triangle_vert = static const char* triangle_vert =
"#version 330 core\n" "#version 330 core\n"