Files
renderer/pipeline.odin

53 lines
1.2 KiB
Odin

package renderer
import "core:mem"
import "core:log"
import "core:fmt"
PIPELINE_MAX_PASSES :: 16
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
assert(pipeline.amount_of_passes < PIPELINE_MAX_PASSES)
// 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
}