diff options
| author | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:35:19 -0400 |
|---|---|---|
| committer | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:35:19 -0400 |
| commit | c9c6170edd5a453aadda779961cc60fb62344561 (patch) | |
| tree | 8f718cfe0d7a6abffc41b3615757f501bc2d72d8 /rsgl.c3l/rsgl.c3 | |
| parent | 5fc4b38c3f93a52a39b47c7c5e6492ec582cf93d (diff) | |
add uefi.c3l, c3fmt
Diffstat (limited to 'rsgl.c3l/rsgl.c3')
| -rw-r--r-- | rsgl.c3l/rsgl.c3 | 690 |
1 files changed, 386 insertions, 304 deletions
diff --git a/rsgl.c3l/rsgl.c3 b/rsgl.c3l/rsgl.c3 index db292e0..dc770b2 100644 --- a/rsgl.c3l/rsgl.c3 +++ b/rsgl.c3l/rsgl.c3 @@ -1,5 +1,4 @@ -/* -* +/** * Copyright (C) 2026 andromeda * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. @@ -7,439 +6,522 @@ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. -* -*/ +**/ module rsgl; -macro @rect(#x,#y,#w,#h) {return (Rect){#x,#y,#w,#h};} -macro @cube(#x,#y,#z,#w,#l,#h) {return (Cube){#x,#y,#z,#w,#l,#h};} -macro @vec2D(#x,#y) {return (Vec2D){#x,#y};} -macro @vec3D(#x,#y,#z) {return (Vec3D){#x,#y,#z};} -macro @triangle(#p1,#p2,#p3) {return (Vec3D[3]){#p1,#p2,#p3};} -macro @createTriangle(#p1x,#p1y,#p1z,#p2x,#p2y,#p2z,#p3x,#p3y,#p3z) {return @triangle(@vec3D(#p1x,#p1y,#p1z),@vec3D(#p2x,#p2y,#p2z),@vec3D(#p3x,#p3y,#p3z));} -macro @rgba(#r,#g,#b,#a) {return (Color){#a,#b,#g,#r};} -macro @rgb(#r,#g,#b) {return (Color){255,#b,#g,#r};} -macro @colorToHex(#color) {return (uint)#color & 0xFFFFFF00;} -macro @rgbToHex(#r,#g,#b) {return @colorToHex(@rgb(#r,#g,#b));} -macro @rgbaToHex(#r,#g,#b,#a) {return @colorToHex(@rgba(#r,#g,#b,#a));} +macro @rect(#x, #y, #w, #h) +{ + return (Rect) { #x, #y, #w, #h }; +} +macro @cube(#x, #y, #z, #w, #l, #h) +{ + return (Cube) { #x, #y, #z, #w, #l, #h }; +} +macro @vec2D(#x, #y) +{ + return (Vec2D) { #x, #y }; +} +macro @vec3D(#x, #y, #z) +{ + return (Vec3D) { #x, #y, #z }; +} +macro @triangle(#p1, #p2, #p3) +{ + return (Vec3D[3]) { #p1, #p2, #p3 }; +} +macro @createTriangle(#p1x, #p1y, #p1z, #p2x, #p2y, #p2z, #p3x, #p3y, #p3z) +{ + return @triangle(@vec3D(#p1x, #p1y, #p1z), @vec3D(#p2x, #p2y, #p2z), @vec3D(#p3x, #p3y, #p3z)); +} +macro @rgba(#r, #g, #b, #a) +{ + return (Color) { #a, #b, #g, #r }; +} +macro @rgb(#r, #g, #b) +{ + return (Color) { 255, #b, #g, #r }; +} +macro @colorToHex(#color) +{ + return (uint)#color & 0xFFFFFF00; +} +macro @rgbToHex(#r, #g, #b) +{ + return @colorToHex(@rgb(#r, #g, #b)); +} +macro @rgbaToHex(#r, #g, #b, #a) +{ + return @colorToHex(@rgba(#r, #g, #b, #a)); +} const int MAX_BATCHES = 2028; const int MAX_VERTS = 8192; constdef TextureFormat { - NONE = 0, - RGB, - BGR, - RGBA, - BGRA, - RED, - GRAYSCALE, - GRAYSCALE_ALPHA, - FORMAT_COUNT, + NONE = 0, + RGB, + BGR, + RGBA, + BGRA, + RED, + GRAYSCALE, + GRAYSCALE_ALPHA, + FORMAT_COUNT, } constdef TextureDataType { - INT = 0, - FLOAT, + INT = 0, + FLOAT, } constdef TextureFilter { - NEAREST = 0, - LINEAR, + NEAREST = 0, + LINEAR, } struct TextureBlob { - void* data; - usz width; - usz height; - TextureDataType dataType; - TextureFormat dataFormat; - TextureFormat textureFormat; - TextureFilter minFilter; - TextureFilter magFilter; + void* data; + usz width; + usz height; + TextureDataType dataType; + TextureFormat dataFormat; + TextureFormat textureFormat; + TextureFilter minFilter; + TextureFilter magFilter; } -alias Texture = usz; +alias Texture = usz; alias Framebuffer = usz; struct Rect { - float x; - float y; - float w; - float h; + float x; + float y; + float w; + float h; } struct Cube { - float x; - float y; - float z; - float w; - float l; - float h; + float x; + float y; + float z; + float w; + float l; + float h; } struct Vec2D { - float x; - float y; + float x; + float y; } struct Vec3D { - float x; - float y; - float z; + float x; + float y; + float z; } struct Color { - char a; - char b; - char g; - char r; + char a; + char b; + char g; + char r; } alias Mat4 = float[16]; -extern fn Mat4 mat4_loadIdentity() @cname("RSGL_mat4_loadIdentity"); -extern fn Mat4 mat4_scale(Mat4, float, float, float) @cname("RSGL_mat4_scale"); -extern fn Mat4 mat4_rotate(Mat4, float, float, float, float) @cname("RSGL_mat4_rotate"); -extern fn Mat4 mat4_translate(Mat4, float, float, float) @cname("RSGL_mat4_translate"); -extern fn Mat4 mat4_perspective(Mat4, float, float, float, float) @cname("RSGL_mat4_perspective"); -extern fn Mat4 mat4_ortho(Mat4, float, float, float, float, float, float) @cname("RSGL_mat4_ortho"); -extern fn Mat4 mat4_lookAt(Mat4, float, float, float, float, float, float, float, float, float) @cname("RSGL_mat4_lookAt"); -extern fn Mat4 mat4_multiply(Mat4, Mat4) @cname("RSGL_mat4_multiply"); -extern fn Vec3D mat4_multiplyPoint(Mat4, Vec3D) @cname("RSGL_mat4_multiplyPoint"); +extern fn Mat4 mat4_loadIdentity() @cname("RSGL_mat4_loadIdentity"); +extern fn Mat4 mat4_scale(Mat4, float, float, float) @cname("RSGL_mat4_scale"); +extern fn Mat4 mat4_rotate(Mat4, float, float, float, float) @cname("RSGL_mat4_rotate"); +extern fn Mat4 mat4_translate(Mat4, float, float, float) @cname("RSGL_mat4_translate"); +extern fn Mat4 mat4_perspective(Mat4, float, float, float, float) @cname("RSGL_mat4_perspective"); +extern fn Mat4 mat4_ortho(Mat4, float, float, float, float, float, float) @cname("RSGL_mat4_ortho"); +extern fn Mat4 mat4_lookAt( + Mat4, + float, + float, + float, + float, + float, + float, + float, + float, + float +) @cname("RSGL_mat4_lookAt"); +extern fn Mat4 mat4_multiply(Mat4, Mat4) @cname("RSGL_mat4_multiply"); +extern fn Vec3D mat4_multiplyPoint(Mat4, Vec3D) @cname("RSGL_mat4_multiplyPoint"); constdef ProjectionType { - ORTHO_2D = 0, - ORTHO_3D, - PERSPECTIVE_3D, + ORTHO_2D = 0, + ORTHO_3D, + PERSPECTIVE_3D, } struct Projection2D { - ProjectionType type; - uint width; - uint height; + ProjectionType type; + uint width; + uint height; } struct Projection3D { - ProjectionType type; - float fov; - float ratio; - float pNear; - float pFar; + ProjectionType type; + float fov; + float ratio; + float pNear; + float pFar; } union Projection { - ProjectionType type; - Projection2D p2D; - Projection3D p3D; + ProjectionType type; + Projection2D p2D; + Projection3D p3D; } extern fn Mat4 projection_getMatrix(Projection*) @cname("RSGL_projection_getMatrix"); constdef ShaderType { - NONE = 0, - STANDARD = 1, - COMPUTE = 2, - GEOMETRY = 4, + NONE = 0, + STANDARD = 1, + COMPUTE = 2, + GEOMETRY = 4, } struct ProgramBlob { - ZString vertex; - usz vertexLen; - ZString fragment; - usz fragmentLen; + ZString vertex; + usz vertexLen; + ZString fragment; + usz fragmentLen; } struct ProgramInfo { - usz program; - usz perspectiveView; - usz model; - usz vertexPosition; - usz vertexTexCoord; - usz vertexColor; - ShaderType type; + usz program; + usz perspectiveView; + usz model; + usz vertexPosition; + usz vertexTexCoord; + usz vertexColor; + ShaderType type; } struct Batch { - usz start; - usz len; - usz elmStart; - usz elmCount; - uint type; - Texture tex; - float lineWidth; - Mat4 matrix; + usz start; + usz len; + usz elmStart; + usz elmCount; + uint type; + Texture tex; + float lineWidth; + Mat4 matrix; } struct RenderData { - float* verts; - float* texCoords; - float* colors; - ushort* elements; - usz elements_count; - usz len; - Mat4 perspective; + float* verts; + float* texCoords; + float* colors; + ushort* elements; + usz elements_count; + usz len; + Mat4 perspective; } constdef BufferType { - ARRAY_BUFFER = 0, - ELEMENT_ARRAY_BUFFER, - SHADER_STORAGE_BUFFER, - TEXTURE_BUFFER, - UNIFORM_BUFFER, + ARRAY_BUFFER = 0, + ELEMENT_ARRAY_BUFFER, + SHADER_STORAGE_BUFFER, + TEXTURE_BUFFER, + UNIFORM_BUFFER, } struct RenderBuffers { - usz vertex; - usz color; - usz texture; - usz elements; - usz maxVerts; - Batch[MAX_BATCHES] batches; - usz batchCount; + usz vertex; + usz color; + usz texture; + usz elements; + usz maxVerts; + Batch[MAX_BATCHES] batches; + usz batchCount; } struct RenderState { - float* gradient; - Rect source; - Texture texture; - uint gradient_len; - Color color; - Vec3D rotate; - ProgramInfo* program; - RenderBuffers* buffers; - Vec3D center; - float lineWidth; - Mat4 modelMatrix; - Mat4 viewMatrix; - Mat4 perspectiveMatrix; - bool forceBatch; - bool overflow; - Framebuffer framebuffer; + float* gradient; + Rect source; + Texture texture; + uint gradient_len; + Color color; + Vec3D rotate; + ProgramInfo* program; + RenderBuffers* buffers; + Vec3D center; + float lineWidth; + Mat4 modelMatrix; + Mat4 viewMatrix; + Mat4 perspectiveMatrix; + bool forceBatch; + bool overflow; + Framebuffer framebuffer; } struct RenderPass { - ProgramInfo* program; - float* matrix; - RenderBuffers* buffers; - Framebuffer framebuffer; + ProgramInfo* program; + float* matrix; + RenderBuffers* buffers; + Framebuffer framebuffer; } -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); +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; + 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; } struct Renderer { - RenderData data; - RenderState state; - RendererProc proc; - void* userPtr; - void* ctx; - Texture defaultTexture; - ProgramInfo defaultProgram; - Mat4 defaultPerspectiveMatrix; - float[MAX_VERTS*3] verts; - float[MAX_VERTS*2] texCoords; - float[MAX_VERTS*4] colors; - ushort[MAX_VERTS*6] elements; - RenderBuffers buffers; + RenderData data; + RenderState state; + RendererProc proc; + void* userPtr; + void* ctx; + Texture defaultTexture; + ProgramInfo defaultProgram; + Mat4 defaultPerspectiveMatrix; + float[MAX_VERTS * 3] verts; + float[MAX_VERTS * 2] texCoords; + float[MAX_VERTS * 4] colors; + ushort[MAX_VERTS * 6] elements; + RenderBuffers buffers; } -extern fn void renderer_getRenderState(Renderer*, RenderState*) @cname("RSGL_renderer_getRenderState"); -extern fn usz renderer_size(Renderer*) @cname("RSGL_renderer_size"); -extern fn void renderer_initPtr(RendererProc*, void*, void*, Renderer*) @cname("RSGL_renderer_initPtr"); -extern fn Renderer* renderer_init(RendererProc, void*) @cname("RSGL_renderer_init"); -extern fn void renderer_updateSize(Renderer*, usz, usz) @cname("RSGL_renderer_updateSize"); -extern fn void renderer_freePtr(Renderer*) @cname("RSGL_renderer_freePtr"); -extern fn void renderer_setSurface(Renderer*, void*) @cname("RSGL_renderer_setSurface"); -extern fn void renderer_createBuffer(Renderer*, BufferType, usz, void*, usz*) @cname("RSGL_renderer_createBuffer"); -extern fn void renderer_updateBuffer(Renderer*, BufferType, usz, void*, usz, usz) @cname("RSGL_renderer_updateBuffer"); -extern fn void renderer_deleteBuffer(Renderer*, usz) @cname("RSGL_renderer_deleteBuffer"); -extern fn void renderer_createRenderBuffers(Renderer*, usz, RenderBuffers*) @cname("RSGL_renderer_createRenderBuffers"); -extern fn void renderer_deleteRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_deleteRenderBuffers"); -extern fn void renderer_render(Renderer*) @cname("RSGL_renderer_render"); -extern fn void renderer_updateRenderBuffers(Renderer*) @cname("RSGL_renderer_updateRenderbuffers"); -extern fn void renderer_renderBuffers(Renderer*) @cname("RSGL_renderer_renderBuffers"); -extern fn void renderer_free(Renderer*) @cname("RSGL_renderer_free"); -extern fn void renderer_setRotate(Renderer*, Vec3D) @cname("RSGL_renderer_setRotate"); -extern fn void renderer_setTexture(Renderer*, Texture) @cname("RSGL_renderer_setTexture"); -extern fn void renderer_setTextureSource(Renderer*, Texture, Rect) @cname("RSGL_renderer_setTextureSource"); -extern fn void renderer_setColor(Renderer*, Color) @cname("RSGL_renderer_setColor"); -extern fn void renderer_setProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_setProgram"); -extern fn void renderer_setFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_setFramebuffer"); -extern fn void renderer_setRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_setRenderBuffers"); -extern fn void renderer_setGradient(Renderer*, float*, usz) @cname("RSGL_renderer_setGradient"); -extern fn void renderer_setCenter(Renderer*, Vec3D) @cname("RSGL_renderer_setCenter"); -extern fn void renderer_setOverflow(Renderer*, bool) @cname("RSGL_renderer_setOverflow"); -extern fn void renderer_clearArgs(Renderer*) @cname("RSGL_renderer_clearArgs"); -extern fn Mat4 renderer_initDrawMatrix(Renderer*, Vec3D) @cname("RSGL_renderer_initDrawMatrix"); -extern fn void renderer_clear(Renderer*, Color) @cname("RSGL_renderer_clear"); -extern fn void renderer_viewport(Renderer*, Rect) @cname("RSGL_renderer_viewport"); -extern fn Texture renderer_createTexture(Renderer*, TextureBlob*) @cname("RSGL_renderer_createTexture"); -extern fn void renderer_copyToTexture(Renderer*, Texture, usz, usz, TextureBlob*) @cname("RSGL_renderer_copyToTexture"); -extern fn void renderer_deleteTexture(Renderer*, Texture) @cname("RSGL_renderer_deleteTexture"); -extern fn Framebuffer renderer_createFramebuffer(Renderer*, usz, usz) @cname("RSGL_renderer_createFramebuffer"); -extern fn void renderer_attachFramebuffer(Renderer*, Framebuffer, Texture, char, char) @cname("RSGL_renderer_attachFramebuffer"); -extern fn void renderer_deleteFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_deleteFramebuffer"); -extern fn void renderer_scissorStart(Renderer*, Rect, int) @cname("RSGL_renderer_scissorStart"); -extern fn void renderer_scissorEnd(Renderer*) @cname("RSGL_renderer_scissorEnd"); -extern fn ProgramBlob renderer_defaultBlob(Renderer*) @cname("RSGL_renderer_defaultBlob"); -extern fn ProgramInfo renderer_createProgram(Renderer*, ProgramBlob*) @cname("RSGL_renderer_createProgram"); -extern fn void renderer_deleteProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_deleteProgram"); -extern fn usz renderer_findShaderVariable(Renderer*, ProgramInfo*, ZString, usz) @cname("RSGL_renderer_findShaderVariable"); -extern fn void renderer_updateShaderVariable(Renderer*, ProgramInfo*, usz, float*, char) @cname("RSGL_renderer_updateShaderVariable"); -extern fn void renderer_forceBatch(Renderer*) @cname("RSGL_renderer_forceBatch"); -extern fn void renderer_setPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setPerspectiveMatrix"); -extern fn void renderer_setDefaultPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setDefaultPerspectiveMatrix"); -extern fn void renderer_setModelMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setModelMatrix"); -extern fn void renderer_resetModelMatrix(Renderer*) @cname("RSGL_renderer_resetModelMatrix"); -extern fn ProgramInfo renderer_createComputeProgram(Renderer*, ZString) @cname("RSGL_renderer_createComputeProgram"); -extern fn void renderer_dispatchComputeProgram(Renderer*, ProgramInfo*, uint, uint, uint) @cname("RSGL_renderer_dispatchComputeProgram"); -extern fn void renderer_bindComputeTexture(Renderer*, uint, char) @cname("RSGL_renderer_bindComputeTexture"); +extern fn void renderer_getRenderState(Renderer*, RenderState*) @cname("RSGL_renderer_getRenderState"); +extern fn usz renderer_size(Renderer*) @cname("RSGL_renderer_size"); +extern fn void renderer_initPtr(RendererProc*, void*, void*, Renderer*) @cname("RSGL_renderer_initPtr"); +extern fn Renderer* renderer_init(RendererProc, void*) @cname("RSGL_renderer_init"); +extern fn void renderer_updateSize(Renderer*, usz, usz) @cname("RSGL_renderer_updateSize"); +extern fn void renderer_freePtr(Renderer*) @cname("RSGL_renderer_freePtr"); +extern fn void renderer_setSurface(Renderer*, void*) @cname("RSGL_renderer_setSurface"); +extern fn void renderer_createBuffer(Renderer*, BufferType, usz, void*, usz*) @cname("RSGL_renderer_createBuffer"); +extern fn void renderer_updateBuffer(Renderer*, BufferType, usz, void*, usz, usz) @cname("RSGL_renderer_updateBuffer"); +extern fn void renderer_deleteBuffer(Renderer*, usz) @cname("RSGL_renderer_deleteBuffer"); +extern fn void renderer_createRenderBuffers(Renderer*, usz, RenderBuffers*) @cname("RSGL_renderer_createRenderBuffers"); +extern fn void renderer_deleteRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_deleteRenderBuffers"); +extern fn void renderer_render(Renderer*) @cname("RSGL_renderer_render"); +extern fn void renderer_updateRenderBuffers(Renderer*) @cname("RSGL_renderer_updateRenderbuffers"); +extern fn void renderer_renderBuffers(Renderer*) @cname("RSGL_renderer_renderBuffers"); +extern fn void renderer_free(Renderer*) @cname("RSGL_renderer_free"); +extern fn void renderer_setRotate(Renderer*, Vec3D) @cname("RSGL_renderer_setRotate"); +extern fn void renderer_setTexture(Renderer*, Texture) @cname("RSGL_renderer_setTexture"); +extern fn void renderer_setTextureSource(Renderer*, Texture, Rect) @cname("RSGL_renderer_setTextureSource"); +extern fn void renderer_setColor(Renderer*, Color) @cname("RSGL_renderer_setColor"); +extern fn void renderer_setProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_setProgram"); +extern fn void renderer_setFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_setFramebuffer"); +extern fn void renderer_setRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_setRenderBuffers"); +extern fn void renderer_setGradient(Renderer*, float*, usz) @cname("RSGL_renderer_setGradient"); +extern fn void renderer_setCenter(Renderer*, Vec3D) @cname("RSGL_renderer_setCenter"); +extern fn void renderer_setOverflow(Renderer*, bool) @cname("RSGL_renderer_setOverflow"); +extern fn void renderer_clearArgs(Renderer*) @cname("RSGL_renderer_clearArgs"); +extern fn Mat4 renderer_initDrawMatrix(Renderer*, Vec3D) @cname("RSGL_renderer_initDrawMatrix"); +extern fn void renderer_clear(Renderer*, Color) @cname("RSGL_renderer_clear"); +extern fn void renderer_viewport(Renderer*, Rect) @cname("RSGL_renderer_viewport"); +extern fn Texture renderer_createTexture(Renderer*, TextureBlob*) @cname("RSGL_renderer_createTexture"); +extern fn void renderer_copyToTexture(Renderer*, Texture, usz, usz, TextureBlob*) @cname("RSGL_renderer_copyToTexture"); +extern fn void renderer_deleteTexture(Renderer*, Texture) @cname("RSGL_renderer_deleteTexture"); +extern fn Framebuffer renderer_createFramebuffer(Renderer*, usz, usz) @cname("RSGL_renderer_createFramebuffer"); +extern fn void renderer_attachFramebuffer( + Renderer*, + Framebuffer, + Texture, + char, + char +) @cname("RSGL_renderer_attachFramebuffer"); +extern fn void renderer_deleteFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_deleteFramebuffer"); +extern fn void renderer_scissorStart(Renderer*, Rect, int) @cname("RSGL_renderer_scissorStart"); +extern fn void renderer_scissorEnd(Renderer*) @cname("RSGL_renderer_scissorEnd"); +extern fn ProgramBlob renderer_defaultBlob(Renderer*) @cname("RSGL_renderer_defaultBlob"); +extern fn ProgramInfo renderer_createProgram(Renderer*, ProgramBlob*) @cname("RSGL_renderer_createProgram"); +extern fn void renderer_deleteProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_deleteProgram"); +extern fn usz renderer_findShaderVariable( + Renderer*, + ProgramInfo*, + ZString, + usz +) @cname("RSGL_renderer_findShaderVariable"); +extern fn void renderer_updateShaderVariable( + Renderer*, + ProgramInfo*, + usz, + float*, + char +) @cname("RSGL_renderer_updateShaderVariable"); +extern fn void renderer_forceBatch(Renderer*) @cname("RSGL_renderer_forceBatch"); +extern fn void renderer_setPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setPerspectiveMatrix"); +extern fn void renderer_setDefaultPerspectiveMatrix( + Renderer*, + Mat4 +) @cname("RSGL_renderer_setDefaultPerspectiveMatrix"); +extern fn void renderer_setModelMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setModelMatrix"); +extern fn void renderer_resetModelMatrix(Renderer*) @cname("RSGL_renderer_resetModelMatrix"); +extern fn ProgramInfo renderer_createComputeProgram(Renderer*, ZString) @cname("RSGL_renderer_createComputeProgram"); +extern fn void renderer_dispatchComputeProgram( + Renderer*, + ProgramInfo*, + uint, + uint, + uint +) @cname("RSGL_renderer_dispatchComputeProgram"); +extern fn void renderer_bindComputeTexture(Renderer*, uint, char) @cname("RSGL_renderer_bindComputeTexture"); constdef DrawType { - TRIANGLES = 0, - POINTS = 1, - LINES = 2, + TRIANGLES = 0, + POINTS = 1, + LINES = 2, } struct RawVerts { - DrawType type; - float* verts; - float* texCoords; - ushort* elements; - usz elmCount; - usz vert_count; + DrawType type; + float* verts; + float* texCoords; + ushort* elements; + usz elmCount; + usz vert_count; } extern fn int drawRawVerts(Renderer*, RawVerts*) @cname("RSGL_drawRawVerts"); -extern fn int drawPoint(Renderer*, Vec2D) @cname("RSGL_drawPoint") @if($feature(HIGHLEVEL)); -extern fn int drawRect(Renderer*, Rect) @cname("RSGL_drawRect") @if($feature(HIGHLEVEL)); -extern fn int drawRoundRect(Renderer*, Rect, Vec2D) @cname("RSGL_drawRoundRect") @if($feature(HIGHLEVEL)); -extern fn int drawPolygon(Renderer*, Rect, uint) @cname("RSGL_drawPolygon") @if($feature(HIGHLEVEL)); -extern fn int drawArc(Renderer*, Rect, Vec2D) @cname("RSGL_drawArc") @if($feature(HIGHLEVEL)); -extern fn int drawOval(Renderer*, Rect) @cname("RSGL_drawOval") @if($feature(HIGHLEVEL)); -extern fn int drawLine(Renderer*, Vec2D, Vec2D, uint) @cname("RSGL_drawLine") @if($feature(HIGHLEVEL)); -extern fn int drawTriangle(Renderer*, Vec3D[3]) @cname("RSGL_drawTriangle") @if($feature(HIGHLEVEL)); -extern fn int drawPoint3D(Renderer*, Vec3D) @cname("RSGL_drawPoint3D") @if($feature(HIGHLEVEL)); -extern fn int drawLine3D(Renderer*, Vec3D, Vec3D, uint) @cname("RSGL_drawLine3D") @if($feature(HIGHLEVEL)); -extern fn int drawCube(Renderer*, Cube) @cname("RSGL_drawCube") @if($feature(HIGHLEVEL)); -extern fn int drawTriangleOutline(Renderer*, Vec3D[3], uint) @cname("RSGL_drawTriangleOutline") @if($feature(HIGHLEVEL)); -extern fn int drawRectOutline(Renderer*, Rect, uint) @cname("RSGL_drawRectOutline") @if($feature(HIGHLEVEL)); -extern fn int drawRoundRectOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawRoundRectOutline") @if($feature(HIGHLEVEL)); -extern fn int drawPolygonOutline(Renderer*, Rect, uint, uint) @cname("RSGL_drawPolygonOutline") @if($feature(HIGHLEVEL)); -extern fn int drawArcOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawArcOutline") @if($feature(HIGHLEVEL)); -extern fn int drawOvalOutline(Renderer*, Rect, uint) @cname("RSGL_drawovalOutline") @if($feature(HIGHLEVEL)); +extern fn int drawPoint(Renderer*, Vec2D) @cname("RSGL_drawPoint") @if($feature(HIGHLEVEL)); +extern fn int drawRect(Renderer*, Rect) @cname("RSGL_drawRect") @if($feature(HIGHLEVEL)); +extern fn int drawRoundRect(Renderer*, Rect, Vec2D) @cname("RSGL_drawRoundRect") @if($feature(HIGHLEVEL)); +extern fn int drawPolygon(Renderer*, Rect, uint) @cname("RSGL_drawPolygon") @if($feature(HIGHLEVEL)); +extern fn int drawArc(Renderer*, Rect, Vec2D) @cname("RSGL_drawArc") @if($feature(HIGHLEVEL)); +extern fn int drawOval(Renderer*, Rect) @cname("RSGL_drawOval") @if($feature(HIGHLEVEL)); +extern fn int drawLine(Renderer*, Vec2D, Vec2D, uint) @cname("RSGL_drawLine") @if($feature(HIGHLEVEL)); +extern fn int drawTriangle(Renderer*, Vec3D[3]) @cname("RSGL_drawTriangle") @if($feature(HIGHLEVEL)); +extern fn int drawPoint3D(Renderer*, Vec3D) @cname("RSGL_drawPoint3D") @if($feature(HIGHLEVEL)); +extern fn int drawLine3D(Renderer*, Vec3D, Vec3D, uint) @cname("RSGL_drawLine3D") @if($feature(HIGHLEVEL)); +extern fn int drawCube(Renderer*, Cube) @cname("RSGL_drawCube") @if($feature(HIGHLEVEL)); +extern fn int drawTriangleOutline( + Renderer*, + Vec3D[3], + uint +) @cname("RSGL_drawTriangleOutline") @if($feature(HIGHLEVEL)); +extern fn int drawRectOutline(Renderer*, Rect, uint) @cname("RSGL_drawRectOutline") @if($feature(HIGHLEVEL)); +extern fn int drawRoundRectOutline( + Renderer*, + Rect, + Vec2D, + uint +) @cname("RSGL_drawRoundRectOutline") @if($feature(HIGHLEVEL)); +extern fn int drawPolygonOutline( + Renderer*, + Rect, + uint, + uint +) @cname("RSGL_drawPolygonOutline") @if($feature(HIGHLEVEL)); +extern fn int drawArcOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawArcOutline") @if($feature(HIGHLEVEL)); +extern fn int drawOvalOutline(Renderer*, Rect, uint) @cname("RSGL_drawovalOutline") @if($feature(HIGHLEVEL)); constdef ViewType @if($feature(HIGHLEVEL)) { - NONE = 0, - TWO_D, - THREE_D, + NONE = 0, + TWO_D, + THREE_D, } struct View2D @if($feature(HIGHLEVEL)) { - ViewType type; - Vec3D offset; - Vec3D target; - float rotation; - float zoom; + ViewType type; + Vec3D offset; + Vec3D target; + float rotation; + float zoom; } struct View3D @if($feature(HIGHLEVEL)) { - ViewType type; - Vec3D pos; - Vec3D target; - Vec3D up; + ViewType type; + Vec3D pos; + Vec3D target; + Vec3D up; } union View @if($feature(HIGHLEVEL)) { - ViewType type; - View2D view2D; - View3D view3D; + ViewType type; + View2D view2D; + View3D view3D; } extern fn Mat4 view_getMatrix(View*) @cname("RSGL_view_getMatrix") @if($feature(HIGHLEVEL)); @@ -448,16 +530,16 @@ module rsgl::gl @if($feature(OPENGL)); struct GlRenderer { - uint vao; + uint vao; } extern fn RendererProc rendererProc() @cname("RSGL_GL_rendererProc"); -extern fn usz size() @cname("RSGL_GL_size"); +extern fn usz size() @cname("RSGL_GL_size"); module rsgl::rfont @if($feature(RFONT)); import rfont; -extern fn rfont::Renderer_proc renderer_proc() @cname("RFont_RSGL_renderer_proc"); -extern fn rfont::Renderer* renderer_init(rsgl::Renderer*) @cname("RFont_RSGL_renderer_init"); -extern fn void renderer_initPtr(rsgl::Renderer*, rfont::Renderer*) @cname("RFont_RSGL_renderer_initPtr"); -extern fn void renderer_free(rfont::Renderer*) @cname("RFont_RSGL_renderer_free"); +extern fn rfont::Renderer_proc renderer_proc() @cname("RFont_RSGL_renderer_proc"); +extern fn rfont::Renderer* renderer_init(rsgl::Renderer*) @cname("RFont_RSGL_renderer_init"); +extern fn void renderer_initPtr(rsgl::Renderer*, rfont::Renderer*) @cname("RFont_RSGL_renderer_initPtr"); +extern fn void renderer_free(rfont::Renderer*) @cname("RFont_RSGL_renderer_free");
\ No newline at end of file |
