summaryrefslogtreecommitdiff
path: root/rsgl.c3
diff options
context:
space:
mode:
Diffstat (limited to 'rsgl.c3')
-rw-r--r--rsgl.c3461
1 files changed, 0 insertions, 461 deletions
diff --git a/rsgl.c3 b/rsgl.c3
deleted file mode 100644
index 990db87..0000000
--- a/rsgl.c3
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
-*
-* 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.
-*
-* 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;
-import rfont;
-
-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,
-}
-
-constdef TextureDataType
-{
- INT = 0,
- FLOAT,
-}
-
-constdef TextureFilter
-{
- NEAREST = 0,
- LINEAR,
-}
-
-struct TextureBlob
-{
- void* data;
- usz width;
- usz height;
- TextureDataType dataType;
- TextureFormat dataFormat;
- TextureFormat textureFormat;
- TextureFilter minFilter;
- TextureFilter magFilter;
-}
-
-alias Texture = usz;
-alias Framebuffer = usz;
-
-struct Rect
-{
- float x;
- float y;
- float w;
- float h;
-}
-
-struct Cube
-{
- float x;
- float y;
- float z;
- float w;
- float l;
- float h;
-}
-
-struct Vec2D
-{
- float x;
- float y;
-}
-
-struct Vec3D
-{
- float x;
- float y;
- float z;
-}
-
-struct Color
-{
- 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");
-
-constdef ProjectionType
-{
- ORTHO_2D = 0,
- ORTHO_3D,
- PERSPECTIVE_3D,
-}
-
-struct Projection2D
-{
- ProjectionType type;
- uint width;
- uint height;
-}
-
-struct Projection3D
-{
- ProjectionType type;
- float fov;
- float ratio;
- float pNear;
- float pFar;
-}
-
-union Projection
-{
- 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,
-}
-
-struct ProgramBlob
-{
- ZString vertex;
- usz vertexLen;
- ZString fragment;
- usz fragmentLen;
-}
-
-struct ProgramInfo
-{
- 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;
-}
-
-struct RenderData
-{
- 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,
-}
-
-struct RenderBuffers
-{
- 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;
-}
-
-struct RenderPass
-{
- 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);
-
-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;
-}
-
-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;
-}
-
-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,
-}
-
-struct RawVerts
-{
- DrawType type;
- float* verts;
- float* texCoords;
- ushort* elements;
- usz elmCount;
- usz vert_count;
-}
-
-extern fn int drawRawVerts(Renderer*, RawVerts*) @cname("RSGL_drawRawVerts");
-
-extern fn rfont::Renderer_proc rfont_renderer_proc() @cname("RFont_RSGL_renderer_proc") @if($feature(RFONT));
-extern fn rfont::Renderer* rfont_renderer_init(Renderer*) @cname("RFont_RSGL_renderer_init") @if($feature(RFONT));
-extern fn void rfont_renderer_initPtr(Renderer*, rfont::Renderer*) @cname("RFont_RSGL_renderer_initPtr") @if($feature(RFONT));
-extern fn void rfont_renderer_free(rfont::Renderer*) @cname("RFont_RSGL_renderer_free") @if($feature(RFONT));
-
-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,
-}
-
-struct View2D @if($feature(HIGHLEVEL))
-{
- ViewType type;
- Vec3D offset;
- Vec3D target;
- float rotation;
- float zoom;
-}
-
-struct View3D @if($feature(HIGHLEVEL))
-{
- ViewType type;
- Vec3D pos;
- Vec3D target;
- Vec3D up;
-}
-
-union View @if($feature(HIGHLEVEL))
-{
- ViewType type;
- View2D view2D;
- View3D view3D;
-}
-
-extern fn Mat4 view_getMatrix(View*) @cname("RSGL_view_getMatrix") @if($feature(HIGHLEVEL));
-
-module rsgl::gl @if($feature(OPENGL));
-
-struct GlRenderer
-{
- uint vao;
-}
-
-extern fn RendererProc rendererProc() @cname("RSGL_GL_rendererProc");
-extern fn usz size() @cname("RSGL_GL_size");