This commit is contained in:
tavo 2025-10-30 13:44:24 -06:00
parent 7ed72132b8
commit 7f786be624
2 changed files with 102 additions and 86 deletions

2
external/skr vendored

@ -1 +1 @@
Subproject commit fc862a279f36560a04d21d7193d4851398003901 Subproject commit ede68286df62eaf45a80a8a4f143175252844147

View file

@ -17,116 +17,133 @@ int main(void) {
glewInit(); 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}, 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}, {-1.5f, -2.2f, -2.5f}, {-3.8f, -2.0f, -12.3f},
{2.4f, -0.4f, -3.5f}, {-1.7f, 3.0f, -7.5f}, {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.3f, -2.0f, -2.5f}, {1.5f, 2.0f, -2.5f},
{1.5f, 0.2f, -1.5f}, {-1.3f, 1.0f, -1.5f}}; {1.5f, 0.2f, -1.5f}, {-1.3f, 1.0f, -1.5f}};
SkrMesh mesh = {0}; glEnable(GL_DEPTH_TEST);
glGenVertexArrays(1, &mesh.VAO); #include <main/shaders/camera.frag.c>
glGenBuffers(1, &mesh.VBO); #include <main/shaders/camera.vert.c>
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); GLuint program =
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, m_skr_gl_create_program_from_shaders(shaders, sizeof(shaders));
GL_STATIC_DRAW);
// position attribute SkrShaderProgram programs[1] = {{
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), .ID = program,
(void*)0); .Name = "camera",
glEnableVertexAttribArray(0); .Shaders = shaders,
// texture coord attribute .ShaderCount = sizeof(shaders) / sizeof(SkrShader),
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), }};
(void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
GLuint program = m_skr_gl_create_program_from_shaders( state.Programs = programs;
(SkrShader[]){skr_fps_camera_vert}, 1); state.ProgramCount = sizeof(programs) / sizeof(SkrShaderProgram);
const char* paths[] = {"assets/container.jpg", SkrTexture textures[2] = {
"assets/awesomeface.png"}; {.Path = "assets/container.jpg"},
{.Path = "assets/awesomeface.png"},
};
unsigned int textures[2]; SkrVertex vertices[36] = {{{-0.5f, -0.5f, -0.5f}, {0.0f, 0.0f}},
m_skr_gl_load_textures_2d_from_paths(paths, textures, 2); {{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)) { while (!SkrWindowShouldClose(state.Window)) {
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_skr_gl_mesh_bind_textures(&mesh);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textures[1]);
m_skr_gl_shader_use(program); m_skr_gl_shader_use(program);
// Projection matrix if (g_skr_camera) {
mat4 projection; mat4 projection;
glm_perspective(glm_rad(g_skr_camera->FOV), 800.0f / 600.0f, glm_perspective(glm_rad(g_skr_camera->FOV),
0.1f, 100.0f, projection); (float)state.Window->Width /
m_skr_gl_shader_set_mat4(program, "projection", projection); (float)state.Window->Height,
0.1f, 100.0f, projection);
m_skr_gl_shader_set_mat4(program, "projection",
projection);
// View matrix (camera) mat4 view;
vec3 center; vec3 center;
glm_vec3_add(g_skr_camera->Position, g_skr_camera->Front, glm_vec3_add(g_skr_camera->Position,
center); g_skr_camera->Front, center);
mat4 view; glm_lookat(g_skr_camera->Position, center,
glm_lookat(g_skr_camera->Position, center, g_skr_camera->Up, g_skr_camera->Up, view);
view); m_skr_gl_shader_set_mat4(program, "view", view);
m_skr_gl_shader_set_mat4(program, "view", view); }
// Draw all cubes
glBindVertexArray(mesh.VAO); glBindVertexArray(mesh.VAO);
for (unsigned int i = 0; i < 10; i++) { for (unsigned int i = 0; i < 10; i++) {
mat4 model; mat4 model;
glm_mat4_identity(model); glm_mat4_identity(model); // initialize to identity
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);
// 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); glDrawArrays(GL_TRIANGLES, 0, 36);
} }
@ -134,7 +151,6 @@ int main(void) {
glfwPollEvents(); glfwPollEvents();
} }
m_skr_free_textures_2d(textures, 2);
SkrFinalize(&state); SkrFinalize(&state);
return 0; return 0;
} }