103 lines
2.3 KiB
C
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
|