Add proper layering support and support for non-clay layouts
This commit is contained in:
@@ -24,8 +24,6 @@ body_text := clay.TextElementConfig {
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
defer destroy()
|
||||
|
||||
when ODIN_DEBUG == true {
|
||||
context.logger = log.create_console_logger(lowest = .Debug)
|
||||
|
||||
@@ -153,9 +151,12 @@ main :: proc() {
|
||||
|
||||
last_frame_time = frame_time
|
||||
}
|
||||
|
||||
destroy()
|
||||
}
|
||||
|
||||
destroy :: proc() {
|
||||
free_all(context.temp_allocator)
|
||||
renderer.destroy(device)
|
||||
sdl.ReleaseWindowFromGPUDevice(device, window)
|
||||
sdl.DestroyWindow(window)
|
||||
@@ -169,15 +170,22 @@ update :: proc(cmd_buffer: ^sdl.GPUCommandBuffer, delta_time: u64) -> bool {
|
||||
mouse_flags := sdl.GetMouseState(&mouse_x, &mouse_y)
|
||||
width, height: c.int
|
||||
sdl.GetWindowSize(window, &width, &height)
|
||||
window_bounds := renderer.Rectangle {
|
||||
x = 0.0,
|
||||
y = 0.0,
|
||||
w = f32(width),
|
||||
h = f32(height),
|
||||
}
|
||||
|
||||
layer := renderer.begin_prepare()
|
||||
layer := renderer.begin_prepare(window_bounds)
|
||||
// ===== 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
|
||||
// Process primitives on this layer
|
||||
layout(layer)
|
||||
|
||||
// Process clay-specific primitives
|
||||
clay_layer_bounds := renderer.Rectangle {
|
||||
x = f32(width) / 2.0,
|
||||
y = 0.0,
|
||||
@@ -185,13 +193,10 @@ update :: proc(cmd_buffer: ^sdl.GPUCommandBuffer, delta_time: u64) -> bool {
|
||||
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)
|
||||
layer = renderer.new_layer(layer, clay_layer_bounds)
|
||||
clay_batch := clay_layout(clay_layer_bounds)
|
||||
renderer.prepare_clay_batch(
|
||||
device,
|
||||
window,
|
||||
cmd_buffer,
|
||||
&layer,
|
||||
layer,
|
||||
{mouse_x, mouse_y},
|
||||
mouse_flags,
|
||||
input.mouse_delta,
|
||||
@@ -200,7 +205,7 @@ update :: proc(cmd_buffer: ^sdl.GPUCommandBuffer, delta_time: u64) -> bool {
|
||||
)
|
||||
|
||||
// This uploads the primitive data to the GPU
|
||||
renderer.end_prepare(device, cmd_buffer, &layer)
|
||||
renderer.end_prepare(device, cmd_buffer)
|
||||
|
||||
return input.should_quit
|
||||
}
|
||||
@@ -258,7 +263,7 @@ clay_layout :: proc(bounds: renderer.Rectangle) -> renderer.ClayBatch {
|
||||
childAlignment = {x = .Center, y = .Center},
|
||||
childGap = 32,
|
||||
},
|
||||
backgroundColor = {200.0, 200.0, 200.0, 255.0},
|
||||
backgroundColor = {200.0, 200.0, 200.0, 100.0},
|
||||
},
|
||||
) {
|
||||
if clay.UI()(
|
||||
@@ -280,8 +285,42 @@ clay_layout :: proc(bounds: renderer.Rectangle) -> renderer.ClayBatch {
|
||||
) {
|
||||
}
|
||||
|
||||
if clay.UI()(
|
||||
{
|
||||
id = clay.ID("RoundedRect2"),
|
||||
backgroundColor = {255.0, 100.0, 100.0, 255.0},
|
||||
cornerRadius = clay.CornerRadius {
|
||||
topLeft = 10,
|
||||
topRight = 20,
|
||||
bottomLeft = 40,
|
||||
bottomRight = 0,
|
||||
},
|
||||
border = clay.BorderElementConfig {
|
||||
color = {0.0, 0.0, 0.0, 255.0},
|
||||
width = clay.BorderAll(5),
|
||||
},
|
||||
layout = {sizing = {clay.SizingFixed(240), clay.SizingFixed(80)}},
|
||||
},
|
||||
) {
|
||||
}
|
||||
|
||||
clay.Text("Test Text", &body_text)
|
||||
}
|
||||
|
||||
return renderer.ClayBatch{bounds, clay.EndLayout()}
|
||||
}
|
||||
|
||||
layout :: proc(layer: ^renderer.Layer) {
|
||||
bounds := layer.bounds
|
||||
|
||||
test_quad := renderer.quad(
|
||||
pos = {bounds.x + 200, bounds.y + 200},
|
||||
size = {bounds.w / 2.0, bounds.h / 2.0},
|
||||
color = {0.2, 0.2, 0.8, 1},
|
||||
corner_radii = {5, 10, 0, 20},
|
||||
border_color = {0, 0, 0, 1},
|
||||
border_width = 10,
|
||||
)
|
||||
|
||||
renderer.prepare_quad(layer, test_quad)
|
||||
}
|
||||
|
Reference in New Issue
Block a user