Added camera, use MVP.

This commit is contained in:
2025-11-29 20:35:11 +01:00
parent bd62b8a528
commit 4cc0c8c73e
4 changed files with 135 additions and 22 deletions

View File

@@ -84,8 +84,6 @@ when RENDER_BACKEND_OPENGL {
opengl_viewport_changed :: proc(renderer: ^Renderer) {
opengl_clear_screen(renderer)
gl.Viewport(
i32(renderer.viewport.x),
i32(renderer.viewport.y),
@@ -103,13 +101,18 @@ when RENDER_BACKEND_OPENGL {
)
}
opengl_clear_screen :: proc(renderer: ^Renderer) {
gl.Clear(gl.COLOR_BUFFER_BIT)
opengl_clear_screen :: proc(renderer: ^Renderer, clear_depth: bool) {
mask := u32(gl.COLOR_BUFFER_BIT)
if clear_depth {
gl.ClearDepth(1.0)
mask |= gl.DEPTH_BUFFER_BIT
}
gl.Clear(mask)
}
opengl_swap_buffers :: proc(renderer: ^Renderer) {
win.SwapBuffers(backend.hdc)
opengl_clear_screen(renderer)
}
opengl_destroy :: proc(renderer: ^Renderer) {
@@ -239,15 +242,23 @@ when RENDER_BACKEND_OPENGL {
gl.DeleteProgram(shader_program.backend.handle)
}
opengl_activate_material :: proc(material: ^Material, transform: linalg.Matrix4x4f32) {
opengl_activate_material :: proc(material: ^Material, model_matrix, view_matrix, projection_matrix: linalg.Matrix4x4f32) {
gl.UseProgram(material.shader_program.backend.handle)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, material.texture.backend.handle)
transform_loc := gl.GetUniformLocation(material.shader_program.backend.handle, "in_transform")
transform_as_f32_array := transmute([16]f32)(transform)
gl.UniformMatrix4fv(transform_loc, 1, false, &transform_as_f32_array[0])
model_matrix_loc := gl.GetUniformLocation(material.shader_program.backend.handle, "in_model_matrix")
model_matrix_as_f32_array := transmute([16]f32)(model_matrix)
gl.UniformMatrix4fv(model_matrix_loc, 1, false, &model_matrix_as_f32_array[0])
view_matrix_loc := gl.GetUniformLocation(material.shader_program.backend.handle, "in_view_matrix")
view_matrix_as_f32_array := transmute([16]f32)(view_matrix)
gl.UniformMatrix4fv(view_matrix_loc, 1, false, &view_matrix_as_f32_array[0])
projection_matrix_loc := gl.GetUniformLocation(material.shader_program.backend.handle, "in_projection_matrix")
projection_matrix_as_f32_array := transmute([16]f32)(projection_matrix)
gl.UniformMatrix4fv(projection_matrix_loc, 1, false, &projection_matrix_as_f32_array[0])
}
opengl_draw_mesh :: proc(mesh: ^Mesh) {
@@ -322,6 +333,15 @@ when RENDER_BACKEND_OPENGL {
}
opengl_delete_texture :: proc(renderer: ^Renderer, t: ^Texture) {
gl.DeleteTextures(1, &t.backend.handle)
}
opengl_enable_depth_testing :: proc(renderer: ^Renderer, enable: bool) {
if enable {
gl.Enable(gl.DEPTH_TEST)
}
else {
gl.Disable(gl.DEPTH_TEST)
}
}
}