From ffd24338b945ea2adf8a3c9ce217407da980b3a0 Mon Sep 17 00:00:00 2001 From: iamcheeseman <[hidden email]> Date: Fri, 6 Feb 2026 22:24:12 -0500 Subject: Fix many a issue --- src/fw/renderer.odin | 108 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 98 insertions(+), 10 deletions(-) (limited to 'src/fw/renderer.odin') diff --git a/src/fw/renderer.odin b/src/fw/renderer.odin index 082a0d3..72ec3e1 100644 --- a/src/fw/renderer.odin +++ b/src/fw/renderer.odin @@ -6,6 +6,10 @@ import "core:math" import "core:math/linalg" import "core:math/linalg/glsl" +WHITE :: Color{1, 1, 1, 1} +BLACK :: Color{0, 0, 0, 1} +TRANSPARENT :: Color{0, 0, 0, 0} + Index :: u16 Renderer_Backend :: enum { @@ -82,6 +86,8 @@ renderer: struct { projection: Mat4, view: Mat4, + camera_pos: Vec2, + draw_calls_count: i32, _draw_call_counter: i32, @@ -90,7 +96,7 @@ renderer: struct { @(private) _renderer_init :: proc(config: Config) { - renderer.bg_col = Color{0.2, 0.2, 0.2, 1} + renderer.bg_col = BLACK renderer.projection = linalg.matrix_ortho3d(f32(0), 800, 800, 0, 0, 1) renderer.view = linalg.identity(Mat4) @@ -116,6 +122,15 @@ _renderer_deinit :: proc() { } } +set_camera_pos :: proc(pos: Vec2) { + renderer.camera_pos = pos + renderer.view = linalg.matrix4_translate(-Vec3{pos.x, pos.y, 0}) +} + +get_camera_pos :: #force_inline proc() -> Vec2 { + return renderer.camera_pos +} + flush_batch :: proc(draw_call: ^Draw_Call) { renderer.vt.draw(draw_call^) renderer._draw_call_counter += 1 @@ -196,7 +211,7 @@ draw_line :: proc( start: Vec2, end: Vec2, depth: f32 = 0, - color := Color{1, 1, 1, 1}, + color := WHITE, ) { try_batch_calls(renderer.white_1x1.handle, .Lines, true) @@ -212,11 +227,14 @@ draw_line :: proc( _add_index(start_idx, 1) } -draw_rect :: proc( +draw_rect_gradient :: proc( pos: Vec2, size: Vec2, + tl_color: Color, + tr_color: Color, + bl_color: Color, + br_color: Color, depth: f32 = 0, - color := Color{1, 1, 1, 1}, tex := renderer.white_1x1, lines := false, ) { @@ -234,10 +252,10 @@ draw_rect :: proc( pos := linalg.round(pos) - tl := Vertex{{pos.x, pos.y, depth}, {0, 0}, color} - tr := Vertex{{pos.x + size.x, pos.y, depth}, {1, 0}, color} - bl := Vertex{{pos.x, pos.y + size.y, depth}, {0, 1}, color} - br := Vertex{{pos.x + size.x, pos.y + size.y, depth}, {1, 1}, color} + tl := Vertex{{pos.x, pos.y, depth}, {0, 0}, tl_color} + tr := Vertex{{pos.x + size.x, pos.y, depth}, {1, 0}, tr_color} + bl := Vertex{{pos.x, pos.y + size.y, depth}, {0, 1}, bl_color} + br := Vertex{{pos.x + size.x, pos.y + size.y, depth}, {1, 1}, br_color} start := Index(len(renderer.draw_call.vertices)) @@ -271,13 +289,83 @@ draw_rect :: proc( } } +draw_rect :: proc( + pos: Vec2, + size: Vec2, + depth: f32 = 0, + color := WHITE, + tex := renderer.white_1x1, + lines := false, +) { + draw_rect_gradient( + pos, + size, + color, + color, + color, + color, + depth, + tex, + lines, + ) + // try_batch_calls(tex.handle, .Triangles if !lines else .Lines, true) + // + // depth := depth + // + // if depth < -1 || depth > 1 { + // log.warnf( + // "Depth is out of range (%v). It will be clamped to -1..1.", + // depth + // ) + // depth = math.clamp(depth, -1, 1) + // } + // + // pos := linalg.round(pos) + // + // tl := Vertex{{pos.x, pos.y, depth}, {0, 0}, color} + // tr := Vertex{{pos.x + size.x, pos.y, depth}, {1, 0}, color} + // bl := Vertex{{pos.x, pos.y + size.y, depth}, {0, 1}, color} + // br := Vertex{{pos.x + size.x, pos.y + size.y, depth}, {1, 1}, color} + // + // start := Index(len(renderer.draw_call.vertices)) + // + // reserve(&renderer.draw_call.vertices, len(renderer.draw_call.vertices) + 4) + // _add_vertex(tl) + // _add_vertex(tr) + // _add_vertex(bl) + // _add_vertex(br) + // + // + // if lines { + // reserve(&renderer.draw_call.indices, len(renderer.draw_call.indices) + 8) + // + // _add_index(start, 0) + // _add_index(start, 1) + // _add_index(start, 1) + // _add_index(start, 3) + // _add_index(start, 3) + // _add_index(start, 2) + // _add_index(start, 2) + // _add_index(start, 0) + // } else { + // reserve(&renderer.draw_call.indices, len(renderer.draw_call.indices) + 6) + // + // _add_index(start, 0) + // _add_index(start, 1) + // _add_index(start, 2) + // _add_index(start, 2) + // _add_index(start, 1) + // _add_index(start, 3) + // } +} + draw_tex :: proc( tex: Texture, pos: Vec2, depth: f32 = 0, scale := Vec2{1, 1}, offset := Vec2{0, 0}, - color := Color{1, 1, 1, 1} + color := WHITE, ) { draw_rect( pos = pos - offset, @@ -337,7 +425,7 @@ draw_tex_ex :: proc( offset := Vec2{0, 0}, shear := Vec2{0, 0}, rect: Maybe(Rect) = nil, - color := Color{1, 1, 1, 1} + color := WHITE, ) { tex_size := Vec2{f32(tex.size.x), f32(tex.size.y)} rect := rect.? or_else Rect{{0, 0}, tex_size} -- cgit v1.3-2-g0d8e