Files
renderer/pipeline.odin
2026-01-31 02:31:19 +01:00

52 lines
1.1 KiB
Odin

package renderer
import "core:mem"
import "core:log"
import "core:fmt"
PIPELINE_MAX_PASSES :: 8
Pipeline :: struct {
passes: [PIPELINE_MAX_PASSES]^Pass,
amount_of_passes: u8,
}
clear_pipeline :: proc(renderer: ^Renderer) {
assert(renderer != nil)
p := &renderer.pipeline
p.amount_of_passes = 0;
mem.set(&p.passes[0], 0, PIPELINE_MAX_PASSES * size_of(^Scene_Pass))
}
set_pipeline :: proc(
renderer: ^Renderer,
passes: []^Pass,
){
assert(renderer != nil)
clear_pipeline(renderer)
for p in passes {
if !add_pass_to_pipeline(renderer, p) {
break
}
}
}
add_pass_to_pipeline :: proc(renderer: ^Renderer, pass: ^Pass) -> bool {
assert(renderer != nil)
assert(pass != nil)
pipeline := &renderer.pipeline
if pipeline.amount_of_passes == PIPELINE_MAX_PASSES {
log.warnf("Failed to add scene-pass '%v' to renderer's pipeline; hit max capacity (%v).", pass.name, PIPELINE_MAX_PASSES)
return false
}
pipeline.passes[pipeline.amount_of_passes] = pass
pipeline.amount_of_passes += 1
return true
}