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