adding gfx and ui stuff

This commit is contained in:
Daniel Ledda
2026-06-04 18:22:30 +02:00
parent d676c50961
commit 4dfac3f82f
48 changed files with 26734 additions and 3 deletions

102
gfx/render.h Normal file
View File

@@ -0,0 +1,102 @@
#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