summaryrefslogtreecommitdiff
path: root/rsgl.c3
diff options
context:
space:
mode:
Diffstat (limited to 'rsgl.c3')
-rw-r--r--rsgl.c395
1 files changed, 95 insertions, 0 deletions
diff --git a/rsgl.c3 b/rsgl.c3
new file mode 100644
index 0000000..08459df
--- /dev/null
+++ b/rsgl.c3
@@ -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");