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 }