diff options
Diffstat (limited to 'archive/src/render/immdraw.h')
-rw-r--r-- | archive/src/render/immdraw.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/archive/src/render/immdraw.h b/archive/src/render/immdraw.h new file mode 100644 index 0000000..2911350 --- /dev/null +++ b/archive/src/render/immdraw.h @@ -0,0 +1,63 @@ +/** + * @brief Immediate-mode drawing APIs + */ + +#pragma once +#include "defines.h" +#include "maths_types.h" +#include "ral_impl.h" +#include "ral_types.h" +#include "render_types.h" + +typedef struct Immdraw_Storage { + Mesh plane; + Mesh cube; + Mesh sphere; + Mesh cylinder; + Mesh cone; + Mesh bbox; + GPU_Pipeline* colour_pipeline; /** @brief Pipeline for drawing geometry that has vertex colours */ +} Immdraw_Storage; + +typedef struct ImmediateUniforms { + Mat4 model; + Vec4 colour; +} ImmediateUniforms; + +// --- Public API + +PUB void Immdraw_Init(Immdraw_Storage* storage); +PUB void Immdraw_Shutdown(Immdraw_Storage* storage); + +// These functions cause a pipeline switch and so aren't optimised for performance +PUB void Immdraw_Plane(Transform tf, Vec4 colour, bool wireframe); +PUB void Immdraw_Cuboid(Transform tf, Vec4 colour, bool wireframe); +PUB void Immdraw_Cylinder(Transform tf, Vec4 colour, bool wireframe); +PUB void Immdraw_Cone(Transform tf, Vec4 colour, bool wireframe); +PUB void Immdraw_Sphere(Transform tf, Vec4 colour, bool wireframe); +PUB void Immdraw_Bbox(Transform tf, Vec4 colour, bool wireframe); + +PUB void Immdraw_TransformGizmo(Transform tf, f32 size); + +// --- Internal + +void Immdraw_Primitive(Transform tf, PrimitiveTopology topology, f32 size, Vec4 colour, + bool wireframe, Mesh mesh); + +Mesh GenBboxMesh(); + +static ShaderDataLayout ImmediateUniforms_GetLayout(void* data) { + ImmediateUniforms* d = (ImmediateUniforms*)data; + bool has_data = data != NULL; + + ShaderBinding b1 = { .label = "ImmUniforms", + .kind = BINDING_BYTES, + // .vis = VISIBILITY_VERTEX, + .data.bytes.size = sizeof(ImmediateUniforms) }; + + if (has_data) { + b1.data.bytes.data = d; + } + + return (ShaderDataLayout){ .bindings = { b1 }, .binding_count = 1 }; +} |