#include "video.hpp" extern "C" { #include "qstd/memory.h" #include "qstd/plat.h" } Pipeline_Builder::Pipeline_Builder(Arena* arena): arena(arena) {} void Pipeline_Builder::begin_rp() { pass = (Render_Pass*)arena_alloc(arena, sizeof *pass); pass->target = 0; pass->clear = { 0, 0, 0, 0 }; } void Pipeline_Builder::rp_target(Texture_Id id, Colour clear) { pass->target = id; pass->clear = clear; } void Pipeline_Builder::validate_rp() { assert(pass->target); } Render_Pass& Pipeline_Builder::build_rp() { validate_rp(); return *pass; } void Pipeline_Builder::begin() { pip = (Pipeline*)arena_alloc(arena, sizeof *pip); pip->vertex_format = 0; pip->shader = 0; pip->descriptors = 0; } void Pipeline_Builder::shader(Shader_Id s) { pip->shader = s; } void Pipeline_Builder::texture( int binding, Texture_Id t, Sampler_Id s ) { Texture_Descriptor* d = (Texture_Descriptor*)arena_alloc( arena, sizeof *d ); d->slot = binding; d->type = Descriptor::Type::texture; d->sampler = s; d->texture = t; d->next = pip->descriptors; pip->descriptors = d; } void Pipeline_Builder::vertex_format(Vertex_Format_Id vf) { pip->vertex_format = vf; } Pipeline& Pipeline_Builder::build() { validate(); return *pip; } void Pipeline_Builder::validate() { assert(pip->vertex_format); assert(pip->shader); }