Update clay rendering to be able to be rendered to a different layer, and at its own position
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
package main
|
||||
|
||||
import clay "../clay"
|
||||
import "../renderer"
|
||||
import "core:c"
|
||||
import "core:fmt"
|
||||
import "core:log"
|
||||
import "core:mem"
|
||||
import "core:os"
|
||||
import clay "library:clay"
|
||||
import sdl "vendor:sdl3"
|
||||
|
||||
WINDOW_WIDTH :: 1024
|
||||
@@ -165,8 +165,43 @@ destroy :: proc() {
|
||||
update :: proc(cmd_buffer: ^sdl.GPUCommandBuffer, delta_time: u64) -> bool {
|
||||
frame_time := f32(delta_time) / 1000.0
|
||||
input := input()
|
||||
render_cmds := layout()
|
||||
renderer.prepare(device, window, cmd_buffer, &render_cmds, input.mouse_delta, frame_time)
|
||||
mouse_x, mouse_y: f32
|
||||
mouse_flags := sdl.GetMouseState(&mouse_x, &mouse_y)
|
||||
width, height: c.int
|
||||
sdl.GetWindowSize(window, &width, &height)
|
||||
|
||||
layer := renderer.begin_prepare()
|
||||
// ===== Begin processing primitives for GPU upload =====
|
||||
// Everything after begin_prepare() is uploaded in-order. We pass the layer down
|
||||
// until we need a new one, after which we call new_layer()
|
||||
|
||||
// Render raw primitive setup
|
||||
//renderer.prepare_batch(device, window, cmd_buffer, &layer, &primitives) //TODO
|
||||
|
||||
clay_layer_bounds := renderer.Rectangle {
|
||||
x = f32(width) / 2.0,
|
||||
y = 0.0,
|
||||
w = f32(width) / 2.0,
|
||||
h = f32(height),
|
||||
}
|
||||
// Create a new layer, because these two scenes cannot be renderer in the same batch due to overlap
|
||||
layer = renderer.new_layer(&layer, clay_layer_bounds)
|
||||
clay_batch := clay_layout(clay_layer_bounds)
|
||||
renderer.prepare_clay_batch(
|
||||
device,
|
||||
window,
|
||||
cmd_buffer,
|
||||
&layer,
|
||||
{mouse_x, mouse_y},
|
||||
mouse_flags,
|
||||
input.mouse_delta,
|
||||
frame_time,
|
||||
&clay_batch,
|
||||
)
|
||||
|
||||
// This uploads the primitive data to the GPU
|
||||
renderer.end_prepare(device, cmd_buffer, &layer)
|
||||
|
||||
return input.should_quit
|
||||
}
|
||||
|
||||
@@ -210,7 +245,8 @@ draw :: proc(cmd_buffer: ^sdl.GPUCommandBuffer) {
|
||||
}
|
||||
}
|
||||
|
||||
layout :: proc() -> clay.ClayArray(clay.RenderCommand) {
|
||||
clay_layout :: proc(bounds: renderer.Rectangle) -> renderer.ClayBatch {
|
||||
clay.SetLayoutDimensions(clay.Dimensions{bounds.w, bounds.h})
|
||||
clay.BeginLayout()
|
||||
|
||||
if clay.UI()(
|
||||
@@ -247,5 +283,5 @@ layout :: proc() -> clay.ClayArray(clay.RenderCommand) {
|
||||
clay.Text("Test Text", &body_text)
|
||||
}
|
||||
|
||||
return clay.EndLayout()
|
||||
return renderer.ClayBatch{bounds, clay.EndLayout()}
|
||||
}
|
||||
|
Reference in New Issue
Block a user