#ifndef DJSTDLIB_GFX_RENDER_H #define DJSTDLIB_GFX_RENDER_H #include "gfx-common.h" #include "Shader.h" #include "Texture.h" #include "Mesh.h" #include "world/world.h" typedef struct RenderObject_BufferInt32 RenderObject_BufferInt32; struct RenderObject_BufferInt32 { IntList buf; uint32 bufId; IntList_underlying underlying; }; typedef struct RenderObject_BufferFloat RenderObject_BufferFloat; struct RenderObject_BufferFloat { FloatList buf; uint32 bufId; FloatList_underlying underlying; }; typedef struct RenderObject_BufferVec2 RenderObject_BufferVec2; struct RenderObject_BufferVec2 { Vec2List buf; uint32 bufId; Vec2List_underlying underlying; }; typedef struct RenderObject_BufferVec4 RenderObject_BufferVec4; struct RenderObject_BufferVec4 { Vec4List buf; uint32 bufId; Vec4List_underlying underlying; }; typedef struct RenderObjects_Rect RenderObjects_Rect; struct RenderObjects_Rect { uint32 vao; uint64 count; RenderObject_BufferVec2 p0; RenderObject_BufferVec2 p1; RenderObject_BufferVec4 color; RenderObject_BufferFloat borderRadius; RenderObject_BufferFloat borderThickness; RenderObject_BufferVec4 borderColor; RenderObject_BufferFloat edgeSoftness; }; typedef struct RenderObjects_Char RenderObjects_Char; struct RenderObjects_Char { uint32 vao; uint64 count; RenderObject_BufferVec2 begin; RenderObject_BufferInt32 glyph; RenderObject_BufferFloat fontSize; RenderObject_BufferVec4 color; }; typedef struct GlyphData GlyphData; struct GlyphData { real32 x0; real32 y0; real32 x1; real32 y1; }; typedef struct Renderer Renderer; struct Renderer { RenderObjects_Rect rects; RenderObjects_Char chars; Shader *phongShader; Shader *solidShader; Shader *textShader; Font *activeFont; int32 width; int32 height; int32 sceneWidth; int32 sceneHeight; int32 sceneX; int32 sceneY; Scene *scene; Camera *camera; /** SceneGraphNode handle */ int32 light; Mesh *cubeMesh; int32 testTexId; }; Renderer createRenderer(Arena *arena, Scene *scene, Camera *cam, int32 light); void renderBegin(Renderer *r); void renderEnd(Renderer *r); void rendererPlaceRectangle(Renderer *r, real32 x, real32 y, real32 width, real32 height, Vec4 color, real32 borderRadius, real32 borderThickness, Vec4 borderColor); void rendererPlaceString(Renderer *r, string s, real32 x, real32 y, Vec4 color, real32 fontSize); #define Render(r) DeferLoop(renderBegin((r)), renderEnd((r))) #endif