diff options
Diffstat (limited to 'rsgl.c3l/rsgl.c3')
| -rw-r--r-- | rsgl.c3l/rsgl.c3 | 534 |
1 files changed, 270 insertions, 264 deletions
diff --git a/rsgl.c3l/rsgl.c3 b/rsgl.c3l/rsgl.c3 index df9f1be..ebc1d63 100644 --- a/rsgl.c3l/rsgl.c3 +++ b/rsgl.c3l/rsgl.c3 @@ -1,66 +1,55 @@ /** -* 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/>. + * Copyright (C) 2026 andromeda <andromeda@galaxious.de> + * + * 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; -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) +const int MAX_BATCHES = 2028; +const int MAX_VERTS = 8192; + +enum DebugType : char { - return (uint)#color & 0xFFFFFF00; + ERROR, + WARNING, + INFO, } -macro @rgbToHex(#r, #g, #b) + +enum ErrorCode : char { - return @colorToHex(@rgb(#r, #g, #b)); + NO_ERROR, + ERROR_BACKEND, + ERROR_QUERY_FAIL, + ERROR_SHADER, + INFO_BACKEND, + INFO_SHADER, + WARNING_BACKEND, } -macro @rgbaToHex(#r, #g, #b, #a) + +struct DebugInfo { - return @colorToHex(@rgba(#r, #g, #b, #a)); + DebugType type; + ErrorCode code; + ZString msg; } -const int MAX_BATCHES = 2028; -const int MAX_VERTS = 8192; +alias DebugFunc = fn void(DebugInfo*); -constdef TextureFormat +enum TextureFormat : int { - NONE = 0, + NONE, RGB, BGR, RGBA, @@ -71,15 +60,15 @@ constdef TextureFormat FORMAT_COUNT, } -constdef TextureDataType +enum TextureDataType : int { - INT = 0, + INT, FLOAT, } -constdef TextureFilter +enum TextureFilter : int { - NEAREST = 0, + NEAREST, LINEAR, } @@ -88,11 +77,11 @@ struct TextureBlob void* data; usz width; usz height; - TextureDataType dataType; - TextureFormat dataFormat; - TextureFormat textureFormat; - TextureFilter minFilter; - TextureFilter magFilter; + TextureDataType data_type; + TextureFormat data_format; + TextureFormat texture_format; + TextureFilter min_filter; + TextureFilter mag_filter; } alias Texture = usz; @@ -129,6 +118,19 @@ struct Vec3D float z; } +macro @triangle(#p1, #p2, #p3) => (Vec3D[3]) { #p1, #p2, #p3 }; +macro @createTriangle( + #p1x, + #p1y, + #p1z, + #p2x, + #p2y, + #p2z, + #p3x, + #p3y, + #p3z +) => @triangle((Vec3D) { #p1x, #p1y, #p1z }, (Vec3D) { #p2x, #p2y, #p2z }, (Vec3D) { #p3x, #p3y, #p3z }); + struct Color { char a; @@ -137,21 +139,20 @@ struct Color char r; } -alias Mat4 = float[16]; +macro @rgba(#r, #g, #b, #a) => (Color) { #a, #b, #g, #r }; +macro @rgb(#r, #g, #b) => (Color) { 255, #b, #g, #r }; +macro @color_to_hex(#color) => (uint)#color & 0xFFFFFF00; +macro @rgb_to_hex(#r, #g, #b) => @color_to_hex(@rgb(#r, #g, #b)); +macro @rgba_to_hex(#r, #g, #b, #a) => @color_to_hex(@rgba(#r, #g, #b, #a)); -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"); +struct Mat4 +{ + float[16] m; +} -constdef ProjectionType +enum ProjectionType : int { - ORTHO_2D = 0, + ORTHO_2D, ORTHO_3D, PERSPECTIVE_3D, } @@ -179,9 +180,24 @@ union Projection Projection3D p3D; } -extern fn Mat4 projection_getMatrix(Projection*) @cname("RSGL_projection_getMatrix"); +enum DrawType : int +{ + TRIANGLES, + POINTS, + LINES, +} -constdef ShaderType +struct RawVerts +{ + DrawType type; + float* verts; + float* tex_coords; + ushort* elements; + usz elm_count; + usz vert_count; +} + +constdef ShaderType : int { NONE = 0, STANDARD = 1, @@ -191,20 +207,20 @@ constdef ShaderType struct ProgramBlob { - ZString vertex; - usz vertexLen; - ZString fragment; - usz fragmentLen; + CChar* vertex; + usz vertex_len; + CChar* fragment; + usz fragment_len; } struct ProgramInfo { usz program; - usz perspectiveView; + usz perspective_view; usz model; - usz vertexPosition; - usz vertexTexCoord; - usz vertexColor; + usz vertex_position; + usz vertex_tex_coord; + usz vertex_color; ShaderType type; } @@ -212,18 +228,18 @@ struct Batch { usz start; usz len; - usz elmStart; - usz elmCount; - uint type; + usz elm_start; + usz elm_count; + DrawType type; Texture tex; - float lineWidth; + float line_width; Mat4 matrix; } struct RenderData { float* verts; - float* texCoords; + float* tex_coords; float* colors; ushort* elements; usz elements_count; @@ -231,9 +247,9 @@ struct RenderData Mat4 perspective; } -constdef BufferType +enum BufferType : int { - ARRAY_BUFFER = 0, + ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, SHADER_STORAGE_BUFFER, TEXTURE_BUFFER, @@ -246,9 +262,9 @@ struct RenderBuffers usz color; usz texture; usz elements; - usz maxVerts; + usz max_verts; Batch[MAX_BATCHES] batches; - usz batchCount; + usz batch_count; } struct RenderState @@ -262,11 +278,11 @@ struct RenderState ProgramInfo* program; RenderBuffers* buffers; Vec3D center; - float lineWidth; - Mat4 modelMatrix; - Mat4 viewMatrix; - Mat4 perspectiveMatrix; - bool forceBatch; + float line_width; + Mat4 model_matrix; + Mat4 view_matrix; + Mat4 perspective_matrix; + bool force_batch; bool overflow; Framebuffer framebuffer; } @@ -279,61 +295,61 @@ struct RenderPass 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 RendererProcSize = fn usz(); +alias RendererProcDefaultBlob = fn ProgramBlob(void*); +alias RendererProcInitPtr = fn void(void*, void*); +alias RendererProcFreePtr = fn void(void*); +alias RendererProcRender = fn void(void*, RenderPass*); +alias RendererProcClear = fn void(void*, Framebuffer, float, float, float, float); +alias RendererProcViewport = fn void(void*, int, int, int, int); +alias RendererProcSetSurface = fn void(void*, void*); +alias RendererProcCreateTexture = fn Texture(void*, TextureBlob*); +alias RendererProcCopyToTexture = fn void(void*, Texture, usz, usz, TextureBlob*); +alias RendererProcDeleteTexture = fn void(void*, Texture); +alias RendererProcScissorStart = fn void(void*, float, float, float, float, float); +alias RendererProcScissorEnd = fn void(void*); +alias RendererProcCreateProgram = fn ProgramInfo(void*, ProgramBlob*); +alias RendererProcDeleteProgram = fn void(void*, ProgramInfo*); +alias RendererProcFindShaderVariable = fn usz(void*, ProgramInfo*, ZString, usz); +alias RendererProcUpdateShaderVariable = fn void(void*, ProgramInfo*, usz, float*, char); +alias RendererProcCreateComputeProgram = fn ProgramInfo(void*, ZString); +alias RendererProcDispatchComputeProgram = fn void(void*, ProgramInfo*, uint, uint, uint); +alias RendererProcBindComputeTexture = fn void(void*, uint, char); +alias RendererProcCreateBuffer = fn void(void*, BufferType, usz, void*, usz*); +alias RendererProcUpdateBuffer = fn void(void*, BufferType, usz, void*, usz, usz); +alias RendererProcDeleteBuffer = fn void(void*, usz); +alias RendererProcCreateFramebuffer = fn Framebuffer(void*, usz, usz); +alias RendererProcAttachFramebuffer = fn void(void*, Framebuffer, Texture, char, char); +alias RendererProcDeleteFramebuffer = 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; + RendererProcSize size; + RendererProcDefaultBlob default_blob; + RendererProcInitPtr init_ptr; + RendererProcFreePtr free_ptr; + RendererProcRender render; + RendererProcClear clear; + RendererProcViewport viewport; + RendererProcSetSurface set_surface; + RendererProcCreateTexture create_texture; + RendererProcCopyToTexture copy_to_texture; + RendererProcDeleteTexture delete_texture; + RendererProcScissorStart scissor_start; + RendererProcScissorEnd scissor_end; + RendererProcCreateProgram create_program; + RendererProcDeleteProgram delete_program; + RendererProcFindShaderVariable find_shader_variable; + RendererProcUpdateShaderVariable update_shader_variable; + RendererProcCreateComputeProgram create_compute_program; + RendererProcDispatchComputeProgram dispatch_compute_program; + RendererProcBindComputeTexture bind_compute_texture; + RendererProcCreateBuffer create_buffer; + RendererProcUpdateBuffer update_buffer; + RendererProcDeleteBuffer delete_buffer; + RendererProcCreateFramebuffer create_framebuffer; + RendererProcAttachFramebuffer attach_framebuffer; + RendererProcDeleteFramebuffer delete_framebuffer; } struct Renderer @@ -341,127 +357,26 @@ struct Renderer RenderData data; RenderState state; RendererProc proc; - void* userPtr; + void* user_ptr; void* ctx; - Texture defaultTexture; - ProgramInfo defaultProgram; - Mat4 defaultPerspectiveMatrix; + Texture default_texture; + ProgramInfo default_program; + Mat4 default_perspective_matrix; float[MAX_VERTS * 3] verts; - float[MAX_VERTS * 2] texCoords; + float[MAX_VERTS * 2] tex_coords; 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 +enum ViewType : int { - 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)); - -constdef ViewType @if($feature(HIGHLEVEL)) -{ - NONE = 0, + NONE, TWO_D, THREE_D, } -struct View2D @if($feature(HIGHLEVEL)) +struct View2D { ViewType type; Vec3D offset; @@ -470,7 +385,7 @@ struct View2D @if($feature(HIGHLEVEL)) float zoom; } -struct View3D @if($feature(HIGHLEVEL)) +struct View3D { ViewType type; Vec3D pos; @@ -478,29 +393,120 @@ struct View3D @if($feature(HIGHLEVEL)) Vec3D up; } -union View @if($feature(HIGHLEVEL)) +union View { ViewType type; - View2D view2D; - View3D view3D; + View2D view_2D; + View3D view_3D; } -extern fn Mat4 view_getMatrix(View*) @cname("RSGL_view_getMatrix") @if($feature(HIGHLEVEL)); +extern fn DebugFunc set_debug_func(DebugFunc) @cname("RSGL_setDebugCallback"); +extern fn void debug_callback(DebugType, ErrorCode, ZString) @cname("RSGL_debugCallback"); +extern fn Mat4 mat4_loadIdentity() @cname("RSGL_mat4_loadIdentity"); +extern fn Mat4 Mat4.scale(self, float, float, float) @cname("RSGL_mat4_scale"); +extern fn Mat4 Mat4.rotate(self, float, float, float, float) @cname("RSGL_mat4_rotate"); +extern fn Mat4 Mat4.translate(self, float, float, float) @cname("RSGL_mat4_translate"); +extern fn Mat4 Mat4.perspective(self, float, float, float, float) @cname("RSGL_mat4_perspective"); +extern fn Mat4 Mat4.ortho(self, float, float, float, float, float, float) @cname("RSGL_mat4_ortho"); +extern fn Mat4 Mat4.look_at(self, float, float, float, float, float, float, float, float, float) @cname("RSGL_mat4_lookAt"); +extern fn Mat4 Mat4.multiply(self, Mat4) @cname("RSGL_mat4_multiply"); +extern fn Vec3D Mat4.multiply_point(self, Vec3D) @cname("RSGL_mat4_multiplyPoint"); +extern fn Mat4 Projection.get_matrix(&self) @cname("RSGL_projection_getMatrix"); +extern fn void Renderer.get_render_state(&self, RenderState*) @cname("RSGL_renderer_getRenderState"); +extern fn usz Renderer.size(&self) @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.update_size(&self, usz, usz) @cname("RSGL_renderer_updateSize"); +extern fn void Renderer.free_ptr(&self) @cname("RSGL_renderer_freePtr"); +extern fn void Renderer.set_surface(&self, void*) @cname("RSGL_renderer_setSurface"); +extern fn void Renderer.create_buffer(&self, BufferType, usz, void*, usz*) @cname("RSGL_renderer_createBuffer"); +extern fn void Renderer.update_buffer(&self, BufferType, usz, void*, usz, usz) @cname("RSGL_renderer_updateBuffer"); +extern fn void Renderer.delete_buffer(&self, usz) @cname("RSGL_renderer_deleteBuffer"); +extern fn void Renderer.create_render_buffers(&self, usz, RenderBuffers*) @cname("RSGL_renderer_createRenderBuffers"); +extern fn void Renderer.delete_render_buffers(&self, RenderBuffers*) @cname("RSGL_renderer_deleteRenderBuffers"); +extern fn void Renderer.render(&self) @cname("RSGL_renderer_render"); +extern fn void Renderer.update_render_buffers(&self) @cname("RSGL_renderer_updateRenderbuffers"); +extern fn void Renderer.render_buffers(&self) @cname("RSGL_renderer_renderBuffers"); +extern fn void Renderer.free(&self) @cname("RSGL_renderer_free"); +extern fn void Renderer.set_rotate(&self, Vec3D) @cname("RSGL_renderer_setRotate"); +extern fn void Renderer.set_texture(&self, Texture) @cname("RSGL_renderer_setTexture"); +extern fn void Renderer.set_texture_source(&self, Texture, Rect) @cname("RSGL_renderer_setTextureSource"); +extern fn void Renderer.set_color(&self, Color) @cname("RSGL_renderer_setColor"); +extern fn void Renderer.set_program(&self, ProgramInfo*) @cname("RSGL_renderer_setProgram"); +extern fn void Renderer.set_framebuffer(&self, Framebuffer) @cname("RSGL_renderer_setFramebuffer"); +extern fn void Renderer.set_render_buffers(&self, RenderBuffers*) @cname("RSGL_renderer_setRenderBuffers"); +extern fn void Renderer.set_gradent(&self, float*, usz) @cname("RSGL_renderer_setGradient"); +extern fn void Renderer.set_center(&self, Vec3D) @cname("RSGL_renderer_setCenter"); +extern fn void Renderer.set_overflow(&self, bool) @cname("RSGL_renderer_setOverflow"); +extern fn void Renderer.clear_args(&self) @cname("RSGL_renderer_clearArgs"); +extern fn Mat4 Renderer.init_draw_matrix(&self, Vec3D) @cname("RSGL_renderer_initDrawMatrix"); +extern fn void Renderer.clear(&self, Color) @cname("RSGL_renderer_clear"); +extern fn void Renderer.viewport(&self, Rect) @cname("RSGL_renderer_viewport"); +extern fn Texture Renderer.create_texture(&self, TextureBlob*) @cname("RSGL_renderer_createTexture"); +extern fn void Renderer.copy_to_texture(&self, Texture, usz, usz, TextureBlob*) @cname("RSGL_renderer_copyToTexture"); +extern fn void Renderer.delete_texture(&self, Texture) @cname("RSGL_renderer_deleteTexture"); +extern fn Framebuffer Renderer.create_framebuffer(&self, usz, usz) @cname("RSGL_renderer_createFramebuffer"); +extern fn void Renderer.attach_framebuffer(&self, Framebuffer, Texture, char, char) @cname("RSGL_renderer_attachFramebuffer"); +extern fn void Renderer.delete_framebuffer(&self, Framebuffer) @cname("RSGL_renderer_deleteFramebuffer"); +extern fn void Renderer.scissor_start(&self, Rect, int) @cname("RSGL_renderer_scissorStart"); +extern fn void Renderer.scissor_end(&self) @cname("RSGL_renderer_scissorEnd"); +extern fn ProgramBlob Renderer.default_blob(&self) @cname("RSGL_renderer_defaultBlob"); +extern fn ProgramInfo Renderer.create_program(&self, ProgramBlob*) @cname("RSGL_renderer_createProgram"); +extern fn void Renderer.delete_program(&self, ProgramInfo*) @cname("RSGL_renderer_deleteProgram"); +extern fn usz Renderer.find_shader_variable(&self, ProgramInfo*, ZString, usz) @cname("RSGL_renderer_findShaderVariable"); +extern fn void Renderer.update_shader_variable(&self, ProgramInfo*, usz, float*, char) @cname("RSGL_renderer_updateShaderVariable"); +extern fn void Renderer.force_batch(&self) @cname("RSGL_renderer_forceBatch"); +extern fn void Renderer.set_perspective_matrix(&self, Mat4) @cname("RSGL_renderer_setPerspectiveMatrix"); +extern fn void Renderer.set_default_perspective_matrix(&self, Mat4) @cname("RSGL_renderer_setDefaultPerspectiveMatrix"); +extern fn void Renderer.set_model_matrix(&self, Mat4) @cname("RSGL_renderer_setModelMatrix"); +extern fn void Renderer.reset_model_matrix(&self) @cname("RSGL_renderer_resetModelMatrix"); +extern fn ProgramInfo Renderer.create_compute_program(&self, ZString) @cname("RSGL_renderer_createComputeProgram"); +extern fn void Renderer.dispatch_compute_program( + &self, + ProgramInfo*, + uint, + uint, + uint +) @cname("RSGL_renderer_dispatchComputeProgram"); +extern fn void Renderer.bind_compute_texture(&self, uint, char) @cname("RSGL_renderer_bindComputeTexture"); +extern fn int Renderer.draw_raw_verts(&self, RawVerts*) @cname("RSGL_drawRawVerts"); + +module rsgl @feat(HIGHLEVEL); -module rsgl::gl @if($feature(OPENGL)); +extern fn int Renderer.draw_point(&self, Vec2D) @cname("RSGL_drawPoint"); +extern fn int Renderer.draw_rect(&self, Rect) @cname("RSGL_drawRect"); +extern fn int Renderer.draw_round_rect(&self, Rect, Vec2D) @cname("RSGL_drawRoundRect"); +extern fn int Renderer.draw_polygon(&self, Rect, uint) @cname("RSGL_drawPolygon"); +extern fn int Renderer.draw_arc(&self, Rect, Vec2D) @cname("RSGL_drawArc"); +extern fn int Renderer.draw_oval(&self, Rect) @cname("RSGL_drawOval"); +extern fn int Renderer.draw_line(&self, Vec2D, Vec2D, uint) @cname("RSGL_drawLine"); +extern fn int Renderer.draw_triangle(&self, Vec3D[3]) @cname("RSGL_drawTriangle"); +extern fn int Renderer.draw_point_3D(&self, Vec3D) @cname("RSGL_drawPoint3D"); +extern fn int Renderer.draw_line_3D(&self, Vec3D, Vec3D, uint) @cname("RSGL_drawLine3D"); +extern fn int Renderer.draw_cube(&self, Cube) @cname("RSGL_drawCube"); +extern fn int Renderer.draw_triangle_outline(&self, Vec3D[3], uint) @cname("RSGL_drawTriangleOutline"); +extern fn int Renderer.draw_rect_outline(&self, Rect, uint) @cname("RSGL_drawRectOutline"); +extern fn int Renderer.draw_round_rect_outline(&self, Rect, Vec2D, uint) @cname("RSGL_drawRoundRectOutline"); +extern fn int Renderer.draw_polygon_outline(&self, Rect, uint, uint) @cname("RSGL_drawPolygonOutline"); +extern fn int Renderer.draw_arc_outline(&self, Rect, Vec2D, uint) @cname("RSGL_drawArcOutline"); +extern fn int Renderer.draw_oval_outline(&self, Rect, uint) @cname("RSGL_drawovalOutline"); +extern fn Mat4 View.get_matrix(&self) @cname("RSGL_view_getMatrix"); + +module rsgl::gl @feat(OPENGL); struct GlRenderer { uint vao; } -extern fn RendererProc rendererProc() @cname("RSGL_GL_rendererProc"); +extern fn RendererProc renderer_proc() @cname("RSGL_GL_rendererProc"); extern fn usz size() @cname("RSGL_GL_size"); -module rsgl::rfont @if($feature(RFONT)); +module rsgl::rfont @feat(RFONT); + import rfont; -extern fn rfont::Renderer_proc renderer_proc() @cname("RFont_RSGL_renderer_proc"); +extern fn rfont::RendererProc 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"); |
