From 7f786be6243e1d744f11a43b10db4f447eeac937 Mon Sep 17 00:00:00 2001 From: tavo Date: Thu, 30 Oct 2025 13:44:24 -0600 Subject: [PATCH] updates --- external/skr | 2 +- main/main.c | 186 ++++++++++++++++++++++++++++----------------------- 2 files changed, 102 insertions(+), 86 deletions(-) diff --git a/external/skr b/external/skr index fc862a2..ede6828 160000 --- a/external/skr +++ b/external/skr @@ -1 +1 @@ -Subproject commit fc862a279f36560a04d21d7193d4851398003901 +Subproject commit ede68286df62eaf45a80a8a4f143175252844147 diff --git a/main/main.c b/main/main.c index 1cd1d90..effccfc 100644 --- a/main/main.c +++ b/main/main.c @@ -17,116 +17,133 @@ int main(void) { glewInit(); - SkrCaptureCursor(&state); - - SkrInitCamera(&state, skr_fps_camera_vert); - - float vertices[] = { - -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, - 1.0f, 0.0f, 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.5f, - 0.5f, -0.5f, 1.0f, 1.0f, -0.5f, 0.5f, -0.5f, 0.0f, - 1.0f, -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, - - -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 0.5f, -0.5f, 0.5f, - 1.0f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, - 0.5f, 0.5f, 1.0f, 1.0f, -0.5f, 0.5f, 0.5f, 0.0f, - 1.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, - - -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, -0.5f, 0.5f, -0.5f, - 1.0f, 1.0f, -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, -0.5f, - -0.5f, -0.5f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, 0.0f, - 0.0f, -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, - - 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.5f, 0.5f, -0.5f, - 1.0f, 1.0f, 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.5f, - -0.5f, -0.5f, 0.0f, 1.0f, 0.5f, -0.5f, 0.5f, 0.0f, - 0.0f, 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, - - -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.5f, -0.5f, -0.5f, - 1.0f, 1.0f, 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.5f, - -0.5f, 0.5f, 1.0f, 0.0f, -0.5f, -0.5f, 0.5f, 0.0f, - 0.0f, -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, - - -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.5f, 0.5f, -0.5f, - 1.0f, 1.0f, 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.5f, - 0.5f, 0.5f, 1.0f, 0.0f, -0.5f, 0.5f, 0.5f, 0.0f, - 0.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f}; - - // world space positions of our cubes vec3 cubePositions[] = {{0.0f, 0.0f, 0.0f}, {2.0f, 5.0f, -15.0f}, {-1.5f, -2.2f, -2.5f}, {-3.8f, -2.0f, -12.3f}, {2.4f, -0.4f, -3.5f}, {-1.7f, 3.0f, -7.5f}, {1.3f, -2.0f, -2.5f}, {1.5f, 2.0f, -2.5f}, {1.5f, 0.2f, -1.5f}, {-1.3f, 1.0f, -1.5f}}; - SkrMesh mesh = {0}; + glEnable(GL_DEPTH_TEST); - glGenVertexArrays(1, &mesh.VAO); - glGenBuffers(1, &mesh.VBO); +#include
+#include
- glBindVertexArray(mesh.VAO); + SkrShader shaders[2] = { + {.Type = GL_VERTEX_SHADER, .Source = camera_vert}, + {.Type = GL_FRAGMENT_SHADER, .Source = camera_frag}, + }; - glBindBuffer(GL_ARRAY_BUFFER, mesh.VBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, - GL_STATIC_DRAW); + GLuint program = + m_skr_gl_create_program_from_shaders(shaders, sizeof(shaders)); - // position attribute - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), - (void*)0); - glEnableVertexAttribArray(0); - // texture coord attribute - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), - (void*)(3 * sizeof(float))); - glEnableVertexAttribArray(1); + SkrShaderProgram programs[1] = {{ + .ID = program, + .Name = "camera", + .Shaders = shaders, + .ShaderCount = sizeof(shaders) / sizeof(SkrShader), + }}; - GLuint program = m_skr_gl_create_program_from_shaders( - (SkrShader[]){skr_fps_camera_vert}, 1); + state.Programs = programs; + state.ProgramCount = sizeof(programs) / sizeof(SkrShaderProgram); - const char* paths[] = {"assets/container.jpg", - "assets/awesomeface.png"}; + SkrTexture textures[2] = { + {.Path = "assets/container.jpg"}, + {.Path = "assets/awesomeface.png"}, + }; - unsigned int textures[2]; - m_skr_gl_load_textures_2d_from_paths(paths, textures, 2); + SkrVertex vertices[36] = {{{-0.5f, -0.5f, -0.5f}, {0.0f, 0.0f}}, + {{0.5f, -0.5f, -0.5f}, {1.0f, 0.0f}}, + {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, + {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, + {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}, + {{-0.5f, -0.5f, -0.5f}, {0.0f, 0.0f}}, - glUseProgram(program); + {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, + {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, + {{0.5f, 0.5f, 0.5f}, {1.0f, 1.0f}}, + {{0.5f, 0.5f, 0.5f}, {1.0f, 1.0f}}, + {{-0.5f, 0.5f, 0.5f}, {0.0f, 1.0f}}, + {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, + + {{-0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, + {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, + {{-0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + + {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, + {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + {{0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, + {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + + {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + {{0.5f, -0.5f, -0.5f}, {1.0f, 1.0f}}, + {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, + {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, + {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, + {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, + + {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}, + {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, + {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, + {{-0.5f, 0.5f, 0.5f}, {0.0f, 0.0f}}, + {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}}; + + SkrMesh mesh; + + mesh.Vertices = vertices; + mesh.VertexCount = sizeof(vertices) / sizeof(SkrVertex); + mesh.Textures = textures; + mesh.TextureCount = sizeof(textures) / sizeof(SkrTexture); + mesh.Backend.GL.Program = program; + + m_skr_gl_mesh_init(&mesh); + + m_skr_gl_shader_use(program); + m_skr_gl_shader_set_int(program, "texture1", 0); + m_skr_gl_shader_set_int(program, "texture2", 1); while (!SkrWindowShouldClose(state.Window)) { - glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, textures[0]); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D, textures[1]); - + m_skr_gl_mesh_bind_textures(&mesh); m_skr_gl_shader_use(program); - // Projection matrix - mat4 projection; - glm_perspective(glm_rad(g_skr_camera->FOV), 800.0f / 600.0f, - 0.1f, 100.0f, projection); - m_skr_gl_shader_set_mat4(program, "projection", projection); + if (g_skr_camera) { + mat4 projection; + glm_perspective(glm_rad(g_skr_camera->FOV), + (float)state.Window->Width / + (float)state.Window->Height, + 0.1f, 100.0f, projection); + m_skr_gl_shader_set_mat4(program, "projection", + projection); - // View matrix (camera) - vec3 center; - glm_vec3_add(g_skr_camera->Position, g_skr_camera->Front, - center); - mat4 view; - glm_lookat(g_skr_camera->Position, center, g_skr_camera->Up, - view); - m_skr_gl_shader_set_mat4(program, "view", view); + mat4 view; + vec3 center; + glm_vec3_add(g_skr_camera->Position, + g_skr_camera->Front, center); + glm_lookat(g_skr_camera->Position, center, + g_skr_camera->Up, view); + m_skr_gl_shader_set_mat4(program, "view", view); + } - // Draw all cubes glBindVertexArray(mesh.VAO); for (unsigned int i = 0; i < 10; i++) { mat4 model; - glm_mat4_identity(model); - glm_translate(model, cubePositions[i]); - glm_rotate(model, glm_rad(20.0f * i), - (vec3){1.0f, 0.3f, 0.5f}); - m_skr_gl_shader_set_mat4(program, "model", model); + glm_mat4_identity(model); // initialize to identity + // translate to position + glm_translate(model, cubePositions[i]); + + // rotate by 20*i degrees + glm_rotate(model, glm_rad(20.0f * (float)i), + (vec3){1.0f, 0.3f, 0.5f}); + + m_skr_gl_shader_set_mat4(program, "model", model); glDrawArrays(GL_TRIANGLES, 0, 36); } @@ -134,7 +151,6 @@ int main(void) { glfwPollEvents(); } - m_skr_free_textures_2d(textures, 2); SkrFinalize(&state); return 0; }