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");