Gears-C/src/renderer.h

103 lines
2.3 KiB
C

#pragma once
// ::Renderer::Declarations::Header::
typedef u16 DescHandle;
// @requirement RenderBuffer type;
// @requirement u32 size;
typedef struct RenderBuffer RenderBuffer;
typedef struct PushConst PushConst;
typedef struct ShaderGlobals ShaderGlobals;
// ::Renderer::Enums::Header::
typedef enum Pipeline_e
{
PIPELINE_CUBE,
PIPELINE_GUI,
PIPELINE_MAX,
} PipelineHandle;
typedef enum PipelineType_e
{
PIPELINE_TYPE_GRAPHICS = 0,
PIPELINE_TYPE_COMPUTE = 1,
} PipelineType;
typedef enum RenderBufferType_e
{
RENDER_BUFFER_TYPE_NONE = 0x0000,
RENDER_BUFFER_TYPE_VERTEX = 0x001,
RENDER_BUFFER_TYPE_INDEX = 0x002,
RENDER_BUFFER_TYPE_UNIFORM = 0x004,
RENDER_BUFFER_TYPE_STAGING = 0x008,
RENDER_BUFFER_TYPE_STORAGE = 0x010,
} RenderBufferType;
typedef enum VertexAttrType_e
{
VERTEX_ATTRIBUTE_TYPE_VERTEX = 0,
VERTEX_ATTRIBUTE_TYPE_COLOR = 1,
} VertexAttrType;
// ::Renderer::Types::Header::
typedef struct RenderBuffers
{
RenderBuffer *buffers;
u32 len;
} RenderBuffers;
// ::Renderer::Initialization::Header::
b32 InitRenderer(Arena *arena);
void DestroyRenderer();
// ::Renderer::Buffers::Header::
static b32 CreateBuffer(RenderBuffer *buffer);
static void FreeBuffers(RenderBuffer *buffers, u32 buffer_count);
static b32 UploadToBuffer(RenderBuffer **buffer, rawptr *ptr, u32 count, u8 thr_ix);
static void CreateAndUploadToBuffer(RenderBuffer *buffer, rawptr ptr);
static void BindVertexBuffer(RenderBuffer *buffer);
static void BindIndexBuffer(RenderBuffer *buffer);
// ::Renderer::Uniforms::Header::
// ::Renderer::PushConstants::Header::
static void GetViewportSize(Vec2 *size);
static void SetGlobalUniform(ShaderGlobals *globals);
static void SetPushConstants(PushConst *pc);
// ::Renderer::Config::Header::
static void SetRenderResolution(u32 x, u32 y);
static void SetRendererAvailableThreads(u32 n);
// ::Renderer::Rendering::Header::
static b32 BeginFrame();
static b32 FinishFrame();
static void DrawIndexed(u32 index_count, u32 instance_count);
static void BindPipeline(PipelineHandle handle, PipelineType type);
// ::Renderer::Includes::Header::
#if STG_VULKAN_RENDERER
#include "renderer_vulkan.h"
#endif
#if STG_OPENGL_RENDERER
#error Not yet implemented
#endif
#if STG_WEBGL_RENDERER
#error Not yet implemented
#endif
#if STG_DX11_RENDERER && __linux__
#include "renderer_d3d11.h"
#endif