diff options
Diffstat (limited to 'rsgl.c3')
| -rw-r--r-- | rsgl.c3 | 95 |
1 files changed, 95 insertions, 0 deletions
@@ -0,0 +1,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"); |
