Letterbox, maintain render-resolution's aspect ratio
This commit is contained in:
@@ -90,21 +90,23 @@ when RENDER_BACKEND_OPENGL {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
opengl_viewport_changed :: proc(renderer: ^Renderer) {
|
||||
@(private) opengl_apply_renderer_viewport :: proc(renderer: ^Renderer) {
|
||||
gl.Viewport(
|
||||
i32(renderer.viewport.x), i32(renderer.viewport.y),
|
||||
i32(renderer.viewport.width), i32(renderer.viewport.height)
|
||||
i32(renderer.viewport.res.width), i32(renderer.viewport.res.height)
|
||||
)
|
||||
}
|
||||
|
||||
opengl_viewport_changed :: proc(renderer: ^Renderer) {
|
||||
opengl_apply_renderer_viewport(renderer)
|
||||
}
|
||||
|
||||
opengl_set_vsync :: proc(renderer: ^Renderer, on: bool) -> bool {
|
||||
if win.wglSwapIntervalEXT == nil {
|
||||
fmt.printfln("'wglSwapIntervalEXT' is nil.")
|
||||
return false
|
||||
}
|
||||
|
||||
// Kommer inte in hit.
|
||||
win.wglSwapIntervalEXT(on ? 1 : 0)
|
||||
|
||||
return true
|
||||
@@ -121,7 +123,17 @@ when RENDER_BACKEND_OPENGL {
|
||||
gl.ClearColor(r, g, b, a)
|
||||
}
|
||||
|
||||
opengl_clear_screen :: proc(renderer: ^Renderer, clear_color: bool, clear_depth: bool) {
|
||||
opengl_clear_screen :: proc(renderer: ^Renderer, clear_color, clear_depth, scissor: bool) {
|
||||
if scissor {
|
||||
gl.Enable(gl.SCISSOR_TEST)
|
||||
gl.Scissor(
|
||||
i32(renderer.viewport.x),
|
||||
i32(renderer.viewport.y),
|
||||
i32(renderer.viewport.res.width),
|
||||
i32(renderer.viewport.res.height)
|
||||
)
|
||||
}
|
||||
|
||||
flags := u32(0)
|
||||
if clear_color {
|
||||
flags |= gl.COLOR_BUFFER_BIT
|
||||
@@ -130,6 +142,10 @@ when RENDER_BACKEND_OPENGL {
|
||||
flags |= gl.DEPTH_BUFFER_BIT
|
||||
}
|
||||
gl.Clear(flags)
|
||||
|
||||
if scissor {
|
||||
gl.Disable(gl.SCISSOR_TEST)
|
||||
}
|
||||
}
|
||||
|
||||
opengl_swap_buffers :: proc(renderer: ^Renderer) {
|
||||
@@ -208,6 +224,18 @@ when RENDER_BACKEND_OPENGL {
|
||||
return m, true
|
||||
}
|
||||
|
||||
opengl_delete_mesh :: proc(renderer: ^Renderer, mesh: ^Mesh) {
|
||||
if mesh == nil { return }
|
||||
|
||||
gl.DeleteBuffers(1, &mesh.backend.vbo)
|
||||
gl.DeleteBuffers(1, &mesh.backend.ebo)
|
||||
gl.DeleteVertexArrays(1, &mesh.backend.vao)
|
||||
|
||||
mesh.backend.vbo = 0
|
||||
mesh.backend.ebo = 0
|
||||
mesh.backend.vao = 0
|
||||
}
|
||||
|
||||
opengl_create_shader :: proc(renderer: ^Renderer, type: Shader_Type, path: string, data: []u8) -> (Shader_OpenGL, bool) {
|
||||
handle: u32
|
||||
|
||||
@@ -544,12 +572,7 @@ when RENDER_BACKEND_OPENGL {
|
||||
if rt == nil {
|
||||
gl.BindFramebuffer(gl.FRAMEBUFFER, 0)
|
||||
|
||||
gl.Viewport(
|
||||
0,
|
||||
0,
|
||||
i32(renderer.viewport.width),
|
||||
i32(renderer.viewport.height),
|
||||
)
|
||||
opengl_apply_renderer_viewport(renderer)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user