1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
module rsgl;
alias Renderer = void;
alias RenderPass = void;
alias TextureBlob = void;
alias Framebuffer = usz;
alias Texture = usz;
enum BufferType
{
ARRAY_BUFFER,
ELEMENT_ARRAY_BUFFER,
SHADER_STORAGE_BUFFER,
TEXTURE_BUFFER,
UNIFORM_BUFFER,
}
struct ProgramBlob
{
ZString vertex;
usz vertexLen;
ZString fragment;
usz fragmentLen;
}
struct ProgramInfo
{
usz program;
usz perspectiveView;
usz model;
usz vertexPosition;
usz vertexTexCoord;
usz vertexColor;
}
alias RendererProc_size = fn usz ();
alias RendererProc_defaultBlob = fn ProgramBlob (void*);
alias RendererProc_initPtr = fn void (void*, void*);
alias RendererProc_freePtr = fn void (void*);
alias RendererProc_render = fn void (void*, RenderPass*);
alias RendererProc_clear = fn void (void*, Framebuffer, float, float, float, float);
alias RendererProc_viewport = fn void (void*, int, int, int, int);
alias RendererProc_setSurface = fn void (void*, void*);
alias RendererProc_createTexture = fn Texture (void*, TextureBlob*);
alias RendererProc_copyToTexture = fn void (void*, Texture, usz, usz, TextureBlob*);
alias RendererProc_deleteTexture = fn void (void*, Texture);
alias RendererProc_scissorStart = fn void (void*, float, float, float, float, float);
alias RendererProc_scissorEnd = fn void (void*);
alias RendererProc_createProgram = fn ProgramInfo (void*, ProgramBlob*);
alias RendererProc_deleteProgram = fn void (void*, ProgramInfo*);
alias RendererProc_findShaderVariable = fn usz (void*, ProgramInfo*, ZString, usz);
alias RendererProc_updateShaderVariable = fn void (void*, ProgramInfo*, usz, float*, char);
alias RendererProc_createComputeProgram = fn ProgramInfo (void*, ZString);
alias RendererProc_dispatchComputeProgram = fn void (void*, ProgramInfo*, uint, uint, uint);
alias RendererProc_bindComputeTexture = fn void (void*, uint, char);
alias RendererProc_createBuffer = fn void (void*, BufferType, usz, void*, usz*);
alias RendererProc_updateBuffer = fn void (void*, BufferType, usz, void*, usz, usz);
alias RendererProc_deleteBuffer = fn void (void*, usz);
alias RendererProc_createFramebuffer = fn Framebuffer (void*, usz, usz);
alias RendererProc_attachFramebuffer = fn void (void*, Framebuffer, Texture, char, char);
alias RendererProc_deleteFramebuffer = fn void (void*, Framebuffer);
struct RendererProc
{
RendererProc_size size;
RendererProc_defaultBlob defaultBlob;
RendererProc_initPtr initPtr;
RendererProc_freePtr freePtr;
RendererProc_render render;
RendererProc_clear clear;
RendererProc_viewport viewport;
RendererProc_setSurface setSurface;
RendererProc_createTexture createTexture;
RendererProc_copyToTexture copyToTexture;
RendererProc_deleteTexture deleteTexture;
RendererProc_scissorStart scissorStart;
RendererProc_scissorEnd scissorEnd;
RendererProc_createProgram createProgram;
RendererProc_deleteProgram deleteProgram;
RendererProc_findShaderVariable findShaderVariable;
RendererProc_updateShaderVariable updateShaderVariable;
RendererProc_createComputeProgram createComputeProgram;
RendererProc_dispatchComputeProgram dispatchComputeProgram;
RendererProc_bindComputeTexture bindComputeTexture;
RendererProc_createBuffer createBuffer;
RendererProc_updateBuffer updateBuffer;
RendererProc_deleteBuffer deleteBuffer;
RendererProc_createFramebuffer createFramebuffer;
RendererProc_attachFramebuffer attachFramebuffer;
RendererProc_deleteFramebuffer deleteFramebuffer;
}
extern fn Renderer* renderer_init(RendererProc, void*) @cname("RSGL_renderer_init");
extern fn RendererProc gl_rendererProc() @cname("RSGL_GL_rendererProc");
|