Added camera, use MVP.
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user