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

View file

@ -509,6 +509,8 @@ typedef struct SkrState {
} Backend;
} SkrState;
static bool m_skr_renderer_initialized = false;
/**
* @internal
* @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);
}
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
* @brief GLFW check if a GLFW window should close.
*/
static inline int m_skr_gl_glfw_should_close(SkrWindow* w) {
return glfwWindowShouldClose(w->Backend.Handler.GLFW);
static inline int m_skr_gl_glfw_should_close(SkrState* s) {
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;
}
static inline int SkrWindowShouldClose(SkrWindow* w) {
static inline int SkrShouldClose(SkrState* s) {
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;
@ -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)
return;
@ -1251,6 +1272,11 @@ static inline void SkrRendererRender(SkrState* s) {
if (!s || !s->Window)
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 (s->Backend.GL) {
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 const char* triangle_vert =
"#version 330 core\n"