From f2e42ddede21689ef3fe7129dd7a6cb85dd6a95b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Catarino=20Fran=C3=A7a?= Date: Tue, 19 Dec 2023 14:43:58 -0300 Subject: [PATCH] fmt and betterC compat --- build.zig | 5 +- src/examples/clear.d | 22 +- src/examples/cube.d | 22 +- src/examples/debugtext_print.d | 138 ++-- src/examples/math.d | 29 +- src/examples/sgl_context.d | 49 +- src/sokol/app.d | 428 ++++++---- src/sokol/audio.d | 94 ++- src/sokol/debugtext.d | 316 +++++--- src/sokol/gfx.d | 1353 ++++++++++++++++++++++---------- src/sokol/gl.d | 557 ++++++++----- src/sokol/glue.d | 12 +- src/sokol/log.d | 9 +- src/sokol/shape.d | 221 ++++-- src/sokol/time.d | 66 +- 15 files changed, 2227 insertions(+), 1094 deletions(-) diff --git a/build.zig b/build.zig index 4e5a57a..c4a9ac2 100644 --- a/build.zig +++ b/build.zig @@ -179,7 +179,9 @@ pub fn build(b: *Builder) !void { config.force_egl = b.option(bool, "egl", "Use EGL instead of GLX if possible (default: false)") orelse false; var target = b.standardTargetOptions(.{}); - if (target.isWindows()) + + // ldc2 w/ druntime + phobos2 works on MSVC + if (target.isWindows() and target.isNative()) target.abi = .msvc; const optimize = b.standardOptimizeOption(.{}); @@ -217,6 +219,7 @@ pub fn build(b: *Builder) !void { // handmade math fmt.comptimePrint("{s}/src/examples/math.d", .{rootPath()}), }, + // .betterC = .on, .dflags = &.{ "--wi", // warnings only (no error) // "-w", // warnings as error diff --git a/src/examples/clear.d b/src/examples/clear.d index f058cd6..5e3ee07 100644 --- a/src/examples/clear.d +++ b/src/examples/clear.d @@ -5,7 +5,6 @@ //------------------------------------------------------------------------------ module examples.clear; -import std.stdio; import sg = sokol.gfx; import sgapp = sokol.glue; import sapp = sokol.app; @@ -13,7 +12,7 @@ import log = sokol.log; static sg.PassAction pass_action; -void init() +extern (C) void init() { sg.Desc cd; cd.context = sgapp.context(); @@ -26,10 +25,19 @@ void init() pass_action.colors[0].clear_value.b = 0; pass_action.colors[0].clear_value.a = 1; - writeln("Backend: ", sg.queryBackend()); + version (D_BetterC) + { + import core.stdc.stdio: printf; + printf("Backend: %d\n", sg.queryBackend()); + } + else + { + import std.stdio; + writeln("Backend: ", sg.queryBackend()); + } } -void frame() +extern (C) void frame() { auto g = pass_action.colors[0].clear_value.g + 0.01; pass_action.colors[0].clear_value.g = g > 1.0 ? 0.0 : g; @@ -38,12 +46,12 @@ void frame() sg.endPass(); } -void cleanup() +extern (C) void cleanup() { sg.shutdown(); } -void main() +extern(C) void main() { sapp.IconDesc icon = {sokol_default: true}; sapp.Desc runner = { @@ -53,7 +61,7 @@ void main() cleanup_cb: &cleanup, width: 640, height: 480, - win32_console_attach: true + win32_console_attach: true, }; runner.icon = icon; runner.logger.func = &log.func; diff --git a/src/examples/cube.d b/src/examples/cube.d index 2436120..0a2aa1f 100644 --- a/src/examples/cube.d +++ b/src/examples/cube.d @@ -22,11 +22,7 @@ struct State static Mat4 view() { - return Mat4.lookAt( - Vec3(0.0f, 1.5f, 6.0f), - Vec3.zero(), - Vec3.up() - ); + return Mat4.lookAt(Vec3(0.0f, 1.5f, 6.0f), Vec3.zero(), Vec3.up()); } } @@ -102,15 +98,15 @@ State state; // sg.commit(); // } -// void cleanup() -// { -// sg.shutdown(); -// } +extern (C) void cleanup() +{ + sg.shutdown(); +} -// void main() -// { -// // TODO -// } +void main() +{ + // TODO +} // TODO: missing cube.glsl // VsParams computeVsParams(float rx, float ry) diff --git a/src/examples/debugtext_print.d b/src/examples/debugtext_print.d index 5a22f07..971dc9b 100644 --- a/src/examples/debugtext_print.d +++ b/src/examples/debugtext_print.d @@ -5,101 +5,119 @@ //------------------------------------------------------------------------------ module examples.debugtext_print; -import std.stdio; import stm = sokol.time; import sg = sokol.gfx; import sgapp = sokol.glue; import sapp = sokol.app; import sdtx = sokol.debugtext; +import log = sokol.log; // Font slots enum KC854 = 0; enum C64 = 1; enum ORIC = 2; +extern(C) struct Color { - ubyte r, g, b; + @disable this(); + this(ubyte r, ubyte g, ubyte b){ + this.r = r; + this.g = g; + this.b = b; + } + ubyte r, g, b; } +extern(C) struct State { - sg.PassAction passAction; - uint frameCount; - ulong timeStamp; - - immutable Color[3] colors = [ - Color(0xF4, 0x43, 0x36), - Color(0x21, 0x96, 0xF3), - Color(0x4C, 0xAF, 0x50) - ]; + @disable this(); + sg.PassAction passAction; + uint frameCount; + ulong timeStamp; + + immutable Color[3] colors = [ + Color(0xF4, 0x43, 0x36), + Color(0x21, 0x96, 0xF3), + Color(0x4C, 0xAF, 0x50) + ]; } -static State state; +__gshared State state = {}; -void init() +extern (C) void init() { - stm.setup(); - sg.Desc cd; - cd.context = sgapp.context(); - sg.setup(cd); - - sdtx.Desc desc; - desc.fonts[0] = sdtx.fontKc854(); - desc.fonts[1] = sdtx.fontC64(); - desc.fonts[3] = sdtx.fontOric(); - sdtx.setup(desc); + stm.setup(); + sg.Desc cd; + cd.context = sgapp.context(); + cd.logger.func = &log.func; + sg.setup(cd); + + sdtx.Desc desc; + desc.logger.func = &log.func; + desc.fonts[0] = sdtx.fontKc854(); + desc.fonts[1] = sdtx.fontC64(); + desc.fonts[3] = sdtx.fontOric(); + sdtx.setup(desc); + + state.passAction.colors[0].load_action = sg.LoadAction.CLEAR; + state.passAction.colors[0].clear_value.r = 0; + state.passAction.colors[0].clear_value.g = 0.125; + state.passAction.colors[0].clear_value.b = 0.25; + state.passAction.colors[0].clear_value.a = 1; } -void frame() +extern (C) void frame() { - state.frameCount++; + state.frameCount++; - auto frameTime = stm.ms(stm.laptime(&state.timeStamp)); + const frameTime = stm.ms(stm.laptime(&state.timeStamp)); - sdtx.canvas(sapp.widthf() / 2, sapp.heightf() / 2); - sdtx.origin(3, 3); + sdtx.canvas(sapp.widthf() / 2, sapp.heightf() / 2); + sdtx.origin(3, 3); - foreach (font; [KC854, C64, ORIC]) - { - auto color = state.colors[font]; - sdtx.font(font); - sdtx.color3b(color.r, color.g, color.b); + foreach (font; [KC854, C64, ORIC]) + { + const color = state.colors[font]; + sdtx.font(font); + sdtx.color3b(color.r, color.g, color.b); - auto worldStr = (state.frameCount & (1 << 7)) ? "Welt" : "World"; + const worldStr = (state.frameCount & (1 << 7)) ? "Welt" : "World"; - writeln("Hello ", worldStr," !"); - writeln("\tFrame Time:\t\t", frameTime,"ms"); - writef("\tFrame Count:\t%d\t%0.4f\n", state.frameCount, state.frameCount); - sdtx.moveY(2); - } + sdtx.print("Hello '%s'!\n", worldStr); + sdtx.print("\tFrame Time:\t\t %0.3f ms", frameTime); + sdtx.print("\tFrame Count:\t%d\t%x\n", state.frameCount, state.frameCount); + sdtx.moveY(2); + } - sdtx.font(KC854); - sdtx.color3b(255, 128, 0); + sdtx.font(KC854); + sdtx.color3b(255, 128, 0); - // writeln("using std.format directly ", state.frameCount); - - sg.beginDefaultPass(state.passAction, sapp.width, sapp.height); - sdtx.draw(); - sg.endPass(); - sg.commit(); + sg.beginDefaultPass(state.passAction, sapp.width, sapp.height); + sdtx.draw(); + sg.endPass(); + sg.commit(); } -void cleanup() +extern (C) void cleanup() { - sdtx.shutdown(); - sg.shutdown(); + sdtx.shutdown(); + sg.shutdown(); } -extern(C) void main() +void main() { - sapp.IconDesc icon = {sokol_default: true}; - sapp.Desc runner = {window_title: "debugtext_print.d"}; - runner.init_cb = &init; - runner.frame_cb = &frame; - runner.cleanup_cb = &cleanup; - runner.width = 640; - runner.height = 480; - runner.icon = icon; - sapp.run(runner); + sapp.IconDesc icon = {sokol_default: true}; + sapp.Desc runner = { + window_title: "debugtext_print.d", + init_cb: &init, + frame_cb: &frame, + cleanup_cb: &cleanup, + width: 640, + height: 480 + }; + runner.icon = icon; + runner.logger.func = &log.func; + sapp.run(runner); } diff --git a/src/examples/math.d b/src/examples/math.d index d9e6c42..9c2e372 100644 --- a/src/examples/math.d +++ b/src/examples/math.d @@ -82,11 +82,8 @@ struct Vec3 static Vec3 cross(Vec3 v0, Vec3 v1) { - return Vec3( - (v0.y * v1.z) - (v0.z * v1.y), - (v0.z * v1.x) - (v0.x * v1.z), - (v0.x * v1.y) - (v0.y * v1.x) - ); + return Vec3((v0.y * v1.z) - (v0.z * v1.y), (v0.z * v1.x) - (v0.x * v1.z), + (v0.x * v1.y) - (v0.y * v1.x)); } static float dot(Vec3 v0, Vec3 v1) @@ -101,22 +98,12 @@ struct Mat4 static Mat4 identity() { - return Mat4([ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ]); + return Mat4([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); } static Mat4 zero() { - return Mat4([ - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 0, 0, 0] - ]); + return Mat4([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]); } static Mat4 mul(Mat4 left, Mat4 right) @@ -127,11 +114,9 @@ struct Mat4 { foreach (col; 0 .. 4) { - result.m[row][col] = - left.m[row][0] * right.m[0][col] + - left.m[row][1] * right.m[1][col] + - left.m[row][2] * right.m[2][col] + - left.m[row][3] * right.m[3][col]; + result.m[row][col] = left.m[row][0] * right.m[0][col] + + left.m[row][1] * right.m[1][col] + left.m[row][2] + * right.m[2][col] + left.m[row][3] * right.m[3][col]; } } diff --git a/src/examples/sgl_context.d b/src/examples/sgl_context.d index 544d8aa..eabb155 100644 --- a/src/examples/sgl_context.d +++ b/src/examples/sgl_context.d @@ -14,9 +14,9 @@ import log = sokol.log; import sgl = sokol.gl; import std.math : sin, cos; -struct State +extern (C) struct State { - struct Offscreen + extern (C) struct Offscreen { sg.PassAction pass_action; sg.Pass pass; @@ -24,7 +24,7 @@ struct State sgl.Context sgl_ctx; } - struct Display + extern (C) struct Display { sg.PassAction pass_action; sg.Sampler smp; @@ -37,10 +37,10 @@ enum offscreen_sample_count = 1; enum offscreen_width = 32; enum offscreen_height = 32; -State.Offscreen offscreen; -State.Display display; +extern (C) __gshared State.Display display; +extern (C) __gshared State.Offscreen offscreen; -void init() +extern (C) void init() { sg.Desc gfxd; gfxd.context = sgapp.context(); @@ -76,21 +76,14 @@ void init() sgl.ContextDesc ctd; ctd.max_vertices = 8; ctd.max_commands = 4; - ctd.color_format = offscreen_pixel_format, - ctd.depth_format = sg.PixelFormat.NONE, - ctd.sample_count = offscreen_sample_count, - - offscreen.sgl_ctx = sgl.makeContext(ctd); + ctd.color_format = offscreen_pixel_format, ctd.depth_format = sg.PixelFormat.NONE, + ctd.sample_count = offscreen_sample_count, offscreen.sgl_ctx = sgl.makeContext(ctd); // create an offscreen render target texture, pass and pass-action sg.ImageDesc imgd; - imgd.render_target = true, - imgd.width = offscreen_width, - imgd.height = offscreen_height, - imgd.pixel_format = offscreen_pixel_format, - imgd.sample_count = offscreen_sample_count, - - offscreen.img = sg.makeImage(imgd); + imgd.render_target = true, imgd.width = offscreen_width, imgd.height = offscreen_height, + imgd.pixel_format = offscreen_pixel_format, + imgd.sample_count = offscreen_sample_count, offscreen.img = sg.makeImage(imgd); sg.PassDesc pass_desc; pass_desc.color_attachments[0].image = offscreen.img; @@ -104,14 +97,12 @@ void init() // sampler for sampling the offscreen render target sg.SamplerDesc smd; - smd.wrap_u = sg.Wrap.CLAMP_TO_EDGE, - smd.wrap_v = sg.Wrap.CLAMP_TO_EDGE, - smd.min_filter = sg.Filter.NEAREST, - smd.mag_filter = sg.Filter.NEAREST, - display.smp = sg.makeSampler(smd); + smd.wrap_u = sg.Wrap.CLAMP_TO_EDGE, smd.wrap_v = sg.Wrap.CLAMP_TO_EDGE, + smd.min_filter = sg.Filter.NEAREST, smd.mag_filter = sg.Filter.NEAREST, + display.smp = sg.makeSampler(smd); } -void frame() +extern (C) void frame() { const a = sgl.asRadians(sapp.frameCount()); @@ -130,11 +121,7 @@ void frame() sgl.loadPipeline(display.sgl_pip); sgl.matrixModeProjection(); sgl.perspective(sgl.asRadians(45.0), sapp.widthf() / sapp.heightf(), 0.1, 100.0); - const(float)[3] eye = [ - sin(a) * 6.0, - sin(a) * 3.0, - cos(a) * 6.0, - ]; + const(float)[3] eye = [sin(a) * 6.0, sin(a) * 3.0, cos(a) * 6.0,]; sgl.matrixModeModelview(); sgl.lookat(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0); draw_cube(); @@ -149,13 +136,13 @@ void frame() sg.commit(); } -void cleanup() +extern (C) void cleanup() { sgl.shutdown(); sg.shutdown(); } -void main() +extern (C) void main() { sapp.IconDesc icon = {sokol_default: true}; sapp.Desc runner = { diff --git a/src/sokol/app.d b/src/sokol/app.d index 2f22391..c50c103 100644 --- a/src/sokol/app.d +++ b/src/sokol/app.d @@ -3,15 +3,19 @@ module sokol.app; // helper function to convert a C string to a D string -auto cStrToDString(const(char*) c_str) { - import std.conv: to; +auto cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } + enum max_touchpoints = 8; enum max_mousebuttons = 3; enum max_keycodes = 512; enum max_iconimages = 8; -enum EventType { +enum EventType +{ INVALID, KEY_DOWN, KEY_UP, @@ -38,7 +42,9 @@ enum EventType { FILES_DROPPED, NUM, } -enum Keycode { + +enum Keycode +{ INVALID = 0, SPACE = 32, APOSTROPHE = 39, @@ -161,25 +167,32 @@ enum Keycode { RIGHT_SUPER = 347, MENU = 348, } -enum AndroidTooltype { + +enum AndroidTooltype +{ UNKNOWN = 0, FINGER = 1, STYLUS = 2, MOUSE = 3, } -struct Touchpoint { + +struct Touchpoint +{ size_t identifier; float pos_x; float pos_y; AndroidTooltype android_tooltype; bool changed; } -enum Mousebutton { + +enum Mousebutton +{ LEFT = 0, RIGHT = 1, MIDDLE = 2, INVALID = 256, } + enum modifier_shift = 1; enum modifier_ctrl = 2; enum modifier_alt = 4; @@ -187,7 +200,8 @@ enum modifier_super = 8; enum modifier_lmb = 256; enum modifier_rmb = 512; enum modifier_mmb = 1024; -struct Event { +struct Event +{ ulong frame_count; EventType type; Keycode key_code; @@ -208,25 +222,35 @@ struct Event { int framebuffer_width; int framebuffer_height; } -struct Range { + +struct Range +{ const(void)* ptr; size_t size; } -struct ImageDesc { + +struct ImageDesc +{ int width; int height; Range pixels; } -struct IconDesc { + +struct IconDesc +{ bool sokol_default; ImageDesc[8] images; } -struct Allocator { + +struct Allocator +{ void* function(size_t, void*) alloc_fn; void function(void*, void*) free_fn; void* user_data; } -enum LogItem { + +enum LogItem +{ OK, MALLOC_FAILED, MACOS_INVALID_NSOPENGL_PROFILE, @@ -326,20 +350,24 @@ enum LogItem { DROPPED_FILE_PATH_TOO_LONG, CLIPBOARD_STRING_TOO_BIG, } -struct Logger { - extern(C) void function(const (char*), uint, uint, const (char*), uint, const (char*), void*) func; + +struct Logger +{ + extern (C) void function(const(char*), uint, uint, const(char*), uint, const(char*), void*) func; void* user_data; } -struct Desc { - void function() init_cb; - void function() frame_cb; - void function() cleanup_cb; - void function(const Event *) event_cb; + +struct Desc +{ + extern (C) void function() init_cb; + extern (C) void function() frame_cb; + extern (C) void function() cleanup_cb; + extern (C) void function(const Event*) event_cb; void* user_data; void function(void*) init_userdata_cb; void function(void*) frame_userdata_cb; void function(void*) cleanup_userdata_cb; - void function(const Event *, void*) event_userdata_cb; + void function(const Event*, void*) event_userdata_cb; int width; int height; int sample_count; @@ -347,7 +375,7 @@ struct Desc { bool high_dpi; bool fullscreen; bool alpha; - const (char*) window_title; + const(char*) window_title; bool enable_clipboard; int clipboard_size; bool enable_dragndrop; @@ -361,19 +389,23 @@ struct Desc { bool win32_console_utf8; bool win32_console_create; bool win32_console_attach; - const (char*) html5_canvas_name; + const(char*) html5_canvas_name; bool html5_canvas_resize; bool html5_preserve_drawing_buffer; bool html5_premultiplied_alpha; bool html5_ask_leave_site; bool ios_keyboard_resizes_canvas; } -enum Html5FetchError { + +enum Html5FetchError +{ FETCH_ERROR_NO_ERROR, FETCH_ERROR_BUFFER_TOO_SMALL, FETCH_ERROR_OTHER, } -struct Html5FetchResponse { + +struct Html5FetchResponse +{ bool succeeded; Html5FetchError error_code; int file_index; @@ -381,13 +413,17 @@ struct Html5FetchResponse { Range buffer; void* user_data; } -struct Html5FetchRequest { + +struct Html5FetchRequest +{ int dropped_file_index; - void function(const Html5FetchResponse *) callback; + void function(const Html5FetchResponse*) callback; Range buffer; void* user_data; } -enum MouseCursor { + +enum MouseCursor +{ DEFAULT = 0, ARROW, IBEAM, @@ -401,227 +437,339 @@ enum MouseCursor { NOT_ALLOWED, NUM, } -extern(C) bool sapp_isvalid(); -bool isvalid() { + +extern (C) bool sapp_isvalid(); +bool isvalid() +{ return sapp_isvalid(); } -extern(C) int sapp_width(); -int width() { + +extern (C) int sapp_width(); +int width() +{ return sapp_width(); } -extern(C) float sapp_widthf(); -float widthf() { + +extern (C) float sapp_widthf(); +float widthf() +{ return sapp_widthf(); } -extern(C) int sapp_height(); -int height() { + +extern (C) int sapp_height(); +int height() +{ return sapp_height(); } -extern(C) float sapp_heightf(); -float heightf() { + +extern (C) float sapp_heightf(); +float heightf() +{ return sapp_heightf(); } -extern(C) int sapp_color_format(); -int colorFormat() { + +extern (C) int sapp_color_format(); +int colorFormat() +{ return sapp_color_format(); } -extern(C) int sapp_depth_format(); -int depthFormat() { + +extern (C) int sapp_depth_format(); +int depthFormat() +{ return sapp_depth_format(); } -extern(C) int sapp_sample_count(); -int sampleCount() { + +extern (C) int sapp_sample_count(); +int sampleCount() +{ return sapp_sample_count(); } -extern(C) bool sapp_high_dpi(); -bool highDpi() { + +extern (C) bool sapp_high_dpi(); +bool highDpi() +{ return sapp_high_dpi(); } -extern(C) float sapp_dpi_scale(); -float dpiScale() { + +extern (C) float sapp_dpi_scale(); +float dpiScale() +{ return sapp_dpi_scale(); } -extern(C) void sapp_show_keyboard(bool); -void showKeyboard(bool show) { + +extern (C) void sapp_show_keyboard(bool); +void showKeyboard(bool show) +{ sapp_show_keyboard(show); } -extern(C) bool sapp_keyboard_shown(); -bool keyboardShown() { + +extern (C) bool sapp_keyboard_shown(); +bool keyboardShown() +{ return sapp_keyboard_shown(); } -extern(C) bool sapp_is_fullscreen(); -bool isFullscreen() { + +extern (C) bool sapp_is_fullscreen(); +bool isFullscreen() +{ return sapp_is_fullscreen(); } -extern(C) void sapp_toggle_fullscreen(); -void toggleFullscreen() { + +extern (C) void sapp_toggle_fullscreen(); +void toggleFullscreen() +{ sapp_toggle_fullscreen(); } -extern(C) void sapp_show_mouse(bool); -void showMouse(bool show) { + +extern (C) void sapp_show_mouse(bool); +void showMouse(bool show) +{ sapp_show_mouse(show); } -extern(C) bool sapp_mouse_shown(); -bool mouseShown() { + +extern (C) bool sapp_mouse_shown(); +bool mouseShown() +{ return sapp_mouse_shown(); } -extern(C) void sapp_lock_mouse(bool); -void lockMouse(bool lock) { + +extern (C) void sapp_lock_mouse(bool); +void lockMouse(bool lock) +{ sapp_lock_mouse(lock); } -extern(C) bool sapp_mouse_locked(); -bool mouseLocked() { + +extern (C) bool sapp_mouse_locked(); +bool mouseLocked() +{ return sapp_mouse_locked(); } -extern(C) void sapp_set_mouse_cursor(MouseCursor); -void setMouseCursor(MouseCursor cursor) { + +extern (C) void sapp_set_mouse_cursor(MouseCursor); +void setMouseCursor(MouseCursor cursor) +{ sapp_set_mouse_cursor(cursor); } -extern(C) MouseCursor sapp_get_mouse_cursor(); -MouseCursor getMouseCursor() { + +extern (C) MouseCursor sapp_get_mouse_cursor(); +MouseCursor getMouseCursor() +{ return sapp_get_mouse_cursor(); } -extern(C) void* sapp_userdata(); -void* userdata() { + +extern (C) void* sapp_userdata(); +void* userdata() +{ return sapp_userdata(); } -extern(C) Desc sapp_query_desc(); -Desc queryDesc() { + +extern (C) Desc sapp_query_desc(); +Desc queryDesc() +{ return sapp_query_desc(); } -extern(C) void sapp_request_quit(); -void requestQuit() { + +extern (C) void sapp_request_quit(); +void requestQuit() +{ sapp_request_quit(); } -extern(C) void sapp_cancel_quit(); -void cancelQuit() { + +extern (C) void sapp_cancel_quit(); +void cancelQuit() +{ sapp_cancel_quit(); } -extern(C) void sapp_quit(); -void quit() { + +extern (C) void sapp_quit(); +void quit() +{ sapp_quit(); } -extern(C) void sapp_consume_event(); -void consumeEvent() { + +extern (C) void sapp_consume_event(); +void consumeEvent() +{ sapp_consume_event(); } -extern(C) ulong sapp_frame_count(); -ulong frameCount() { + +extern (C) ulong sapp_frame_count(); +ulong frameCount() +{ return sapp_frame_count(); } -extern(C) double sapp_frame_duration(); -double frameDuration() { + +extern (C) double sapp_frame_duration(); +double frameDuration() +{ return sapp_frame_duration(); } -extern(C) void sapp_set_clipboard_string(const (char*)); -void setClipboardString(const (char*) str) { + +extern (C) void sapp_set_clipboard_string(const(char*)); +void setClipboardString(const(char*) str) +{ sapp_set_clipboard_string(str); } -extern(C) const (char*) sapp_get_clipboard_string(); -string getClipboardString() { + +extern (C) const(char*) sapp_get_clipboard_string(); +string getClipboardString() +{ return cStrToDString(sapp_get_clipboard_string()); } -extern(C) void sapp_set_window_title(const (char*)); -void setWindowTitle(const (char*) str) { + +extern (C) void sapp_set_window_title(const(char*)); +void setWindowTitle(const(char*) str) +{ sapp_set_window_title(str); } -extern(C) void sapp_set_icon(const IconDesc *); -void setIcon(IconDesc icon_desc) { + +extern (C) void sapp_set_icon(const IconDesc*); +void setIcon(IconDesc icon_desc) +{ sapp_set_icon(&icon_desc); } -extern(C) int sapp_get_num_dropped_files(); -int getNumDroppedFiles() { + +extern (C) int sapp_get_num_dropped_files(); +int getNumDroppedFiles() +{ return sapp_get_num_dropped_files(); } -extern(C) const (char*) sapp_get_dropped_file_path(int); -string getDroppedFilePath(int index) { + +extern (C) const(char*) sapp_get_dropped_file_path(int); +string getDroppedFilePath(int index) +{ return cStrToDString(sapp_get_dropped_file_path(index)); } -extern(C) void sapp_run(const Desc *); -void run(Desc desc) { + +extern (C) void sapp_run(const Desc*); +void run(Desc desc) +{ sapp_run(&desc); } -extern(C) const(void)* sapp_egl_get_display(); -const(void)* eglGetDisplay() { + +extern (C) const(void)* sapp_egl_get_display(); +const(void)* eglGetDisplay() +{ return sapp_egl_get_display(); } -extern(C) const(void)* sapp_egl_get_context(); -const(void)* eglGetContext() { + +extern (C) const(void)* sapp_egl_get_context(); +const(void)* eglGetContext() +{ return sapp_egl_get_context(); } -extern(C) void sapp_html5_ask_leave_site(bool); -void html5AskLeaveSite(bool ask) { + +extern (C) void sapp_html5_ask_leave_site(bool); +void html5AskLeaveSite(bool ask) +{ sapp_html5_ask_leave_site(ask); } -extern(C) uint sapp_html5_get_dropped_file_size(int); -uint html5GetDroppedFileSize(int index) { + +extern (C) uint sapp_html5_get_dropped_file_size(int); +uint html5GetDroppedFileSize(int index) +{ return sapp_html5_get_dropped_file_size(index); } -extern(C) void sapp_html5_fetch_dropped_file(const Html5FetchRequest *); -void html5FetchDroppedFile(Html5FetchRequest request) { + +extern (C) void sapp_html5_fetch_dropped_file(const Html5FetchRequest*); +void html5FetchDroppedFile(Html5FetchRequest request) +{ sapp_html5_fetch_dropped_file(&request); } -extern(C) const(void)* sapp_metal_get_device(); -const(void)* metalGetDevice() { + +extern (C) const(void)* sapp_metal_get_device(); +const(void)* metalGetDevice() +{ return sapp_metal_get_device(); } -extern(C) const(void)* sapp_metal_get_renderpass_descriptor(); -const(void)* metalGetRenderpassDescriptor() { + +extern (C) const(void)* sapp_metal_get_renderpass_descriptor(); +const(void)* metalGetRenderpassDescriptor() +{ return sapp_metal_get_renderpass_descriptor(); } -extern(C) const(void)* sapp_metal_get_drawable(); -const(void)* metalGetDrawable() { + +extern (C) const(void)* sapp_metal_get_drawable(); +const(void)* metalGetDrawable() +{ return sapp_metal_get_drawable(); } -extern(C) const(void)* sapp_macos_get_window(); -const(void)* macosGetWindow() { + +extern (C) const(void)* sapp_macos_get_window(); +const(void)* macosGetWindow() +{ return sapp_macos_get_window(); } -extern(C) const(void)* sapp_ios_get_window(); -const(void)* iosGetWindow() { + +extern (C) const(void)* sapp_ios_get_window(); +const(void)* iosGetWindow() +{ return sapp_ios_get_window(); } -extern(C) const(void)* sapp_d3d11_get_device(); -const(void)* d3d11GetDevice() { + +extern (C) const(void)* sapp_d3d11_get_device(); +const(void)* d3d11GetDevice() +{ return sapp_d3d11_get_device(); } -extern(C) const(void)* sapp_d3d11_get_device_context(); -const(void)* d3d11GetDeviceContext() { + +extern (C) const(void)* sapp_d3d11_get_device_context(); +const(void)* d3d11GetDeviceContext() +{ return sapp_d3d11_get_device_context(); } -extern(C) const(void)* sapp_d3d11_get_swap_chain(); -const(void)* d3d11GetSwapChain() { + +extern (C) const(void)* sapp_d3d11_get_swap_chain(); +const(void)* d3d11GetSwapChain() +{ return sapp_d3d11_get_swap_chain(); } -extern(C) const(void)* sapp_d3d11_get_render_target_view(); -const(void)* d3d11GetRenderTargetView() { + +extern (C) const(void)* sapp_d3d11_get_render_target_view(); +const(void)* d3d11GetRenderTargetView() +{ return sapp_d3d11_get_render_target_view(); } -extern(C) const(void)* sapp_d3d11_get_depth_stencil_view(); -const(void)* d3d11GetDepthStencilView() { + +extern (C) const(void)* sapp_d3d11_get_depth_stencil_view(); +const(void)* d3d11GetDepthStencilView() +{ return sapp_d3d11_get_depth_stencil_view(); } -extern(C) const(void)* sapp_win32_get_hwnd(); -const(void)* win32GetHwnd() { + +extern (C) const(void)* sapp_win32_get_hwnd(); +const(void)* win32GetHwnd() +{ return sapp_win32_get_hwnd(); } -extern(C) const(void)* sapp_wgpu_get_device(); -const(void)* wgpuGetDevice() { + +extern (C) const(void)* sapp_wgpu_get_device(); +const(void)* wgpuGetDevice() +{ return sapp_wgpu_get_device(); } -extern(C) const(void)* sapp_wgpu_get_render_view(); -const(void)* wgpuGetRenderView() { + +extern (C) const(void)* sapp_wgpu_get_render_view(); +const(void)* wgpuGetRenderView() +{ return sapp_wgpu_get_render_view(); } -extern(C) const(void)* sapp_wgpu_get_resolve_view(); -const(void)* wgpuGetResolveView() { + +extern (C) const(void)* sapp_wgpu_get_resolve_view(); +const(void)* wgpuGetResolveView() +{ return sapp_wgpu_get_resolve_view(); } -extern(C) const(void)* sapp_wgpu_get_depth_stencil_view(); -const(void)* wgpuGetDepthStencilView() { + +extern (C) const(void)* sapp_wgpu_get_depth_stencil_view(); +const(void)* wgpuGetDepthStencilView() +{ return sapp_wgpu_get_depth_stencil_view(); } -extern(C) const(void)* sapp_android_get_native_activity(); -const(void)* androidGetNativeActivity() { + +extern (C) const(void)* sapp_android_get_native_activity(); +const(void)* androidGetNativeActivity() +{ return sapp_android_get_native_activity(); } diff --git a/src/sokol/audio.d b/src/sokol/audio.d index d821257..1d9b59d 100644 --- a/src/sokol/audio.d +++ b/src/sokol/audio.d @@ -3,11 +3,15 @@ module sokol.audio; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } -enum LogItem { + +enum LogItem +{ OK, MALLOC_FAILED, ALSA_SND_PCM_OPEN_FAILED, @@ -45,68 +49,96 @@ enum LogItem { COREAUDIO_START_FAILED, BACKEND_BUFFER_SIZE_ISNT_MULTIPLE_OF_PACKET_SIZE, } -struct Logger { - void function(const (char*), uint, uint, const (char*), uint, const (char*), void*) func; + +struct Logger +{ + void function(const(char*), uint, uint, const(char*), uint, const(char*), void*) func; void* user_data; } -struct Allocator { + +struct Allocator +{ void* function(size_t, void*) alloc_fn; void function(void*, void*) free_fn; void* user_data; } -struct Desc { + +struct Desc +{ int sample_rate; int num_channels; int buffer_frames; int packet_frames; int num_packets; - void function(float *, int, int) stream_cb; - void function(float *, int, int, void*) stream_userdata_cb; + void function(float*, int, int) stream_cb; + void function(float*, int, int, void*) stream_userdata_cb; void* user_data; Allocator allocator; Logger logger; } -extern(C) void saudio_setup(const Desc *); -void setup(Desc desc) { + +extern (C) void saudio_setup(const Desc*); +void setup(Desc desc) +{ saudio_setup(&desc); } -extern(C) void saudio_shutdown(); -void shutdown() { + +extern (C) void saudio_shutdown(); +void shutdown() +{ saudio_shutdown(); } -extern(C) bool saudio_isvalid(); -bool isvalid() { + +extern (C) bool saudio_isvalid(); +bool isvalid() +{ return saudio_isvalid(); } -extern(C) void* saudio_userdata(); -void* userdata() { + +extern (C) void* saudio_userdata(); +void* userdata() +{ return saudio_userdata(); } -extern(C) Desc saudio_query_desc(); -Desc queryDesc() { + +extern (C) Desc saudio_query_desc(); +Desc queryDesc() +{ return saudio_query_desc(); } -extern(C) int saudio_sample_rate(); -int sampleRate() { + +extern (C) int saudio_sample_rate(); +int sampleRate() +{ return saudio_sample_rate(); } -extern(C) int saudio_buffer_frames(); -int bufferFrames() { + +extern (C) int saudio_buffer_frames(); +int bufferFrames() +{ return saudio_buffer_frames(); } -extern(C) int saudio_channels(); -int channels() { + +extern (C) int saudio_channels(); +int channels() +{ return saudio_channels(); } -extern(C) bool saudio_suspended(); -bool suspended() { + +extern (C) bool saudio_suspended(); +bool suspended() +{ return saudio_suspended(); } -extern(C) int saudio_expect(); -int expect() { + +extern (C) int saudio_expect(); +int expect() +{ return saudio_expect(); } -extern(C) int saudio_push(const float *, int); -int push(const float * frames, int num_frames) { + +extern (C) int saudio_push(const float*, int); +int push(const float* frames, int num_frames) +{ return saudio_push(frames, num_frames); } diff --git a/src/sokol/debugtext.d b/src/sokol/debugtext.d index a9882c7..3d95b87 100644 --- a/src/sokol/debugtext.d +++ b/src/sokol/debugtext.d @@ -4,22 +4,66 @@ module sokol.debugtext; import sg = sokol.gfx; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(T)(T c_str) +{ + import std.conv : to; + return c_str.to!string; } // helper function to convert "anything" to a Range struct -Range asRange(T)(T val) { - static if (isPointer!T) { - return Range(val, __traits(classInstanceSize, T)); - } else static if (is(T == struct)) { - return Range(val.tupleof); - } else { - static assert(0, "Cannot convert to range"); +Range asRange(T)(T val) +{ + static if (isPointer!T) + { + return Range(val, __traits(classInstanceSize, T)); + } + else static if (is(T == struct)) + { + return Range(val.tupleof); + } + else + { + static assert(0, "Cannot convert to range"); } } -enum LogItem { + +struct Writer +{ + void write(R)(R range) if (isInputRange!R && is(ElementType!R : const(ubyte))) + { + foreach (b; range) + { + putc(b); + } + } + + void writeMultiple(ubyte b, ulong n) + { + import core.stdc.stdio; + + foreach (_; 0 .. n) + { + putc(cast(int) b); + } + } +} + +void print(Args...)(const char[] fmt, Args args) +{ + import std.array; + import std.format; + + auto w = appender!string(); + formattedWrite(w, fmt, args); +} + +extern (C): +@nogc: +__gshared: +nothrow: +enum LogItem +{ OK, MALLOC_FAILED, ADD_COMMIT_LISTENER_FAILED, @@ -27,23 +71,33 @@ enum LogItem { CONTEXT_POOL_EXHAUSTED, CANNOT_DESTROY_DEFAULT_CONTEXT, } -struct Logger { - void function(const (char*), uint, uint, const (char*), uint, const (char*), void*) func; + +struct Logger +{ + void function(const(char*), uint, uint, const(char*), uint, const(char*), void*) func; void* user_data; } -struct Context { + +struct Context +{ uint id; } -struct Range { + +struct Range +{ const(void)* ptr; size_t size; } -struct FontDesc { + +struct FontDesc +{ Range data; ubyte first_char; ubyte last_char; } -struct ContextDesc { + +struct ContextDesc +{ int max_commands; int char_buf_size; float canvas_width; @@ -53,12 +107,16 @@ struct ContextDesc { sg.PixelFormat depth_format; int sample_count; } -struct Allocator { + +struct Allocator +{ void* function(size_t, void*) alloc_fn; void function(void*, void*) free_fn; void* user_data; } -struct Desc { + +struct Desc +{ int context_pool_size; int printf_buf_size; FontDesc[8] fonts; @@ -66,151 +124,225 @@ struct Desc { Allocator allocator; Logger logger; } -extern(C) void sdtx_setup(const Desc *); -void setup(Desc desc) { + +extern (C) void sdtx_setup(const Desc*); +void setup(Desc desc) +{ sdtx_setup(&desc); } -extern(C) void sdtx_shutdown(); -void shutdown() { + +extern (C) void sdtx_shutdown(); +void shutdown() +{ sdtx_shutdown(); } -extern(C) FontDesc sdtx_font_kc853(); -FontDesc fontKc853() { + +extern (C) FontDesc sdtx_font_kc853(); +FontDesc fontKc853() +{ return sdtx_font_kc853(); } -extern(C) FontDesc sdtx_font_kc854(); -FontDesc fontKc854() { + +extern (C) FontDesc sdtx_font_kc854(); +FontDesc fontKc854() +{ return sdtx_font_kc854(); } -extern(C) FontDesc sdtx_font_z1013(); -FontDesc fontZ1013() { + +extern (C) FontDesc sdtx_font_z1013(); +FontDesc fontZ1013() +{ return sdtx_font_z1013(); } -extern(C) FontDesc sdtx_font_cpc(); -FontDesc fontCpc() { + +extern (C) FontDesc sdtx_font_cpc(); +FontDesc fontCpc() +{ return sdtx_font_cpc(); } -extern(C) FontDesc sdtx_font_c64(); -FontDesc fontC64() { + +extern (C) FontDesc sdtx_font_c64(); +FontDesc fontC64() +{ return sdtx_font_c64(); } -extern(C) FontDesc sdtx_font_oric(); -FontDesc fontOric() { + +extern (C) FontDesc sdtx_font_oric(); +FontDesc fontOric() +{ return sdtx_font_oric(); } -extern(C) Context sdtx_make_context(const ContextDesc *); -Context makeContext(ContextDesc desc) { + +extern (C) Context sdtx_make_context(const ContextDesc*); +Context makeContext(ContextDesc desc) +{ return sdtx_make_context(&desc); } -extern(C) void sdtx_destroy_context(Context); -void destroyContext(Context ctx) { + +extern (C) void sdtx_destroy_context(Context); +void destroyContext(Context ctx) +{ sdtx_destroy_context(ctx); } -extern(C) void sdtx_set_context(Context); -void setContext(Context ctx) { + +extern (C) void sdtx_set_context(Context); +void setContext(Context ctx) +{ sdtx_set_context(ctx); } -extern(C) Context sdtx_get_context(); -Context getContext() { + +extern (C) Context sdtx_get_context(); +Context getContext() +{ return sdtx_get_context(); } -extern(C) Context sdtx_default_context(); -Context defaultContext() { + +extern (C) Context sdtx_default_context(); +Context defaultContext() +{ return sdtx_default_context(); } -extern(C) void sdtx_draw(); -void draw() { + +extern (C) void sdtx_draw(); +void draw() +{ sdtx_draw(); } -extern(C) void sdtx_context_draw(Context); -void contextDraw(Context ctx) { + +extern (C) void sdtx_context_draw(Context); +void contextDraw(Context ctx) +{ sdtx_context_draw(ctx); } -extern(C) void sdtx_draw_layer(int); -void drawLayer(int layer_id) { + +extern (C) void sdtx_draw_layer(int); +void drawLayer(int layer_id) +{ sdtx_draw_layer(layer_id); } -extern(C) void sdtx_context_draw_layer(Context, int); -void contextDrawLayer(Context ctx, int layer_id) { + +extern (C) void sdtx_context_draw_layer(Context, int); +void contextDrawLayer(Context ctx, int layer_id) +{ sdtx_context_draw_layer(ctx, layer_id); } -extern(C) void sdtx_layer(int); -void layer(int layer_id) { + +extern (C) void sdtx_layer(int); +void layer(int layer_id) +{ sdtx_layer(layer_id); } -extern(C) void sdtx_font(uint); -void font(uint font_index) { + +extern (C) void sdtx_font(uint); +void font(uint font_index) +{ sdtx_font(font_index); } -extern(C) void sdtx_canvas(float, float); -void canvas(float w, float h) { + +extern (C) void sdtx_canvas(float, float); +void canvas(float w, float h) +{ sdtx_canvas(w, h); } -extern(C) void sdtx_origin(float, float); -void origin(float x, float y) { + +extern (C) void sdtx_origin(float, float); +void origin(float x, float y) +{ sdtx_origin(x, y); } -extern(C) void sdtx_home(); -void home() { + +extern (C) void sdtx_home(); +void home() +{ sdtx_home(); } -extern(C) void sdtx_pos(float, float); -void pos(float x, float y) { + +extern (C) void sdtx_pos(float, float); +void pos(float x, float y) +{ sdtx_pos(x, y); } -extern(C) void sdtx_pos_x(float); -void posX(float x) { + +extern (C) void sdtx_pos_x(float); +void posX(float x) +{ sdtx_pos_x(x); } -extern(C) void sdtx_pos_y(float); -void posY(float y) { + +extern (C) void sdtx_pos_y(float); +void posY(float y) +{ sdtx_pos_y(y); } -extern(C) void sdtx_move(float, float); -void move(float dx, float dy) { + +extern (C) void sdtx_move(float, float); +void move(float dx, float dy) +{ sdtx_move(dx, dy); } -extern(C) void sdtx_move_x(float); -void moveX(float dx) { + +extern (C) void sdtx_move_x(float); +void moveX(float dx) +{ sdtx_move_x(dx); } -extern(C) void sdtx_move_y(float); -void moveY(float dy) { + +extern (C) void sdtx_move_y(float); +void moveY(float dy) +{ sdtx_move_y(dy); } -extern(C) void sdtx_crlf(); -void crlf() { + +extern (C) void sdtx_crlf(); +void crlf() +{ sdtx_crlf(); } -extern(C) void sdtx_color3b(ubyte, ubyte, ubyte); -void color3b(ubyte r, ubyte g, ubyte b) { + +extern (C) void sdtx_color3b(ubyte, ubyte, ubyte); +void color3b(ubyte r, ubyte g, ubyte b) +{ sdtx_color3b(r, g, b); } -extern(C) void sdtx_color3f(float, float, float); -void color3f(float r, float g, float b) { + +extern (C) void sdtx_color3f(float, float, float); +void color3f(float r, float g, float b) +{ sdtx_color3f(r, g, b); } -extern(C) void sdtx_color4b(ubyte, ubyte, ubyte, ubyte); -void color4b(ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sdtx_color4b(ubyte, ubyte, ubyte, ubyte); +void color4b(ubyte r, ubyte g, ubyte b, ubyte a) +{ sdtx_color4b(r, g, b, a); } -extern(C) void sdtx_color4f(float, float, float, float); -void color4f(float r, float g, float b, float a) { + +extern (C) void sdtx_color4f(float, float, float, float); +void color4f(float r, float g, float b, float a) +{ sdtx_color4f(r, g, b, a); } -extern(C) void sdtx_color1i(uint); -void color1i(uint rgba) { + +extern (C) void sdtx_color1i(uint); +void color1i(uint rgba) +{ sdtx_color1i(rgba); } -extern(C) void sdtx_putc(char); -void putc(char c) { + +extern (C) void sdtx_putc(char); +void putc(char c) +{ sdtx_putc(c); } -extern(C) void sdtx_puts(const (char*)); -void puts(const (char*) str) { + +extern (C) void sdtx_puts(const(char*)); +void puts(const(char*) str) +{ sdtx_puts(str); } -extern(C) void sdtx_putr(const (char*), int); -void putr(const (char*) str, int len) { + +extern (C) void sdtx_putr(const(char*), int); +void putr(const(char*) str, int len) +{ sdtx_putr(str, len); } diff --git a/src/sokol/gfx.d b/src/sokol/gfx.d index 6e5da5c..6bc1435 100644 --- a/src/sokol/gfx.d +++ b/src/sokol/gfx.d @@ -3,47 +3,71 @@ module sokol.gfx; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } // helper function to convert "anything" to a Range struct -Range asRange(T)(T val) { - static if (isPointer!T) { - return Range(val, __traits(classInstanceSize, T)); - } else static if (is(T == struct)) { - return Range(val.tupleof); - } else { - static assert(0, "Cannot convert to range"); +Range asRange(T)(T val) +{ + static if (isPointer!T) + { + return Range(val, __traits(classInstanceSize, T)); + } + else static if (is(T == struct)) + { + return Range(val.tupleof); + } + else + { + static assert(0, "Cannot convert to range"); } } -struct Buffer { +struct Buffer +{ uint id; } -struct Image { + +struct Image +{ uint id; } -struct Sampler { + +struct Sampler +{ uint id; } -struct Shader { + +struct Shader +{ uint id; } -struct Pipeline { + +struct Pipeline +{ uint id; } -struct Pass { + +struct Pass +{ uint id; } -struct Context { + +struct Context +{ uint id; } -struct Range { + +struct Range +{ const(void)* ptr; size_t size; } + enum invalid_id = 0; enum num_shader_stages = 2; enum num_inflight_frames = 2; @@ -57,13 +81,16 @@ enum max_ub_members = 16; enum max_vertex_attributes = 16; enum max_mipmaps = 16; enum max_texturearray_layers = 128; -struct Color { +struct Color +{ float r; float g; float b; float a; } -enum Backend { + +enum Backend +{ GLCORE33, GLES3, D3D11, @@ -73,7 +100,9 @@ enum Backend { WGPU, DUMMY, } -enum PixelFormat { + +enum PixelFormat +{ DEFAULT, NONE, R8, @@ -140,7 +169,9 @@ enum PixelFormat { RGB9E5, NUM, } -struct PixelformatInfo { + +struct PixelformatInfo +{ bool sample; bool filter; bool render; @@ -148,13 +179,17 @@ struct PixelformatInfo { bool msaa; bool depth; } -struct Features { + +struct Features +{ bool origin_top_left; bool image_clamp_to_border; bool mrt_independent_blend_state; bool mrt_independent_write_mask; } -struct Limits { + +struct Limits +{ int max_image_size_2d; int max_image_size_cube; int max_image_size_3d; @@ -164,34 +199,44 @@ struct Limits { int gl_max_vertex_uniform_vectors; int gl_max_combined_texture_image_units; } -enum ResourceState { + +enum ResourceState +{ INITIAL, ALLOC, VALID, FAILED, INVALID, } -enum Usage { + +enum Usage +{ DEFAULT, IMMUTABLE, DYNAMIC, STREAM, NUM, } -enum BufferType { + +enum BufferType +{ DEFAULT, VERTEXBUFFER, INDEXBUFFER, NUM, } -enum IndexType { + +enum IndexType +{ DEFAULT, NONE, UINT16, UINT32, NUM, } -enum ImageType { + +enum ImageType +{ DEFAULT, _2D, CUBE, @@ -199,7 +244,9 @@ enum ImageType { ARRAY, NUM, } -enum ImageSampleType { + +enum ImageSampleType +{ DEFAULT, FLOAT, DEPTH, @@ -208,14 +255,18 @@ enum ImageSampleType { UNFILTERABLE_FLOAT, NUM, } -enum SamplerType { + +enum SamplerType +{ DEFAULT, FILTERING, NONFILTERING, COMPARISON, NUM, } -enum CubeFace { + +enum CubeFace +{ POS_X, NEG_X, POS_Y, @@ -224,11 +275,15 @@ enum CubeFace { NEG_Z, NUM, } -enum ShaderStage { + +enum ShaderStage +{ VS, FS, } -enum PrimitiveType { + +enum PrimitiveType +{ DEFAULT, POINTS, LINES, @@ -237,14 +292,18 @@ enum PrimitiveType { TRIANGLE_STRIP, NUM, } -enum Filter { + +enum Filter +{ DEFAULT, NONE, NEAREST, LINEAR, NUM, } -enum Wrap { + +enum Wrap +{ DEFAULT, REPEAT, CLAMP_TO_EDGE, @@ -252,14 +311,18 @@ enum Wrap { MIRRORED_REPEAT, NUM, } -enum BorderColor { + +enum BorderColor +{ DEFAULT, TRANSPARENT_BLACK, OPAQUE_BLACK, OPAQUE_WHITE, NUM, } -enum VertexFormat { + +enum VertexFormat +{ INVALID, FLOAT, FLOAT2, @@ -280,13 +343,17 @@ enum VertexFormat { HALF4, NUM, } -enum VertexStep { + +enum VertexStep +{ DEFAULT, PER_VERTEX, PER_INSTANCE, NUM, } -enum UniformType { + +enum UniformType +{ INVALID, FLOAT, FLOAT2, @@ -299,26 +366,34 @@ enum UniformType { MAT4, NUM, } -enum UniformLayout { + +enum UniformLayout +{ DEFAULT, NATIVE, STD140, NUM, } -enum CullMode { + +enum CullMode +{ DEFAULT, NONE, FRONT, BACK, NUM, } -enum FaceWinding { + +enum FaceWinding +{ DEFAULT, CCW, CW, NUM, } -enum CompareFunc { + +enum CompareFunc +{ DEFAULT, NEVER, LESS, @@ -330,7 +405,9 @@ enum CompareFunc { ALWAYS, NUM, } -enum StencilOp { + +enum StencilOp +{ DEFAULT, KEEP, ZERO, @@ -342,7 +419,9 @@ enum StencilOp { DECR_WRAP, NUM, } -enum BlendFactor { + +enum BlendFactor +{ DEFAULT, ZERO, ONE, @@ -361,14 +440,18 @@ enum BlendFactor { ONE_MINUS_BLEND_ALPHA, NUM, } -enum BlendOp { + +enum BlendOp +{ DEFAULT, ADD, SUBTRACT, REVERSE_SUBTRACT, NUM, } -enum ColorMask { + +enum ColorMask +{ DEFAULT = 0, NONE = 16, R = 1, @@ -387,44 +470,60 @@ enum ColorMask { GBA = 14, RGBA = 15, } -enum LoadAction { + +enum LoadAction +{ DEFAULT, CLEAR, LOAD, DONTCARE, } -enum StoreAction { + +enum StoreAction +{ DEFAULT, STORE, DONTCARE, } -struct ColorAttachmentAction { + +struct ColorAttachmentAction +{ LoadAction load_action; StoreAction store_action; Color clear_value; } -struct DepthAttachmentAction { + +struct DepthAttachmentAction +{ LoadAction load_action; StoreAction store_action; float clear_value; } -struct StencilAttachmentAction { + +struct StencilAttachmentAction +{ LoadAction load_action; StoreAction store_action; ubyte clear_value; } -struct PassAction { + +struct PassAction +{ uint _start_canary; ColorAttachmentAction[4] colors; DepthAttachmentAction depth; StencilAttachmentAction stencil; uint _end_canary; } -struct StageBindings { + +struct StageBindings +{ Image[12] images; Sampler[8] samplers; } -struct Bindings { + +struct Bindings +{ uint _start_canary; Buffer[8] vertex_buffers; int[8] vertex_buffer_offsets; @@ -434,23 +533,29 @@ struct Bindings { StageBindings fs; uint _end_canary; } -struct BufferDesc { + +struct BufferDesc +{ uint _start_canary; size_t size; BufferType type; Usage usage; Range data; - const (char*) label; + const(char*) label; uint[2] gl_buffers; const(void)*[2] mtl_buffers; const(void)* d3d11_buffer; const(void)* wgpu_buffer; uint _end_canary; } -struct ImageData { + +struct ImageData +{ Range[6][16] subimage; } -struct ImageDesc { + +struct ImageDesc +{ uint _start_canary; ImageType type; bool render_target; @@ -462,7 +567,7 @@ struct ImageDesc { PixelFormat pixel_format; int sample_count; ImageData data; - const (char*) label; + const(char*) label; uint[2] gl_textures; uint gl_texture_target; const(void)*[2] mtl_textures; @@ -472,7 +577,9 @@ struct ImageDesc { const(void)* wgpu_texture_view; uint _end_canary; } -struct SamplerDesc { + +struct SamplerDesc +{ uint _start_canary; Filter min_filter; Filter mag_filter; @@ -485,83 +592,109 @@ struct SamplerDesc { BorderColor border_color; CompareFunc compare; uint max_anisotropy; - const (char*) label; + const(char*) label; uint gl_sampler; const(void)* mtl_sampler; const(void)* d3d11_sampler; const(void)* wgpu_sampler; uint _end_canary; } -struct ShaderAttrDesc { - const (char*) name; - const (char*) sem_name; + +struct ShaderAttrDesc +{ + const(char*) name; + const(char*) sem_name; int sem_index; } -struct ShaderUniformDesc { - const (char*) name; + +struct ShaderUniformDesc +{ + const(char*) name; UniformType type; int array_count; } -struct ShaderUniformBlockDesc { + +struct ShaderUniformBlockDesc +{ size_t size; UniformLayout layout; ShaderUniformDesc[16] uniforms; } -struct ShaderImageDesc { + +struct ShaderImageDesc +{ bool used; bool multisampled; ImageType image_type; ImageSampleType sample_type; } -struct ShaderSamplerDesc { + +struct ShaderSamplerDesc +{ bool used; SamplerType sampler_type; } -struct ShaderImageSamplerPairDesc { + +struct ShaderImageSamplerPairDesc +{ bool used; int image_slot; int sampler_slot; - const (char*) glsl_name; + const(char*) glsl_name; } -struct ShaderStageDesc { - const (char*) source; + +struct ShaderStageDesc +{ + const(char*) source; Range bytecode; - const (char*) entry; - const (char*) d3d11_target; + const(char*) entry; + const(char*) d3d11_target; ShaderUniformBlockDesc[4] uniform_blocks; ShaderImageDesc[12] images; ShaderSamplerDesc[8] samplers; ShaderImageSamplerPairDesc[12] image_sampler_pairs; } -struct ShaderDesc { + +struct ShaderDesc +{ uint _start_canary; ShaderAttrDesc[16] attrs; ShaderStageDesc vs; ShaderStageDesc fs; - const (char*) label; + const(char*) label; uint _end_canary; } -struct VertexBufferLayoutState { + +struct VertexBufferLayoutState +{ int stride; VertexStep step_func; int step_rate; } -struct VertexAttrState { + +struct VertexAttrState +{ int buffer_index; int offset; VertexFormat format; } -struct VertexLayoutState { + +struct VertexLayoutState +{ VertexBufferLayoutState[8] buffers; VertexAttrState[16] attrs; } -struct StencilFaceState { + +struct StencilFaceState +{ CompareFunc compare; StencilOp fail_op; StencilOp depth_fail_op; StencilOp pass_op; } -struct StencilState { + +struct StencilState +{ bool enabled; StencilFaceState front; StencilFaceState back; @@ -569,7 +702,9 @@ struct StencilState { ubyte write_mask; ubyte reference; } -struct DepthState { + +struct DepthState +{ PixelFormat pixel_format; CompareFunc compare; bool write_enabled; @@ -577,7 +712,9 @@ struct DepthState { float bias_slope_scale; float bias_clamp; } -struct BlendState { + +struct BlendState +{ bool enabled; BlendFactor src_factor_rgb; BlendFactor dst_factor_rgb; @@ -586,12 +723,16 @@ struct BlendState { BlendFactor dst_factor_alpha; BlendOp op_alpha; } -struct ColorTargetState { + +struct ColorTargetState +{ PixelFormat pixel_format; ColorMask write_mask; BlendState blend; } -struct PipelineDesc { + +struct PipelineDesc +{ uint _start_canary; Shader shader; VertexLayoutState layout; @@ -606,28 +747,36 @@ struct PipelineDesc { int sample_count; Color blend_color; bool alpha_to_coverage_enabled; - const (char*) label; + const(char*) label; uint _end_canary; } -struct PassAttachmentDesc { + +struct PassAttachmentDesc +{ Image image; int mip_level; int slice; } -struct PassDesc { + +struct PassDesc +{ uint _start_canary; PassAttachmentDesc[4] color_attachments; PassAttachmentDesc[4] resolve_attachments; PassAttachmentDesc depth_stencil_attachment; - const (char*) label; + const(char*) label; uint _end_canary; } -struct SlotInfo { + +struct SlotInfo +{ ResourceState state; uint res_id; uint ctx_id; } -struct BufferInfo { + +struct BufferInfo +{ SlotInfo slot; uint update_frame_index; uint append_frame_index; @@ -636,25 +785,37 @@ struct BufferInfo { int num_slots; int active_slot; } -struct ImageInfo { + +struct ImageInfo +{ SlotInfo slot; uint upd_frame_index; int num_slots; int active_slot; } -struct SamplerInfo { + +struct SamplerInfo +{ SlotInfo slot; } -struct ShaderInfo { + +struct ShaderInfo +{ SlotInfo slot; } -struct PipelineInfo { + +struct PipelineInfo +{ SlotInfo slot; } -struct PassInfo { + +struct PassInfo +{ SlotInfo slot; } -struct FrameStatsGl { + +struct FrameStatsGl +{ uint num_bind_buffer; uint num_active_texture; uint num_bind_texture; @@ -667,13 +828,17 @@ struct FrameStatsGl { uint num_disable_vertex_attrib_array; uint num_uniform; } -struct FrameStatsD3d11Pass { + +struct FrameStatsD3d11Pass +{ uint num_om_set_render_targets; uint num_clear_render_target_view; uint num_clear_depth_stencil_view; uint num_resolve_subresource; } -struct FrameStatsD3d11Pipeline { + +struct FrameStatsD3d11Pipeline +{ uint num_rs_set_state; uint num_om_set_depth_stencil_state; uint num_om_set_blend_state; @@ -684,7 +849,9 @@ struct FrameStatsD3d11Pipeline { uint num_ps_set_shader; uint num_ps_set_constant_buffers; } -struct FrameStatsD3d11Bindings { + +struct FrameStatsD3d11Bindings +{ uint num_ia_set_vertex_buffers; uint num_ia_set_index_buffer; uint num_vs_set_shader_resources; @@ -692,16 +859,22 @@ struct FrameStatsD3d11Bindings { uint num_vs_set_samplers; uint num_ps_set_samplers; } -struct FrameStatsD3d11Uniforms { + +struct FrameStatsD3d11Uniforms +{ uint num_update_subresource; } -struct FrameStatsD3d11Draw { + +struct FrameStatsD3d11Draw +{ uint num_draw_indexed_instanced; uint num_draw_indexed; uint num_draw_instanced; uint num_draw; } -struct FrameStatsD3d11 { + +struct FrameStatsD3d11 +{ FrameStatsD3d11Pass pass; FrameStatsD3d11Pipeline pipeline; FrameStatsD3d11Bindings bindings; @@ -710,12 +883,16 @@ struct FrameStatsD3d11 { uint num_map; uint num_unmap; } -struct FrameStatsMetalIdpool { + +struct FrameStatsMetalIdpool +{ uint num_added; uint num_released; uint num_garbage_collected; } -struct FrameStatsMetalPipeline { + +struct FrameStatsMetalPipeline +{ uint num_set_blend_color; uint num_set_cull_mode; uint num_set_front_facing_winding; @@ -724,28 +901,38 @@ struct FrameStatsMetalPipeline { uint num_set_render_pipeline_state; uint num_set_depth_stencil_state; } -struct FrameStatsMetalBindings { + +struct FrameStatsMetalBindings +{ uint num_set_vertex_buffer; uint num_set_vertex_texture; uint num_set_vertex_sampler_state; uint num_set_fragment_texture; uint num_set_fragment_sampler_state; } -struct FrameStatsMetalUniforms { + +struct FrameStatsMetalUniforms +{ uint num_set_vertex_buffer_offset; uint num_set_fragment_buffer_offset; } -struct FrameStatsMetal { + +struct FrameStatsMetal +{ FrameStatsMetalIdpool idpool; FrameStatsMetalPipeline pipeline; FrameStatsMetalBindings bindings; FrameStatsMetalUniforms uniforms; } -struct FrameStatsWgpuUniforms { + +struct FrameStatsWgpuUniforms +{ uint num_set_bindgroup; uint size_write_buffer; } -struct FrameStatsWgpuBindings { + +struct FrameStatsWgpuBindings +{ uint num_set_vertex_buffer; uint num_skip_redundant_vertex_buffer; uint num_set_index_buffer; @@ -759,11 +946,15 @@ struct FrameStatsWgpuBindings { uint num_bindgroup_cache_collisions; uint num_bindgroup_cache_hash_vs_key_mismatch; } -struct FrameStatsWgpu { + +struct FrameStatsWgpu +{ FrameStatsWgpuUniforms uniforms; FrameStatsWgpuBindings bindings; } -struct FrameStats { + +struct FrameStats +{ uint frame_index; uint num_passes; uint num_apply_viewport; @@ -784,7 +975,9 @@ struct FrameStats { FrameStatsMetal metal; FrameStatsWgpu wgpu; } -enum LogItem { + +enum LogItem +{ OK, MALLOC_FAILED, GL_TEXTURE_FORMAT_NOT_SUPPORTED, @@ -1045,7 +1238,9 @@ enum LogItem { VALIDATE_UPDIMG_ONCE, VALIDATION_FAILED, } -struct MetalContextDesc { + +struct MetalContextDesc +{ const(void)* device; const(void)* function() renderpass_descriptor_cb; const(void)* function(void*) renderpass_descriptor_userdata_cb; @@ -1053,7 +1248,9 @@ struct MetalContextDesc { const(void)* function(void*) drawable_userdata_cb; void* user_data; } -struct D3d11ContextDesc { + +struct D3d11ContextDesc +{ const(void)* device; const(void)* device_context; const(void)* function() render_target_view_cb; @@ -1062,7 +1259,9 @@ struct D3d11ContextDesc { const(void)* function(void*) depth_stencil_view_userdata_cb; void* user_data; } -struct WgpuContextDesc { + +struct WgpuContextDesc +{ const(void)* device; const(void)* function() render_view_cb; const(void)* function(void*) render_view_userdata_cb; @@ -1072,12 +1271,16 @@ struct WgpuContextDesc { const(void)* function(void*) depth_stencil_view_userdata_cb; void* user_data; } -struct GlContextDesc { + +struct GlContextDesc +{ uint function() default_framebuffer_cb; uint function(void*) default_framebuffer_userdata_cb; void* user_data; } -struct ContextDesc { + +struct ContextDesc +{ int color_format; int depth_format; int sample_count; @@ -1086,20 +1289,28 @@ struct ContextDesc { WgpuContextDesc wgpu; GlContextDesc gl; } -struct CommitListener { + +struct CommitListener +{ void function(void*) func; void* user_data; } -struct Allocator { + +struct Allocator +{ void* function(size_t, void*) alloc_fn; void function(void*, void*) free_fn; void* user_data; } -struct Logger { - extern(C) void function(const (char*), uint, uint, const (char*), uint, const (char*), void*) func; + +struct Logger +{ + extern (C) void function(const(char*), uint, uint, const(char*), uint, const(char*), void*) func; void* user_data; } -struct Desc { + +struct Desc +{ uint _start_canary; int buffer_pool_size; int image_pool_size; @@ -1119,632 +1330,944 @@ struct Desc { ContextDesc context; uint _end_canary; } -extern(C) void sg_setup(const Desc *); -void setup(Desc desc) { + +extern (C) void sg_setup(const Desc*); +void setup(Desc desc) +{ sg_setup(&desc); } -extern(C) void sg_shutdown(); -void shutdown() { + +extern (C) void sg_shutdown(); +void shutdown() +{ sg_shutdown(); } -extern(C) bool sg_isvalid(); -bool isvalid() { + +extern (C) bool sg_isvalid(); +bool isvalid() +{ return sg_isvalid(); } -extern(C) void sg_reset_state_cache(); -void resetStateCache() { + +extern (C) void sg_reset_state_cache(); +void resetStateCache() +{ sg_reset_state_cache(); } -extern(C) void sg_push_debug_group(const (char*)); -void pushDebugGroup(const (char*) name) { + +extern (C) void sg_push_debug_group(const(char*)); +void pushDebugGroup(const(char*) name) +{ sg_push_debug_group(name); } -extern(C) void sg_pop_debug_group(); -void popDebugGroup() { + +extern (C) void sg_pop_debug_group(); +void popDebugGroup() +{ sg_pop_debug_group(); } -extern(C) bool sg_add_commit_listener(CommitListener); -bool addCommitListener(CommitListener listener) { + +extern (C) bool sg_add_commit_listener(CommitListener); +bool addCommitListener(CommitListener listener) +{ return sg_add_commit_listener(listener); } -extern(C) bool sg_remove_commit_listener(CommitListener); -bool removeCommitListener(CommitListener listener) { + +extern (C) bool sg_remove_commit_listener(CommitListener); +bool removeCommitListener(CommitListener listener) +{ return sg_remove_commit_listener(listener); } -extern(C) Buffer sg_make_buffer(const BufferDesc *); -Buffer makeBuffer(BufferDesc desc) { + +extern (C) Buffer sg_make_buffer(const BufferDesc*); +Buffer makeBuffer(BufferDesc desc) +{ return sg_make_buffer(&desc); } -extern(C) Image sg_make_image(const ImageDesc *); -Image makeImage(ImageDesc desc) { + +extern (C) Image sg_make_image(const ImageDesc*); +Image makeImage(ImageDesc desc) +{ return sg_make_image(&desc); } -extern(C) Sampler sg_make_sampler(const SamplerDesc *); -Sampler makeSampler(SamplerDesc desc) { + +extern (C) Sampler sg_make_sampler(const SamplerDesc*); +Sampler makeSampler(SamplerDesc desc) +{ return sg_make_sampler(&desc); } -extern(C) Shader sg_make_shader(const ShaderDesc *); -Shader makeShader(ShaderDesc desc) { + +extern (C) Shader sg_make_shader(const ShaderDesc*); +Shader makeShader(ShaderDesc desc) +{ return sg_make_shader(&desc); } -extern(C) Pipeline sg_make_pipeline(const PipelineDesc *); -Pipeline makePipeline(PipelineDesc desc) { + +extern (C) Pipeline sg_make_pipeline(const PipelineDesc*); +Pipeline makePipeline(PipelineDesc desc) +{ return sg_make_pipeline(&desc); } -extern(C) Pass sg_make_pass(const PassDesc *); -Pass makePass(PassDesc desc) { + +extern (C) Pass sg_make_pass(const PassDesc*); +Pass makePass(PassDesc desc) +{ return sg_make_pass(&desc); } -extern(C) void sg_destroy_buffer(Buffer); -void destroyBuffer(Buffer buf) { + +extern (C) void sg_destroy_buffer(Buffer); +void destroyBuffer(Buffer buf) +{ sg_destroy_buffer(buf); } -extern(C) void sg_destroy_image(Image); -void destroyImage(Image img) { + +extern (C) void sg_destroy_image(Image); +void destroyImage(Image img) +{ sg_destroy_image(img); } -extern(C) void sg_destroy_sampler(Sampler); -void destroySampler(Sampler smp) { + +extern (C) void sg_destroy_sampler(Sampler); +void destroySampler(Sampler smp) +{ sg_destroy_sampler(smp); } -extern(C) void sg_destroy_shader(Shader); -void destroyShader(Shader shd) { + +extern (C) void sg_destroy_shader(Shader); +void destroyShader(Shader shd) +{ sg_destroy_shader(shd); } -extern(C) void sg_destroy_pipeline(Pipeline); -void destroyPipeline(Pipeline pip) { + +extern (C) void sg_destroy_pipeline(Pipeline); +void destroyPipeline(Pipeline pip) +{ sg_destroy_pipeline(pip); } -extern(C) void sg_destroy_pass(Pass); -void destroyPass(Pass pass) { + +extern (C) void sg_destroy_pass(Pass); +void destroyPass(Pass pass) +{ sg_destroy_pass(pass); } -extern(C) void sg_update_buffer(Buffer, const Range *); -void updateBuffer(Buffer buf, Range data) { + +extern (C) void sg_update_buffer(Buffer, const Range*); +void updateBuffer(Buffer buf, Range data) +{ sg_update_buffer(buf, &data); } -extern(C) void sg_update_image(Image, const ImageData *); -void updateImage(Image img, ImageData data) { + +extern (C) void sg_update_image(Image, const ImageData*); +void updateImage(Image img, ImageData data) +{ sg_update_image(img, &data); } -extern(C) int sg_append_buffer(Buffer, const Range *); -int appendBuffer(Buffer buf, Range data) { + +extern (C) int sg_append_buffer(Buffer, const Range*); +int appendBuffer(Buffer buf, Range data) +{ return sg_append_buffer(buf, &data); } -extern(C) bool sg_query_buffer_overflow(Buffer); -bool queryBufferOverflow(Buffer buf) { + +extern (C) bool sg_query_buffer_overflow(Buffer); +bool queryBufferOverflow(Buffer buf) +{ return sg_query_buffer_overflow(buf); } -extern(C) bool sg_query_buffer_will_overflow(Buffer, size_t); -bool queryBufferWillOverflow(Buffer buf, size_t size) { + +extern (C) bool sg_query_buffer_will_overflow(Buffer, size_t); +bool queryBufferWillOverflow(Buffer buf, size_t size) +{ return sg_query_buffer_will_overflow(buf, size); } -extern(C) void sg_begin_default_pass(const PassAction *, int, int); -void beginDefaultPass(PassAction pass_action, int width, int height) { + +extern (C) void sg_begin_default_pass(const PassAction*, int, int); +void beginDefaultPass(PassAction pass_action, int width, int height) +{ sg_begin_default_pass(&pass_action, width, height); } -extern(C) void sg_begin_default_passf(const PassAction *, float, float); -void beginDefaultPassf(PassAction pass_action, float width, float height) { + +extern (C) void sg_begin_default_passf(const PassAction*, float, float); +void beginDefaultPassf(PassAction pass_action, float width, float height) +{ sg_begin_default_passf(&pass_action, width, height); } -extern(C) void sg_begin_pass(Pass, const PassAction *); -void beginPass(Pass pass, PassAction pass_action) { + +extern (C) void sg_begin_pass(Pass, const PassAction*); +void beginPass(Pass pass, PassAction pass_action) +{ sg_begin_pass(pass, &pass_action); } -extern(C) void sg_apply_viewport(int, int, int, int, bool); -void applyViewport(int x, int y, int width, int height, bool origin_top_left) { + +extern (C) void sg_apply_viewport(int, int, int, int, bool); +void applyViewport(int x, int y, int width, int height, bool origin_top_left) +{ sg_apply_viewport(x, y, width, height, origin_top_left); } -extern(C) void sg_apply_viewportf(float, float, float, float, bool); -void applyViewportf(float x, float y, float width, float height, bool origin_top_left) { + +extern (C) void sg_apply_viewportf(float, float, float, float, bool); +void applyViewportf(float x, float y, float width, float height, bool origin_top_left) +{ sg_apply_viewportf(x, y, width, height, origin_top_left); } -extern(C) void sg_apply_scissor_rect(int, int, int, int, bool); -void applyScissorRect(int x, int y, int width, int height, bool origin_top_left) { + +extern (C) void sg_apply_scissor_rect(int, int, int, int, bool); +void applyScissorRect(int x, int y, int width, int height, bool origin_top_left) +{ sg_apply_scissor_rect(x, y, width, height, origin_top_left); } -extern(C) void sg_apply_scissor_rectf(float, float, float, float, bool); -void applyScissorRectf(float x, float y, float width, float height, bool origin_top_left) { + +extern (C) void sg_apply_scissor_rectf(float, float, float, float, bool); +void applyScissorRectf(float x, float y, float width, float height, bool origin_top_left) +{ sg_apply_scissor_rectf(x, y, width, height, origin_top_left); } -extern(C) void sg_apply_pipeline(Pipeline); -void applyPipeline(Pipeline pip) { + +extern (C) void sg_apply_pipeline(Pipeline); +void applyPipeline(Pipeline pip) +{ sg_apply_pipeline(pip); } -extern(C) void sg_apply_bindings(const Bindings *); -void applyBindings(Bindings bindings) { + +extern (C) void sg_apply_bindings(const Bindings*); +void applyBindings(Bindings bindings) +{ sg_apply_bindings(&bindings); } -extern(C) void sg_apply_uniforms(ShaderStage, uint, const Range *); -void applyUniforms(ShaderStage stage, uint ub_index, Range data) { + +extern (C) void sg_apply_uniforms(ShaderStage, uint, const Range*); +void applyUniforms(ShaderStage stage, uint ub_index, Range data) +{ sg_apply_uniforms(stage, ub_index, &data); } -extern(C) void sg_draw(uint, uint, uint); -void draw(uint base_element, uint num_elements, uint num_instances) { + +extern (C) void sg_draw(uint, uint, uint); +void draw(uint base_element, uint num_elements, uint num_instances) +{ sg_draw(base_element, num_elements, num_instances); } -extern(C) void sg_end_pass(); -void endPass() { + +extern (C) void sg_end_pass(); +void endPass() +{ sg_end_pass(); } -extern(C) void sg_commit(); -void commit() { + +extern (C) void sg_commit(); +void commit() +{ sg_commit(); } -extern(C) Desc sg_query_desc(); -Desc queryDesc() { + +extern (C) Desc sg_query_desc(); +Desc queryDesc() +{ return sg_query_desc(); } -extern(C) Backend sg_query_backend(); -Backend queryBackend() { + +extern (C) Backend sg_query_backend(); +Backend queryBackend() +{ return sg_query_backend(); } -extern(C) Features sg_query_features(); -Features queryFeatures() { + +extern (C) Features sg_query_features(); +Features queryFeatures() +{ return sg_query_features(); } -extern(C) Limits sg_query_limits(); -Limits queryLimits() { + +extern (C) Limits sg_query_limits(); +Limits queryLimits() +{ return sg_query_limits(); } -extern(C) PixelformatInfo sg_query_pixelformat(PixelFormat); -PixelformatInfo queryPixelformat(PixelFormat fmt) { + +extern (C) PixelformatInfo sg_query_pixelformat(PixelFormat); +PixelformatInfo queryPixelformat(PixelFormat fmt) +{ return sg_query_pixelformat(fmt); } -extern(C) ResourceState sg_query_buffer_state(Buffer); -ResourceState queryBufferState(Buffer buf) { + +extern (C) ResourceState sg_query_buffer_state(Buffer); +ResourceState queryBufferState(Buffer buf) +{ return sg_query_buffer_state(buf); } -extern(C) ResourceState sg_query_image_state(Image); -ResourceState queryImageState(Image img) { + +extern (C) ResourceState sg_query_image_state(Image); +ResourceState queryImageState(Image img) +{ return sg_query_image_state(img); } -extern(C) ResourceState sg_query_sampler_state(Sampler); -ResourceState querySamplerState(Sampler smp) { + +extern (C) ResourceState sg_query_sampler_state(Sampler); +ResourceState querySamplerState(Sampler smp) +{ return sg_query_sampler_state(smp); } -extern(C) ResourceState sg_query_shader_state(Shader); -ResourceState queryShaderState(Shader shd) { + +extern (C) ResourceState sg_query_shader_state(Shader); +ResourceState queryShaderState(Shader shd) +{ return sg_query_shader_state(shd); } -extern(C) ResourceState sg_query_pipeline_state(Pipeline); -ResourceState queryPipelineState(Pipeline pip) { + +extern (C) ResourceState sg_query_pipeline_state(Pipeline); +ResourceState queryPipelineState(Pipeline pip) +{ return sg_query_pipeline_state(pip); } -extern(C) ResourceState sg_query_pass_state(Pass); -ResourceState queryPassState(Pass pass) { + +extern (C) ResourceState sg_query_pass_state(Pass); +ResourceState queryPassState(Pass pass) +{ return sg_query_pass_state(pass); } -extern(C) BufferInfo sg_query_buffer_info(Buffer); -BufferInfo queryBufferInfo(Buffer buf) { + +extern (C) BufferInfo sg_query_buffer_info(Buffer); +BufferInfo queryBufferInfo(Buffer buf) +{ return sg_query_buffer_info(buf); } -extern(C) ImageInfo sg_query_image_info(Image); -ImageInfo queryImageInfo(Image img) { + +extern (C) ImageInfo sg_query_image_info(Image); +ImageInfo queryImageInfo(Image img) +{ return sg_query_image_info(img); } -extern(C) SamplerInfo sg_query_sampler_info(Sampler); -SamplerInfo querySamplerInfo(Sampler smp) { + +extern (C) SamplerInfo sg_query_sampler_info(Sampler); +SamplerInfo querySamplerInfo(Sampler smp) +{ return sg_query_sampler_info(smp); } -extern(C) ShaderInfo sg_query_shader_info(Shader); -ShaderInfo queryShaderInfo(Shader shd) { + +extern (C) ShaderInfo sg_query_shader_info(Shader); +ShaderInfo queryShaderInfo(Shader shd) +{ return sg_query_shader_info(shd); } -extern(C) PipelineInfo sg_query_pipeline_info(Pipeline); -PipelineInfo queryPipelineInfo(Pipeline pip) { + +extern (C) PipelineInfo sg_query_pipeline_info(Pipeline); +PipelineInfo queryPipelineInfo(Pipeline pip) +{ return sg_query_pipeline_info(pip); } -extern(C) PassInfo sg_query_pass_info(Pass); -PassInfo queryPassInfo(Pass pass) { + +extern (C) PassInfo sg_query_pass_info(Pass); +PassInfo queryPassInfo(Pass pass) +{ return sg_query_pass_info(pass); } -extern(C) BufferDesc sg_query_buffer_desc(Buffer); -BufferDesc queryBufferDesc(Buffer buf) { + +extern (C) BufferDesc sg_query_buffer_desc(Buffer); +BufferDesc queryBufferDesc(Buffer buf) +{ return sg_query_buffer_desc(buf); } -extern(C) ImageDesc sg_query_image_desc(Image); -ImageDesc queryImageDesc(Image img) { + +extern (C) ImageDesc sg_query_image_desc(Image); +ImageDesc queryImageDesc(Image img) +{ return sg_query_image_desc(img); } -extern(C) SamplerDesc sg_query_sampler_desc(Sampler); -SamplerDesc querySamplerDesc(Sampler smp) { + +extern (C) SamplerDesc sg_query_sampler_desc(Sampler); +SamplerDesc querySamplerDesc(Sampler smp) +{ return sg_query_sampler_desc(smp); } -extern(C) ShaderDesc sg_query_shader_desc(Shader); -ShaderDesc queryShaderDesc(Shader shd) { + +extern (C) ShaderDesc sg_query_shader_desc(Shader); +ShaderDesc queryShaderDesc(Shader shd) +{ return sg_query_shader_desc(shd); } -extern(C) PipelineDesc sg_query_pipeline_desc(Pipeline); -PipelineDesc queryPipelineDesc(Pipeline pip) { + +extern (C) PipelineDesc sg_query_pipeline_desc(Pipeline); +PipelineDesc queryPipelineDesc(Pipeline pip) +{ return sg_query_pipeline_desc(pip); } -extern(C) PassDesc sg_query_pass_desc(Pass); -PassDesc queryPassDesc(Pass pass) { + +extern (C) PassDesc sg_query_pass_desc(Pass); +PassDesc queryPassDesc(Pass pass) +{ return sg_query_pass_desc(pass); } -extern(C) BufferDesc sg_query_buffer_defaults(const BufferDesc *); -BufferDesc queryBufferDefaults(BufferDesc desc) { + +extern (C) BufferDesc sg_query_buffer_defaults(const BufferDesc*); +BufferDesc queryBufferDefaults(BufferDesc desc) +{ return sg_query_buffer_defaults(&desc); } -extern(C) ImageDesc sg_query_image_defaults(const ImageDesc *); -ImageDesc queryImageDefaults(ImageDesc desc) { + +extern (C) ImageDesc sg_query_image_defaults(const ImageDesc*); +ImageDesc queryImageDefaults(ImageDesc desc) +{ return sg_query_image_defaults(&desc); } -extern(C) SamplerDesc sg_query_sampler_defaults(const SamplerDesc *); -SamplerDesc querySamplerDefaults(SamplerDesc desc) { + +extern (C) SamplerDesc sg_query_sampler_defaults(const SamplerDesc*); +SamplerDesc querySamplerDefaults(SamplerDesc desc) +{ return sg_query_sampler_defaults(&desc); } -extern(C) ShaderDesc sg_query_shader_defaults(const ShaderDesc *); -ShaderDesc queryShaderDefaults(ShaderDesc desc) { + +extern (C) ShaderDesc sg_query_shader_defaults(const ShaderDesc*); +ShaderDesc queryShaderDefaults(ShaderDesc desc) +{ return sg_query_shader_defaults(&desc); } -extern(C) PipelineDesc sg_query_pipeline_defaults(const PipelineDesc *); -PipelineDesc queryPipelineDefaults(PipelineDesc desc) { + +extern (C) PipelineDesc sg_query_pipeline_defaults(const PipelineDesc*); +PipelineDesc queryPipelineDefaults(PipelineDesc desc) +{ return sg_query_pipeline_defaults(&desc); } -extern(C) PassDesc sg_query_pass_defaults(const PassDesc *); -PassDesc queryPassDefaults(PassDesc desc) { + +extern (C) PassDesc sg_query_pass_defaults(const PassDesc*); +PassDesc queryPassDefaults(PassDesc desc) +{ return sg_query_pass_defaults(&desc); } -extern(C) Buffer sg_alloc_buffer(); -Buffer allocBuffer() { + +extern (C) Buffer sg_alloc_buffer(); +Buffer allocBuffer() +{ return sg_alloc_buffer(); } -extern(C) Image sg_alloc_image(); -Image allocImage() { + +extern (C) Image sg_alloc_image(); +Image allocImage() +{ return sg_alloc_image(); } -extern(C) Sampler sg_alloc_sampler(); -Sampler allocSampler() { + +extern (C) Sampler sg_alloc_sampler(); +Sampler allocSampler() +{ return sg_alloc_sampler(); } -extern(C) Shader sg_alloc_shader(); -Shader allocShader() { + +extern (C) Shader sg_alloc_shader(); +Shader allocShader() +{ return sg_alloc_shader(); } -extern(C) Pipeline sg_alloc_pipeline(); -Pipeline allocPipeline() { + +extern (C) Pipeline sg_alloc_pipeline(); +Pipeline allocPipeline() +{ return sg_alloc_pipeline(); } -extern(C) Pass sg_alloc_pass(); -Pass allocPass() { + +extern (C) Pass sg_alloc_pass(); +Pass allocPass() +{ return sg_alloc_pass(); } -extern(C) void sg_dealloc_buffer(Buffer); -void deallocBuffer(Buffer buf) { + +extern (C) void sg_dealloc_buffer(Buffer); +void deallocBuffer(Buffer buf) +{ sg_dealloc_buffer(buf); } -extern(C) void sg_dealloc_image(Image); -void deallocImage(Image img) { + +extern (C) void sg_dealloc_image(Image); +void deallocImage(Image img) +{ sg_dealloc_image(img); } -extern(C) void sg_dealloc_sampler(Sampler); -void deallocSampler(Sampler smp) { + +extern (C) void sg_dealloc_sampler(Sampler); +void deallocSampler(Sampler smp) +{ sg_dealloc_sampler(smp); } -extern(C) void sg_dealloc_shader(Shader); -void deallocShader(Shader shd) { + +extern (C) void sg_dealloc_shader(Shader); +void deallocShader(Shader shd) +{ sg_dealloc_shader(shd); } -extern(C) void sg_dealloc_pipeline(Pipeline); -void deallocPipeline(Pipeline pip) { + +extern (C) void sg_dealloc_pipeline(Pipeline); +void deallocPipeline(Pipeline pip) +{ sg_dealloc_pipeline(pip); } -extern(C) void sg_dealloc_pass(Pass); -void deallocPass(Pass pass) { + +extern (C) void sg_dealloc_pass(Pass); +void deallocPass(Pass pass) +{ sg_dealloc_pass(pass); } -extern(C) void sg_init_buffer(Buffer, const BufferDesc *); -void initBuffer(Buffer buf, BufferDesc desc) { + +extern (C) void sg_init_buffer(Buffer, const BufferDesc*); +void initBuffer(Buffer buf, BufferDesc desc) +{ sg_init_buffer(buf, &desc); } -extern(C) void sg_init_image(Image, const ImageDesc *); -void initImage(Image img, ImageDesc desc) { + +extern (C) void sg_init_image(Image, const ImageDesc*); +void initImage(Image img, ImageDesc desc) +{ sg_init_image(img, &desc); } -extern(C) void sg_init_sampler(Sampler, const SamplerDesc *); -void initSampler(Sampler smg, SamplerDesc desc) { + +extern (C) void sg_init_sampler(Sampler, const SamplerDesc*); +void initSampler(Sampler smg, SamplerDesc desc) +{ sg_init_sampler(smg, &desc); } -extern(C) void sg_init_shader(Shader, const ShaderDesc *); -void initShader(Shader shd, ShaderDesc desc) { + +extern (C) void sg_init_shader(Shader, const ShaderDesc*); +void initShader(Shader shd, ShaderDesc desc) +{ sg_init_shader(shd, &desc); } -extern(C) void sg_init_pipeline(Pipeline, const PipelineDesc *); -void initPipeline(Pipeline pip, PipelineDesc desc) { + +extern (C) void sg_init_pipeline(Pipeline, const PipelineDesc*); +void initPipeline(Pipeline pip, PipelineDesc desc) +{ sg_init_pipeline(pip, &desc); } -extern(C) void sg_init_pass(Pass, const PassDesc *); -void initPass(Pass pass, PassDesc desc) { + +extern (C) void sg_init_pass(Pass, const PassDesc*); +void initPass(Pass pass, PassDesc desc) +{ sg_init_pass(pass, &desc); } -extern(C) void sg_uninit_buffer(Buffer); -void uninitBuffer(Buffer buf) { + +extern (C) void sg_uninit_buffer(Buffer); +void uninitBuffer(Buffer buf) +{ sg_uninit_buffer(buf); } -extern(C) void sg_uninit_image(Image); -void uninitImage(Image img) { + +extern (C) void sg_uninit_image(Image); +void uninitImage(Image img) +{ sg_uninit_image(img); } -extern(C) void sg_uninit_sampler(Sampler); -void uninitSampler(Sampler smp) { + +extern (C) void sg_uninit_sampler(Sampler); +void uninitSampler(Sampler smp) +{ sg_uninit_sampler(smp); } -extern(C) void sg_uninit_shader(Shader); -void uninitShader(Shader shd) { + +extern (C) void sg_uninit_shader(Shader); +void uninitShader(Shader shd) +{ sg_uninit_shader(shd); } -extern(C) void sg_uninit_pipeline(Pipeline); -void uninitPipeline(Pipeline pip) { + +extern (C) void sg_uninit_pipeline(Pipeline); +void uninitPipeline(Pipeline pip) +{ sg_uninit_pipeline(pip); } -extern(C) void sg_uninit_pass(Pass); -void uninitPass(Pass pass) { + +extern (C) void sg_uninit_pass(Pass); +void uninitPass(Pass pass) +{ sg_uninit_pass(pass); } -extern(C) void sg_fail_buffer(Buffer); -void failBuffer(Buffer buf) { + +extern (C) void sg_fail_buffer(Buffer); +void failBuffer(Buffer buf) +{ sg_fail_buffer(buf); } -extern(C) void sg_fail_image(Image); -void failImage(Image img) { + +extern (C) void sg_fail_image(Image); +void failImage(Image img) +{ sg_fail_image(img); } -extern(C) void sg_fail_sampler(Sampler); -void failSampler(Sampler smp) { + +extern (C) void sg_fail_sampler(Sampler); +void failSampler(Sampler smp) +{ sg_fail_sampler(smp); } -extern(C) void sg_fail_shader(Shader); -void failShader(Shader shd) { + +extern (C) void sg_fail_shader(Shader); +void failShader(Shader shd) +{ sg_fail_shader(shd); } -extern(C) void sg_fail_pipeline(Pipeline); -void failPipeline(Pipeline pip) { + +extern (C) void sg_fail_pipeline(Pipeline); +void failPipeline(Pipeline pip) +{ sg_fail_pipeline(pip); } -extern(C) void sg_fail_pass(Pass); -void failPass(Pass pass) { + +extern (C) void sg_fail_pass(Pass); +void failPass(Pass pass) +{ sg_fail_pass(pass); } -extern(C) void sg_enable_frame_stats(); -void enableFrameStats() { + +extern (C) void sg_enable_frame_stats(); +void enableFrameStats() +{ sg_enable_frame_stats(); } -extern(C) void sg_disable_frame_stats(); -void disableFrameStats() { + +extern (C) void sg_disable_frame_stats(); +void disableFrameStats() +{ sg_disable_frame_stats(); } -extern(C) bool sg_frame_stats_enabled(); -bool frameStatsEnabled() { + +extern (C) bool sg_frame_stats_enabled(); +bool frameStatsEnabled() +{ return sg_frame_stats_enabled(); } -extern(C) FrameStats sg_query_frame_stats(); -FrameStats queryFrameStats() { + +extern (C) FrameStats sg_query_frame_stats(); +FrameStats queryFrameStats() +{ return sg_query_frame_stats(); } -extern(C) Context sg_setup_context(); -Context setupContext() { + +extern (C) Context sg_setup_context(); +Context setupContext() +{ return sg_setup_context(); } -extern(C) void sg_activate_context(Context); -void activateContext(Context ctx_id) { + +extern (C) void sg_activate_context(Context); +void activateContext(Context ctx_id) +{ sg_activate_context(ctx_id); } -extern(C) void sg_discard_context(Context); -void discardContext(Context ctx_id) { + +extern (C) void sg_discard_context(Context); +void discardContext(Context ctx_id) +{ sg_discard_context(ctx_id); } -struct D3d11BufferInfo { + +struct D3d11BufferInfo +{ const(void)* buf; } -struct D3d11ImageInfo { + +struct D3d11ImageInfo +{ const(void)* tex2d; const(void)* tex3d; const(void)* res; const(void)* srv; } -struct D3d11SamplerInfo { + +struct D3d11SamplerInfo +{ const(void)* smp; } -struct D3d11ShaderInfo { + +struct D3d11ShaderInfo +{ const(void)*[4] vs_cbufs; const(void)*[4] fs_cbufs; const(void)* vs; const(void)* fs; } -struct D3d11PipelineInfo { + +struct D3d11PipelineInfo +{ const(void)* il; const(void)* rs; const(void)* dss; const(void)* bs; } -struct D3d11PassInfo { + +struct D3d11PassInfo +{ const(void)*[4] color_rtv; const(void)*[4] resolve_rtv; const(void)* dsv; } -struct MtlBufferInfo { + +struct MtlBufferInfo +{ const(void)*[2] buf; int active_slot; } -struct MtlImageInfo { + +struct MtlImageInfo +{ const(void)*[2] tex; int active_slot; } -struct MtlSamplerInfo { + +struct MtlSamplerInfo +{ const(void)* smp; } -struct MtlShaderInfo { + +struct MtlShaderInfo +{ const(void)* vs_lib; const(void)* fs_lib; const(void)* vs_func; const(void)* fs_func; } -struct MtlPipelineInfo { + +struct MtlPipelineInfo +{ const(void)* rps; const(void)* dss; } -struct WgpuBufferInfo { + +struct WgpuBufferInfo +{ const(void)* buf; } -struct WgpuImageInfo { + +struct WgpuImageInfo +{ const(void)* tex; const(void)* view; } -struct WgpuSamplerInfo { + +struct WgpuSamplerInfo +{ const(void)* smp; } -struct WgpuShaderInfo { + +struct WgpuShaderInfo +{ const(void)* vs_mod; const(void)* fs_mod; const(void)* bgl; } -struct WgpuPipelineInfo { + +struct WgpuPipelineInfo +{ const(void)* pip; } -struct WgpuPassInfo { + +struct WgpuPassInfo +{ const(void)*[4] color_view; const(void)*[4] resolve_view; const(void)* ds_view; } -struct GlBufferInfo { + +struct GlBufferInfo +{ uint[2] buf; int active_slot; } -struct GlImageInfo { + +struct GlImageInfo +{ uint[2] tex; uint tex_target; uint msaa_render_buffer; int active_slot; } -struct GlSamplerInfo { + +struct GlSamplerInfo +{ uint smp; } -struct GlShaderInfo { + +struct GlShaderInfo +{ uint prog; } -struct GlPassInfo { + +struct GlPassInfo +{ uint frame_buffer; uint[4] msaa_resolve_framebuffer; } -extern(C) const(void)* sg_d3d11_device(); -const(void)* d3d11Device() { + +extern (C) const(void)* sg_d3d11_device(); +const(void)* d3d11Device() +{ return sg_d3d11_device(); } -extern(C) const(void)* sg_d3d11_device_context(); -const(void)* d3d11DeviceContext() { + +extern (C) const(void)* sg_d3d11_device_context(); +const(void)* d3d11DeviceContext() +{ return sg_d3d11_device_context(); } -extern(C) D3d11BufferInfo sg_d3d11_query_buffer_info(Buffer); -D3d11BufferInfo d3d11QueryBufferInfo(Buffer buf) { + +extern (C) D3d11BufferInfo sg_d3d11_query_buffer_info(Buffer); +D3d11BufferInfo d3d11QueryBufferInfo(Buffer buf) +{ return sg_d3d11_query_buffer_info(buf); } -extern(C) D3d11ImageInfo sg_d3d11_query_image_info(Image); -D3d11ImageInfo d3d11QueryImageInfo(Image img) { + +extern (C) D3d11ImageInfo sg_d3d11_query_image_info(Image); +D3d11ImageInfo d3d11QueryImageInfo(Image img) +{ return sg_d3d11_query_image_info(img); } -extern(C) D3d11SamplerInfo sg_d3d11_query_sampler_info(Sampler); -D3d11SamplerInfo d3d11QuerySamplerInfo(Sampler smp) { + +extern (C) D3d11SamplerInfo sg_d3d11_query_sampler_info(Sampler); +D3d11SamplerInfo d3d11QuerySamplerInfo(Sampler smp) +{ return sg_d3d11_query_sampler_info(smp); } -extern(C) D3d11ShaderInfo sg_d3d11_query_shader_info(Shader); -D3d11ShaderInfo d3d11QueryShaderInfo(Shader shd) { + +extern (C) D3d11ShaderInfo sg_d3d11_query_shader_info(Shader); +D3d11ShaderInfo d3d11QueryShaderInfo(Shader shd) +{ return sg_d3d11_query_shader_info(shd); } -extern(C) D3d11PipelineInfo sg_d3d11_query_pipeline_info(Pipeline); -D3d11PipelineInfo d3d11QueryPipelineInfo(Pipeline pip) { + +extern (C) D3d11PipelineInfo sg_d3d11_query_pipeline_info(Pipeline); +D3d11PipelineInfo d3d11QueryPipelineInfo(Pipeline pip) +{ return sg_d3d11_query_pipeline_info(pip); } -extern(C) D3d11PassInfo sg_d3d11_query_pass_info(Pass); -D3d11PassInfo d3d11QueryPassInfo(Pass pass) { + +extern (C) D3d11PassInfo sg_d3d11_query_pass_info(Pass); +D3d11PassInfo d3d11QueryPassInfo(Pass pass) +{ return sg_d3d11_query_pass_info(pass); } -extern(C) const(void)* sg_mtl_device(); -const(void)* mtlDevice() { + +extern (C) const(void)* sg_mtl_device(); +const(void)* mtlDevice() +{ return sg_mtl_device(); } -extern(C) const(void)* sg_mtl_render_command_encoder(); -const(void)* mtlRenderCommandEncoder() { + +extern (C) const(void)* sg_mtl_render_command_encoder(); +const(void)* mtlRenderCommandEncoder() +{ return sg_mtl_render_command_encoder(); } -extern(C) MtlBufferInfo sg_mtl_query_buffer_info(Buffer); -MtlBufferInfo mtlQueryBufferInfo(Buffer buf) { + +extern (C) MtlBufferInfo sg_mtl_query_buffer_info(Buffer); +MtlBufferInfo mtlQueryBufferInfo(Buffer buf) +{ return sg_mtl_query_buffer_info(buf); } -extern(C) MtlImageInfo sg_mtl_query_image_info(Image); -MtlImageInfo mtlQueryImageInfo(Image img) { + +extern (C) MtlImageInfo sg_mtl_query_image_info(Image); +MtlImageInfo mtlQueryImageInfo(Image img) +{ return sg_mtl_query_image_info(img); } -extern(C) MtlSamplerInfo sg_mtl_query_sampler_info(Sampler); -MtlSamplerInfo mtlQuerySamplerInfo(Sampler smp) { + +extern (C) MtlSamplerInfo sg_mtl_query_sampler_info(Sampler); +MtlSamplerInfo mtlQuerySamplerInfo(Sampler smp) +{ return sg_mtl_query_sampler_info(smp); } -extern(C) MtlShaderInfo sg_mtl_query_shader_info(Shader); -MtlShaderInfo mtlQueryShaderInfo(Shader shd) { + +extern (C) MtlShaderInfo sg_mtl_query_shader_info(Shader); +MtlShaderInfo mtlQueryShaderInfo(Shader shd) +{ return sg_mtl_query_shader_info(shd); } -extern(C) MtlPipelineInfo sg_mtl_query_pipeline_info(Pipeline); -MtlPipelineInfo mtlQueryPipelineInfo(Pipeline pip) { + +extern (C) MtlPipelineInfo sg_mtl_query_pipeline_info(Pipeline); +MtlPipelineInfo mtlQueryPipelineInfo(Pipeline pip) +{ return sg_mtl_query_pipeline_info(pip); } -extern(C) const(void)* sg_wgpu_device(); -const(void)* wgpuDevice() { + +extern (C) const(void)* sg_wgpu_device(); +const(void)* wgpuDevice() +{ return sg_wgpu_device(); } -extern(C) const(void)* sg_wgpu_queue(); -const(void)* wgpuQueue() { + +extern (C) const(void)* sg_wgpu_queue(); +const(void)* wgpuQueue() +{ return sg_wgpu_queue(); } -extern(C) const(void)* sg_wgpu_command_encoder(); -const(void)* wgpuCommandEncoder() { + +extern (C) const(void)* sg_wgpu_command_encoder(); +const(void)* wgpuCommandEncoder() +{ return sg_wgpu_command_encoder(); } -extern(C) const(void)* sg_wgpu_render_pass_encoder(); -const(void)* wgpuRenderPassEncoder() { + +extern (C) const(void)* sg_wgpu_render_pass_encoder(); +const(void)* wgpuRenderPassEncoder() +{ return sg_wgpu_render_pass_encoder(); } -extern(C) WgpuBufferInfo sg_wgpu_query_buffer_info(Buffer); -WgpuBufferInfo wgpuQueryBufferInfo(Buffer buf) { + +extern (C) WgpuBufferInfo sg_wgpu_query_buffer_info(Buffer); +WgpuBufferInfo wgpuQueryBufferInfo(Buffer buf) +{ return sg_wgpu_query_buffer_info(buf); } -extern(C) WgpuImageInfo sg_wgpu_query_image_info(Image); -WgpuImageInfo wgpuQueryImageInfo(Image img) { + +extern (C) WgpuImageInfo sg_wgpu_query_image_info(Image); +WgpuImageInfo wgpuQueryImageInfo(Image img) +{ return sg_wgpu_query_image_info(img); } -extern(C) WgpuSamplerInfo sg_wgpu_query_sampler_info(Sampler); -WgpuSamplerInfo wgpuQuerySamplerInfo(Sampler smp) { + +extern (C) WgpuSamplerInfo sg_wgpu_query_sampler_info(Sampler); +WgpuSamplerInfo wgpuQuerySamplerInfo(Sampler smp) +{ return sg_wgpu_query_sampler_info(smp); } -extern(C) WgpuShaderInfo sg_wgpu_query_shader_info(Shader); -WgpuShaderInfo wgpuQueryShaderInfo(Shader shd) { + +extern (C) WgpuShaderInfo sg_wgpu_query_shader_info(Shader); +WgpuShaderInfo wgpuQueryShaderInfo(Shader shd) +{ return sg_wgpu_query_shader_info(shd); } -extern(C) WgpuPipelineInfo sg_wgpu_query_pipeline_info(Pipeline); -WgpuPipelineInfo wgpuQueryPipelineInfo(Pipeline pip) { + +extern (C) WgpuPipelineInfo sg_wgpu_query_pipeline_info(Pipeline); +WgpuPipelineInfo wgpuQueryPipelineInfo(Pipeline pip) +{ return sg_wgpu_query_pipeline_info(pip); } -extern(C) WgpuPassInfo sg_wgpu_query_pass_info(Pass); -WgpuPassInfo wgpuQueryPassInfo(Pass pass) { + +extern (C) WgpuPassInfo sg_wgpu_query_pass_info(Pass); +WgpuPassInfo wgpuQueryPassInfo(Pass pass) +{ return sg_wgpu_query_pass_info(pass); } -extern(C) GlBufferInfo sg_gl_query_buffer_info(Buffer); -GlBufferInfo glQueryBufferInfo(Buffer buf) { + +extern (C) GlBufferInfo sg_gl_query_buffer_info(Buffer); +GlBufferInfo glQueryBufferInfo(Buffer buf) +{ return sg_gl_query_buffer_info(buf); } -extern(C) GlImageInfo sg_gl_query_image_info(Image); -GlImageInfo glQueryImageInfo(Image img) { + +extern (C) GlImageInfo sg_gl_query_image_info(Image); +GlImageInfo glQueryImageInfo(Image img) +{ return sg_gl_query_image_info(img); } -extern(C) GlSamplerInfo sg_gl_query_sampler_info(Sampler); -GlSamplerInfo glQuerySamplerInfo(Sampler smp) { + +extern (C) GlSamplerInfo sg_gl_query_sampler_info(Sampler); +GlSamplerInfo glQuerySamplerInfo(Sampler smp) +{ return sg_gl_query_sampler_info(smp); } -extern(C) GlShaderInfo sg_gl_query_shader_info(Shader); -GlShaderInfo glQueryShaderInfo(Shader shd) { + +extern (C) GlShaderInfo sg_gl_query_shader_info(Shader); +GlShaderInfo glQueryShaderInfo(Shader shd) +{ return sg_gl_query_shader_info(shd); } -extern(C) GlPassInfo sg_gl_query_pass_info(Pass); -GlPassInfo glQueryPassInfo(Pass pass) { + +extern (C) GlPassInfo sg_gl_query_pass_info(Pass); +GlPassInfo glQueryPassInfo(Pass pass) +{ return sg_gl_query_pass_info(pass); } diff --git a/src/sokol/gl.d b/src/sokol/gl.d index 676891f..6879089 100644 --- a/src/sokol/gl.d +++ b/src/sokol/gl.d @@ -4,11 +4,15 @@ module sokol.gl; import sg = sokol.gfx; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } -enum LogItem { + +enum LogItem +{ OK, MALLOC_FAILED, MAKE_PIPELINE_FAILED, @@ -17,17 +21,25 @@ enum LogItem { CONTEXT_POOL_EXHAUSTED, CANNOT_DESTROY_DEFAULT_CONTEXT, } -struct Logger { - extern(C) void function(const (char*), uint, uint, const (char*), uint, const (char*), void*) func; + +struct Logger +{ + extern (C) void function(const(char*), uint, uint, const(char*), uint, const(char*), void*) func; void* user_data; } -struct Pipeline { + +struct Pipeline +{ uint id; } -struct Context { + +struct Context +{ uint id; } -enum Error { + +enum Error +{ NO_ERROR = 0, VERTICES_FULL, UNIFORMS_FULL, @@ -36,19 +48,25 @@ enum Error { STACK_UNDERFLOW, NO_CONTEXT, } -struct ContextDesc { + +struct ContextDesc +{ int max_vertices; int max_commands; sg.PixelFormat color_format; sg.PixelFormat depth_format; int sample_count; } -struct Allocator { + +struct Allocator +{ void* function(size_t, void*) alloc_fn; void function(void*, void*) free_fn; void* user_data; } -struct Desc { + +struct Desc +{ int max_vertices; int max_commands; int context_pool_size; @@ -60,347 +78,520 @@ struct Desc { Allocator allocator; Logger logger; } -extern(C) void sgl_setup(const Desc *); -void setup(Desc desc) { + +extern (C) void sgl_setup(const Desc*); +void setup(Desc desc) +{ sgl_setup(&desc); } -extern(C) void sgl_shutdown(); -void shutdown() { + +extern (C) void sgl_shutdown(); +void shutdown() +{ sgl_shutdown(); } -extern(C) float sgl_rad(float); -float asRadians(float deg) { + +extern (C) float sgl_rad(float); +float asRadians(float deg) +{ return sgl_rad(deg); } -extern(C) float sgl_deg(float); -float asDegrees(float rad) { + +extern (C) float sgl_deg(float); +float asDegrees(float rad) +{ return sgl_deg(rad); } -extern(C) Error sgl_error(); -Error getError() { + +extern (C) Error sgl_error(); +Error getError() +{ return sgl_error(); } -extern(C) Error sgl_context_error(Context); -Error contextError(Context ctx) { + +extern (C) Error sgl_context_error(Context); +Error contextError(Context ctx) +{ return sgl_context_error(ctx); } -extern(C) Context sgl_make_context(const ContextDesc *); -Context makeContext(ContextDesc desc) { + +extern (C) Context sgl_make_context(const ContextDesc*); +Context makeContext(ContextDesc desc) +{ return sgl_make_context(&desc); } -extern(C) void sgl_destroy_context(Context); -void destroyContext(Context ctx) { + +extern (C) void sgl_destroy_context(Context); +void destroyContext(Context ctx) +{ sgl_destroy_context(ctx); } -extern(C) void sgl_set_context(Context); -void setContext(Context ctx) { + +extern (C) void sgl_set_context(Context); +void setContext(Context ctx) +{ sgl_set_context(ctx); } -extern(C) Context sgl_get_context(); -Context getContext() { + +extern (C) Context sgl_get_context(); +Context getContext() +{ return sgl_get_context(); } -extern(C) Context sgl_default_context(); -Context defaultContext() { + +extern (C) Context sgl_default_context(); +Context defaultContext() +{ return sgl_default_context(); } -extern(C) void sgl_draw(); -void draw() { + +extern (C) void sgl_draw(); +void draw() +{ sgl_draw(); } -extern(C) void sgl_context_draw(Context); -void contextDraw(Context ctx) { + +extern (C) void sgl_context_draw(Context); +void contextDraw(Context ctx) +{ sgl_context_draw(ctx); } -extern(C) void sgl_draw_layer(int); -void drawLayer(int layer_id) { + +extern (C) void sgl_draw_layer(int); +void drawLayer(int layer_id) +{ sgl_draw_layer(layer_id); } -extern(C) void sgl_context_draw_layer(Context, int); -void contextDrawLayer(Context ctx, int layer_id) { + +extern (C) void sgl_context_draw_layer(Context, int); +void contextDrawLayer(Context ctx, int layer_id) +{ sgl_context_draw_layer(ctx, layer_id); } -extern(C) Pipeline sgl_make_pipeline(const sg.PipelineDesc *); -Pipeline makePipeline(sg.PipelineDesc desc) { + +extern (C) Pipeline sgl_make_pipeline(const sg.PipelineDesc*); +Pipeline makePipeline(sg.PipelineDesc desc) +{ return sgl_make_pipeline(&desc); } -extern(C) Pipeline sgl_context_make_pipeline(Context, const sg.PipelineDesc *); -Pipeline contextMakePipeline(Context ctx, sg.PipelineDesc desc) { + +extern (C) Pipeline sgl_context_make_pipeline(Context, const sg.PipelineDesc*); +Pipeline contextMakePipeline(Context ctx, sg.PipelineDesc desc) +{ return sgl_context_make_pipeline(ctx, &desc); } -extern(C) void sgl_destroy_pipeline(Pipeline); -void destroyPipeline(Pipeline pip) { + +extern (C) void sgl_destroy_pipeline(Pipeline); +void destroyPipeline(Pipeline pip) +{ sgl_destroy_pipeline(pip); } -extern(C) void sgl_defaults(); -void defaults() { + +extern (C) void sgl_defaults(); +void defaults() +{ sgl_defaults(); } -extern(C) void sgl_viewport(int, int, int, int, bool); -void viewport(int x, int y, int w, int h, bool origin_top_left) { + +extern (C) void sgl_viewport(int, int, int, int, bool); +void viewport(int x, int y, int w, int h, bool origin_top_left) +{ sgl_viewport(x, y, w, h, origin_top_left); } -extern(C) void sgl_viewportf(float, float, float, float, bool); -void viewportf(float x, float y, float w, float h, bool origin_top_left) { + +extern (C) void sgl_viewportf(float, float, float, float, bool); +void viewportf(float x, float y, float w, float h, bool origin_top_left) +{ sgl_viewportf(x, y, w, h, origin_top_left); } -extern(C) void sgl_scissor_rect(int, int, int, int, bool); -void scissorRect(int x, int y, int w, int h, bool origin_top_left) { + +extern (C) void sgl_scissor_rect(int, int, int, int, bool); +void scissorRect(int x, int y, int w, int h, bool origin_top_left) +{ sgl_scissor_rect(x, y, w, h, origin_top_left); } -extern(C) void sgl_scissor_rectf(float, float, float, float, bool); -void scissorRectf(float x, float y, float w, float h, bool origin_top_left) { + +extern (C) void sgl_scissor_rectf(float, float, float, float, bool); +void scissorRectf(float x, float y, float w, float h, bool origin_top_left) +{ sgl_scissor_rectf(x, y, w, h, origin_top_left); } -extern(C) void sgl_enable_texture(); -void enableTexture() { + +extern (C) void sgl_enable_texture(); +void enableTexture() +{ sgl_enable_texture(); } -extern(C) void sgl_disable_texture(); -void disableTexture() { + +extern (C) void sgl_disable_texture(); +void disableTexture() +{ sgl_disable_texture(); } -extern(C) void sgl_texture(sg.Image, sg.Sampler); -void texture(sg.Image img, sg.Sampler smp) { + +extern (C) void sgl_texture(sg.Image, sg.Sampler); +void texture(sg.Image img, sg.Sampler smp) +{ sgl_texture(img, smp); } -extern(C) void sgl_layer(int); -void layer(int layer_id) { + +extern (C) void sgl_layer(int); +void layer(int layer_id) +{ sgl_layer(layer_id); } -extern(C) void sgl_load_default_pipeline(); -void loadDefaultPipeline() { + +extern (C) void sgl_load_default_pipeline(); +void loadDefaultPipeline() +{ sgl_load_default_pipeline(); } -extern(C) void sgl_load_pipeline(Pipeline); -void loadPipeline(Pipeline pip) { + +extern (C) void sgl_load_pipeline(Pipeline); +void loadPipeline(Pipeline pip) +{ sgl_load_pipeline(pip); } -extern(C) void sgl_push_pipeline(); -void pushPipeline() { + +extern (C) void sgl_push_pipeline(); +void pushPipeline() +{ sgl_push_pipeline(); } -extern(C) void sgl_pop_pipeline(); -void popPipeline() { + +extern (C) void sgl_pop_pipeline(); +void popPipeline() +{ sgl_pop_pipeline(); } -extern(C) void sgl_matrix_mode_modelview(); -void matrixModeModelview() { + +extern (C) void sgl_matrix_mode_modelview(); +void matrixModeModelview() +{ sgl_matrix_mode_modelview(); } -extern(C) void sgl_matrix_mode_projection(); -void matrixModeProjection() { + +extern (C) void sgl_matrix_mode_projection(); +void matrixModeProjection() +{ sgl_matrix_mode_projection(); } -extern(C) void sgl_matrix_mode_texture(); -void matrixModeTexture() { + +extern (C) void sgl_matrix_mode_texture(); +void matrixModeTexture() +{ sgl_matrix_mode_texture(); } -extern(C) void sgl_load_identity(); -void loadIdentity() { + +extern (C) void sgl_load_identity(); +void loadIdentity() +{ sgl_load_identity(); } -extern(C) void sgl_load_matrix(const float *); -void loadMatrix(const float * m) { + +extern (C) void sgl_load_matrix(const float*); +void loadMatrix(const float* m) +{ sgl_load_matrix(m); } -extern(C) void sgl_load_transpose_matrix(const float *); -void loadTransposeMatrix(const float * m) { + +extern (C) void sgl_load_transpose_matrix(const float*); +void loadTransposeMatrix(const float* m) +{ sgl_load_transpose_matrix(m); } -extern(C) void sgl_mult_matrix(const float *); -void multMatrix(const float * m) { + +extern (C) void sgl_mult_matrix(const float*); +void multMatrix(const float* m) +{ sgl_mult_matrix(m); } -extern(C) void sgl_mult_transpose_matrix(const float *); -void multTransposeMatrix(const float * m) { + +extern (C) void sgl_mult_transpose_matrix(const float*); +void multTransposeMatrix(const float* m) +{ sgl_mult_transpose_matrix(m); } -extern(C) void sgl_rotate(float, float, float, float); -void rotate(float angle_rad, float x, float y, float z) { + +extern (C) void sgl_rotate(float, float, float, float); +void rotate(float angle_rad, float x, float y, float z) +{ sgl_rotate(angle_rad, x, y, z); } -extern(C) void sgl_scale(float, float, float); -void scale(float x, float y, float z) { + +extern (C) void sgl_scale(float, float, float); +void scale(float x, float y, float z) +{ sgl_scale(x, y, z); } -extern(C) void sgl_translate(float, float, float); -void translate(float x, float y, float z) { + +extern (C) void sgl_translate(float, float, float); +void translate(float x, float y, float z) +{ sgl_translate(x, y, z); } -extern(C) void sgl_frustum(float, float, float, float, float, float); -void frustum(float l, float r, float b, float t, float n, float f) { + +extern (C) void sgl_frustum(float, float, float, float, float, float); +void frustum(float l, float r, float b, float t, float n, float f) +{ sgl_frustum(l, r, b, t, n, f); } -extern(C) void sgl_ortho(float, float, float, float, float, float); -void ortho(float l, float r, float b, float t, float n, float f) { + +extern (C) void sgl_ortho(float, float, float, float, float, float); +void ortho(float l, float r, float b, float t, float n, float f) +{ sgl_ortho(l, r, b, t, n, f); } -extern(C) void sgl_perspective(float, float, float, float); -void perspective(float fov_y, float aspect, float z_near, float z_far) { + +extern (C) void sgl_perspective(float, float, float, float); +void perspective(float fov_y, float aspect, float z_near, float z_far) +{ sgl_perspective(fov_y, aspect, z_near, z_far); } -extern(C) void sgl_lookat(float, float, float, float, float, float, float, float, float); -void lookat(float eye_x, float eye_y, float eye_z, float center_x, float center_y, float center_z, float up_x, float up_y, float up_z) { + +extern (C) void sgl_lookat(float, float, float, float, float, float, float, float, float); +void lookat(float eye_x, float eye_y, float eye_z, float center_x, float center_y, + float center_z, float up_x, float up_y, float up_z) +{ sgl_lookat(eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z); } -extern(C) void sgl_push_matrix(); -void pushMatrix() { + +extern (C) void sgl_push_matrix(); +void pushMatrix() +{ sgl_push_matrix(); } -extern(C) void sgl_pop_matrix(); -void popMatrix() { + +extern (C) void sgl_pop_matrix(); +void popMatrix() +{ sgl_pop_matrix(); } -extern(C) void sgl_t2f(float, float); -void t2f(float u, float v) { + +extern (C) void sgl_t2f(float, float); +void t2f(float u, float v) +{ sgl_t2f(u, v); } -extern(C) void sgl_c3f(float, float, float); -void c3f(float r, float g, float b) { + +extern (C) void sgl_c3f(float, float, float); +void c3f(float r, float g, float b) +{ sgl_c3f(r, g, b); } -extern(C) void sgl_c4f(float, float, float, float); -void c4f(float r, float g, float b, float a) { + +extern (C) void sgl_c4f(float, float, float, float); +void c4f(float r, float g, float b, float a) +{ sgl_c4f(r, g, b, a); } -extern(C) void sgl_c3b(ubyte, ubyte, ubyte); -void c3b(ubyte r, ubyte g, ubyte b) { + +extern (C) void sgl_c3b(ubyte, ubyte, ubyte); +void c3b(ubyte r, ubyte g, ubyte b) +{ sgl_c3b(r, g, b); } -extern(C) void sgl_c4b(ubyte, ubyte, ubyte, ubyte); -void c4b(ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sgl_c4b(ubyte, ubyte, ubyte, ubyte); +void c4b(ubyte r, ubyte g, ubyte b, ubyte a) +{ sgl_c4b(r, g, b, a); } -extern(C) void sgl_c1i(uint); -void c1i(uint rgba) { + +extern (C) void sgl_c1i(uint); +void c1i(uint rgba) +{ sgl_c1i(rgba); } -extern(C) void sgl_point_size(float); -void pointSize(float s) { + +extern (C) void sgl_point_size(float); +void pointSize(float s) +{ sgl_point_size(s); } -extern(C) void sgl_begin_points(); -void beginPoints() { + +extern (C) void sgl_begin_points(); +void beginPoints() +{ sgl_begin_points(); } -extern(C) void sgl_begin_lines(); -void beginLines() { + +extern (C) void sgl_begin_lines(); +void beginLines() +{ sgl_begin_lines(); } -extern(C) void sgl_begin_line_strip(); -void beginLineStrip() { + +extern (C) void sgl_begin_line_strip(); +void beginLineStrip() +{ sgl_begin_line_strip(); } -extern(C) void sgl_begin_triangles(); -void beginTriangles() { + +extern (C) void sgl_begin_triangles(); +void beginTriangles() +{ sgl_begin_triangles(); } -extern(C) void sgl_begin_triangle_strip(); -void beginTriangleStrip() { + +extern (C) void sgl_begin_triangle_strip(); +void beginTriangleStrip() +{ sgl_begin_triangle_strip(); } -extern(C) void sgl_begin_quads(); -void beginQuads() { + +extern (C) void sgl_begin_quads(); +void beginQuads() +{ sgl_begin_quads(); } -extern(C) void sgl_v2f(float, float); -void v2f(float x, float y) { + +extern (C) void sgl_v2f(float, float); +void v2f(float x, float y) +{ sgl_v2f(x, y); } -extern(C) void sgl_v3f(float, float, float); -void v3f(float x, float y, float z) { + +extern (C) void sgl_v3f(float, float, float); +void v3f(float x, float y, float z) +{ sgl_v3f(x, y, z); } -extern(C) void sgl_v2f_t2f(float, float, float, float); -void v2fT2f(float x, float y, float u, float v) { + +extern (C) void sgl_v2f_t2f(float, float, float, float); +void v2fT2f(float x, float y, float u, float v) +{ sgl_v2f_t2f(x, y, u, v); } -extern(C) void sgl_v3f_t2f(float, float, float, float, float); -void v3fT2f(float x, float y, float z, float u, float v) { + +extern (C) void sgl_v3f_t2f(float, float, float, float, float); +void v3fT2f(float x, float y, float z, float u, float v) +{ sgl_v3f_t2f(x, y, z, u, v); } -extern(C) void sgl_v2f_c3f(float, float, float, float, float); -void v2fC3f(float x, float y, float r, float g, float b) { + +extern (C) void sgl_v2f_c3f(float, float, float, float, float); +void v2fC3f(float x, float y, float r, float g, float b) +{ sgl_v2f_c3f(x, y, r, g, b); } -extern(C) void sgl_v2f_c3b(float, float, ubyte, ubyte, ubyte); -void v2fC3b(float x, float y, ubyte r, ubyte g, ubyte b) { + +extern (C) void sgl_v2f_c3b(float, float, ubyte, ubyte, ubyte); +void v2fC3b(float x, float y, ubyte r, ubyte g, ubyte b) +{ sgl_v2f_c3b(x, y, r, g, b); } -extern(C) void sgl_v2f_c4f(float, float, float, float, float, float); -void v2fC4f(float x, float y, float r, float g, float b, float a) { + +extern (C) void sgl_v2f_c4f(float, float, float, float, float, float); +void v2fC4f(float x, float y, float r, float g, float b, float a) +{ sgl_v2f_c4f(x, y, r, g, b, a); } -extern(C) void sgl_v2f_c4b(float, float, ubyte, ubyte, ubyte, ubyte); -void v2fC4b(float x, float y, ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sgl_v2f_c4b(float, float, ubyte, ubyte, ubyte, ubyte); +void v2fC4b(float x, float y, ubyte r, ubyte g, ubyte b, ubyte a) +{ sgl_v2f_c4b(x, y, r, g, b, a); } -extern(C) void sgl_v2f_c1i(float, float, uint); -void v2fC1i(float x, float y, uint rgba) { + +extern (C) void sgl_v2f_c1i(float, float, uint); +void v2fC1i(float x, float y, uint rgba) +{ sgl_v2f_c1i(x, y, rgba); } -extern(C) void sgl_v3f_c3f(float, float, float, float, float, float); -void v3fC3f(float x, float y, float z, float r, float g, float b) { + +extern (C) void sgl_v3f_c3f(float, float, float, float, float, float); +void v3fC3f(float x, float y, float z, float r, float g, float b) +{ sgl_v3f_c3f(x, y, z, r, g, b); } -extern(C) void sgl_v3f_c3b(float, float, float, ubyte, ubyte, ubyte); -void v3fC3b(float x, float y, float z, ubyte r, ubyte g, ubyte b) { + +extern (C) void sgl_v3f_c3b(float, float, float, ubyte, ubyte, ubyte); +void v3fC3b(float x, float y, float z, ubyte r, ubyte g, ubyte b) +{ sgl_v3f_c3b(x, y, z, r, g, b); } -extern(C) void sgl_v3f_c4f(float, float, float, float, float, float, float); -void v3fC4f(float x, float y, float z, float r, float g, float b, float a) { + +extern (C) void sgl_v3f_c4f(float, float, float, float, float, float, float); +void v3fC4f(float x, float y, float z, float r, float g, float b, float a) +{ sgl_v3f_c4f(x, y, z, r, g, b, a); } -extern(C) void sgl_v3f_c4b(float, float, float, ubyte, ubyte, ubyte, ubyte); -void v3fC4b(float x, float y, float z, ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sgl_v3f_c4b(float, float, float, ubyte, ubyte, ubyte, ubyte); +void v3fC4b(float x, float y, float z, ubyte r, ubyte g, ubyte b, ubyte a) +{ sgl_v3f_c4b(x, y, z, r, g, b, a); } -extern(C) void sgl_v3f_c1i(float, float, float, uint); -void v3fC1i(float x, float y, float z, uint rgba) { + +extern (C) void sgl_v3f_c1i(float, float, float, uint); +void v3fC1i(float x, float y, float z, uint rgba) +{ sgl_v3f_c1i(x, y, z, rgba); } -extern(C) void sgl_v2f_t2f_c3f(float, float, float, float, float, float, float); -void v2fT2fC3f(float x, float y, float u, float v, float r, float g, float b) { + +extern (C) void sgl_v2f_t2f_c3f(float, float, float, float, float, float, float); +void v2fT2fC3f(float x, float y, float u, float v, float r, float g, float b) +{ sgl_v2f_t2f_c3f(x, y, u, v, r, g, b); } -extern(C) void sgl_v2f_t2f_c3b(float, float, float, float, ubyte, ubyte, ubyte); -void v2fT2fC3b(float x, float y, float u, float v, ubyte r, ubyte g, ubyte b) { + +extern (C) void sgl_v2f_t2f_c3b(float, float, float, float, ubyte, ubyte, ubyte); +void v2fT2fC3b(float x, float y, float u, float v, ubyte r, ubyte g, ubyte b) +{ sgl_v2f_t2f_c3b(x, y, u, v, r, g, b); } -extern(C) void sgl_v2f_t2f_c4f(float, float, float, float, float, float, float, float); -void v2fT2fC4f(float x, float y, float u, float v, float r, float g, float b, float a) { + +extern (C) void sgl_v2f_t2f_c4f(float, float, float, float, float, float, float, float); +void v2fT2fC4f(float x, float y, float u, float v, float r, float g, float b, float a) +{ sgl_v2f_t2f_c4f(x, y, u, v, r, g, b, a); } -extern(C) void sgl_v2f_t2f_c4b(float, float, float, float, ubyte, ubyte, ubyte, ubyte); -void v2fT2fC4b(float x, float y, float u, float v, ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sgl_v2f_t2f_c4b(float, float, float, float, ubyte, ubyte, ubyte, ubyte); +void v2fT2fC4b(float x, float y, float u, float v, ubyte r, ubyte g, ubyte b, ubyte a) +{ sgl_v2f_t2f_c4b(x, y, u, v, r, g, b, a); } -extern(C) void sgl_v2f_t2f_c1i(float, float, float, float, uint); -void v2fT2fC1i(float x, float y, float u, float v, uint rgba) { + +extern (C) void sgl_v2f_t2f_c1i(float, float, float, float, uint); +void v2fT2fC1i(float x, float y, float u, float v, uint rgba) +{ sgl_v2f_t2f_c1i(x, y, u, v, rgba); } -extern(C) void sgl_v3f_t2f_c3f(float, float, float, float, float, float, float, float); -void v3fT2fC3f(float x, float y, float z, float u, float v, float r, float g, float b) { + +extern (C) void sgl_v3f_t2f_c3f(float, float, float, float, float, float, float, float); +void v3fT2fC3f(float x, float y, float z, float u, float v, float r, float g, float b) +{ sgl_v3f_t2f_c3f(x, y, z, u, v, r, g, b); } -extern(C) void sgl_v3f_t2f_c3b(float, float, float, float, float, ubyte, ubyte, ubyte); -void v3fT2fC3b(float x, float y, float z, float u, float v, ubyte r, ubyte g, ubyte b) { + +extern (C) void sgl_v3f_t2f_c3b(float, float, float, float, float, ubyte, ubyte, ubyte); +void v3fT2fC3b(float x, float y, float z, float u, float v, ubyte r, ubyte g, ubyte b) +{ sgl_v3f_t2f_c3b(x, y, z, u, v, r, g, b); } -extern(C) void sgl_v3f_t2f_c4f(float, float, float, float, float, float, float, float, float); -void v3fT2fC4f(float x, float y, float z, float u, float v, float r, float g, float b, float a) { + +extern (C) void sgl_v3f_t2f_c4f(float, float, float, float, float, float, float, float, float); +void v3fT2fC4f(float x, float y, float z, float u, float v, float r, float g, float b, float a) +{ sgl_v3f_t2f_c4f(x, y, z, u, v, r, g, b, a); } -extern(C) void sgl_v3f_t2f_c4b(float, float, float, float, float, ubyte, ubyte, ubyte, ubyte); -void v3fT2fC4b(float x, float y, float z, float u, float v, ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) void sgl_v3f_t2f_c4b(float, float, float, float, float, ubyte, ubyte, ubyte, ubyte); +void v3fT2fC4b(float x, float y, float z, float u, float v, ubyte r, ubyte g, ubyte b, ubyte a) +{ sgl_v3f_t2f_c4b(x, y, z, u, v, r, g, b, a); } -extern(C) void sgl_v3f_t2f_c1i(float, float, float, float, float, uint); -void v3fT2fC1i(float x, float y, float z, float u, float v, uint rgba) { + +extern (C) void sgl_v3f_t2f_c1i(float, float, float, float, float, uint); +void v3fT2fC1i(float x, float y, float z, float u, float v, uint rgba) +{ sgl_v3f_t2f_c1i(x, y, z, u, v, rgba); } -extern(C) void sgl_end(); -void end() { + +extern (C) void sgl_end(); +void end() +{ sgl_end(); } diff --git a/src/sokol/glue.d b/src/sokol/glue.d index 3895ef7..eb3474a 100644 --- a/src/sokol/glue.d +++ b/src/sokol/glue.d @@ -4,11 +4,15 @@ module sokol.glue; import sg = sokol.gfx; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } -extern(C) sg.ContextDesc sapp_sgcontext(); -sg.ContextDesc context() { + +extern (C) sg.ContextDesc sapp_sgcontext(); +sg.ContextDesc context() +{ return sapp_sgcontext(); } diff --git a/src/sokol/log.d b/src/sokol/log.d index fc4fc23..fa17ba1 100644 --- a/src/sokol/log.d +++ b/src/sokol/log.d @@ -3,9 +3,12 @@ module sokol.log; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } -extern(C) void slog_func(const (char*), uint, uint, const (char*), uint, const (char*), void*); + +extern (C) void slog_func(const(char*), uint, uint, const(char*), uint, const(char*), void*); alias func = slog_func; diff --git a/src/sokol/shape.d b/src/sokol/shape.d index ef6b7b5..d6bc904 100644 --- a/src/sokol/shape.d +++ b/src/sokol/shape.d @@ -4,30 +4,43 @@ module sokol.shape; import sg = sokol.gfx; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } // helper function to convert "anything" to a Range struct -Range asRange(T)(T val) { - static if (isPointer!T) { - return Range(val, __traits(classInstanceSize, T)); - } else static if (is(T == struct)) { - return Range(val.tupleof); - } else { - static assert(0, "Cannot convert to range"); +Range asRange(T)(T val) +{ + static if (isPointer!T) + { + return Range(val, __traits(classInstanceSize, T)); + } + else static if (is(T == struct)) + { + return Range(val.tupleof); + } + else + { + static assert(0, "Cannot convert to range"); } } -struct Range { +struct Range +{ const(void)* ptr; size_t size; } -struct Mat4 { + +struct Mat4 +{ float[4][4] m; } -struct Vertex { + +struct Vertex +{ float x; float y; float z; @@ -36,29 +49,41 @@ struct Vertex { ushort v; uint color; } -struct ElementRange { + +struct ElementRange +{ uint base_element; uint num_elements; } -struct SizesItem { + +struct SizesItem +{ uint num; uint size; } -struct Sizes { + +struct Sizes +{ SizesItem vertices; SizesItem indices; } -struct BufferItem { + +struct BufferItem +{ Range buffer; size_t data_size; size_t shape_offset; } -struct Buffer { + +struct Buffer +{ bool valid; BufferItem vertices; BufferItem indices; } -struct Plane { + +struct Plane +{ float width; float depth; ushort tiles; @@ -67,7 +92,9 @@ struct Plane { bool merge; Mat4 transform; } -struct Box { + +struct Box +{ float width; float height; float depth; @@ -77,7 +104,9 @@ struct Box { bool merge; Mat4 transform; } -struct Sphere { + +struct Sphere +{ float radius; ushort slices; ushort stacks; @@ -86,7 +115,9 @@ struct Sphere { bool merge; Mat4 transform; } -struct Cylinder { + +struct Cylinder +{ float radius; float height; ushort slices; @@ -96,7 +127,9 @@ struct Cylinder { bool merge; Mat4 transform; } -struct Torus { + +struct Torus +{ float radius; float ring_radius; ushort sides; @@ -106,99 +139,147 @@ struct Torus { bool merge; Mat4 transform; } -extern(C) Buffer sshape_build_plane(const Buffer *, const Plane *); -Buffer buildPlane(Buffer buf, Plane params) { + +extern (C) Buffer sshape_build_plane(const Buffer*, const Plane*); +Buffer buildPlane(Buffer buf, Plane params) +{ return sshape_build_plane(&buf, ¶ms); } -extern(C) Buffer sshape_build_box(const Buffer *, const Box *); -Buffer buildBox(Buffer buf, Box params) { + +extern (C) Buffer sshape_build_box(const Buffer*, const Box*); +Buffer buildBox(Buffer buf, Box params) +{ return sshape_build_box(&buf, ¶ms); } -extern(C) Buffer sshape_build_sphere(const Buffer *, const Sphere *); -Buffer buildSphere(Buffer buf, Sphere params) { + +extern (C) Buffer sshape_build_sphere(const Buffer*, const Sphere*); +Buffer buildSphere(Buffer buf, Sphere params) +{ return sshape_build_sphere(&buf, ¶ms); } -extern(C) Buffer sshape_build_cylinder(const Buffer *, const Cylinder *); -Buffer buildCylinder(Buffer buf, Cylinder params) { + +extern (C) Buffer sshape_build_cylinder(const Buffer*, const Cylinder*); +Buffer buildCylinder(Buffer buf, Cylinder params) +{ return sshape_build_cylinder(&buf, ¶ms); } -extern(C) Buffer sshape_build_torus(const Buffer *, const Torus *); -Buffer buildTorus(Buffer buf, Torus params) { + +extern (C) Buffer sshape_build_torus(const Buffer*, const Torus*); +Buffer buildTorus(Buffer buf, Torus params) +{ return sshape_build_torus(&buf, ¶ms); } -extern(C) Sizes sshape_plane_sizes(uint); -Sizes planeSizes(uint tiles) { + +extern (C) Sizes sshape_plane_sizes(uint); +Sizes planeSizes(uint tiles) +{ return sshape_plane_sizes(tiles); } -extern(C) Sizes sshape_box_sizes(uint); -Sizes boxSizes(uint tiles) { + +extern (C) Sizes sshape_box_sizes(uint); +Sizes boxSizes(uint tiles) +{ return sshape_box_sizes(tiles); } -extern(C) Sizes sshape_sphere_sizes(uint, uint); -Sizes sphereSizes(uint slices, uint stacks) { + +extern (C) Sizes sshape_sphere_sizes(uint, uint); +Sizes sphereSizes(uint slices, uint stacks) +{ return sshape_sphere_sizes(slices, stacks); } -extern(C) Sizes sshape_cylinder_sizes(uint, uint); -Sizes cylinderSizes(uint slices, uint stacks) { + +extern (C) Sizes sshape_cylinder_sizes(uint, uint); +Sizes cylinderSizes(uint slices, uint stacks) +{ return sshape_cylinder_sizes(slices, stacks); } -extern(C) Sizes sshape_torus_sizes(uint, uint); -Sizes torusSizes(uint sides, uint rings) { + +extern (C) Sizes sshape_torus_sizes(uint, uint); +Sizes torusSizes(uint sides, uint rings) +{ return sshape_torus_sizes(sides, rings); } -extern(C) ElementRange sshape_element_range(const Buffer *); -ElementRange elementRange(Buffer buf) { + +extern (C) ElementRange sshape_element_range(const Buffer*); +ElementRange elementRange(Buffer buf) +{ return sshape_element_range(&buf); } -extern(C) sg.BufferDesc sshape_vertex_buffer_desc(const Buffer *); -sg.BufferDesc vertexBufferDesc(Buffer buf) { + +extern (C) sg.BufferDesc sshape_vertex_buffer_desc(const Buffer*); +sg.BufferDesc vertexBufferDesc(Buffer buf) +{ return sshape_vertex_buffer_desc(&buf); } -extern(C) sg.BufferDesc sshape_index_buffer_desc(const Buffer *); -sg.BufferDesc indexBufferDesc(Buffer buf) { + +extern (C) sg.BufferDesc sshape_index_buffer_desc(const Buffer*); +sg.BufferDesc indexBufferDesc(Buffer buf) +{ return sshape_index_buffer_desc(&buf); } -extern(C) sg.VertexBufferLayoutState sshape_vertex_buffer_layout_state(); -sg.VertexBufferLayoutState vertexBufferLayoutState() { + +extern (C) sg.VertexBufferLayoutState sshape_vertex_buffer_layout_state(); +sg.VertexBufferLayoutState vertexBufferLayoutState() +{ return sshape_vertex_buffer_layout_state(); } -extern(C) sg.VertexAttrState sshape_position_vertex_attr_state(); -sg.VertexAttrState positionVertexAttrState() { + +extern (C) sg.VertexAttrState sshape_position_vertex_attr_state(); +sg.VertexAttrState positionVertexAttrState() +{ return sshape_position_vertex_attr_state(); } -extern(C) sg.VertexAttrState sshape_normal_vertex_attr_state(); -sg.VertexAttrState normalVertexAttrState() { + +extern (C) sg.VertexAttrState sshape_normal_vertex_attr_state(); +sg.VertexAttrState normalVertexAttrState() +{ return sshape_normal_vertex_attr_state(); } -extern(C) sg.VertexAttrState sshape_texcoord_vertex_attr_state(); -sg.VertexAttrState texcoordVertexAttrState() { + +extern (C) sg.VertexAttrState sshape_texcoord_vertex_attr_state(); +sg.VertexAttrState texcoordVertexAttrState() +{ return sshape_texcoord_vertex_attr_state(); } -extern(C) sg.VertexAttrState sshape_color_vertex_attr_state(); -sg.VertexAttrState colorVertexAttrState() { + +extern (C) sg.VertexAttrState sshape_color_vertex_attr_state(); +sg.VertexAttrState colorVertexAttrState() +{ return sshape_color_vertex_attr_state(); } -extern(C) uint sshape_color_4f(float, float, float, float); -uint color4f(float r, float g, float b, float a) { + +extern (C) uint sshape_color_4f(float, float, float, float); +uint color4f(float r, float g, float b, float a) +{ return sshape_color_4f(r, g, b, a); } -extern(C) uint sshape_color_3f(float, float, float); -uint color3f(float r, float g, float b) { + +extern (C) uint sshape_color_3f(float, float, float); +uint color3f(float r, float g, float b) +{ return sshape_color_3f(r, g, b); } -extern(C) uint sshape_color_4b(ubyte, ubyte, ubyte, ubyte); -uint color4b(ubyte r, ubyte g, ubyte b, ubyte a) { + +extern (C) uint sshape_color_4b(ubyte, ubyte, ubyte, ubyte); +uint color4b(ubyte r, ubyte g, ubyte b, ubyte a) +{ return sshape_color_4b(r, g, b, a); } -extern(C) uint sshape_color_3b(ubyte, ubyte, ubyte); -uint color3b(ubyte r, ubyte g, ubyte b) { + +extern (C) uint sshape_color_3b(ubyte, ubyte, ubyte); +uint color3b(ubyte r, ubyte g, ubyte b) +{ return sshape_color_3b(r, g, b); } -extern(C) Mat4 sshape_mat4(const float *); -Mat4 mat4(const float * m) { + +extern (C) Mat4 sshape_mat4(const float*); +Mat4 mat4(const float* m) +{ return sshape_mat4(m); } -extern(C) Mat4 sshape_mat4_transpose(const float *); -Mat4 mat4Transpose(const float * m) { + +extern (C) Mat4 sshape_mat4_transpose(const float*); +Mat4 mat4Transpose(const float* m) +{ return sshape_mat4_transpose(m); } diff --git a/src/sokol/time.d b/src/sokol/time.d index dcabfed..2d89438 100644 --- a/src/sokol/time.d +++ b/src/sokol/time.d @@ -3,47 +3,69 @@ module sokol.time; // helper function to convert a C string to a D string -string cStrToDString(const(char*) c_str) { - import std.conv: to; +string cStrToDString(const(char*) c_str) +{ + import std.conv : to; + return c_str.to!string; } -extern(C) void stm_setup(); -void setup() { + +extern (C) void stm_setup(); +void setup() +{ stm_setup(); } -extern(C) ulong stm_now(); -ulong now() { + +extern (C) ulong stm_now(); +ulong now() +{ return stm_now(); } -extern(C) ulong stm_diff(ulong, ulong); -ulong diff(ulong new_ticks, ulong old_ticks) { + +extern (C) ulong stm_diff(ulong, ulong); +ulong diff(ulong new_ticks, ulong old_ticks) +{ return stm_diff(new_ticks, old_ticks); } -extern(C) ulong stm_since(ulong); -ulong since(ulong start_ticks) { + +extern (C) ulong stm_since(ulong); +ulong since(ulong start_ticks) +{ return stm_since(start_ticks); } -extern(C) ulong stm_laptime(ulong *); -ulong laptime(ulong * last_time) { + +extern (C) ulong stm_laptime(ulong*); +ulong laptime(ulong* last_time) +{ return stm_laptime(last_time); } -extern(C) ulong stm_round_to_common_refresh_rate(ulong); -ulong roundToCommonRefreshRate(ulong frame_ticks) { + +extern (C) ulong stm_round_to_common_refresh_rate(ulong); +ulong roundToCommonRefreshRate(ulong frame_ticks) +{ return stm_round_to_common_refresh_rate(frame_ticks); } -extern(C) double stm_sec(ulong); -double sec(ulong ticks) { + +extern (C) double stm_sec(ulong); +double sec(ulong ticks) +{ return stm_sec(ticks); } -extern(C) double stm_ms(ulong); -double ms(ulong ticks) { + +extern (C) double stm_ms(ulong); +double ms(ulong ticks) +{ return stm_ms(ticks); } -extern(C) double stm_us(ulong); -double us(ulong ticks) { + +extern (C) double stm_us(ulong); +double us(ulong ticks) +{ return stm_us(ticks); } -extern(C) double stm_ns(ulong); -double ns(ulong ticks) { + +extern (C) double stm_ns(ulong); +double ns(ulong ticks) +{ return stm_ns(ticks); }