From 4fa22e086ebad384679c76e40308b6b7f3cfee6d Mon Sep 17 00:00:00 2001 From: GH Action Date: Wed, 6 Mar 2024 18:56:14 +0000 Subject: [PATCH 01/66] updated (https://github.com/floooh/sokol/commit/db32cf409a9eb984e1ababa96e243f141c7f40ed) --- c/sokol_gfx.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index 305a5d4..598f840 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -141,7 +141,7 @@ object handle is required instead of an sg_swapchain struct. An offscreen pass is started like this (assuming attachments is an sg_attachments handle): - sg_begin_pass(&(sg_pass){ .action = { ... }, .attachments = attachemnts }); + sg_begin_pass(&(sg_pass){ .action = { ... }, .attachments = attachments }); --- set the render pipeline state for the next draw call with: @@ -3566,7 +3566,7 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_ATTACHMENTSDESC_DEPTH_IMAGE_SAMPLE_COUNT, "pass depth attachment sample count must match color attachment sample count") \ _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_CANARY, "sg_begin_pass: pass struct not initialized") \ _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_ATTACHMENTS_EXISTS, "sg_begin_pass: attachments object no longer alive") \ - _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_ATTACHMENTS_VALID, "sg_begin_pass: attachemnts object not in resource state VALID") \ + _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_ATTACHMENTS_VALID, "sg_begin_pass: attachments object not in resource state VALID") \ _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_COLOR_ATTACHMENT_IMAGE, "sg_begin_pass: one or more color attachment images are not valid") \ _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_RESOLVE_ATTACHMENT_IMAGE, "sg_begin_pass: one or more resolve attachment images are not valid") \ _SG_LOGITEM_XMACRO(VALIDATE_BEGINPASS_DEPTHSTENCIL_ATTACHMENT_IMAGE, "sg_begin_pass: one or more depth-stencil attachment images are not valid") \ @@ -4166,7 +4166,7 @@ inline sg_image sg_make_image(const sg_image_desc& desc) { return sg_make_image( inline sg_sampler sg_make_sampler(const sg_sampler_desc& desc) { return sg_make_sampler(&desc); } inline sg_shader sg_make_shader(const sg_shader_desc& desc) { return sg_make_shader(&desc); } inline sg_pipeline sg_make_pipeline(const sg_pipeline_desc& desc) { return sg_make_pipeline(&desc); } -inline sg_attachments sg_make_attchments(const sg_attachments_desc& desc) { return sg_make_attachments(&desc); } +inline sg_attachments sg_make_attachments(const sg_attachments_desc& desc) { return sg_make_attachments(&desc); } inline void sg_update_image(sg_image img, const sg_image_data& data) { return sg_update_image(img, &data); } inline void sg_begin_pass(const sg_pass& pass) { return sg_begin_pass(&pass); } From 7986963aaf45045ca5a390956a0b0be03dacb286 Mon Sep 17 00:00:00 2001 From: GH Action Date: Wed, 20 Mar 2024 16:46:36 +0000 Subject: [PATCH 02/66] updated (https://github.com/floooh/sokol/commit/00c9072d40f7d19ae76b31867918a697f1c15ce4) --- c/sokol_gfx.h | 2 +- c/sokol_glue.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index 598f840..5b8c354 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -2432,7 +2432,7 @@ typedef struct sg_pass_action { as 'type erased' void pointers: GL: on all GL backends, a GL framebuffer object must be provided. This - can be zero for the defaul framebuffer. + can be zero for the default framebuffer. D3D11: - an ID3D11RenderTargetView for the rendering surface, without diff --git a/c/sokol_glue.h b/c/sokol_glue.h index b688a87..a715b17 100644 --- a/c/sokol_glue.h +++ b/c/sokol_glue.h @@ -43,7 +43,7 @@ functions. Use this in the sg_setup() call like this: sg_setup(&(sg_desc){ - .environment = sglue_enviornment(), + .environment = sglue_environment(), ... }); From 9c4f740875e769d2cc5c0abbcf475d9559f3d928 Mon Sep 17 00:00:00 2001 From: GH Action Date: Fri, 29 Mar 2024 12:48:30 +0000 Subject: [PATCH 03/66] updated (https://github.com/floooh/sokol/commit/95a976f61a3cffaf6afc0c4e21fa068a97acfc06) --- c/sokol_app.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/sokol_app.h b/c/sokol_app.h index db73ebb..f5db5b7 100644 --- a/c/sokol_app.h +++ b/c/sokol_app.h @@ -348,7 +348,7 @@ sapp_consume_event() from inside the event handler (NOTE that this behaviour is currently only implemented for some HTML5 events, support for other platforms and event types will - be added as needed, please open a github ticket and/or provide + be added as needed, please open a GitHub ticket and/or provide a PR if needed). NOTE: Do *not* call any 3D API rendering functions in the event From f01dab1865489a47a238124d891747db073d10dd Mon Sep 17 00:00:00 2001 From: GH Action Date: Sat, 30 Mar 2024 23:20:49 +0000 Subject: [PATCH 04/66] updated (https://github.com/floooh/sokol/commit/7f7cd64c6d9d1d4ed08d88a3879b1d69841bf0a4) --- c/sokol_gfx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index 5b8c354..a99ec95 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -1851,7 +1851,7 @@ typedef enum sg_image_type { is compatible with what the shader expects. Apart from the sokol-gfx validation layer, WebGPU is the only backend API which actually requires matching texture and sampler type to be provided upfront for validation - (after 3D APIs treat texture/sampler type mismatches as undefined behaviour). + (other 3D APIs treat texture/sampler type mismatches as undefined behaviour). NOTE that the following texture pixel formats require the use of SG_IMAGESAMPLETYPE_UNFILTERABLE_FLOAT, combined with a sampler From 23482759ce7b294b0b3989aea2faa98fdd0bf4f5 Mon Sep 17 00:00:00 2001 From: GH Action Date: Mon, 8 Apr 2024 08:16:56 +0000 Subject: [PATCH 05/66] updated (https://github.com/floooh/sokol/commit/6747384927e4520bd3391bba81bf416567655239) --- c/sokol_debugtext.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/c/sokol_debugtext.h b/c/sokol_debugtext.h index cec0694..9e5062d 100644 --- a/c/sokol_debugtext.h +++ b/c/sokol_debugtext.h @@ -3849,8 +3849,8 @@ static void _sdtx_init_context(sdtx_context ctx_id, const sdtx_context_desc_t* i pip_desc.colors[0].blend.enabled = true; pip_desc.colors[0].blend.src_factor_rgb = SG_BLENDFACTOR_SRC_ALPHA; pip_desc.colors[0].blend.dst_factor_rgb = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA; - pip_desc.colors[0].blend.src_factor_alpha = SG_BLENDFACTOR_ZERO; - pip_desc.colors[0].blend.dst_factor_alpha = SG_BLENDFACTOR_ONE; + pip_desc.colors[0].blend.src_factor_alpha = SG_BLENDFACTOR_ONE; + pip_desc.colors[0].blend.dst_factor_alpha = SG_BLENDFACTOR_ZERO; pip_desc.label = "sdtx-pipeline"; ctx->pip = sg_make_pipeline(&pip_desc); SOKOL_ASSERT(SG_INVALID_ID != ctx->pip.id); From 09ad5a8c3999330748da01aefbde8dc991e20fcf Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Tue, 9 Apr 2024 10:53:46 +0200 Subject: [PATCH 06/66] disable macOS CI builds (llvm@11 is no longer supported by homebrew) --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 644d69c..37c37f0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,7 +6,9 @@ jobs: build: strategy: matrix: - os: [ubuntu-latest, macos-latest, windows-latest] + # NOTE: disable macOS because llvm@11 is no longer supported in Homebrew + # os: [ubuntu-latest, macos-latest, windows-latest] + os: [ubuntu-latest, windows-latest] runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 From d8eeaa88022313058ecb519776b6bbe18af60079 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Tue, 9 Apr 2024 11:13:55 +0200 Subject: [PATCH 07/66] Update to latest odin version --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 37c37f0..e6be298 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: run: | sudo apt-get update sudo apt-get install libglu1-mesa-dev mesa-common-dev xorg-dev libasound-dev llvm-11 - curl -L https://github.com/odin-lang/Odin/releases/download/dev-2023-07/odin-ubuntu-amd64-dev-2023-07.zip --output odin.zip + curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-macos-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip chmod a+x ./odin ./build_clibs_linux.sh @@ -26,7 +26,7 @@ jobs: name: prepare-macos run: | brew install llvm@11 - curl -L https://github.com/odin-lang/Odin/releases/download/dev-2023-07/odin-macos-amd64-dev-2023-07.zip --output odin.zip + curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-ubuntu-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip chmod a+x ./odin ./build_clibs_macos.sh @@ -34,7 +34,7 @@ jobs: name: prepare-windows shell: cmd run: | - curl -L https://github.com/odin-lang/Odin/releases/download/dev-2023-07/odin-windows-amd64-dev-2023-07.zip --output odin.zip + curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-windows-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip build_clibs_windows.cmd - name: build From 4f51f119508cd031188b0d9db993edabe7edf4a1 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Tue, 9 Apr 2024 11:17:54 +0200 Subject: [PATCH 08/66] LLVM17 test --- .github/workflows/main.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e6be298..0f81742 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,8 +17,11 @@ jobs: name: prepare-linux run: | sudo apt-get update - sudo apt-get install libglu1-mesa-dev mesa-common-dev xorg-dev libasound-dev llvm-11 - curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-macos-amd64-dev-2024-04.zip --output odin.zip + sudo apt-get install libglu1-mesa-dev mesa-common-dev xorg-dev libasound-dev + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + echo "/usr/lib/llvm-17/bin" >> $GITHUB_PATH + curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-ubuntu-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip chmod a+x ./odin ./build_clibs_linux.sh @@ -26,7 +29,7 @@ jobs: name: prepare-macos run: | brew install llvm@11 - curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-ubuntu-amd64-dev-2024-04.zip --output odin.zip + curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-macos-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip chmod a+x ./odin ./build_clibs_macos.sh From cd105144e0d373f252dcb25c1ca327bcb5c7877b Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 09:49:06 +0200 Subject: [PATCH 09/66] Hack for odin's release zips --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0f81742..785d83e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -23,6 +23,9 @@ jobs: echo "/usr/lib/llvm-17/bin" >> $GITHUB_PATH curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-ubuntu-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip + # HACK: odin releases are zipped twice + unzip dist.zip + mv ./dist/* ./ chmod a+x ./odin ./build_clibs_linux.sh - if: runner.os == 'macOS' From e3d4389637a29a898d5677f54145dfd99b634e37 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 09:52:48 +0200 Subject: [PATCH 10/66] Examples hack --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 785d83e..c6f36d6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,6 +25,7 @@ jobs: unzip odin.zip # HACK: odin releases are zipped twice unzip dist.zip + rm -r ./dist/examples # Sokol already has an examples folder mv ./dist/* ./ chmod a+x ./odin ./build_clibs_linux.sh From 8e03a2086564d063b2440a573aa73e343953a1f1 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 09:56:18 +0200 Subject: [PATCH 11/66] Enable MacOS again with LLVM17 --- .github/workflows/main.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c6f36d6..a303782 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,9 +6,7 @@ jobs: build: strategy: matrix: - # NOTE: disable macOS because llvm@11 is no longer supported in Homebrew - # os: [ubuntu-latest, macos-latest, windows-latest] - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v3 @@ -32,7 +30,7 @@ jobs: - if: runner.os == 'macOS' name: prepare-macos run: | - brew install llvm@11 + brew install llvm@17 curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-macos-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip chmod a+x ./odin From 2f3c7099cd6d87e078127670cc41988e39294cc2 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 09:59:33 +0200 Subject: [PATCH 12/66] Fix MacOS --- .github/workflows/main.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a303782..e65f3ef 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,6 +8,8 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{matrix.os}} + # NOTE: odin macos and ubuntu releases are zipped twice, so this is bit of a hack. + # The examples folder also conflicts with the sokol examples, so we just remove it. steps: - uses: actions/checkout@v3 - uses: ilammy/msvc-dev-cmd@v1 @@ -21,9 +23,8 @@ jobs: echo "/usr/lib/llvm-17/bin" >> $GITHUB_PATH curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-ubuntu-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip - # HACK: odin releases are zipped twice unzip dist.zip - rm -r ./dist/examples # Sokol already has an examples folder + rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin ./build_clibs_linux.sh @@ -33,6 +34,9 @@ jobs: brew install llvm@17 curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-macos-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip + unzip dist.zip + rm -r ./dist/examples + mv ./dist/* ./ chmod a+x ./odin ./build_clibs_macos.sh - if: runner.os == 'Windows' From d95edf1622ef7d58cd479f7b95b9466ec0e5856f Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 10:02:22 +0200 Subject: [PATCH 13/66] Update to checkouts@v4 (fix Node.js 16 is deprecated warning) --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e65f3ef..d964e40 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -11,7 +11,7 @@ jobs: # NOTE: odin macos and ubuntu releases are zipped twice, so this is bit of a hack. # The examples folder also conflicts with the sokol examples, so we just remove it. steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ilammy/msvc-dev-cmd@v1 - if: runner.os == 'Linux' name: prepare-linux From 3d9b6a9cfc4f7e7f3b4a757325439078106f9ec0 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:32:30 +0200 Subject: [PATCH 14/66] Change build scripts and use unity builds --- build_clibs_linux.sh | 44 ++----------- build_clibs_macos.sh | 138 +++++++--------------------------------- build_clibs_windows.cmd | 58 ++++++++--------- c/sokol.c | 22 +++++++ c/sokol_app.c | 5 -- c/sokol_audio.c | 6 -- c/sokol_debugtext.c | 7 -- c/sokol_defines.h | 8 --- c/sokol_gfx.c | 5 -- c/sokol_gl.c | 6 -- c/sokol_glue.c | 7 -- c/sokol_log.c | 5 -- c/sokol_shape.c | 6 -- c/sokol_time.c | 5 -- 14 files changed, 81 insertions(+), 241 deletions(-) create mode 100644 c/sokol.c delete mode 100644 c/sokol_app.c delete mode 100644 c/sokol_audio.c delete mode 100644 c/sokol_debugtext.c delete mode 100644 c/sokol_defines.h delete mode 100644 c/sokol_gfx.c delete mode 100644 c/sokol_gl.c delete mode 100644 c/sokol_glue.c delete mode 100644 c/sokol_log.c delete mode 100644 c/sokol_shape.c delete mode 100644 c/sokol_time.c diff --git a/build_clibs_linux.sh b/build_clibs_linux.sh index 8caa561..ec08a94 100755 --- a/build_clibs_linux.sh +++ b/build_clibs_linux.sh @@ -1,43 +1,11 @@ set -e -build_lib_x64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} +echo === GL Debug === +cc -pthread -c -g -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_linux_x64_gl_debug.a sokol.o -build_lib_x64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - cc -pthread -c -g -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} - -# x64 + GL + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app sokol/app/sokol_app_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time sokol/time/sokol_time_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE33 - -# x64 + GL + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app sokol/app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time sokol/time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE33 +echo === GL Release === +cc -pthread -c -O2 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_linux_x64_gl_release.a sokol.o rm *.o diff --git a/build_clibs_macos.sh b/build_clibs_macos.sh index 5e6a831..c4367cf 100755 --- a/build_clibs_macos.sh +++ b/build_clibs_macos.sh @@ -1,127 +1,37 @@ set -e -build_lib_arm64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} +echo === Metal Debug arm64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -DSOKOL_METAL c/sokol.c +ar rcs sokol/sokol_macos_arm64_metal_debug.a sokol.o -build_lib_arm64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} +echo === Metal Release arm64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -DSOKOL_METAL c/sokol.c +ar rcs sokol/sokol_macos_arm64_metal_release.a sokol.o -build_lib_x64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} +echo === Metal Debug x64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -DSOKOL_METAL c/sokol.c +ar rcs sokol/sokol_macos_x64_metal_debug.a sokol.o -build_lib_x64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend c/$src.c - ar rcs $dst.a $src.o -} +echo === Metal Release x64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -DSOKOL_METAL c/sokol.c +ar rcs sokol/sokol_macos_x64_metal_release.a sokol.o -# ARM + Metal + Release -build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_release SOKOL_METAL -# ARM + Metal + Debug -build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_debug SOKOL_METAL -# x64 + Metal + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_metal_release SOKOL_METAL +echo === GL Debug arm64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_macos_arm64_gl_debug.a sokol.o -# x64 + Metal + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_metal_debug SOKOL_METAL +echo === GL Release arm64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_macos_arm64_gl_release.a sokol.o -# ARM + GL + Release -build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE33 +echo === GL Debug x64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_macos_x64_gl_debug.a sokol.o -# ARM + GL + Debug -build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE33 - -# x64 + GL + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE33 - -# x64 + GL + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE33 +echo === GL Release x64 === +MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c +ar rcs sokol/sokol_macos_x64_gl_release.a sokol.o rm *.o diff --git a/build_clibs_windows.cmd b/build_clibs_windows.cmd index 4c04281..895d72f 100644 --- a/build_clibs_windows.cmd +++ b/build_clibs_windows.cmd @@ -1,31 +1,31 @@ @echo off -set sources=log app gfx glue time audio debugtext shape gl - -REM D3D11 Debug -for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_debug.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM D3D11 Release -for %%s in (%sources%) do ( - cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_release.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM GL Debug -for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM GL Release -for %%s in (%sources%) do ( - cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_release.lib sokol_%%s.obj - del sokol_%%s.obj -) +echo === D3D11 Debug === +cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol.c /Z7 +lib /OUT:sokol\sokol_windows_x64_d3d11_debug.lib sokol.obj + +echo === D3D11 Release === +cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 c\sokol.c +lib /OUT:sokol\sokol_windows_x64_d3d11_release.lib sokol.obj + +echo === GL Debug === +cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol.c /Z7 +lib /OUT:sokol\sokol_windows_x64_gl_debug.lib sokol.obj + +echo === GL Release === +cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol.c +lib /OUT:sokol\sokol_windows_x64_gl_release.lib sokol.obj + +del sokol.obj + +echo === D3D11 Debug DLL === +cl /OUT:sokol\sokol_windows_x64_d3d11_debug.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /Z7 /LDd /MDd /DLL + +echo === D3D11 Release DLL === +cl /OUT:sokol\sokol_windows_x64_d3d11_release.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /LD /MD /DLL + +echo === GL Debug DLL === +cl /OUT:sokol\sokol_windows_x64_gl_debug.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /Z7 /LDd /MDd /DLL + +echo === GL Release DLL === +cl /OUT:sokol\sokol_windows_x64_gl_release.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /LD /MD /DLL \ No newline at end of file diff --git a/c/sokol.c b/c/sokol.c new file mode 100644 index 0000000..3b1f298 --- /dev/null +++ b/c/sokol.c @@ -0,0 +1,22 @@ +#if defined(IMPL) +#define SOKOL_IMPL +#endif + +#define SOKOL_NO_ENTRY +#if defined(_WIN32) + #define SOKOL_WIN32_FORCE_MAIN +#endif +// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors +#if defined(__APPLE__) +#include +#endif + +#include "sokol_audio.h" +#include "sokol_app.h" +#include "sokol_gfx.h" +#include "sokol_gl.h" +#include "sokol_shape.h" +#include "sokol_shape.h" +#include "sokol_log.h" +#include "sokol_debugtext.h" +#include "sokol_time.c" diff --git a/c/sokol_app.c b/c/sokol_app.c deleted file mode 100644 index 8cf2b17..0000000 --- a/c/sokol_app.c +++ /dev/null @@ -1,5 +0,0 @@ -#if defined(IMPL) -#define SOKOL_APP_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_app.h" diff --git a/c/sokol_audio.c b/c/sokol_audio.c deleted file mode 100644 index 53cdb49..0000000 --- a/c/sokol_audio.c +++ /dev/null @@ -1,6 +0,0 @@ -#if defined(IMPL) -#define SOKOL_AUDIO_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_audio.h" - diff --git a/c/sokol_debugtext.c b/c/sokol_debugtext.c deleted file mode 100644 index 42ad569..0000000 --- a/c/sokol_debugtext.c +++ /dev/null @@ -1,7 +0,0 @@ -#if defined(IMPL) -#define SOKOL_DEBUGTEXT_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_gfx.h" -#include "sokol_debugtext.h" - diff --git a/c/sokol_defines.h b/c/sokol_defines.h deleted file mode 100644 index 41f0c95..0000000 --- a/c/sokol_defines.h +++ /dev/null @@ -1,8 +0,0 @@ -#define SOKOL_NO_ENTRY -#if defined(_WIN32) - #define SOKOL_WIN32_FORCE_MAIN -#endif -// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors -#if defined(__APPLE__) -#include -#endif diff --git a/c/sokol_gfx.c b/c/sokol_gfx.c deleted file mode 100644 index 984b8b4..0000000 --- a/c/sokol_gfx.c +++ /dev/null @@ -1,5 +0,0 @@ -#if defined(IMPL) -#define SOKOL_GFX_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_gfx.h" diff --git a/c/sokol_gl.c b/c/sokol_gl.c deleted file mode 100644 index f15e4a7..0000000 --- a/c/sokol_gl.c +++ /dev/null @@ -1,6 +0,0 @@ -#if defined(IMPL) -#define SOKOL_GL_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_gfx.h" -#include "sokol_gl.h" diff --git a/c/sokol_glue.c b/c/sokol_glue.c deleted file mode 100644 index 33d23ce..0000000 --- a/c/sokol_glue.c +++ /dev/null @@ -1,7 +0,0 @@ -#if defined(IMPL) -#define SOKOL_GLUE_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_app.h" -#include "sokol_gfx.h" -#include "sokol_glue.h" diff --git a/c/sokol_log.c b/c/sokol_log.c deleted file mode 100644 index bfdc1da..0000000 --- a/c/sokol_log.c +++ /dev/null @@ -1,5 +0,0 @@ -#if defined(IMPL) -#define SOKOL_LOG_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_log.h" diff --git a/c/sokol_shape.c b/c/sokol_shape.c deleted file mode 100644 index 73449f0..0000000 --- a/c/sokol_shape.c +++ /dev/null @@ -1,6 +0,0 @@ -#if defined(IMPL) -#define SOKOL_SHAPE_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_gfx.h" -#include "sokol_shape.h" diff --git a/c/sokol_time.c b/c/sokol_time.c deleted file mode 100644 index 335304c..0000000 --- a/c/sokol_time.c +++ /dev/null @@ -1,5 +0,0 @@ -#if defined(IMPL) -#define SOKOL_TIME_IMPL -#endif -#include "sokol_defines.h" -#include "sokol_time.h" From 0f372f70e1228a8e07925244bf7e27d80329bca6 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Wed, 10 Apr 2024 12:42:04 +0200 Subject: [PATCH 15/66] change prefix to sokol_dll_* libs --- build_clibs_windows.cmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build_clibs_windows.cmd b/build_clibs_windows.cmd index 895d72f..c48a5c9 100644 --- a/build_clibs_windows.cmd +++ b/build_clibs_windows.cmd @@ -19,13 +19,13 @@ lib /OUT:sokol\sokol_windows_x64_gl_release.lib sokol.obj del sokol.obj echo === D3D11 Debug DLL === -cl /OUT:sokol\sokol_windows_x64_d3d11_debug.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /Z7 /LDd /MDd /DLL +cl /OUT:sokol\sokol_dll_windows_x64_d3d11_debug.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /Z7 /LDd /MDd /DLL echo === D3D11 Release DLL === -cl /OUT:sokol\sokol_windows_x64_d3d11_release.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /LD /MD /DLL +cl /OUT:sokol\sokol_dll_windows_x64_d3d11_release.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /LD /MD /DLL echo === GL Debug DLL === -cl /OUT:sokol\sokol_windows_x64_gl_debug.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /Z7 /LDd /MDd /DLL +cl /OUT:sokol\sokol_dll_windows_x64_gl_debug.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /Z7 /LDd /MDd /DLL echo === GL Release DLL === -cl /OUT:sokol\sokol_windows_x64_gl_release.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /LD /MD /DLL \ No newline at end of file +cl /OUT:sokol\sokol_dll_windows_x64_gl_release.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /LD /MD /DLL \ No newline at end of file From c435a279185babcaf92effaf6bae55da680b44d2 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 10:18:08 +0200 Subject: [PATCH 16/66] fixes --- .gitignore | 3 +++ build_clibs_windows.cmd | 12 ++++++------ c/sokol.c | 3 +-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index b55e60d..6de8ed3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,7 @@ build/ *.obj *.pdb *.bin +*.exp +*.ilk +*.dll *.dSYM/ diff --git a/build_clibs_windows.cmd b/build_clibs_windows.cmd index c48a5c9..42dbfad 100644 --- a/build_clibs_windows.cmd +++ b/build_clibs_windows.cmd @@ -16,16 +16,16 @@ echo === GL Release === cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol.c lib /OUT:sokol\sokol_windows_x64_gl_release.lib sokol.obj -del sokol.obj - echo === D3D11 Debug DLL === -cl /OUT:sokol\sokol_dll_windows_x64_d3d11_debug.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /Z7 /LDd /MDd /DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_debug.dll /link /INCREMENTAL:NO echo === D3D11 Release DLL === -cl /OUT:sokol\sokol_dll_windows_x64_d3d11_release.dll /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_dll.c /LD /MD /DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO echo === GL Debug DLL === -cl /OUT:sokol\sokol_dll_windows_x64_gl_debug.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /Z7 /LDd /MDd /DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO echo === GL Release DLL === -cl /OUT:sokol\sokol_dll_windows_x64_gl_release.dll /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_dll.c /LD /MD /DLL \ No newline at end of file +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO + +del sokol.obj \ No newline at end of file diff --git a/c/sokol.c b/c/sokol.c index 3b1f298..ceef30e 100644 --- a/c/sokol.c +++ b/c/sokol.c @@ -16,7 +16,6 @@ #include "sokol_gfx.h" #include "sokol_gl.h" #include "sokol_shape.h" -#include "sokol_shape.h" #include "sokol_log.h" #include "sokol_debugtext.h" -#include "sokol_time.c" +#include "sokol_time.h" From a256e93cd9f49edc48a12d707e3537a7973be1e1 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 11:05:01 +0200 Subject: [PATCH 17/66] use unitybuild only in DLLs, move C files into sokol directory --- build_clibs_linux.sh | 44 ++++++++-- build_clibs_macos.sh | 138 +++++++++++++++++++++++++------ build_clibs_windows.cmd | 68 +++++++++------ c/README.md | 2 - sokol/app/app.odin | 53 ++++++++---- sokol/audio/audio.odin | 53 ++++++++---- {c => sokol/c}/sokol.c | 43 +++++----- sokol/c/sokol_app.c | 5 ++ {c => sokol/c}/sokol_app.h | 0 sokol/c/sokol_audio.c | 6 ++ {c => sokol/c}/sokol_audio.h | 0 sokol/c/sokol_debugtext.c | 7 ++ {c => sokol/c}/sokol_debugtext.h | 0 sokol/c/sokol_defines.h | 8 ++ sokol/c/sokol_gfx.c | 5 ++ {c => sokol/c}/sokol_gfx.h | 0 sokol/c/sokol_gl.c | 6 ++ {c => sokol/c}/sokol_gl.h | 0 sokol/c/sokol_glue.c | 7 ++ {c => sokol/c}/sokol_glue.h | 0 sokol/c/sokol_log.c | 5 ++ {c => sokol/c}/sokol_log.h | 0 sokol/c/sokol_shape.c | 6 ++ {c => sokol/c}/sokol_shape.h | 0 sokol/c/sokol_time.c | 5 ++ {c => sokol/c}/sokol_time.h | 0 sokol/debugtext/debugtext.odin | 53 ++++++++---- sokol/gfx/gfx.odin | 53 ++++++++---- sokol/gl/gl.odin | 53 ++++++++---- sokol/glue/glue.odin | 53 ++++++++---- sokol/log/log.odin | 53 ++++++++---- sokol/shape/shape.odin | 53 ++++++++---- sokol/time/time.odin | 53 ++++++++---- 33 files changed, 590 insertions(+), 242 deletions(-) delete mode 100644 c/README.md rename {c => sokol/c}/sokol.c (82%) create mode 100644 sokol/c/sokol_app.c rename {c => sokol/c}/sokol_app.h (100%) create mode 100644 sokol/c/sokol_audio.c rename {c => sokol/c}/sokol_audio.h (100%) create mode 100644 sokol/c/sokol_debugtext.c rename {c => sokol/c}/sokol_debugtext.h (100%) create mode 100644 sokol/c/sokol_defines.h create mode 100644 sokol/c/sokol_gfx.c rename {c => sokol/c}/sokol_gfx.h (100%) create mode 100644 sokol/c/sokol_gl.c rename {c => sokol/c}/sokol_gl.h (100%) create mode 100644 sokol/c/sokol_glue.c rename {c => sokol/c}/sokol_glue.h (100%) create mode 100644 sokol/c/sokol_log.c rename {c => sokol/c}/sokol_log.h (100%) create mode 100644 sokol/c/sokol_shape.c rename {c => sokol/c}/sokol_shape.h (100%) create mode 100644 sokol/c/sokol_time.c rename {c => sokol/c}/sokol_time.h (100%) diff --git a/build_clibs_linux.sh b/build_clibs_linux.sh index ec08a94..8caa561 100755 --- a/build_clibs_linux.sh +++ b/build_clibs_linux.sh @@ -1,11 +1,43 @@ set -e -echo === GL Debug === -cc -pthread -c -g -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_linux_x64_gl_debug.a sokol.o +build_lib_x64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} -echo === GL Release === -cc -pthread -c -O2 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_linux_x64_gl_release.a sokol.o +build_lib_x64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + cc -pthread -c -g -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +# x64 + GL + Release +build_lib_x64_release sokol_log sokol/log/sokol_log_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_app sokol/app/sokol_app_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_glue sokol/glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_time sokol/time/sokol_time_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_audio sokol/audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_shape sokol/shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gl sokol/gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE33 + +# x64 + GL + Debug +build_lib_x64_debug sokol_log sokol/log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_app sokol/app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_time sokol/time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE33 rm *.o diff --git a/build_clibs_macos.sh b/build_clibs_macos.sh index c4367cf..5e6a831 100755 --- a/build_clibs_macos.sh +++ b/build_clibs_macos.sh @@ -1,37 +1,127 @@ set -e -echo === Metal Debug arm64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -DSOKOL_METAL c/sokol.c -ar rcs sokol/sokol_macos_arm64_metal_debug.a sokol.o +build_lib_arm64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} -echo === Metal Release arm64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -DSOKOL_METAL c/sokol.c -ar rcs sokol/sokol_macos_arm64_metal_release.a sokol.o +build_lib_arm64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} -echo === Metal Debug x64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -DSOKOL_METAL c/sokol.c -ar rcs sokol/sokol_macos_x64_metal_debug.a sokol.o +build_lib_x64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} -echo === Metal Release x64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -DSOKOL_METAL c/sokol.c -ar rcs sokol/sokol_macos_x64_metal_release.a sokol.o +build_lib_x64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} +# ARM + Metal + Release +build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_release SOKOL_METAL +# ARM + Metal + Debug +build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_debug SOKOL_METAL -echo === GL Debug arm64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_macos_arm64_gl_debug.a sokol.o +# x64 + Metal + Release +build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_metal_release SOKOL_METAL -echo === GL Release arm64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_macos_arm64_gl_release.a sokol.o +# x64 + Metal + Debug +build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_metal_debug SOKOL_METAL -echo === GL Debug x64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_macos_x64_gl_debug.a sokol.o +# ARM + GL + Release +build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE33 -echo === GL Release x64 === -MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -DSOKOL_GLCORE33 c/sokol.c -ar rcs sokol/sokol_macos_x64_gl_release.a sokol.o +# ARM + GL + Debug +build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE33 + +# x64 + GL + Release +build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE33 + +# x64 + GL + Debug +build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE33 rm *.o diff --git a/build_clibs_windows.cmd b/build_clibs_windows.cmd index 42dbfad..31fea4c 100644 --- a/build_clibs_windows.cmd +++ b/build_clibs_windows.cmd @@ -1,31 +1,45 @@ @echo off -echo === D3D11 Debug === -cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol.c /Z7 -lib /OUT:sokol\sokol_windows_x64_d3d11_debug.lib sokol.obj - -echo === D3D11 Release === -cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 c\sokol.c -lib /OUT:sokol\sokol_windows_x64_d3d11_release.lib sokol.obj - -echo === GL Debug === -cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol.c /Z7 -lib /OUT:sokol\sokol_windows_x64_gl_debug.lib sokol.obj - -echo === GL Release === -cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol.c -lib /OUT:sokol\sokol_windows_x64_gl_release.lib sokol.obj - -echo === D3D11 Debug DLL === -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_debug.dll /link /INCREMENTAL:NO - -echo === D3D11 Release DLL === -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO - -echo === GL Debug DLL === -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO - -echo === GL Release DLL === -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO +set sources=log app gfx glue time audio debugtext shape gl + +REM D3D11 Debug +for %%s in (%sources%) do ( + cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 sokol\c\sokol_%%s.c + lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_debug.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM D3D11 Release +for %%s in (%sources%) do ( + cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 sokol\c\sokol_%%s.c + lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_release.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM GL Debug +for %%s in (%sources%) do ( + cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 sokol\c\sokol_%%s.c + lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM GL Release +for %%s in (%sources%) do ( + cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 sokol\c\sokol_%%s.c + lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_release.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM D3D11 Debug DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 sokol\c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_debug.dll /link /INCREMENTAL:NO + +REM D3D11 Release DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 sokol\c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO + +REM GL Debug DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 sokol\c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO + +REM GL Release DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 sokol\c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO del sokol.obj \ No newline at end of file diff --git a/c/README.md b/c/README.md deleted file mode 100644 index 9a71317..0000000 --- a/c/README.md +++ /dev/null @@ -1,2 +0,0 @@ -These files are only needed for building the C libraries, -they are not part of the actual bindings. diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 5fd6829..4d699ed 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -3,37 +3,54 @@ package sokol_app import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_debug.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } + else { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_release.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_debug.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } - else { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_release.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } -} + @(default_calling_convention="c", link_prefix="sapp_") foreign sokol_app_clib { isvalid :: proc() -> bool --- diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index e694846..b2562a2 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -3,37 +3,54 @@ package sokol_audio import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_debug.a", "system:asound", "system:dl", "system:pthread" } } + else { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_release.a", "system:asound", "system:dl", "system:pthread" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_debug.a", "system:asound", "system:dl", "system:pthread" } } - else { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_release.a", "system:asound", "system:dl", "system:pthread" } } -} + @(default_calling_convention="c", link_prefix="saudio_") foreign sokol_audio_clib { setup :: proc(#by_ptr desc: Desc) --- diff --git a/c/sokol.c b/sokol/c/sokol.c similarity index 82% rename from c/sokol.c rename to sokol/c/sokol.c index ceef30e..30e0d85 100644 --- a/c/sokol.c +++ b/sokol/c/sokol.c @@ -1,21 +1,22 @@ -#if defined(IMPL) -#define SOKOL_IMPL -#endif - -#define SOKOL_NO_ENTRY -#if defined(_WIN32) - #define SOKOL_WIN32_FORCE_MAIN -#endif -// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors -#if defined(__APPLE__) -#include -#endif - -#include "sokol_audio.h" -#include "sokol_app.h" -#include "sokol_gfx.h" -#include "sokol_gl.h" -#include "sokol_shape.h" -#include "sokol_log.h" -#include "sokol_debugtext.h" -#include "sokol_time.h" +#if defined(IMPL) +#define SOKOL_IMPL +#endif + +#define SOKOL_NO_ENTRY +#if defined(_WIN32) +#define SOKOL_WIN32_FORCE_MAIN +#endif +// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors +#if defined(__APPLE__) +#include +#endif + +#include "sokol_audio.h" +#include "sokol_app.h" +#include "sokol_gfx.h" +#include "sokol_log.h" +#include "sokol_time.h" + +#include "sokol_gl.h" +#include "sokol_shape.h" +#include "sokol_debugtext.h" \ No newline at end of file diff --git a/sokol/c/sokol_app.c b/sokol/c/sokol_app.c new file mode 100644 index 0000000..8cf2b17 --- /dev/null +++ b/sokol/c/sokol_app.c @@ -0,0 +1,5 @@ +#if defined(IMPL) +#define SOKOL_APP_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_app.h" diff --git a/c/sokol_app.h b/sokol/c/sokol_app.h similarity index 100% rename from c/sokol_app.h rename to sokol/c/sokol_app.h diff --git a/sokol/c/sokol_audio.c b/sokol/c/sokol_audio.c new file mode 100644 index 0000000..53cdb49 --- /dev/null +++ b/sokol/c/sokol_audio.c @@ -0,0 +1,6 @@ +#if defined(IMPL) +#define SOKOL_AUDIO_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_audio.h" + diff --git a/c/sokol_audio.h b/sokol/c/sokol_audio.h similarity index 100% rename from c/sokol_audio.h rename to sokol/c/sokol_audio.h diff --git a/sokol/c/sokol_debugtext.c b/sokol/c/sokol_debugtext.c new file mode 100644 index 0000000..42ad569 --- /dev/null +++ b/sokol/c/sokol_debugtext.c @@ -0,0 +1,7 @@ +#if defined(IMPL) +#define SOKOL_DEBUGTEXT_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_gfx.h" +#include "sokol_debugtext.h" + diff --git a/c/sokol_debugtext.h b/sokol/c/sokol_debugtext.h similarity index 100% rename from c/sokol_debugtext.h rename to sokol/c/sokol_debugtext.h diff --git a/sokol/c/sokol_defines.h b/sokol/c/sokol_defines.h new file mode 100644 index 0000000..41f0c95 --- /dev/null +++ b/sokol/c/sokol_defines.h @@ -0,0 +1,8 @@ +#define SOKOL_NO_ENTRY +#if defined(_WIN32) + #define SOKOL_WIN32_FORCE_MAIN +#endif +// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors +#if defined(__APPLE__) +#include +#endif diff --git a/sokol/c/sokol_gfx.c b/sokol/c/sokol_gfx.c new file mode 100644 index 0000000..984b8b4 --- /dev/null +++ b/sokol/c/sokol_gfx.c @@ -0,0 +1,5 @@ +#if defined(IMPL) +#define SOKOL_GFX_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_gfx.h" diff --git a/c/sokol_gfx.h b/sokol/c/sokol_gfx.h similarity index 100% rename from c/sokol_gfx.h rename to sokol/c/sokol_gfx.h diff --git a/sokol/c/sokol_gl.c b/sokol/c/sokol_gl.c new file mode 100644 index 0000000..f15e4a7 --- /dev/null +++ b/sokol/c/sokol_gl.c @@ -0,0 +1,6 @@ +#if defined(IMPL) +#define SOKOL_GL_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_gfx.h" +#include "sokol_gl.h" diff --git a/c/sokol_gl.h b/sokol/c/sokol_gl.h similarity index 100% rename from c/sokol_gl.h rename to sokol/c/sokol_gl.h diff --git a/sokol/c/sokol_glue.c b/sokol/c/sokol_glue.c new file mode 100644 index 0000000..33d23ce --- /dev/null +++ b/sokol/c/sokol_glue.c @@ -0,0 +1,7 @@ +#if defined(IMPL) +#define SOKOL_GLUE_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_app.h" +#include "sokol_gfx.h" +#include "sokol_glue.h" diff --git a/c/sokol_glue.h b/sokol/c/sokol_glue.h similarity index 100% rename from c/sokol_glue.h rename to sokol/c/sokol_glue.h diff --git a/sokol/c/sokol_log.c b/sokol/c/sokol_log.c new file mode 100644 index 0000000..bfdc1da --- /dev/null +++ b/sokol/c/sokol_log.c @@ -0,0 +1,5 @@ +#if defined(IMPL) +#define SOKOL_LOG_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_log.h" diff --git a/c/sokol_log.h b/sokol/c/sokol_log.h similarity index 100% rename from c/sokol_log.h rename to sokol/c/sokol_log.h diff --git a/sokol/c/sokol_shape.c b/sokol/c/sokol_shape.c new file mode 100644 index 0000000..73449f0 --- /dev/null +++ b/sokol/c/sokol_shape.c @@ -0,0 +1,6 @@ +#if defined(IMPL) +#define SOKOL_SHAPE_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_gfx.h" +#include "sokol_shape.h" diff --git a/c/sokol_shape.h b/sokol/c/sokol_shape.h similarity index 100% rename from c/sokol_shape.h rename to sokol/c/sokol_shape.h diff --git a/sokol/c/sokol_time.c b/sokol/c/sokol_time.c new file mode 100644 index 0000000..335304c --- /dev/null +++ b/sokol/c/sokol_time.c @@ -0,0 +1,5 @@ +#if defined(IMPL) +#define SOKOL_TIME_IMPL +#endif +#include "sokol_defines.h" +#include "sokol_time.h" diff --git a/c/sokol_time.h b/sokol/c/sokol_time.h similarity index 100% rename from c/sokol_time.h rename to sokol/c/sokol_time.h diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index b329511..c843fad 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -10,37 +10,54 @@ printf :: proc(s: string, args: ..any) { putr(strings.unsafe_string_to_cstring(fstr), len(fstr)) } import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="sdtx_") foreign sokol_debugtext_clib { setup :: proc(#by_ptr desc: Desc) --- diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index cfe1edb..9c0cbee 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -3,37 +3,54 @@ package sokol_gfx import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_debug.a", "system:GL", "system:dl", "system:pthread" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_release.a", "system:GL", "system:dl", "system:pthread" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_debug.a", "system:GL", "system:dl", "system:pthread" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_release.a", "system:GL", "system:dl", "system:pthread" } } -} + @(default_calling_convention="c", link_prefix="sg_") foreign sokol_gfx_clib { setup :: proc(#by_ptr desc: Desc) --- diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index 0750c2c..c277f2a 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -4,37 +4,54 @@ package sokol_gl import sg "../gfx" import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="sgl_") foreign sokol_gl_clib { setup :: proc(#by_ptr desc: Desc) --- diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index 10e5f58..cedc2a7 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -4,37 +4,54 @@ package sokol_glue import sg "../gfx" import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="sglue_") foreign sokol_glue_clib { environment :: proc() -> sg.Environment --- diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 1be9a5d..0aef5d0 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -3,37 +3,54 @@ package sokol_log import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="slog_") foreign sokol_log_clib { func :: proc(tag: cstring, log_level: u32, log_item: u32, message: cstring, line_nr: u32, filename: cstring, user_data: rawptr) --- diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index 51e45cd..7f70be7 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -4,37 +4,54 @@ package sokol_shape import sg "../gfx" import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="sshape_") foreign sokol_shape_clib { build_plane :: proc(#by_ptr buf: Buffer, #by_ptr params: Plane) -> Buffer --- diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 5bea248..863e9d5 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -3,37 +3,54 @@ package sokol_time import "core:c" + +SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) +SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) +SOKOL_DLL :: #config(SOKOL_DLL, false) + when ODIN_OS == .Windows { - when #config(SOKOL_USE_GL,false) { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_release.lib" } } + when SOKOL_DLL { + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_dll_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + } } else { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_release.lib" } } + when SOKOL_USE_GL { + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_release.lib" } } + } else { + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_release.lib" } } + } } } else when ODIN_OS == .Darwin { - when #config(SOKOL_USE_GL,false) { + when SOKOL_USE_GL { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } } else { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } } } +} else when ODIN_OS == .Linux { + when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_release.a" } } +} else { + #panic("This OS is currently not supported") } -else { - when ODIN_DEBUG == true { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_release.a" } } -} + @(default_calling_convention="c", link_prefix="stm_") foreign sokol_time_clib { setup :: proc() --- From 7fcf9c9f49cd0ad8203ce0bf037278a0ee03a914 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 14:40:51 +0200 Subject: [PATCH 18/66] update generated odin files and gitignore --- .gitignore | 1 + sokol/app/app.odin | 8 ++++---- sokol/audio/audio.odin | 8 ++++---- sokol/c/sokol.c | 1 + sokol/debugtext/debugtext.odin | 8 ++++---- sokol/gfx/gfx.odin | 8 ++++---- sokol/gl/gl.odin | 8 ++++---- sokol/glue/glue.odin | 8 ++++---- sokol/log/log.odin | 8 ++++---- sokol/shape/shape.odin | 8 ++++---- sokol/time/time.odin | 8 ++++---- 11 files changed, 38 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 6de8ed3..9a923f0 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ build/ *.exp *.ilk *.dll +*.exe *.dSYM/ diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 4d699ed..644894a 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -11,11 +11,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index b2562a2..d784d6b 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -11,11 +11,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/c/sokol.c b/sokol/c/sokol.c index 30e0d85..4345edd 100644 --- a/sokol/c/sokol.c +++ b/sokol/c/sokol.c @@ -16,6 +16,7 @@ #include "sokol_gfx.h" #include "sokol_log.h" #include "sokol_time.h" +#include "sokol_glue.h" #include "sokol_gl.h" #include "sokol_shape.h" diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index c843fad..e1acc44 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -18,11 +18,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index 9c0cbee..f1829a9 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -11,11 +11,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index c277f2a..03bf369 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -12,11 +12,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index cedc2a7..ea92fc8 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -12,11 +12,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 0aef5d0..5a1d55f 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -11,11 +11,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index 7f70be7..80a0c5c 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -12,11 +12,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 863e9d5..3a20b55 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -11,11 +11,11 @@ SOKOL_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { when SOKOL_DLL { when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_dll_windows_x64_gl_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_dll_windows_x64_d3d11_release.lib" } } + when SOKOL_DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { when SOKOL_USE_GL { From 801ad88a1dcbfb815c6dcc7afe218175594526ec Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:02:05 +0200 Subject: [PATCH 19/66] per-module debug mode, update constants, spacing --- sokol/app/app.odin | 70 ++++++++----- sokol/audio/audio.odin | 55 +++++----- sokol/debugtext/debugtext.odin | 59 ++++++----- sokol/gfx/gfx.odin | 181 ++++++++++++++++++++++++++++----- sokol/gl/gl.odin | 59 ++++++----- sokol/glue/glue.odin | 51 +++++----- sokol/log/log.odin | 51 +++++----- sokol/shape/shape.odin | 64 +++++++----- sokol/time/time.odin | 51 +++++----- 9 files changed, 425 insertions(+), 216 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 644894a..a5ae0c6 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -5,48 +5,50 @@ package sokol_app import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_APP_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_app_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_app_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_app_clib { "sokol_app_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_debug.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } - else { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_release.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } + when DEBUG { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_debug.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } + else { foreign import sokol_app_clib { "sokol_app_linux_x64_gl_release.a", "system:X11", "system:Xi", "system:Xcursor", "system:GL", "system:dl", "system:pthread" } } } else { #panic("This OS is currently not supported") } @@ -113,10 +115,12 @@ foreign sokol_app_clib { gl_get_framebuffer :: proc() -> u32 --- android_get_native_activity :: proc() -> rawptr --- } + MAX_TOUCHPOINTS :: 8 MAX_MOUSEBUTTONS :: 3 MAX_KEYCODES :: 512 MAX_ICONIMAGES :: 8 + Event_Type :: enum i32 { INVALID, KEY_DOWN, @@ -144,6 +148,7 @@ Event_Type :: enum i32 { FILES_DROPPED, NUM, } + Keycode :: enum i32 { INVALID = 0, SPACE = 32, @@ -267,12 +272,14 @@ Keycode :: enum i32 { RIGHT_SUPER = 347, MENU = 348, } + Android_Tooltype :: enum i32 { UNKNOWN = 0, FINGER = 1, STYLUS = 2, MOUSE = 3, } + Touchpoint :: struct { identifier : u64, pos_x : f32, @@ -280,12 +287,14 @@ Touchpoint :: struct { android_tooltype : Android_Tooltype, changed : bool, } + Mousebutton :: enum i32 { LEFT = 0, RIGHT = 1, MIDDLE = 2, INVALID = 256, } + MODIFIER_SHIFT :: 1 MODIFIER_CTRL :: 2 MODIFIER_ALT :: 4 @@ -293,6 +302,7 @@ MODIFIER_SUPER :: 8 MODIFIER_LMB :: 256 MODIFIER_RMB :: 512 MODIFIER_MMB :: 1024 + Event :: struct { frame_count : u64, type : Event_Type, @@ -314,24 +324,29 @@ Event :: struct { framebuffer_width : c.int, framebuffer_height : c.int, } + Range :: struct { ptr : rawptr, size : u64, } + Image_Desc :: struct { width : c.int, height : c.int, pixels : Range, } + Icon_Desc :: struct { sokol_default : bool, images : [8]Image_Desc, } + Allocator :: struct { alloc_fn : proc "c" (a0: u64, a1: rawptr) -> rawptr, free_fn : proc "c" (a0: rawptr, a1: rawptr), user_data : rawptr, } + Log_Item :: enum i32 { OK, MALLOC_FAILED, @@ -432,10 +447,12 @@ Log_Item :: enum i32 { DROPPED_FILE_PATH_TOO_LONG, CLIPBOARD_STRING_TOO_BIG, } + Logger :: struct { func : proc "c" (a0: cstring, a1: u32, a2: u32, a3: cstring, a4: u32, a5: cstring, a6: rawptr), user_data : rawptr, } + Desc :: struct { init_cb : proc "c" (), frame_cb : proc "c" (), @@ -481,11 +498,13 @@ Desc :: struct { html5_emsc_set_main_loop_simulate_infinite_loop : bool, ios_keyboard_resizes_canvas : bool, } + Html5_Fetch_Error :: enum i32 { FETCH_ERROR_NO_ERROR, FETCH_ERROR_BUFFER_TOO_SMALL, FETCH_ERROR_OTHER, } + Html5_Fetch_Response :: struct { succeeded : bool, error_code : Html5_Fetch_Error, @@ -494,12 +513,14 @@ Html5_Fetch_Response :: struct { buffer : Range, user_data : rawptr, } + Html5_Fetch_Request :: struct { dropped_file_index : c.int, callback : proc "c" (a0: ^Html5_Fetch_Response), buffer : Range, user_data : rawptr, } + Mouse_Cursor :: enum i32 { DEFAULT = 0, ARROW, @@ -514,3 +535,4 @@ Mouse_Cursor :: enum i32 { NOT_ALLOWED, NUM, } + diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index d784d6b..6c7764f 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -5,48 +5,50 @@ package sokol_audio import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_AUDIO_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_audio_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_audio_clib { "sokol_audio_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_debug.a", "system:asound", "system:dl", "system:pthread" } } - else { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_release.a", "system:asound", "system:dl", "system:pthread" } } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_debug.a", "system:asound", "system:dl", "system:pthread" } } + else { foreign import sokol_audio_clib { "sokol_audio_linux_x64_gl_release.a", "system:asound", "system:dl", "system:pthread" } } } else { #panic("This OS is currently not supported") } @@ -65,6 +67,7 @@ foreign sokol_audio_clib { expect :: proc() -> c.int --- push :: proc(frames: ^f32, #any_int num_frames: c.int) -> c.int --- } + Log_Item :: enum i32 { OK, MALLOC_FAILED, @@ -103,15 +106,18 @@ Log_Item :: enum i32 { COREAUDIO_START_FAILED, BACKEND_BUFFER_SIZE_ISNT_MULTIPLE_OF_PACKET_SIZE, } + Logger :: struct { func : proc "c" (a0: cstring, a1: u32, a2: u32, a3: cstring, a4: u32, a5: cstring, a6: rawptr), user_data : rawptr, } + Allocator :: struct { alloc_fn : proc "c" (a0: u64, a1: rawptr) -> rawptr, free_fn : proc "c" (a0: rawptr, a1: rawptr), user_data : rawptr, } + Desc :: struct { sample_rate : c.int, num_channels : c.int, @@ -124,3 +130,4 @@ Desc :: struct { allocator : Allocator, logger : Logger, } + diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index e1acc44..38ad724 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -12,48 +12,50 @@ printf :: proc(s: string, args: ..any) { import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_DEBUGTEXT_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_debugtext_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -98,6 +100,7 @@ foreign sokol_debugtext_clib { puts :: proc(str: cstring) --- putr :: proc(str: cstring, #any_int len: c.int) --- } + Log_Item :: enum i32 { OK, MALLOC_FAILED, @@ -106,22 +109,27 @@ Log_Item :: enum i32 { CONTEXT_POOL_EXHAUSTED, CANNOT_DESTROY_DEFAULT_CONTEXT, } + Logger :: struct { func : proc "c" (a0: cstring, a1: u32, a2: u32, a3: cstring, a4: u32, a5: cstring, a6: rawptr), user_data : rawptr, } + Context :: struct { id : u32, } + Range :: struct { ptr : rawptr, size : u64, } + Font_Desc :: struct { data : Range, first_char : u8, last_char : u8, } + Context_Desc :: struct { max_commands : c.int, char_buf_size : c.int, @@ -132,11 +140,13 @@ Context_Desc :: struct { depth_format : sg.Pixel_Format, sample_count : c.int, } + Allocator :: struct { alloc_fn : proc "c" (a0: u64, a1: rawptr) -> rawptr, free_fn : proc "c" (a0: rawptr, a1: rawptr), user_data : rawptr, } + Desc :: struct { context_pool_size : c.int, printf_buf_size : c.int, @@ -145,3 +155,4 @@ Desc :: struct { allocator : Allocator, logger : Logger, } + diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index f1829a9..de1498e 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -5,48 +5,50 @@ package sokol_gfx import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_GFX_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gfx_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_debug.a", "system:GL", "system:dl", "system:pthread" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_release.a", "system:GL", "system:dl", "system:pthread" } } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_debug.a", "system:GL", "system:dl", "system:pthread" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_linux_x64_gl_release.a", "system:GL", "system:dl", "system:pthread" } } } else { #panic("This OS is currently not supported") } @@ -185,28 +187,36 @@ foreign sokol_gfx_clib { gl_query_shader_info :: proc(shd: Shader) -> Gl_Shader_Info --- gl_query_attachments_info :: proc(atts: Attachments) -> Gl_Attachments_Info --- } + Buffer :: struct { id : u32, } + Image :: struct { id : u32, } + Sampler :: struct { id : u32, } + Shader :: struct { id : u32, } + Pipeline :: struct { id : u32, } + Attachments :: struct { id : u32, } + Range :: struct { ptr : rawptr, size : u64, } + INVALID_ID :: 0 NUM_SHADER_STAGES :: 2 NUM_INFLIGHT_FRAMES :: 2 @@ -220,12 +230,14 @@ MAX_UB_MEMBERS :: 16 MAX_VERTEX_ATTRIBUTES :: 16 MAX_MIPMAPS :: 16 MAX_TEXTUREARRAY_LAYERS :: 128 + Color :: struct { r : f32, g : f32, b : f32, a : f32, } + Backend :: enum i32 { GLCORE33, GLES3, @@ -236,6 +248,7 @@ Backend :: enum i32 { WGPU, DUMMY, } + Pixel_Format :: enum i32 { DEFAULT, NONE, @@ -309,6 +322,7 @@ Pixel_Format :: enum i32 { ASTC_4x4_SRGBA, NUM, } + Pixelformat_Info :: struct { sample : bool, filter : bool, @@ -319,12 +333,14 @@ Pixelformat_Info :: struct { compressed : bool, bytes_per_pixel : c.int, } + Features :: struct { origin_top_left : bool, image_clamp_to_border : bool, mrt_independent_blend_state : bool, mrt_independent_write_mask : bool, } + Limits :: struct { max_image_size_2d : c.int, max_image_size_cube : c.int, @@ -335,6 +351,7 @@ Limits :: struct { gl_max_vertex_uniform_components : c.int, gl_max_combined_texture_image_units : c.int, } + Resource_State :: enum i32 { INITIAL, ALLOC, @@ -342,6 +359,7 @@ Resource_State :: enum i32 { FAILED, INVALID, } + Usage :: enum i32 { DEFAULT, IMMUTABLE, @@ -349,12 +367,14 @@ Usage :: enum i32 { STREAM, NUM, } + Buffer_Type :: enum i32 { DEFAULT, VERTEXBUFFER, INDEXBUFFER, NUM, } + Index_Type :: enum i32 { DEFAULT, NONE, @@ -362,6 +382,7 @@ Index_Type :: enum i32 { UINT32, NUM, } + Image_Type :: enum i32 { DEFAULT, _2D, @@ -370,6 +391,7 @@ Image_Type :: enum i32 { ARRAY, NUM, } + Image_Sample_Type :: enum i32 { DEFAULT, FLOAT, @@ -379,6 +401,7 @@ Image_Sample_Type :: enum i32 { UNFILTERABLE_FLOAT, NUM, } + Sampler_Type :: enum i32 { DEFAULT, FILTERING, @@ -386,6 +409,7 @@ Sampler_Type :: enum i32 { COMPARISON, NUM, } + Cube_Face :: enum i32 { POS_X, NEG_X, @@ -395,10 +419,12 @@ Cube_Face :: enum i32 { NEG_Z, NUM, } + Shader_Stage :: enum i32 { VS, FS, } + Primitive_Type :: enum i32 { DEFAULT, POINTS, @@ -408,6 +434,7 @@ Primitive_Type :: enum i32 { TRIANGLE_STRIP, NUM, } + Filter :: enum i32 { DEFAULT, NONE, @@ -415,6 +442,7 @@ Filter :: enum i32 { LINEAR, NUM, } + Wrap :: enum i32 { DEFAULT, REPEAT, @@ -423,6 +451,7 @@ Wrap :: enum i32 { MIRRORED_REPEAT, NUM, } + Border_Color :: enum i32 { DEFAULT, TRANSPARENT_BLACK, @@ -430,6 +459,7 @@ Border_Color :: enum i32 { OPAQUE_WHITE, NUM, } + Vertex_Format :: enum i32 { INVALID, FLOAT, @@ -451,12 +481,14 @@ Vertex_Format :: enum i32 { HALF4, NUM, } + Vertex_Step :: enum i32 { DEFAULT, PER_VERTEX, PER_INSTANCE, NUM, } + Uniform_Type :: enum i32 { INVALID, FLOAT, @@ -470,12 +502,14 @@ Uniform_Type :: enum i32 { MAT4, NUM, } + Uniform_Layout :: enum i32 { DEFAULT, NATIVE, STD140, NUM, } + Cull_Mode :: enum i32 { DEFAULT, NONE, @@ -483,12 +517,14 @@ Cull_Mode :: enum i32 { BACK, NUM, } + Face_Winding :: enum i32 { DEFAULT, CCW, CW, NUM, } + Compare_Func :: enum i32 { DEFAULT, NEVER, @@ -501,6 +537,7 @@ Compare_Func :: enum i32 { ALWAYS, NUM, } + Stencil_Op :: enum i32 { DEFAULT, KEEP, @@ -513,6 +550,7 @@ Stencil_Op :: enum i32 { DECR_WRAP, NUM, } + Blend_Factor :: enum i32 { DEFAULT, ZERO, @@ -532,6 +570,7 @@ Blend_Factor :: enum i32 { ONE_MINUS_BLEND_ALPHA, NUM, } + Blend_Op :: enum i32 { DEFAULT, ADD, @@ -539,6 +578,7 @@ Blend_Op :: enum i32 { REVERSE_SUBTRACT, NUM, } + Color_Mask :: enum i32 { DEFAULT = 0, NONE = 16, @@ -558,55 +598,66 @@ Color_Mask :: enum i32 { GBA = 14, RGBA = 15, } + Load_Action :: enum i32 { DEFAULT, CLEAR, LOAD, DONTCARE, } + Store_Action :: enum i32 { DEFAULT, STORE, DONTCARE, } + Color_Attachment_Action :: struct { load_action : Load_Action, store_action : Store_Action, clear_value : Color, } + Depth_Attachment_Action :: struct { load_action : Load_Action, store_action : Store_Action, clear_value : f32, } + Stencil_Attachment_Action :: struct { load_action : Load_Action, store_action : Store_Action, clear_value : u8, } + Pass_Action :: struct { colors : [4]Color_Attachment_Action, depth : Depth_Attachment_Action, stencil : Stencil_Attachment_Action, } + Metal_Swapchain :: struct { current_drawable : rawptr, depth_stencil_texture : rawptr, msaa_color_texture : rawptr, } + D3d11_Swapchain :: struct { render_view : rawptr, resolve_view : rawptr, depth_stencil_view : rawptr, } + Wgpu_Swapchain :: struct { render_view : rawptr, resolve_view : rawptr, depth_stencil_view : rawptr, } + Gl_Swapchain :: struct { framebuffer : u32, } + Swapchain :: struct { width : c.int, height : c.int, @@ -618,6 +669,7 @@ Swapchain :: struct { wgpu : Wgpu_Swapchain, gl : Gl_Swapchain, } + Pass :: struct { _ : u32, action : Pass_Action, @@ -626,10 +678,12 @@ Pass :: struct { label : cstring, _ : u32, } + Stage_Bindings :: struct { images : [12]Image, samplers : [8]Sampler, } + Bindings :: struct { _ : u32, vertex_buffers : [8]Buffer, @@ -640,6 +694,7 @@ Bindings :: struct { fs : Stage_Bindings, _ : u32, } + Buffer_Desc :: struct { _ : u32, size : u64, @@ -653,9 +708,11 @@ Buffer_Desc :: struct { wgpu_buffer : rawptr, _ : u32, } + Image_Data :: struct { subimage : [6][16]Range, } + Image_Desc :: struct { _ : u32, type : Image_Type, @@ -678,6 +735,7 @@ Image_Desc :: struct { wgpu_texture_view : rawptr, _ : u32, } + Sampler_Desc :: struct { _ : u32, min_filter : Filter, @@ -698,37 +756,44 @@ Sampler_Desc :: struct { wgpu_sampler : rawptr, _ : u32, } + Shader_Attr_Desc :: struct { name : cstring, sem_name : cstring, sem_index : c.int, } + Shader_Uniform_Desc :: struct { name : cstring, type : Uniform_Type, array_count : c.int, } + Shader_Uniform_Block_Desc :: struct { size : u64, layout : Uniform_Layout, uniforms : [16]Shader_Uniform_Desc, } + Shader_Image_Desc :: struct { used : bool, multisampled : bool, image_type : Image_Type, sample_type : Image_Sample_Type, } + Shader_Sampler_Desc :: struct { used : bool, sampler_type : Sampler_Type, } + Shader_Image_Sampler_Pair_Desc :: struct { used : bool, image_slot : c.int, sampler_slot : c.int, glsl_name : cstring, } + Shader_Stage_Desc :: struct { source : cstring, bytecode : Range, @@ -739,6 +804,7 @@ Shader_Stage_Desc :: struct { samplers : [8]Shader_Sampler_Desc, image_sampler_pairs : [12]Shader_Image_Sampler_Pair_Desc, } + Shader_Desc :: struct { _ : u32, attrs : [16]Shader_Attr_Desc, @@ -747,26 +813,31 @@ Shader_Desc :: struct { label : cstring, _ : u32, } + Vertex_Buffer_Layout_State :: struct { stride : c.int, step_func : Vertex_Step, step_rate : c.int, } + Vertex_Attr_State :: struct { buffer_index : c.int, offset : c.int, format : Vertex_Format, } + Vertex_Layout_State :: struct { buffers : [8]Vertex_Buffer_Layout_State, attrs : [16]Vertex_Attr_State, } + Stencil_Face_State :: struct { compare : Compare_Func, fail_op : Stencil_Op, depth_fail_op : Stencil_Op, pass_op : Stencil_Op, } + Stencil_State :: struct { enabled : bool, front : Stencil_Face_State, @@ -775,6 +846,7 @@ Stencil_State :: struct { write_mask : u8, ref : u8, } + Depth_State :: struct { pixel_format : Pixel_Format, compare : Compare_Func, @@ -783,6 +855,7 @@ Depth_State :: struct { bias_slope_scale : f32, bias_clamp : f32, } + Blend_State :: struct { enabled : bool, src_factor_rgb : Blend_Factor, @@ -792,11 +865,13 @@ Blend_State :: struct { dst_factor_alpha : Blend_Factor, op_alpha : Blend_Op, } + Color_Target_State :: struct { pixel_format : Pixel_Format, write_mask : Color_Mask, blend : Blend_State, } + Pipeline_Desc :: struct { _ : u32, shader : Shader, @@ -815,11 +890,13 @@ Pipeline_Desc :: struct { label : cstring, _ : u32, } + Attachment_Desc :: struct { image : Image, mip_level : c.int, slice : c.int, } + Attachments_Desc :: struct { _ : u32, colors : [4]Attachment_Desc, @@ -828,10 +905,12 @@ Attachments_Desc :: struct { label : cstring, _ : u32, } + Slot_Info :: struct { state : Resource_State, res_id : u32, } + Buffer_Info :: struct { slot : Slot_Info, update_frame_index : u32, @@ -841,24 +920,30 @@ Buffer_Info :: struct { num_slots : c.int, active_slot : c.int, } + Image_Info :: struct { slot : Slot_Info, upd_frame_index : u32, num_slots : c.int, active_slot : c.int, } + Sampler_Info :: struct { slot : Slot_Info, } + Shader_Info :: struct { slot : Slot_Info, } + Pipeline_Info :: struct { slot : Slot_Info, } + Attachments_Info :: struct { slot : Slot_Info, } + Frame_Stats_Gl :: struct { num_bind_buffer : u32, num_active_texture : u32, @@ -872,12 +957,14 @@ Frame_Stats_Gl :: struct { num_disable_vertex_attrib_array : u32, num_uniform : u32, } + Frame_Stats_D3d11_Pass :: struct { num_om_set_render_targets : u32, num_clear_render_target_view : u32, num_clear_depth_stencil_view : u32, num_resolve_subresource : u32, } + Frame_Stats_D3d11_Pipeline :: struct { num_rs_set_state : u32, num_om_set_depth_stencil_state : u32, @@ -889,6 +976,7 @@ Frame_Stats_D3d11_Pipeline :: struct { num_ps_set_shader : u32, num_ps_set_constant_buffers : u32, } + Frame_Stats_D3d11_Bindings :: struct { num_ia_set_vertex_buffers : u32, num_ia_set_index_buffer : u32, @@ -897,15 +985,18 @@ Frame_Stats_D3d11_Bindings :: struct { num_vs_set_samplers : u32, num_ps_set_samplers : u32, } + Frame_Stats_D3d11_Uniforms :: struct { num_update_subresource : u32, } + Frame_Stats_D3d11_Draw :: struct { num_draw_indexed_instanced : u32, num_draw_indexed : u32, num_draw_instanced : u32, num_draw : u32, } + Frame_Stats_D3d11 :: struct { pass : Frame_Stats_D3d11_Pass, pipeline : Frame_Stats_D3d11_Pipeline, @@ -915,11 +1006,13 @@ Frame_Stats_D3d11 :: struct { num_map : u32, num_unmap : u32, } + Frame_Stats_Metal_Idpool :: struct { num_added : u32, num_released : u32, num_garbage_collected : u32, } + Frame_Stats_Metal_Pipeline :: struct { num_set_blend_color : u32, num_set_cull_mode : u32, @@ -929,6 +1022,7 @@ Frame_Stats_Metal_Pipeline :: struct { num_set_render_pipeline_state : u32, num_set_depth_stencil_state : u32, } + Frame_Stats_Metal_Bindings :: struct { num_set_vertex_buffer : u32, num_set_vertex_texture : u32, @@ -936,20 +1030,24 @@ Frame_Stats_Metal_Bindings :: struct { num_set_fragment_texture : u32, num_set_fragment_sampler_state : u32, } + Frame_Stats_Metal_Uniforms :: struct { num_set_vertex_buffer_offset : u32, num_set_fragment_buffer_offset : u32, } + Frame_Stats_Metal :: struct { idpool : Frame_Stats_Metal_Idpool, pipeline : Frame_Stats_Metal_Pipeline, bindings : Frame_Stats_Metal_Bindings, uniforms : Frame_Stats_Metal_Uniforms, } + Frame_Stats_Wgpu_Uniforms :: struct { num_set_bindgroup : u32, size_write_buffer : u32, } + Frame_Stats_Wgpu_Bindings :: struct { num_set_vertex_buffer : u32, num_skip_redundant_vertex_buffer : u32, @@ -964,10 +1062,12 @@ Frame_Stats_Wgpu_Bindings :: struct { num_bindgroup_cache_collisions : u32, num_bindgroup_cache_hash_vs_key_mismatch : u32, } + Frame_Stats_Wgpu :: struct { uniforms : Frame_Stats_Wgpu_Uniforms, bindings : Frame_Stats_Wgpu_Bindings, } + Frame_Stats :: struct { frame_index : u32, num_passes : u32, @@ -989,6 +1089,7 @@ Frame_Stats :: struct { metal : Frame_Stats_Metal, wgpu : Frame_Stats_Wgpu, } + Log_Item :: enum i32 { OK, MALLOC_FAILED, @@ -1277,40 +1378,49 @@ Log_Item :: enum i32 { VALIDATE_UPDIMG_ONCE, VALIDATION_FAILED, } + Environment_Defaults :: struct { color_format : Pixel_Format, depth_format : Pixel_Format, sample_count : c.int, } + Metal_Environment :: struct { device : rawptr, } + D3d11_Environment :: struct { device : rawptr, device_context : rawptr, } + Wgpu_Environment :: struct { device : rawptr, } + Environment :: struct { defaults : Environment_Defaults, metal : Metal_Environment, d3d11 : D3d11_Environment, wgpu : Wgpu_Environment, } + Commit_Listener :: struct { func : proc "c" (a0: rawptr), user_data : rawptr, } + Allocator :: struct { alloc_fn : proc "c" (a0: u64, a1: rawptr) -> rawptr, free_fn : proc "c" (a0: rawptr, a1: rawptr), user_data : rawptr, } + Logger :: struct { func : proc "c" (a0: cstring, a1: u32, a2: u32, a3: cstring, a4: u32, a5: cstring, a6: rawptr), user_data : rawptr, } + Desc :: struct { _ : u32, buffer_pool_size : c.int, @@ -1331,96 +1441,119 @@ Desc :: struct { environment : Environment, _ : u32, } + D3d11_Buffer_Info :: struct { buf : rawptr, } + D3d11_Image_Info :: struct { tex2d : rawptr, tex3d : rawptr, res : rawptr, srv : rawptr, } + D3d11_Sampler_Info :: struct { smp : rawptr, } + D3d11_Shader_Info :: struct { vs_cbufs : [4]rawptr, fs_cbufs : [4]rawptr, vs : rawptr, fs : rawptr, } + D3d11_Pipeline_Info :: struct { il : rawptr, rs : rawptr, dss : rawptr, bs : rawptr, } + D3d11_Attachments_Info :: struct { color_rtv : [4]rawptr, resolve_rtv : [4]rawptr, dsv : rawptr, } + Mtl_Buffer_Info :: struct { buf : [2]rawptr, active_slot : c.int, } + Mtl_Image_Info :: struct { tex : [2]rawptr, active_slot : c.int, } + Mtl_Sampler_Info :: struct { smp : rawptr, } + Mtl_Shader_Info :: struct { vs_lib : rawptr, fs_lib : rawptr, vs_func : rawptr, fs_func : rawptr, } + Mtl_Pipeline_Info :: struct { rps : rawptr, dss : rawptr, } + Wgpu_Buffer_Info :: struct { buf : rawptr, } + Wgpu_Image_Info :: struct { tex : rawptr, view : rawptr, } + Wgpu_Sampler_Info :: struct { smp : rawptr, } + Wgpu_Shader_Info :: struct { vs_mod : rawptr, fs_mod : rawptr, bgl : rawptr, } + Wgpu_Pipeline_Info :: struct { pip : rawptr, } + Wgpu_Attachments_Info :: struct { color_view : [4]rawptr, resolve_view : [4]rawptr, ds_view : rawptr, } + Gl_Buffer_Info :: struct { buf : [2]u32, active_slot : c.int, } + Gl_Image_Info :: struct { tex : [2]u32, tex_target : u32, msaa_render_buffer : u32, active_slot : c.int, } + Gl_Sampler_Info :: struct { smp : u32, } + Gl_Shader_Info :: struct { prog : u32, } + Gl_Attachments_Info :: struct { framebuffer : u32, msaa_resolve_framebuffer : [4]u32, } + diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index 03bf369..f18d691 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -6,48 +6,50 @@ import sg "../gfx" import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_GL_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gl_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_gl_clib { "sokol_gl_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -141,6 +143,7 @@ foreign sokol_gl_clib { v3f_t2f_c1i :: proc(x: f32, y: f32, z: f32, u: f32, v: f32, rgba: u32) --- end :: proc() --- } + Log_Item :: enum i32 { OK, MALLOC_FAILED, @@ -150,16 +153,20 @@ Log_Item :: enum i32 { CONTEXT_POOL_EXHAUSTED, CANNOT_DESTROY_DEFAULT_CONTEXT, } + Logger :: struct { func : proc "c" (a0: cstring, a1: u32, a2: u32, a3: cstring, a4: u32, a5: cstring, a6: rawptr), user_data : rawptr, } + Pipeline :: struct { id : u32, } + Context :: struct { id : u32, } + Error :: enum i32 { NO_ERROR = 0, VERTICES_FULL, @@ -169,6 +176,7 @@ Error :: enum i32 { STACK_UNDERFLOW, NO_CONTEXT, } + Context_Desc :: struct { max_vertices : c.int, max_commands : c.int, @@ -176,11 +184,13 @@ Context_Desc :: struct { depth_format : sg.Pixel_Format, sample_count : c.int, } + Allocator :: struct { alloc_fn : proc "c" (a0: u64, a1: rawptr) -> rawptr, free_fn : proc "c" (a0: rawptr, a1: rawptr), user_data : rawptr, } + Desc :: struct { max_vertices : c.int, max_commands : c.int, @@ -193,3 +203,4 @@ Desc :: struct { allocator : Allocator, logger : Logger, } + diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index ea92fc8..e60a93e 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -6,48 +6,50 @@ import sg "../gfx" import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_GLUE_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_glue_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_glue_clib { "sokol_glue_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -57,3 +59,4 @@ foreign sokol_glue_clib { environment :: proc() -> sg.Environment --- swapchain :: proc() -> sg.Swapchain --- } + diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 5a1d55f..5f5abf6 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -5,48 +5,50 @@ package sokol_log import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_LOG_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_log_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_log_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_log_clib { "sokol_log_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -55,3 +57,4 @@ when ODIN_OS == .Windows { foreign sokol_log_clib { func :: proc(tag: cstring, log_level: u32, log_item: u32, message: cstring, line_nr: u32, filename: cstring, user_data: rawptr) --- } + diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index 80a0c5c..e914a54 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -6,48 +6,50 @@ import sg "../gfx" import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_SHAPE_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_shape_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_shape_clib { "sokol_shape_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -79,13 +81,16 @@ foreign sokol_shape_clib { mat4 :: proc(m: ^f32) -> Mat4 --- mat4_transpose :: proc(m: ^f32) -> Mat4 --- } + Range :: struct { ptr : rawptr, size : u64, } + Mat4 :: struct { m : [4][4]f32, } + Vertex :: struct { x : f32, y : f32, @@ -95,28 +100,34 @@ Vertex :: struct { v : u16, color : u32, } + Element_Range :: struct { base_element : c.int, num_elements : c.int, } + Sizes_Item :: struct { num : u32, size : u32, } + Sizes :: struct { vertices : Sizes_Item, indices : Sizes_Item, } + Buffer_Item :: struct { buffer : Range, data_size : u64, shape_offset : u64, } + Buffer :: struct { valid : bool, vertices : Buffer_Item, indices : Buffer_Item, } + Plane :: struct { width : f32, depth : f32, @@ -126,6 +137,7 @@ Plane :: struct { merge : bool, transform : Mat4, } + Box :: struct { width : f32, height : f32, @@ -136,6 +148,7 @@ Box :: struct { merge : bool, transform : Mat4, } + Sphere :: struct { radius : f32, slices : u16, @@ -145,6 +158,7 @@ Sphere :: struct { merge : bool, transform : Mat4, } + Cylinder :: struct { radius : f32, height : f32, @@ -155,6 +169,7 @@ Cylinder :: struct { merge : bool, transform : Mat4, } + Torus :: struct { radius : f32, ring_radius : f32, @@ -165,3 +180,4 @@ Torus :: struct { merge : bool, transform : Mat4, } + diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 3a20b55..9b2d0c5 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -5,48 +5,50 @@ package sokol_time import "core:c" SOKOL_DEBUG :: #config(SOKOL_DEBUG, ODIN_DEBUG) -SOKOL_USE_GL :: #config(SOKOL_USE_GL, false) -SOKOL_DLL :: #config(SOKOL_DLL, false) + +DEBUG :: #config(SOKOL_TIME_DEBUG, SOKOL_DEBUG) +USE_GL :: #config(SOKOL_USE_GL, false) +USE_DLL :: #config(SOKOL_DLL, false) when ODIN_OS == .Windows { - when SOKOL_DLL { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } - else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_release.lib" } } + when USE_DLL { + when USE_GL { + when DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_debug.lib" } } + else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_time_clib { "../sokol_dll_windows_x64_d3d11_release.lib" } } } } else { - when SOKOL_USE_GL { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_release.lib" } } + when USE_GL { + when DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_time_windows_x64_gl_release.lib" } } } else { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_debug.lib" } } - else { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_release.lib" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_debug.lib" } } + else { foreign import sokol_time_clib { "sokol_time_windows_x64_d3d11_release.lib" } } } } } else when ODIN_OS == .Darwin { - when SOKOL_USE_GL { + when USE_GL { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } } } else { when ODIN_ARCH == .arm64 { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } } else { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { - when SOKOL_DEBUG { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_release.a" } } + when DEBUG { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_linux_x64_gl_release.a" } } } else { #panic("This OS is currently not supported") } @@ -64,3 +66,4 @@ foreign sokol_time_clib { us :: proc(ticks: u64) -> f64 --- ns :: proc(ticks: u64) -> f64 --- } + From efc7aa26265d6a231e7677402fd84b3d554955c3 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:13:14 +0200 Subject: [PATCH 20/66] fix linux and macos C build scripts --- build_clibs_linux.sh | 4 ++-- build_clibs_macos.sh | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build_clibs_linux.sh b/build_clibs_linux.sh index 8caa561..c90d2d6 100755 --- a/build_clibs_linux.sh +++ b/build_clibs_linux.sh @@ -5,7 +5,7 @@ build_lib_x64_release() { dst=$2 backend=$3 echo $dst - cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend c/$src.c + cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } @@ -14,7 +14,7 @@ build_lib_x64_debug() { dst=$2 backend=$3 echo $dst - cc -pthread -c -g -DIMPL -D$backend c/$src.c + cc -pthread -c -g -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } diff --git a/build_clibs_macos.sh b/build_clibs_macos.sh index 5e6a831..c594b62 100755 --- a/build_clibs_macos.sh +++ b/build_clibs_macos.sh @@ -5,7 +5,7 @@ build_lib_arm64_release() { dst=$2 backend=$3 echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend c/$src.c + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } @@ -14,7 +14,7 @@ build_lib_arm64_debug() { dst=$2 backend=$3 echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend c/$src.c + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } @@ -23,7 +23,7 @@ build_lib_x64_release() { dst=$2 backend=$3 echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend c/$src.c + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } @@ -32,7 +32,7 @@ build_lib_x64_debug() { dst=$2 backend=$3 echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend c/$src.c + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend sokol/c/$src.c ar rcs $dst.a $src.o } From 81efe0d3947ce6d0961c7c83dbe559aaf5963e8f Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:31:53 +0200 Subject: [PATCH 21/66] move build scripts to sokol folder as well (to make it standalone) --- build_clibs_linux.sh | 43 ------------ build_clibs_macos.sh | 127 ---------------------------------- build_clibs_windows.cmd | 45 ------------ sokol/build_clibs_linux.sh | 43 ++++++++++++ sokol/build_clibs_macos.sh | 127 ++++++++++++++++++++++++++++++++++ sokol/build_clibs_windows.cmd | 45 ++++++++++++ 6 files changed, 215 insertions(+), 215 deletions(-) delete mode 100755 build_clibs_linux.sh delete mode 100755 build_clibs_macos.sh delete mode 100644 build_clibs_windows.cmd create mode 100644 sokol/build_clibs_linux.sh create mode 100644 sokol/build_clibs_macos.sh create mode 100644 sokol/build_clibs_windows.cmd diff --git a/build_clibs_linux.sh b/build_clibs_linux.sh deleted file mode 100755 index c90d2d6..0000000 --- a/build_clibs_linux.sh +++ /dev/null @@ -1,43 +0,0 @@ -set -e - -build_lib_x64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -build_lib_x64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - cc -pthread -c -g -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -# x64 + GL + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app sokol/app/sokol_app_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time sokol/time/sokol_time_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE33 - -# x64 + GL + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app sokol/app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time sokol/time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE33 - -rm *.o diff --git a/build_clibs_macos.sh b/build_clibs_macos.sh deleted file mode 100755 index c594b62..0000000 --- a/build_clibs_macos.sh +++ /dev/null @@ -1,127 +0,0 @@ -set -e - -build_lib_arm64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -build_lib_arm64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -build_lib_x64_release() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -build_lib_x64_debug() { - src=$1 - dst=$2 - backend=$3 - echo $dst - MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend sokol/c/$src.c - ar rcs $dst.a $src.o -} - -# ARM + Metal + Release -build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_release SOKOL_METAL -build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_release SOKOL_METAL - -# ARM + Metal + Debug -build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_metal_debug SOKOL_METAL -build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_metal_debug SOKOL_METAL - -# x64 + Metal + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_metal_release SOKOL_METAL -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_metal_release SOKOL_METAL - -# x64 + Metal + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_metal_debug SOKOL_METAL -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_metal_debug SOKOL_METAL - -# ARM + GL + Release -build_lib_arm64_release sokol_log sokol/log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_app sokol/app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_time sokol/time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE33 - -# ARM + GL + Debug -build_lib_arm64_debug sokol_log sokol/log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_app sokol/app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_glue sokol/glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_time sokol/time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_audio sokol/audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_shape sokol/shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gl sokol/gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE33 - -# x64 + GL + Release -build_lib_x64_release sokol_log sokol/log/sokol_log_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app sokol/app/sokol_app_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue sokol/glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time sokol/time/sokol_time_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio sokol/audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape sokol/shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl sokol/gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE33 - -# x64 + GL + Debug -build_lib_x64_debug sokol_log sokol/log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx sokol/gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app sokol/app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue sokol/glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time sokol/time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio sokol/audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext sokol/debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape sokol/shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl sokol/gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE33 - -rm *.o diff --git a/build_clibs_windows.cmd b/build_clibs_windows.cmd deleted file mode 100644 index 31fea4c..0000000 --- a/build_clibs_windows.cmd +++ /dev/null @@ -1,45 +0,0 @@ -@echo off - -set sources=log app gfx glue time audio debugtext shape gl - -REM D3D11 Debug -for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 sokol\c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_debug.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM D3D11 Release -for %%s in (%sources%) do ( - cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 sokol\c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_d3d11_release.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM GL Debug -for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 sokol\c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM GL Release -for %%s in (%sources%) do ( - cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 sokol\c\sokol_%%s.c - lib /OUT:sokol\%%s\sokol_%%s_windows_x64_gl_release.lib sokol_%%s.obj - del sokol_%%s.obj -) - -REM D3D11 Debug DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 sokol\c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_debug.dll /link /INCREMENTAL:NO - -REM D3D11 Release DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 sokol\c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO - -REM GL Debug DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 sokol\c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol\sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO - -REM GL Release DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 sokol\c\sokol.c /LD /MD /DLL /Fe:sokol\sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO - -del sokol.obj \ No newline at end of file diff --git a/sokol/build_clibs_linux.sh b/sokol/build_clibs_linux.sh new file mode 100644 index 0000000..c06f4ff --- /dev/null +++ b/sokol/build_clibs_linux.sh @@ -0,0 +1,43 @@ +set -e + +build_lib_x64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + cc -pthread -c -O2 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +build_lib_x64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + cc -pthread -c -g -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +# x64 + GL + Release +build_lib_x64_release sokol_log log/sokol_log_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gfx gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_app app/sokol_app_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_glue glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_time time/sokol_time_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_audio audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_shape shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gl gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE33 + +# x64 + GL + Debug +build_lib_x64_debug sokol_log log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gfx gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_app app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_glue glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_time time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_audio audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_shape shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gl gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE33 + +rm *.o diff --git a/sokol/build_clibs_macos.sh b/sokol/build_clibs_macos.sh new file mode 100644 index 0000000..eefcd4b --- /dev/null +++ b/sokol/build_clibs_macos.sh @@ -0,0 +1,127 @@ +set -e + +build_lib_arm64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch arm64 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +build_lib_arm64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch arm64 -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +build_lib_x64_release() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch x86_64 -DNDEBUG -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +build_lib_x64_debug() { + src=$1 + dst=$2 + backend=$3 + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch x86_64 -DIMPL -D$backend c/$src.c + ar rcs $dst.a $src.o +} + +# ARM + Metal + Release +build_lib_arm64_release sokol_log log/sokol_log_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_gfx gfx/sokol_gfx_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_app app/sokol_app_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_glue glue/sokol_glue_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_time time/sokol_time_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_audio audio/sokol_audio_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_debugtext debugtext/sokol_debugtext_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_shape shape/sokol_shape_macos_arm64_metal_release SOKOL_METAL +build_lib_arm64_release sokol_gl gl/sokol_gl_macos_arm64_metal_release SOKOL_METAL + +# ARM + Metal + Debug +build_lib_arm64_debug sokol_log log/sokol_log_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_gfx gfx/sokol_gfx_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_app app/sokol_app_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_glue glue/sokol_glue_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_time time/sokol_time_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_audio audio/sokol_audio_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_debugtext debugtext/sokol_debugtext_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_shape shape/sokol_shape_macos_arm64_metal_debug SOKOL_METAL +build_lib_arm64_debug sokol_gl gl/sokol_gl_macos_arm64_metal_debug SOKOL_METAL + +# x64 + Metal + Release +build_lib_x64_release sokol_log log/sokol_log_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_gfx gfx/sokol_gfx_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_app app/sokol_app_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_glue glue/sokol_glue_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_time time/sokol_time_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_audio audio/sokol_audio_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_shape shape/sokol_shape_macos_x64_metal_release SOKOL_METAL +build_lib_x64_release sokol_gl gl/sokol_gl_macos_x64_metal_release SOKOL_METAL + +# x64 + Metal + Debug +build_lib_x64_debug sokol_log log/sokol_log_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_gfx gfx/sokol_gfx_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_app app/sokol_app_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_glue glue/sokol_glue_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_time time/sokol_time_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_audio audio/sokol_audio_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_shape shape/sokol_shape_macos_x64_metal_debug SOKOL_METAL +build_lib_x64_debug sokol_gl gl/sokol_gl_macos_x64_metal_debug SOKOL_METAL + +# ARM + GL + Release +build_lib_arm64_release sokol_log log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_gfx gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_app app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_glue glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_time time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_audio audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_shape shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_gl gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE33 + +# ARM + GL + Debug +build_lib_arm64_debug sokol_log log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_gfx gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_app app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_glue glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_time time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_audio audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_shape shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_gl gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE33 + +# x64 + GL + Release +build_lib_x64_release sokol_log log/sokol_log_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gfx gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_app app/sokol_app_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_glue glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_time time/sokol_time_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_audio audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_shape shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_gl gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE33 + +# x64 + GL + Debug +build_lib_x64_debug sokol_log log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gfx gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_app app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_glue glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_time time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_audio audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_shape shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_gl gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE33 + +rm *.o diff --git a/sokol/build_clibs_windows.cmd b/sokol/build_clibs_windows.cmd new file mode 100644 index 0000000..72b0992 --- /dev/null +++ b/sokol/build_clibs_windows.cmd @@ -0,0 +1,45 @@ +@echo off + +set sources=log app gfx glue time audio debugtext shape gl + +REM D3D11 Debug +for %%s in (%sources%) do ( + cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c + lib /OUT:%%s\sokol_%%s_windows_x64_d3d11_debug.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM D3D11 Release +for %%s in (%sources%) do ( + cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c + lib /OUT:%%s\sokol_%%s_windows_x64_d3d11_release.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM GL Debug +for %%s in (%sources%) do ( + cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c + lib /OUT:%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM GL Release +for %%s in (%sources%) do ( + cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c + lib /OUT:%%s\sokol_%%s_windows_x64_gl_release.lib sokol_%%s.obj + del sokol_%%s.obj +) + +REM D3D11 Debug DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol_dll_windows_x64_d3d11_debug.dll /link /INCREMENTAL:NO + +REM D3D11 Release DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /LD /MD /DLL /Fe:sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO + +REM GL Debug DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO + +REM GL Release DLL +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /LD /MD /DLL /Fe:sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO + +del sokol.obj \ No newline at end of file From 19484d8083b74e30b599a2d2c113c5e412f34b1d Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:39:30 +0200 Subject: [PATCH 22/66] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 45af0ae..f4b4f0e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ [![Odin](https://github.com/floooh/sokol-odin/actions/workflows/main.yml/badge.svg)](https://github.com/floooh/sokol-odin/actions/workflows/main.yml) -Auto-generated Odin bindings for the [sokol headers](https://github.com/floooh/sokol). +Auto-generated [Odin](https://github.com/odin-lang/odin) bindings for the [sokol headers](https://github.com/floooh/sokol). + +To include sokol in your project you can copy the [sokol](sokol/) directory. ## BUILD From c52b9465e8b61dbf3cfed00cdcb983afa3e38808 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:41:01 +0200 Subject: [PATCH 23/66] point gh workflows to the moved build scripts --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d964e40..7c7d810 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,7 +27,7 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - ./build_clibs_linux.sh + ./sokol/build_clibs_linux.sh - if: runner.os == 'macOS' name: prepare-macos run: | @@ -38,14 +38,14 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - ./build_clibs_macos.sh + ./sokol/build_clibs_macos.sh - if: runner.os == 'Windows' name: prepare-windows shell: cmd run: | curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-windows-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip - build_clibs_windows.cmd + sokol/build_clibs_windows.cmd - name: build run: | ./odin build examples/clear -debug From bce79f45ea2ff0ea05701b5efbaa843e37daa555 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:45:55 +0200 Subject: [PATCH 24/66] permissions? --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7c7d810..766ceee 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,6 +27,7 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin + chmod a+x ./sokol ./sokol/build_clibs_linux.sh - if: runner.os == 'macOS' name: prepare-macos @@ -38,6 +39,7 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin + chmod a+x ./sokol ./sokol/build_clibs_macos.sh - if: runner.os == 'Windows' name: prepare-windows From 8d10608751e8aa5cc8f8c08ad986ab173057cf9c Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:49:10 +0200 Subject: [PATCH 25/66] permissions???? --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 766ceee..c5cd3d3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,7 +27,7 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - chmod a+x ./sokol + chmod a+x ./sokol/build_clibs_linux.sh ./sokol/build_clibs_linux.sh - if: runner.os == 'macOS' name: prepare-macos @@ -39,7 +39,7 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - chmod a+x ./sokol + chmod a+x ./sokol/build_clibs_macos.sh ./sokol/build_clibs_macos.sh - if: runner.os == 'Windows' name: prepare-windows From abfeb7704592a8a75942a992d65cc56ed3126550 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 15:58:29 +0200 Subject: [PATCH 26/66] moved scripts workaround --- .github/workflows/main.yml | 6 ++++++ README.md | 2 ++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c5cd3d3..1a89dd8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,7 +28,9 @@ jobs: mv ./dist/* ./ chmod a+x ./odin chmod a+x ./sokol/build_clibs_linux.sh + cd sokol ./sokol/build_clibs_linux.sh + cd .. - if: runner.os == 'macOS' name: prepare-macos run: | @@ -40,14 +42,18 @@ jobs: mv ./dist/* ./ chmod a+x ./odin chmod a+x ./sokol/build_clibs_macos.sh + cd sokol ./sokol/build_clibs_macos.sh + cd .. - if: runner.os == 'Windows' name: prepare-windows shell: cmd run: | curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-windows-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip + cd sokol sokol/build_clibs_windows.cmd + cd .. - name: build run: | ./odin build examples/clear -debug diff --git a/README.md b/README.md index f4b4f0e..07787cb 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,14 @@ On Linux install the following packages: libglu1-mesa-dev, mesa-common-dev, xorg 1. First build the required static link libraries: ``` + cd sokol # on macOS: ./build_clibs_macos.sh # on Linux: ./build_clibs_linux.sh # on Windows with MSVC (from a 'Visual Studio Developer Command Prompt') build_clibs_windows.cmd + cd .. ``` 2. Create a build directory and cd into it: From 45883ba6e7e6863bca96fe57d4fa4cfb6861161d Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:02:53 +0200 Subject: [PATCH 27/66] fix typo --- .github/workflows/main.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1a89dd8..293e918 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,9 +27,8 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - chmod a+x ./sokol/build_clibs_linux.sh cd sokol - ./sokol/build_clibs_linux.sh + ./build_clibs_linux.sh cd .. - if: runner.os == 'macOS' name: prepare-macos @@ -41,9 +40,8 @@ jobs: rm -r ./dist/examples mv ./dist/* ./ chmod a+x ./odin - chmod a+x ./sokol/build_clibs_macos.sh cd sokol - ./sokol/build_clibs_macos.sh + ./build_clibs_macos.sh cd .. - if: runner.os == 'Windows' name: prepare-windows @@ -52,7 +50,7 @@ jobs: curl -L https://github.com/odin-lang/Odin/releases/download/dev-2024-04/odin-windows-amd64-dev-2024-04.zip --output odin.zip unzip odin.zip cd sokol - sokol/build_clibs_windows.cmd + build_clibs_windows.cmd cd .. - name: build run: | From 2a8f20c825ac645e56c7de6f416771b245e0d75c Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:04:37 +0200 Subject: [PATCH 28/66] aaahhh --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 293e918..d314b1d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,6 +28,7 @@ jobs: mv ./dist/* ./ chmod a+x ./odin cd sokol + chmod a+x ./build_clibs_linux.sh ./build_clibs_linux.sh cd .. - if: runner.os == 'macOS' @@ -41,6 +42,7 @@ jobs: mv ./dist/* ./ chmod a+x ./odin cd sokol + chmod a+x ./build_clibs_macos.sh ./build_clibs_macos.sh cd .. - if: runner.os == 'Windows' From 24c1c331fdef80faea4c5a1cddb536444eb9af3f Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:17:55 +0200 Subject: [PATCH 29/66] use sokol_defines.h in sokol.c as well --- sokol/c/sokol.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/sokol/c/sokol.c b/sokol/c/sokol.c index 4345edd..8fe7ebb 100644 --- a/sokol/c/sokol.c +++ b/sokol/c/sokol.c @@ -2,14 +2,7 @@ #define SOKOL_IMPL #endif -#define SOKOL_NO_ENTRY -#if defined(_WIN32) -#define SOKOL_WIN32_FORCE_MAIN -#endif -// FIXME: macOS Zig HACK without this, some C stdlib headers throw errors -#if defined(__APPLE__) -#include -#endif +#include "sokol_defines.h" #include "sokol_audio.h" #include "sokol_app.h" From 25370c306fa96603941db060866c10b505e02cd5 Mon Sep 17 00:00:00 2001 From: GH Action Date: Fri, 12 Apr 2024 07:23:58 +0000 Subject: [PATCH 30/66] updated (https://github.com/floooh/sokol/commit/91ec4b5fa95b1e3e3b2e21cfeac85d03cdc9a8ef) --- c/sokol_gfx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index a99ec95..bce0e56 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -4756,7 +4756,7 @@ _SOKOL_PRIVATE int _sg_slot_index(uint32_t id); // constants enum { - _SG_STRING_SIZE = 16, + _SG_STRING_SIZE = 32, _SG_SLOT_SHIFT = 16, _SG_SLOT_MASK = (1<<_SG_SLOT_SHIFT)-1, _SG_MAX_POOL_SIZE = (1<<_SG_SLOT_SHIFT), From d7fe3adcbb87b865107d8e6592511e30c63caacb Mon Sep 17 00:00:00 2001 From: GH Action Date: Fri, 12 Apr 2024 17:14:31 +0000 Subject: [PATCH 31/66] updated (https://github.com/floooh/sokol/commit/5238ce7a5b9f3696cab79118173e0a12df7b70e2) --- c/sokol_gfx.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index bce0e56..4857741 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -10755,7 +10755,7 @@ _SOKOL_PRIVATE void _sg_d3d11_begin_pass(const sg_pass* pass) { // perform clear action for (int i = 0; i < num_rtvs; i++) { if (action->colors[i].load_action == SG_LOADACTION_CLEAR) { - _sg_d3d11_ClearRenderTargetView(_sg.d3d11.ctx, rtvs[i], &action->colors[i].clear_value.r); + _sg_d3d11_ClearRenderTargetView(_sg.d3d11.ctx, rtvs[i], (float*)&action->colors[i].clear_value); _sg_stats_add(d3d11.pass.num_clear_render_target_view, 1); } } @@ -10872,7 +10872,7 @@ _SOKOL_PRIVATE void _sg_d3d11_apply_pipeline(_sg_pipeline_t* pip) { _sg_d3d11_RSSetState(_sg.d3d11.ctx, pip->d3d11.rs); _sg_d3d11_OMSetDepthStencilState(_sg.d3d11.ctx, pip->d3d11.dss, pip->d3d11.stencil_ref); - _sg_d3d11_OMSetBlendState(_sg.d3d11.ctx, pip->d3d11.bs, &pip->cmn.blend_color.r, 0xFFFFFFFF); + _sg_d3d11_OMSetBlendState(_sg.d3d11.ctx, pip->d3d11.bs, (float*)&pip->cmn.blend_color, 0xFFFFFFFF); _sg_d3d11_IASetPrimitiveTopology(_sg.d3d11.ctx, pip->d3d11.topology); _sg_d3d11_IASetInputLayout(_sg.d3d11.ctx, pip->d3d11.il); _sg_d3d11_VSSetShader(_sg.d3d11.ctx, pip->shader->d3d11.vs, NULL, 0); From 2584915d2929efa3d9737798f1ad8ff962f28e67 Mon Sep 17 00:00:00 2001 From: GH Action Date: Sat, 13 Apr 2024 10:13:15 +0000 Subject: [PATCH 32/66] updated (https://github.com/floooh/sokol/commit/8a8d7973196c9932245bbaa3ea9b410c85a5f43f) --- sokol/app/app.odin | 2 -- sokol/gfx/gfx.odin | 22 ---------------------- 2 files changed, 24 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 5fd6829..9dd09b5 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -125,7 +125,6 @@ Event_Type :: enum i32 { QUIT_REQUESTED, CLIPBOARD_PASTED, FILES_DROPPED, - NUM, } Keycode :: enum i32 { INVALID = 0, @@ -495,5 +494,4 @@ Mouse_Cursor :: enum i32 { RESIZE_NESW, RESIZE_ALL, NOT_ALLOWED, - NUM, } diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index cfe1edb..f878288 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -290,7 +290,6 @@ Pixel_Format :: enum i32 { ETC2_RG11SN, ASTC_4x4_RGBA, ASTC_4x4_SRGBA, - NUM, } Pixelformat_Info :: struct { sample : bool, @@ -330,20 +329,17 @@ Usage :: enum i32 { IMMUTABLE, DYNAMIC, STREAM, - NUM, } Buffer_Type :: enum i32 { DEFAULT, VERTEXBUFFER, INDEXBUFFER, - NUM, } Index_Type :: enum i32 { DEFAULT, NONE, UINT16, UINT32, - NUM, } Image_Type :: enum i32 { DEFAULT, @@ -351,7 +347,6 @@ Image_Type :: enum i32 { CUBE, _3D, ARRAY, - NUM, } Image_Sample_Type :: enum i32 { DEFAULT, @@ -360,14 +355,12 @@ Image_Sample_Type :: enum i32 { SINT, UINT, UNFILTERABLE_FLOAT, - NUM, } Sampler_Type :: enum i32 { DEFAULT, FILTERING, NONFILTERING, COMPARISON, - NUM, } Cube_Face :: enum i32 { POS_X, @@ -376,7 +369,6 @@ Cube_Face :: enum i32 { NEG_Y, POS_Z, NEG_Z, - NUM, } Shader_Stage :: enum i32 { VS, @@ -389,14 +381,12 @@ Primitive_Type :: enum i32 { LINE_STRIP, TRIANGLES, TRIANGLE_STRIP, - NUM, } Filter :: enum i32 { DEFAULT, NONE, NEAREST, LINEAR, - NUM, } Wrap :: enum i32 { DEFAULT, @@ -404,14 +394,12 @@ Wrap :: enum i32 { CLAMP_TO_EDGE, CLAMP_TO_BORDER, MIRRORED_REPEAT, - NUM, } Border_Color :: enum i32 { DEFAULT, TRANSPARENT_BLACK, OPAQUE_BLACK, OPAQUE_WHITE, - NUM, } Vertex_Format :: enum i32 { INVALID, @@ -432,13 +420,11 @@ Vertex_Format :: enum i32 { UINT10_N2, HALF2, HALF4, - NUM, } Vertex_Step :: enum i32 { DEFAULT, PER_VERTEX, PER_INSTANCE, - NUM, } Uniform_Type :: enum i32 { INVALID, @@ -451,26 +437,22 @@ Uniform_Type :: enum i32 { INT3, INT4, MAT4, - NUM, } Uniform_Layout :: enum i32 { DEFAULT, NATIVE, STD140, - NUM, } Cull_Mode :: enum i32 { DEFAULT, NONE, FRONT, BACK, - NUM, } Face_Winding :: enum i32 { DEFAULT, CCW, CW, - NUM, } Compare_Func :: enum i32 { DEFAULT, @@ -482,7 +464,6 @@ Compare_Func :: enum i32 { NOT_EQUAL, GREATER_EQUAL, ALWAYS, - NUM, } Stencil_Op :: enum i32 { DEFAULT, @@ -494,7 +475,6 @@ Stencil_Op :: enum i32 { INVERT, INCR_WRAP, DECR_WRAP, - NUM, } Blend_Factor :: enum i32 { DEFAULT, @@ -513,14 +493,12 @@ Blend_Factor :: enum i32 { ONE_MINUS_BLEND_COLOR, BLEND_ALPHA, ONE_MINUS_BLEND_ALPHA, - NUM, } Blend_Op :: enum i32 { DEFAULT, ADD, SUBTRACT, REVERSE_SUBTRACT, - NUM, } Color_Mask :: enum i32 { DEFAULT = 0, From 12a87e751cb0ab8c7439d8e1e2cd096cacbe2419 Mon Sep 17 00:00:00 2001 From: GH Action Date: Sat, 13 Apr 2024 12:06:03 +0000 Subject: [PATCH 33/66] updated (https://github.com/floooh/sokol/commit/e5ce757d235024348aabc051e59d40167dada6be) --- c/sokol_gfx.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/c/sokol_gfx.h b/c/sokol_gfx.h index 4857741..7bf0454 100644 --- a/c/sokol_gfx.h +++ b/c/sokol_gfx.h @@ -9222,6 +9222,29 @@ _SOKOL_PRIVATE void _sg_gl_update_image(_sg_image_t* img, const sg_image_data* d #define _sg_d3d11_Release(self) (self)->lpVtbl->Release(self) #endif +// NOTE: This needs to be a macro since we can't use the polymorphism in C. It's called on many kinds of resources. +// NOTE: Based on microsoft docs, it's fine to call this with pData=NULL if DataSize is also zero. +#if defined(__cplusplus) +#define _sg_d3d11_SetPrivateData(self, guid, DataSize, pData) (self)->SetPrivateData(guid, DataSize, pData) +#else +#define _sg_d3d11_SetPrivateData(self, guid, DataSize, pData) (self)->lpVtbl->SetPrivateData(self, guid, DataSize, pData) +#endif + +#if defined(__cplusplus) +#define _sg_win32_refguid(guid) guid +#else +#define _sg_win32_refguid(guid) &guid +#endif + +static const GUID _sg_d3d11_WKPDID_D3DDebugObjectName = { 0x429b8c22,0x9188,0x4b0c, {0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00} }; + +#if defined(SOKOL_DEBUG) +#define _sg_d3d11_setlabel(self, label) _sg_d3d11_SetPrivateData(self, _sg_win32_refguid(_sg_d3d11_WKPDID_D3DDebugObjectName), label ? (UINT)strlen(label) : 0, label) +#else +#define _sg_d3d11_setlabel(self, label) +#endif + + //-- D3D11 C/C++ wrappers ------------------------------------------------------ static inline HRESULT _sg_d3d11_CheckFormatSupport(ID3D11Device* self, DXGI_FORMAT Format, UINT* pFormatSupport) { #if defined(__cplusplus) @@ -9991,6 +10014,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_buffer(_sg_buffer_t* buf, cons _SG_ERROR(D3D11_CREATE_BUFFER_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(buf->d3d11.buf, desc->label); } return SG_RESOURCESTATE_VALID; } @@ -10097,6 +10121,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_image(_sg_image_t* img, const _SG_ERROR(D3D11_CREATE_2D_TEXTURE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(img->d3d11.tex2d, desc->label); // create shader-resource-view for 2D texture // FIXME: currently we don't support setting MSAA texture as shader resource @@ -10126,6 +10151,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_image(_sg_image_t* img, const _SG_ERROR(D3D11_CREATE_2D_SRV_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(img->d3d11.srv, desc->label); } } SOKOL_ASSERT(img->d3d11.tex2d); @@ -10167,6 +10193,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_image(_sg_image_t* img, const _SG_ERROR(D3D11_CREATE_3D_TEXTURE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(img->d3d11.tex3d, desc->label); // create shader-resource-view for 3D texture if (!msaa) { @@ -10180,6 +10207,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_image(_sg_image_t* img, const _SG_ERROR(D3D11_CREATE_3D_SRV_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(img->d3d11.srv, desc->label); } } SOKOL_ASSERT(img->d3d11.tex3d); @@ -10243,6 +10271,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_sampler(_sg_sampler_t* smp, co _SG_ERROR(D3D11_CREATE_SAMPLER_STATE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(smp->d3d11.smp, desc->label); } return SG_RESOURCESTATE_VALID; } @@ -10337,6 +10366,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_shader(_sg_shader_t* shd, cons _SG_ERROR(D3D11_CREATE_CONSTANT_BUFFER_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(d3d11_stage->cbufs[ub_index], desc->label); } } @@ -10375,6 +10405,8 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_shader(_sg_shader_t* shd, cons SOKOL_ASSERT(shd->d3d11.vs_blob); memcpy(shd->d3d11.vs_blob, vs_ptr, vs_length); result = SG_RESOURCESTATE_VALID; + _sg_d3d11_setlabel(shd->d3d11.vs, desc->label); + _sg_d3d11_setlabel(shd->d3d11.fs, desc->label); } } if (vs_blob) { @@ -10466,6 +10498,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, _SG_ERROR(D3D11_CREATE_INPUT_LAYOUT_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(pip->d3d11.il, desc->label); // create rasterizer state D3D11_RASTERIZER_DESC rs_desc; @@ -10485,6 +10518,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, _SG_ERROR(D3D11_CREATE_RASTERIZER_STATE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(pip->d3d11.rs, desc->label); // create depth-stencil state D3D11_DEPTH_STENCIL_DESC dss_desc; @@ -10510,6 +10544,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, _SG_ERROR(D3D11_CREATE_DEPTH_STENCIL_STATE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(pip->d3d11.dss, desc->label); // create blend state D3D11_BLEND_DESC bs_desc; @@ -10544,6 +10579,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, _SG_ERROR(D3D11_CREATE_BLEND_STATE_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(pip->d3d11.bs, desc->label); return SG_RESOURCESTATE_VALID; } @@ -10639,6 +10675,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_attachments(_sg_attachments_t* _SG_ERROR(D3D11_CREATE_RTV_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(atts->d3d11.colors[i].view.rtv, desc->label); } SOKOL_ASSERT(0 == atts->d3d11.depth_stencil.view.dsv); if (ds_desc->image.id != SG_INVALID_ID) { @@ -10673,6 +10710,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_attachments(_sg_attachments_t* _SG_ERROR(D3D11_CREATE_DSV_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(atts->d3d11.depth_stencil.view.dsv, desc->label); } return SG_RESOURCESTATE_VALID; } From 9b9ca61cb15ae432aa013f835f6d4388ed1c80c6 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Sat, 13 Apr 2024 15:12:53 +0200 Subject: [PATCH 34/66] make the build_clibs_*.sh files executable --- sokol/build_clibs_linux.sh | 0 sokol/build_clibs_macos.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 sokol/build_clibs_linux.sh mode change 100644 => 100755 sokol/build_clibs_macos.sh diff --git a/sokol/build_clibs_linux.sh b/sokol/build_clibs_linux.sh old mode 100644 new mode 100755 diff --git a/sokol/build_clibs_macos.sh b/sokol/build_clibs_macos.sh old mode 100644 new mode 100755 From 4ca585e0dd60f5ce1290f20bc3a31394f81ab663 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Sat, 13 Apr 2024 15:16:54 +0200 Subject: [PATCH 35/66] add a changelog file --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..cfb4772 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,12 @@ +## CHANGELOG + +> NOTE: this changelog is only for changes to the sokol-odin 'scaffolding'. +For actual Sokol header changes, see the +[sokol changelog](https://github.com/floooh/sokol/blob/master/CHANGELOG.md). + +### 13-Apr-2024 + +Merged PR https://github.com/floooh/sokol-odin/pull/11, this changes the +directory structure of the bindings repository, adds support to build +the Windows bindings as a DLL and a couple of smaller things +detailed here: https://github.com/floooh/sokol/pull/1023 From 8d11102006f6e5cb886c54c34354b7df43c1993e Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:31:10 +0200 Subject: [PATCH 36/66] [windows] Add /Z7 arg to include debug info --- sokol/build_clibs_windows.cmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sokol/build_clibs_windows.cmd b/sokol/build_clibs_windows.cmd index 72b0992..2d33813 100644 --- a/sokol/build_clibs_windows.cmd +++ b/sokol/build_clibs_windows.cmd @@ -4,7 +4,7 @@ set sources=log app gfx glue time audio debugtext shape gl REM D3D11 Debug for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c + cl /c /D_DEBUG /DIMPL /DSOKOL_D3D11 c\sokol_%%s.c /Z7 lib /OUT:%%s\sokol_%%s_windows_x64_d3d11_debug.lib sokol_%%s.obj del sokol_%%s.obj ) @@ -18,7 +18,7 @@ for %%s in (%sources%) do ( REM GL Debug for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c + cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c /Z7 lib /OUT:%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj del sokol_%%s.obj ) From e2658085b0a953f8e8914f96ff8e38464812dc08 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Mon, 15 Apr 2024 12:57:02 +0200 Subject: [PATCH 37/66] glue, logger, WIP allocator --- sokol/utils/allocator.odin | 25 ++++++++++++++++ sokol/utils/glue.odin | 37 +++++++++++++++++++++++ sokol/utils/logger.odin | 61 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 sokol/utils/allocator.odin create mode 100644 sokol/utils/glue.odin create mode 100644 sokol/utils/logger.odin diff --git a/sokol/utils/allocator.odin b/sokol/utils/allocator.odin new file mode 100644 index 0000000..9454677 --- /dev/null +++ b/sokol/utils/allocator.odin @@ -0,0 +1,25 @@ +package sokol_utils + +Allocator :: struct { + +} + +sapp_allocator :: proc() -> sapp.Allocator { + return { + alloc_fn = allocator_alloc_func, + free_fn = allocator_free_func, + user_data = nil, + } +} + +sg_allocator :: proc() { + +} + +allocator_alloc_func :: proc "c" (size: u64, user_data: rawptr) -> rawptr { + +} + +allocator_free_func :: proc "c" (ptr: rawptr, user_data: rawptr) -> rawptr { + +} \ No newline at end of file diff --git a/sokol/utils/glue.odin b/sokol/utils/glue.odin new file mode 100644 index 0000000..9345ffd --- /dev/null +++ b/sokol/utils/glue.odin @@ -0,0 +1,37 @@ +package sokol_utils + +// Alternative native odin implementation of sokol_glue.h, in case you want to minimize C dependencies +// (since sokol_glue is only a few lines of code) + +import gfx "../gfx" +import sapp "../app" + +sglue_environment :: proc() -> (env: sg.Environment) { + env.defaults.color_format = cast(sg.Pixel_Format)sapp.color_format() + env.defaults.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + env.defaults.sample_count = sapp.sample_count() + env.metal.device = sapp.metal_get_device() + env.d3d11.device = sapp.d3d11_get_device() + env.d3d11.device_context = sapp.d3d11_get_device_context() + env.wgpu.device = sapp.wgpu_get_device() + return env +} + +sglue_swapchain :: proc() -> (swapchain: sg.Swapchain) { + swapchain.width = sapp.width() + swapchain.height = sapp.height() + swapchain.sample_count = sapp.sample_count() + swapchain.color_format = cast(sg.Pixel_Format)sapp.color_format() + swapchain.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + swapchain.metal.current_drawable = sapp.metal_get_current_drawable() + swapchain.metal.depth_stencil_texture = sapp.metal_get_depth_stencil_texture() + swapchain.metal.msaa_color_texture = sapp.metal_get_msaa_color_texture() + swapchain.d3d11.render_view = sapp.d3d11_get_render_view() + swapchain.d3d11.resolve_view = sapp.d3d11_get_resolve_view() + swapchain.d3d11.depth_stencil_view = sapp.d3d11_get_depth_stencil_view() + swapchain.wgpu.render_view = sapp.wgpu_get_render_view() + swapchain.wgpu.resolve_view = sapp.wgpu_get_resolve_view() + swapchain.wgpu.depth_stencil_view = sapp.wgpu_get_depth_stencil_view() + swapchain.gl.framebuffer = sapp.gl_get_framebuffer() + return swapchain +} diff --git a/sokol/utils/logger.odin b/sokol/utils/logger.odin new file mode 100644 index 0000000..f12228f --- /dev/null +++ b/sokol/utils/logger.odin @@ -0,0 +1,61 @@ +package sokol_utils + +// Pass sokol logs into native odin logging system + +import sapp "../app" +import gfx "../gfx" +import "base:runtime" +import "core:log" + +// context_ptr: a pointer to a context which persists during the lifetime of sokol_app. +sapp_logger :: proc(context_ptr: ^runtime.Context) -> sapp.Logger { + return { + func = log_func, + user_data = cast(rawptr)context_ptr, + } +} + + +// context_ptr: a pointer to a context which persists during the lifetime of sokol_gfx. +sg_logger :: proc(context_ptr: ^runtime.Context) -> sg.Logger { + return { + func = log_func, + user_data = cast(rawptr)context_ptr, + } +} + +log_func :: proc "c" ( + tag: cstring, + log_level: u32, + log_item: u32, + message: cstring, + line_nr: u32, + filename: cstring, + user_data: rawptr, +) { + context = (cast(^runtime.Context)user_data)^ + + level: log.Level + switch log_level { + case 0: + // Panic + level = .Error + case 1: + level = .Error + case 2: + level = .Warning + case: + level = .Info + } + + loc := runtime.Source_Code_Location { + file_path = string(filename), + line = i32(line_nr), + } + + if log_level == 0 { + log.panicf("Sokol Panic: (%i) %s: %s", log_item, tag, message, location = loc) + } else { + log.logf(level, "(%i) %s: %s", log_item, tag, message, location = loc) + } +} From a89f9d375297077df86e505dc0e6b228accf7139 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:05:51 +0200 Subject: [PATCH 38/66] Improvements --- sokol/helpers/allocator.odin | 37 +++++++++ sokol/helpers/glue.odin | 37 +++++++++ sokol/{utils => helpers}/logger.odin | 120 +++++++++++++-------------- sokol/utils/allocator.odin | 25 ------ sokol/utils/glue.odin | 37 --------- 5 files changed, 133 insertions(+), 123 deletions(-) create mode 100644 sokol/helpers/allocator.odin create mode 100644 sokol/helpers/glue.odin rename sokol/{utils => helpers}/logger.odin (51%) delete mode 100644 sokol/utils/allocator.odin delete mode 100644 sokol/utils/glue.odin diff --git a/sokol/helpers/allocator.odin b/sokol/helpers/allocator.odin new file mode 100644 index 0000000..5a9995d --- /dev/null +++ b/sokol/helpers/allocator.odin @@ -0,0 +1,37 @@ +package sokol_helpers + +// Use native odin allocators in sokol allocator interface + +import sapp "../app" +import sg "../gfx" +import "base:runtime" + +Allocator :: struct { + alloc_fn: proc "c" (size: u64, user_data: rawptr) -> rawptr, + free_fn: proc "c" (ptr: rawptr, user_data: rawptr), + user_data: rawptr, +} + +// context_ptr: a pointer to a context which persists during the lifetime of the program. +// Note: you can transmute() this into a logger for any specific sokol library. +allocator :: proc(context_ptr: ^runtime.Context) -> Allocator { + return { + alloc_fn = allocator_alloc_proc, + free_fn = allocator_free_proc, + user_data = cast(rawptr)context_ptr, + } +} + +allocator_alloc_proc :: proc "c" (size: u64, user_data: rawptr) -> rawptr { + context = (cast(^runtime.Context)user_data)^ + bytes, err := runtime.mem_alloc(size = int(size)) + if err != nil { + return nil + } + return raw_data(bytes) +} + +allocator_free_proc :: proc "c" (ptr: rawptr, user_data: rawptr) { + context = (cast(^runtime.Context)user_data)^ + runtime.mem_free(ptr) +} diff --git a/sokol/helpers/glue.odin b/sokol/helpers/glue.odin new file mode 100644 index 0000000..8091ec9 --- /dev/null +++ b/sokol/helpers/glue.odin @@ -0,0 +1,37 @@ +package sokol_helpers + +// Alternative native odin implementation of sokol_glue.h, in case you want to minimize C dependencies +// (since sokol_glue is only a few lines of code) + +import sapp "../app" +import sg "../gfx" + +sglue_environment :: proc() -> (env: sg.Environment) { + env.defaults.color_format = cast(sg.Pixel_Format)sapp.color_format() + env.defaults.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + env.defaults.sample_count = sapp.sample_count() + env.metal.device = sapp.metal_get_device() + env.d3d11.device = sapp.d3d11_get_device() + env.d3d11.device_context = sapp.d3d11_get_device_context() + env.wgpu.device = sapp.wgpu_get_device() + return env +} + +sglue_swapchain :: proc() -> (swapchain: sg.Swapchain) { + swapchain.width = sapp.width() + swapchain.height = sapp.height() + swapchain.sample_count = sapp.sample_count() + swapchain.color_format = cast(sg.Pixel_Format)sapp.color_format() + swapchain.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + swapchain.metal.current_drawable = sapp.metal_get_current_drawable() + swapchain.metal.depth_stencil_texture = sapp.metal_get_depth_stencil_texture() + swapchain.metal.msaa_color_texture = sapp.metal_get_msaa_color_texture() + swapchain.d3d11.render_view = sapp.d3d11_get_render_view() + swapchain.d3d11.resolve_view = sapp.d3d11_get_resolve_view() + swapchain.d3d11.depth_stencil_view = sapp.d3d11_get_depth_stencil_view() + swapchain.wgpu.render_view = sapp.wgpu_get_render_view() + swapchain.wgpu.resolve_view = sapp.wgpu_get_resolve_view() + swapchain.wgpu.depth_stencil_view = sapp.wgpu_get_depth_stencil_view() + swapchain.gl.framebuffer = sapp.gl_get_framebuffer() + return swapchain +} diff --git a/sokol/utils/logger.odin b/sokol/helpers/logger.odin similarity index 51% rename from sokol/utils/logger.odin rename to sokol/helpers/logger.odin index f12228f..631de03 100644 --- a/sokol/utils/logger.odin +++ b/sokol/helpers/logger.odin @@ -1,61 +1,59 @@ -package sokol_utils - -// Pass sokol logs into native odin logging system - -import sapp "../app" -import gfx "../gfx" -import "base:runtime" -import "core:log" - -// context_ptr: a pointer to a context which persists during the lifetime of sokol_app. -sapp_logger :: proc(context_ptr: ^runtime.Context) -> sapp.Logger { - return { - func = log_func, - user_data = cast(rawptr)context_ptr, - } -} - - -// context_ptr: a pointer to a context which persists during the lifetime of sokol_gfx. -sg_logger :: proc(context_ptr: ^runtime.Context) -> sg.Logger { - return { - func = log_func, - user_data = cast(rawptr)context_ptr, - } -} - -log_func :: proc "c" ( - tag: cstring, - log_level: u32, - log_item: u32, - message: cstring, - line_nr: u32, - filename: cstring, - user_data: rawptr, -) { - context = (cast(^runtime.Context)user_data)^ - - level: log.Level - switch log_level { - case 0: - // Panic - level = .Error - case 1: - level = .Error - case 2: - level = .Warning - case: - level = .Info - } - - loc := runtime.Source_Code_Location { - file_path = string(filename), - line = i32(line_nr), - } - - if log_level == 0 { - log.panicf("Sokol Panic: (%i) %s: %s", log_item, tag, message, location = loc) - } else { - log.logf(level, "(%i) %s: %s", log_item, tag, message, location = loc) - } -} +package sokol_helpers + +// Pass sokol logs into native odin logging system + +import sapp "../app" +import sg "../gfx" +import "base:runtime" +import "core:log" + +Logger :: struct { + func: proc "c" ( + tag: cstring, + log_level: u32, + log_item: u32, + message: cstring, + line_nr: u32, + filename: cstring, + user_data: rawptr, + ), + user_data: rawptr, +} + +// context_ptr: a pointer to a context which persists during the lifetime of the program. +// Note: you can transmute() this into a logger for any specific sokol library. +logger :: proc "contextless" (context_ptr: ^runtime.Context) -> Logger { + return {func = logger_proc, user_data = cast(rawptr)context_ptr} +} + +logger_proc :: proc "c" ( + tag: cstring, + log_level: u32, + log_item: u32, + message: cstring, + line_nr: u32, + filename: cstring, + user_data: rawptr, +) { + context = (cast(^runtime.Context)user_data)^ + + loc := runtime.Source_Code_Location { + file_path = string(filename), + line = i32(line_nr), + } + + level: log.Level + switch log_level { + case 0: + log.panicf("Sokol Panic: (%i) %s: %s", log_item, tag, message, location = loc) + + case 1: + level = .Error + case 2: + level = .Warning + case: + level = .Info + } + + log.logf(level, "(%i) %s: %s", log_item, tag, message, location = loc) +} diff --git a/sokol/utils/allocator.odin b/sokol/utils/allocator.odin deleted file mode 100644 index 9454677..0000000 --- a/sokol/utils/allocator.odin +++ /dev/null @@ -1,25 +0,0 @@ -package sokol_utils - -Allocator :: struct { - -} - -sapp_allocator :: proc() -> sapp.Allocator { - return { - alloc_fn = allocator_alloc_func, - free_fn = allocator_free_func, - user_data = nil, - } -} - -sg_allocator :: proc() { - -} - -allocator_alloc_func :: proc "c" (size: u64, user_data: rawptr) -> rawptr { - -} - -allocator_free_func :: proc "c" (ptr: rawptr, user_data: rawptr) -> rawptr { - -} \ No newline at end of file diff --git a/sokol/utils/glue.odin b/sokol/utils/glue.odin deleted file mode 100644 index 9345ffd..0000000 --- a/sokol/utils/glue.odin +++ /dev/null @@ -1,37 +0,0 @@ -package sokol_utils - -// Alternative native odin implementation of sokol_glue.h, in case you want to minimize C dependencies -// (since sokol_glue is only a few lines of code) - -import gfx "../gfx" -import sapp "../app" - -sglue_environment :: proc() -> (env: sg.Environment) { - env.defaults.color_format = cast(sg.Pixel_Format)sapp.color_format() - env.defaults.depth_format = cast(sg.Pixel_Format)sapp.depth_format() - env.defaults.sample_count = sapp.sample_count() - env.metal.device = sapp.metal_get_device() - env.d3d11.device = sapp.d3d11_get_device() - env.d3d11.device_context = sapp.d3d11_get_device_context() - env.wgpu.device = sapp.wgpu_get_device() - return env -} - -sglue_swapchain :: proc() -> (swapchain: sg.Swapchain) { - swapchain.width = sapp.width() - swapchain.height = sapp.height() - swapchain.sample_count = sapp.sample_count() - swapchain.color_format = cast(sg.Pixel_Format)sapp.color_format() - swapchain.depth_format = cast(sg.Pixel_Format)sapp.depth_format() - swapchain.metal.current_drawable = sapp.metal_get_current_drawable() - swapchain.metal.depth_stencil_texture = sapp.metal_get_depth_stencil_texture() - swapchain.metal.msaa_color_texture = sapp.metal_get_msaa_color_texture() - swapchain.d3d11.render_view = sapp.d3d11_get_render_view() - swapchain.d3d11.resolve_view = sapp.d3d11_get_resolve_view() - swapchain.d3d11.depth_stencil_view = sapp.d3d11_get_depth_stencil_view() - swapchain.wgpu.render_view = sapp.wgpu_get_render_view() - swapchain.wgpu.resolve_view = sapp.wgpu_get_resolve_view() - swapchain.wgpu.depth_stencil_view = sapp.wgpu_get_depth_stencil_view() - swapchain.gl.framebuffer = sapp.gl_get_framebuffer() - return swapchain -} From 228e90e2845fb1734194c90b837c3de7ecbec0e1 Mon Sep 17 00:00:00 2001 From: jakubtomsu <66876057+jakubtomsu@users.noreply.github.com> Date: Mon, 15 Apr 2024 17:22:12 +0200 Subject: [PATCH 39/66] glue spaces, naming --- sokol/helpers/glue.odin | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/sokol/helpers/glue.odin b/sokol/helpers/glue.odin index 8091ec9..5215979 100644 --- a/sokol/helpers/glue.odin +++ b/sokol/helpers/glue.odin @@ -6,32 +6,32 @@ package sokol_helpers import sapp "../app" import sg "../gfx" -sglue_environment :: proc() -> (env: sg.Environment) { - env.defaults.color_format = cast(sg.Pixel_Format)sapp.color_format() - env.defaults.depth_format = cast(sg.Pixel_Format)sapp.depth_format() - env.defaults.sample_count = sapp.sample_count() - env.metal.device = sapp.metal_get_device() - env.d3d11.device = sapp.d3d11_get_device() - env.d3d11.device_context = sapp.d3d11_get_device_context() - env.wgpu.device = sapp.wgpu_get_device() - return env +glue_environment :: proc() -> (env: sg.Environment) { + env.defaults.color_format = cast(sg.Pixel_Format)sapp.color_format() + env.defaults.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + env.defaults.sample_count = sapp.sample_count() + env.metal.device = sapp.metal_get_device() + env.d3d11.device = sapp.d3d11_get_device() + env.d3d11.device_context = sapp.d3d11_get_device_context() + env.wgpu.device = sapp.wgpu_get_device() + return env } -sglue_swapchain :: proc() -> (swapchain: sg.Swapchain) { - swapchain.width = sapp.width() - swapchain.height = sapp.height() - swapchain.sample_count = sapp.sample_count() - swapchain.color_format = cast(sg.Pixel_Format)sapp.color_format() - swapchain.depth_format = cast(sg.Pixel_Format)sapp.depth_format() - swapchain.metal.current_drawable = sapp.metal_get_current_drawable() - swapchain.metal.depth_stencil_texture = sapp.metal_get_depth_stencil_texture() - swapchain.metal.msaa_color_texture = sapp.metal_get_msaa_color_texture() - swapchain.d3d11.render_view = sapp.d3d11_get_render_view() - swapchain.d3d11.resolve_view = sapp.d3d11_get_resolve_view() - swapchain.d3d11.depth_stencil_view = sapp.d3d11_get_depth_stencil_view() - swapchain.wgpu.render_view = sapp.wgpu_get_render_view() - swapchain.wgpu.resolve_view = sapp.wgpu_get_resolve_view() - swapchain.wgpu.depth_stencil_view = sapp.wgpu_get_depth_stencil_view() - swapchain.gl.framebuffer = sapp.gl_get_framebuffer() - return swapchain +glue_swapchain :: proc() -> (swapchain: sg.Swapchain) { + swapchain.width = sapp.width() + swapchain.height = sapp.height() + swapchain.sample_count = sapp.sample_count() + swapchain.color_format = cast(sg.Pixel_Format)sapp.color_format() + swapchain.depth_format = cast(sg.Pixel_Format)sapp.depth_format() + swapchain.metal.current_drawable = sapp.metal_get_current_drawable() + swapchain.metal.depth_stencil_texture = sapp.metal_get_depth_stencil_texture() + swapchain.metal.msaa_color_texture = sapp.metal_get_msaa_color_texture() + swapchain.d3d11.render_view = sapp.d3d11_get_render_view() + swapchain.d3d11.resolve_view = sapp.d3d11_get_resolve_view() + swapchain.d3d11.depth_stencil_view = sapp.d3d11_get_depth_stencil_view() + swapchain.wgpu.render_view = sapp.wgpu_get_render_view() + swapchain.wgpu.resolve_view = sapp.wgpu_get_resolve_view() + swapchain.wgpu.depth_stencil_view = sapp.wgpu_get_depth_stencil_view() + swapchain.gl.framebuffer = sapp.gl_get_framebuffer() + return swapchain } From f65d17d211040dab49a3cb3527137b57bb81738f Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Mon, 22 Apr 2024 17:26:05 +0200 Subject: [PATCH 40/66] storage buffer update wip --- build_shaders_macos.sh | 6 +- examples/blend/shader.odin | 707 +++++++------- examples/bufferoffsets/shader.odin | 339 +++---- examples/clear/main.odin | 2 +- examples/cube/shader.odin | 384 ++++---- examples/instancing/shader.odin | 398 ++++---- examples/mrt/shader.odin | 1359 ++++++++++++++------------- examples/noninterleaved/shader.odin | 384 ++++---- examples/offscreen/shader.odin | 885 ++++++++--------- examples/quad/shader.odin | 339 +++---- examples/shapes/shader.glsl | 2 +- examples/shapes/shader.odin | 556 +++++------ examples/texcube/shader.odin | 484 +++++----- examples/triangle/shader.odin | 339 +++---- sokol/app/app.odin | 2 + sokol/build_clibs_linux.sh | 36 +- sokol/build_clibs_macos.sh | 72 +- sokol/build_clibs_windows.cmd | 8 +- sokol/c/sokol_app.h | 94 +- sokol/c/sokol_debugtext.h | 102 +- sokol/c/sokol_gfx.h | 588 ++++++++++-- sokol/c/sokol_gl.h | 115 +-- sokol/c/sokol_glue.h | 2 + sokol/gfx/gfx.odin | 36 +- 24 files changed, 3867 insertions(+), 3372 deletions(-) diff --git a/build_shaders_macos.sh b/build_shaders_macos.sh index a93904e..85511f2 100755 --- a/build_shaders_macos.sh +++ b/build_shaders_macos.sh @@ -1,6 +1,6 @@ set -e -sokol_tools_root=../sokol-tools-bin +sokol_tools_root=../../../sokol-tools-bin build_shader() { name=$1 @@ -12,7 +12,7 @@ build_shader() { shdc=$sokol_tools_root/bin/osx/sokol-shdc fi echo $dir - $shdc -i $dir/shader.glsl -o $dir/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + $shdc -i $dir/shader.glsl -o $dir/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin } build_shader blend @@ -26,5 +26,3 @@ build_shader quad build_shader shapes build_shader texcube build_shader triangle - - diff --git a/examples/blend/shader.odin b/examples/blend/shader.odin index 1ab0b15..c3194be 100644 --- a/examples/blend/shader.odin +++ b/examples/blend/shader.odin @@ -1,63 +1,66 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/blend/shader.glsl -o examples/blend/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/blend/shader.glsl -o examples/blend/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'bg': - Get shader desc: shd.bg_shader_desc(sg.query_backend()); - Vertex shader: vs_bg - Attribute slots: - ATTR_vs_bg_position = 0 - Fragment shader: fs_bg - Uniform block 'bg_fs_params': - C struct: bg_fs_params_t - Bind slot: SLOT_bg_fs_params = 0 - - Shader program 'quad': - Get shader desc: shd.quad_shader_desc(sg.query_backend()); - Vertex shader: vs_quad - Attribute slots: - ATTR_vs_quad_position = 0 - ATTR_vs_quad_color0 = 1 - Uniform block 'quad_vs_params': - C struct: quad_vs_params_t - Bind slot: SLOT_quad_vs_params = 0 - Fragment shader: fs_quad - + ========= + Shader program: 'bg': + Get shader desc: bg_shader_desc(sg.query_backend()) + Vertex shader: vs_bg + Attributes: + ATTR_vs_bg_position => 0 + Fragment shader: fs_bg + Uniform block 'bg_fs_params': + Odin struct: Bg_Fs_Params + Bind slot: SLOT_bg_fs_params => 0 + Shader program: 'quad': + Get shader desc: quad_shader_desc(sg.query_backend()) + Vertex shader: vs_quad + Attributes: + ATTR_vs_quad_position => 0 + ATTR_vs_quad_color0 => 1 + Uniform block 'quad_vs_params': + Odin struct: Quad_Vs_Params + Bind slot: SLOT_quad_vs_params => 0 + Fragment shader: fs_quad */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_bg_position :: 0 ATTR_vs_quad_position :: 0 ATTR_vs_quad_color0 :: 1 SLOT_bg_fs_params :: 0 -Bg_Fs_Params :: struct { - tick: f32, - _: [12]u8, -} SLOT_quad_vs_params :: 0 -Quad_Vs_Params :: struct { - mvp: m.mat4, +Bg_Fs_Params :: struct #align(16) { + using _: struct #packed { + tick: f32, + _: [12]u8, + }, +} +Quad_Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - layout(location = 0) in vec2 position; - - void main() - { - gl_Position = vec4(position, 0.5, 1.0); - } - + #version 430 + + layout(location = 0) in vec2 position; + + void main() + { + gl_Position = vec4(position, 0.5, 1.0); + } + */ @(private) -vs_bg_source_glsl330 := [116]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +vs_bg_source_glsl430 := [116]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x69,0x74, 0x69,0x6f,0x6e,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, @@ -67,22 +70,22 @@ vs_bg_source_glsl330 := [116]u8 { 0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform vec4 bg_fs_params[1]; - layout(location = 0) out vec4 frag_color; - - void main() - { - vec2 _28 = fract((gl_FragCoord.xy - vec2(bg_fs_params[0].x)) * vec2(0.0199999995529651641845703125)); - float _39 = _28.x * _28.y; - frag_color = vec4(_39, _39, _39, 1.0); - } - + #version 430 + + uniform vec4 bg_fs_params[1]; + layout(location = 0) out vec4 frag_color; + + void main() + { + vec2 _28 = fract((gl_FragCoord.xy - vec2(bg_fs_params[0].x)) * vec2(0.0199999995529651641845703125)); + float _39 = _28.x * _28.y; + frag_color = vec4(_39, _39, _39, 1.0); + } + */ @(private) -fs_bg_source_glsl330 := [285]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +fs_bg_source_glsl430 := [285]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x62,0x67,0x5f,0x66,0x73, 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f, 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29, @@ -102,95 +105,97 @@ fs_bg_source_glsl330 := [285]u8 { 0x39,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform vec4 quad_vs_params[4]; - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = mat4(quad_vs_params[0], quad_vs_params[1], quad_vs_params[2], quad_vs_params[3]) * position; - color = color0; - } - + #version 430 + + uniform vec4 quad_vs_params[4]; + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = mat4(quad_vs_params[0], quad_vs_params[1], quad_vs_params[2], quad_vs_params[3]) * position; + color = color0; + } + */ @(private) -vs_quad_source_glsl330 := [288]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_quad_source_glsl430 := [309]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x71,0x75,0x61,0x64,0x5f, 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, - 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, - 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28, - 0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, - 0x5d,0x2c,0x20,0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, - 0x73,0x5b,0x31,0x5d,0x2c,0x20,0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x71,0x75,0x61,0x64,0x5f,0x76,0x73, - 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f, - 0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f, - 0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, - + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x6d,0x61,0x74,0x34,0x28,0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x71,0x75,0x61,0x64,0x5f, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x71,0x75, + 0x61,0x64,0x5f,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29, + 0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b, + 0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_quad_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_quad_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - static float4 gl_Position; - static float2 position; - - struct SPIRV_Cross_Input - { - float2 position : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = float4(position, 0.5f, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - return stage_output; - } + static float4 gl_Position; + static float2 position; + + struct SPIRV_Cross_Input + { + float2 position : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = float4(position, 0.5f, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + return stage_output; + } */ @(private) -vs_bg_source_hlsl4 := [476]u8 { +vs_bg_source_hlsl5 := [476]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, 0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, @@ -223,44 +228,44 @@ vs_bg_source_hlsl4 := [476]u8 { 0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - cbuffer bg_fs_params : register(b0) - { - float _17_tick : packoffset(c0); - }; - - - static float4 gl_FragCoord; - static float4 frag_color; - - struct SPIRV_Cross_Input - { - float4 gl_FragCoord : SV_Position; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - float2 _28 = frac((gl_FragCoord.xy - _17_tick.xx) * 0.0199999995529651641845703125f.xx); - float _39 = _28.x * _28.y; - frag_color = float4(_39, _39, _39, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - gl_FragCoord = stage_input.gl_FragCoord; - gl_FragCoord.w = 1.0 / gl_FragCoord.w; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + cbuffer bg_fs_params : register(b0) + { + float _17_tick : packoffset(c0); + }; + + + static float4 gl_FragCoord; + static float4 frag_color; + + struct SPIRV_Cross_Input + { + float4 gl_FragCoord : SV_Position; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + float2 _28 = frac((gl_FragCoord.xy - _17_tick.xx) * 0.0199999995529651641845703125f.xx); + float _39 = _28.x * _28.y; + frag_color = float4(_39, _39, _39, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + gl_FragCoord = stage_input.gl_FragCoord; + gl_FragCoord.w = 1.0 / gl_FragCoord.w; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_bg_source_hlsl4 := [734]u8 { +fs_bg_source_hlsl5 := [734]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x62,0x67,0x5f,0x66,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28, 0x62,0x30,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20, @@ -309,48 +314,48 @@ fs_bg_source_hlsl4 := [734]u8 { 0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - cbuffer quad_vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + cbuffer quad_vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_quad_source_hlsl4 := [753]u8 { +vs_quad_source_hlsl5 := [753]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x71,0x75,0x61,0x64,0x5f,0x76,0x73,0x5f, 0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65, 0x72,0x28,0x62,0x30,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f, @@ -401,35 +406,35 @@ vs_quad_source_hlsl4 := [753]u8 { 0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_quad_source_hlsl4 := [435]u8 { +fs_quad_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -460,28 +465,28 @@ fs_quad_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float2 position [[attribute(0)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.gl_Position = float4(in.position, 0.5, 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float2 position [[attribute(0)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.gl_Position = float4(in.position, 0.5, 1.0); + return out; + } + */ @(private) vs_bg_source_metal_macos := [340]u8 { @@ -509,30 +514,30 @@ vs_bg_source_metal_macos := [340]u8 { 0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct bg_fs_params - { - float tick; - }; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - fragment main0_out main0(constant bg_fs_params& _17 [[buffer(0)]], float4 gl_FragCoord [[position]]) - { - main0_out out = {}; - float2 _28 = fract((gl_FragCoord.xy - float2(_17.tick)) * float2(0.0199999995529651641845703125)); - float _39 = _28.x * _28.y; - out.frag_color = float4(_39, _39, _39, 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct bg_fs_params + { + float tick; + }; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + fragment main0_out main0(constant bg_fs_params& _17 [[buffer(0)]], float4 gl_FragCoord [[position]]) + { + main0_out out = {}; + float2 _28 = fract((gl_FragCoord.xy - float2(_17.tick)) * float2(0.0199999995529651641845703125)); + float _39 = _28.x * _28.y; + out.frag_color = float4(_39, _39, _39, 1.0); + return out; + } + */ @(private) fs_bg_source_metal_macos := [503]u8 { @@ -570,36 +575,36 @@ fs_bg_source_metal_macos := [503]u8 { 0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct quad_vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant quad_vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct quad_vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant quad_vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_quad_source_metal_macos := [519]u8 { @@ -638,28 +643,28 @@ vs_quad_source_metal_macos := [519]u8 { 0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_quad_source_metal_macos := [315]u8 { @@ -686,32 +691,31 @@ fs_quad_source_metal_macos := [315]u8 { } bg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "bg_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" - desc.vs.source = transmute(cstring)&vs_bg_source_glsl330 + desc.vs.source = transmute(cstring)&vs_bg_source_glsl430 desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_bg_source_glsl330 + desc.fs.source = transmute(cstring)&fs_bg_source_glsl430 desc.fs.entry = "main" desc.fs.uniform_blocks[0].size = 16 desc.fs.uniform_blocks[0].layout = .STD140 desc.fs.uniform_blocks[0].uniforms[0].name = "bg_fs_params" - desc.fs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.fs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.fs.uniform_blocks[0].uniforms[0].array_count = 1 - desc.label = "bg_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_bg_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_bg_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_bg_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_bg_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" desc.fs.uniform_blocks[0].size = 16 desc.fs.uniform_blocks[0].layout = .STD140 - desc.label = "bg_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_bg_source_metal_macos @@ -720,42 +724,40 @@ bg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.entry = "main0" desc.fs.uniform_blocks[0].size = 16 desc.fs.uniform_blocks[0].layout = .STD140 - desc.label = "bg_shader" } } return desc } quad_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "quad_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_quad_source_glsl330 + desc.vs.source = transmute(cstring)&vs_quad_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "quad_vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_quad_source_glsl330 + desc.fs.source = transmute(cstring)&fs_quad_source_glsl430 desc.fs.entry = "main" - desc.label = "quad_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_quad_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_quad_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_quad_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_quad_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "quad_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_quad_source_metal_macos @@ -764,7 +766,6 @@ quad_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_quad_source_metal_macos desc.fs.entry = "main0" - desc.label = "quad_shader" } } return desc diff --git a/examples/bufferoffsets/shader.odin b/examples/bufferoffsets/shader.odin index 3f3b5de..f085e05 100644 --- a/examples/bufferoffsets/shader.odin +++ b/examples/bufferoffsets/shader.odin @@ -1,113 +1,116 @@ +package main +import sg "../../sokol/gfx" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/bufferoffsets/shader.glsl -o examples/bufferoffsets/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/bufferoffsets/shader.glsl -o examples/bufferoffsets/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'bufferoffsets': - Get shader desc: shd.bufferoffsets_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_color0 = 1 - Fragment shader: fs - + ========= + Shader program: 'bufferoffsets': + Get shader desc: bufferoffsets_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_color0 => 1 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" ATTR_vs_position :: 0 ATTR_vs_color0 :: 1 /* - #version 330 - - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = position; - color = color0; - } - + #version 430 + + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = position; + color = color0; + } + */ @(private) -vs_source_glsl330 := [173]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +vs_source_glsl430 := [194]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, - 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, - 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, - 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = position; - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = position; + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [645]u8 { +vs_source_hlsl5 := [645]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, 0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, @@ -151,35 +154,35 @@ vs_source_hlsl4 := [645]u8 { 0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -210,31 +213,31 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.gl_Position = in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.gl_Position = in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [419]u8 { @@ -267,28 +270,28 @@ vs_source_metal_macos := [419]u8 { 0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -315,35 +318,33 @@ fs_source_metal_macos := [315]u8 { } bufferoffsets_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "bufferoffsets_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "bufferoffsets_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "bufferoffsets_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos desc.vs.entry = "main0" desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "bufferoffsets_shader" } } return desc diff --git a/examples/clear/main.odin b/examples/clear/main.odin index 3671f1b..4d5a9f2 100644 --- a/examples/clear/main.odin +++ b/examples/clear/main.odin @@ -25,7 +25,7 @@ init :: proc "c" () { // just some debug output what backend we're running on switch sg.query_backend() { case .D3D11: fmt.println(">> using D3D11 backend") - case .GLCORE33, .GLES3: fmt.println(">> using GL backend") + case .GLCORE, .GLES3: fmt.println(">> using GL backend") case .METAL_MACOS, .METAL_IOS, .METAL_SIMULATOR: fmt.println(">> using Metal backend") case .WGPU: fmt.println(">> using WebGPU backend") case .DUMMY: fmt.println(">> using dummy backend") diff --git a/examples/cube/shader.odin b/examples/cube/shader.odin index f5c1158..2ac8342 100644 --- a/examples/cube/shader.odin +++ b/examples/cube/shader.odin @@ -1,134 +1,138 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/cube/shader.glsl -o examples/cube/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/cube/shader.glsl -o examples/cube/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'cube': - Get shader desc: shd.cube_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_color0 = 1 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs - + ========= + Shader program: 'cube': + Get shader desc: cube_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_color0 => 1 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_position :: 0 ATTR_vs_color0 :: 1 SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; - color = color0; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; + color = color0; + } + */ @(private) -vs_source_glsl330 := [263]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_source_glsl430 := [284]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, - 0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c, - 0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, - 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33, - 0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72, - 0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, + 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [748]u8 { +vs_source_hlsl5 := [748]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -178,35 +182,35 @@ vs_source_hlsl4 := [748]u8 { 0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -237,36 +241,36 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [509]u8 { @@ -304,28 +308,28 @@ vs_source_metal_macos := [509]u8 { 0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -352,35 +356,34 @@ fs_source_metal_macos := [315]u8 { } cube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "cube_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "cube_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "cube_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos @@ -389,7 +392,6 @@ cube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "cube_shader" } } return desc diff --git a/examples/instancing/shader.odin b/examples/instancing/shader.odin index 7ff6154..ed12255 100644 --- a/examples/instancing/shader.odin +++ b/examples/instancing/shader.odin @@ -1,143 +1,147 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/instancing/shader.glsl -o examples/instancing/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/instancing/shader.glsl -o examples/instancing/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'instancing': - Get shader desc: shd.instancing_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_pos = 0 - ATTR_vs_color0 = 1 - ATTR_vs_inst_pos = 2 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs - + ========= + Shader program: 'instancing': + Get shader desc: instancing_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_pos => 0 + ATTR_vs_color0 => 1 + ATTR_vs_inst_pos => 2 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_pos :: 0 ATTR_vs_color0 :: 1 ATTR_vs_inst_pos :: 2 SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec3 pos; - layout(location = 2) in vec3 inst_pos; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * vec4(pos + inst_pos, 1.0); - color = color0; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec3 pos; + layout(location = 2) in vec3 inst_pos; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * vec4(pos + inst_pos, 1.0); + color = color0; + } + */ @(private) -vs_source_glsl330 := [314]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_source_glsl430 := [335]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75, 0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20, 0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73, - 0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72, 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, - 0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63, - 0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73, - 0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f, - 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x20, - 0x2b,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76, + 0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67, + 0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74, + 0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34, + 0x28,0x70,0x6f,0x73,0x20,0x2b,0x20,0x69,0x6e,0x73,0x74,0x5f,0x70,0x6f,0x73,0x2c, + 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _33_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float3 pos; - static float3 inst_pos; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float3 pos : TEXCOORD0; - float4 color0 : TEXCOORD1; - float3 inst_pos : TEXCOORD2; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(float4(pos + inst_pos, 1.0f), _33_mvp); - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - pos = stage_input.pos; - inst_pos = stage_input.inst_pos; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _33_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float3 pos; + static float3 inst_pos; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float3 pos : TEXCOORD0; + float4 color0 : TEXCOORD1; + float3 inst_pos : TEXCOORD2; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(float4(pos + inst_pos, 1.0f), _33_mvp); + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + pos = stage_input.pos; + inst_pos = stage_input.inst_pos; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [842]u8 { +vs_source_hlsl5 := [842]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -193,35 +197,35 @@ vs_source_hlsl4 := [842]u8 { 0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -252,37 +256,37 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float3 pos [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - float3 inst_pos [[attribute(2)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _33 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _33.mvp * float4(in.pos + in.inst_pos, 1.0); - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float3 pos [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + float3 inst_pos [[attribute(2)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _33 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _33.mvp * float4(in.pos + in.inst_pos, 1.0); + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [564]u8 { @@ -324,28 +328,28 @@ vs_source_metal_macos := [564]u8 { 0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -372,21 +376,21 @@ fs_source_metal_macos := [315]u8 { } instancing_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "instancing_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "pos" desc.attrs[1].name = "color0" desc.attrs[2].name = "inst_pos" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "instancing_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" @@ -395,15 +399,14 @@ instancing_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.attrs[1].sem_index = 1 desc.attrs[2].sem_name = "TEXCOORD" desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "instancing_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos @@ -412,7 +415,6 @@ instancing_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "instancing_shader" } } return desc diff --git a/examples/mrt/shader.odin b/examples/mrt/shader.odin index 4df472f..8d507c0 100644 --- a/examples/mrt/shader.odin +++ b/examples/mrt/shader.odin @@ -1,361 +1,382 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/mrt/shader.glsl -o examples/mrt/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/mrt/shader.glsl -o examples/mrt/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'dbg': - Get shader desc: shd.dbg_shader_desc(sg.query_backend()); - Vertex shader: vs_dbg - Attribute slots: - ATTR_vs_dbg_pos = 0 - Fragment shader: fs_dbg - Image 'tex': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex = 0 - Sampler 'smp': - Type: .FILTERING - Bind slot: SLOT_smp = 0 - Image Sampler Pair 'tex_smp': - Image: tex - Sampler: smp - - Shader program 'fsq': - Get shader desc: shd.fsq_shader_desc(sg.query_backend()); - Vertex shader: vs_fsq - Attribute slots: - ATTR_vs_fsq_pos = 0 - Uniform block 'fsq_params': - C struct: fsq_params_t - Bind slot: SLOT_fsq_params = 0 - Fragment shader: fs_fsq - Image 'tex0': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex0 = 0 - Image 'tex1': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex1 = 1 - Image 'tex2': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex2 = 2 - Sampler 'smp': - Type: .FILTERING - Bind slot: SLOT_smp = 0 - Image Sampler Pair 'tex0_smp': - Image: tex0 - Sampler: smp - Image Sampler Pair 'tex1_smp': - Image: tex1 - Sampler: smp - Image Sampler Pair 'tex2_smp': - Image: tex2 - Sampler: smp - - Shader program 'offscreen': - Get shader desc: shd.offscreen_shader_desc(sg.query_backend()); - Vertex shader: vs_offscreen - Attribute slots: - ATTR_vs_offscreen_pos = 0 - ATTR_vs_offscreen_bright0 = 1 - Uniform block 'offscreen_params': - C struct: offscreen_params_t - Bind slot: SLOT_offscreen_params = 0 - Fragment shader: fs_offscreen - + ========= + Shader program: 'dbg': + Get shader desc: dbg_shader_desc(sg.query_backend()) + Vertex shader: vs_dbg + Attributes: + ATTR_vs_dbg_pos => 0 + Fragment shader: fs_dbg + Image 'tex': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex => 0 + Sampler 'smp': + Type: .FILTERING + Bind slot: SLOT_smp => 0 + Image Sampler Pair 'tex_smp': + Image: tex + Sampler: smp + Shader program: 'fsq': + Get shader desc: fsq_shader_desc(sg.query_backend()) + Vertex shader: vs_fsq + Attributes: + ATTR_vs_fsq_pos => 0 + Uniform block 'fsq_params': + Odin struct: Fsq_Params + Bind slot: SLOT_fsq_params => 0 + Fragment shader: fs_fsq + Image 'tex0': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex0 => 0 + Image 'tex1': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex1 => 1 + Image 'tex2': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex2 => 2 + Sampler 'smp': + Type: .FILTERING + Bind slot: SLOT_smp => 0 + Image Sampler Pair 'tex0_smp': + Image: tex0 + Sampler: smp + Image Sampler Pair 'tex1_smp': + Image: tex1 + Sampler: smp + Image Sampler Pair 'tex2_smp': + Image: tex2 + Sampler: smp + Shader program: 'offscreen': + Get shader desc: offscreen_shader_desc(sg.query_backend()) + Vertex shader: vs_offscreen + Attributes: + ATTR_vs_offscreen_pos => 0 + ATTR_vs_offscreen_bright0 => 1 + Uniform block 'offscreen_params': + Odin struct: Offscreen_Params + Bind slot: SLOT_offscreen_params => 0 + Fragment shader: fs_offscreen */ -package main -import sg "../../sokol/gfx" -import m "../math" +ATTR_vs_dbg_pos :: 0 +ATTR_vs_fsq_pos :: 0 ATTR_vs_offscreen_pos :: 0 ATTR_vs_offscreen_bright0 :: 1 -ATTR_vs_fsq_pos :: 0 -ATTR_vs_dbg_pos :: 0 +SLOT_offscreen_params :: 0 +SLOT_fsq_params :: 0 SLOT_tex0 :: 0 SLOT_tex1 :: 1 SLOT_tex2 :: 2 SLOT_tex :: 0 SLOT_smp :: 0 -SLOT_offscreen_params :: 0 -Offscreen_Params :: struct { - mvp: m.mat4, +Offscreen_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } -SLOT_fsq_params :: 0 -Fsq_Params :: struct { - offset: m.vec2, - _: [8]u8, +Fsq_Params :: struct #align(16) { + using _: struct #packed { + offset: m.vec2, + _: [8]u8, + }, } /* - #version 330 - - uniform vec4 offscreen_params[4]; - layout(location = 0) in vec4 pos; - out float bright; - layout(location = 1) in float bright0; - - void main() - { - gl_Position = mat4(offscreen_params[0], offscreen_params[1], offscreen_params[2], offscreen_params[3]) * pos; - bright = bright0; - } - + #version 430 + + uniform vec4 offscreen_params[4]; + layout(location = 0) in vec4 pos; + layout(location = 0) out float bright; + layout(location = 1) in float bright0; + + void main() + { + gl_Position = mat4(offscreen_params[0], offscreen_params[1], offscreen_params[2], offscreen_params[3]) * pos; + bright = bright0; + } + */ @(private) -vs_offscreen_source_glsl330 := [294]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_offscreen_source_glsl430 := [315]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x6f,0x66,0x66,0x73,0x63, 0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a, 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, 0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73, - 0x3b,0x0a,0x6f,0x75,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67, - 0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74, - 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x66,0x6c,0x6f,0x61, - 0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64, - 0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c, - 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34, - 0x28,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d, - 0x73,0x5b,0x30,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f, - 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63, - 0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20, + 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30,0x3b,0x0a, + 0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20, + 0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x6d,0x61,0x74,0x34,0x28,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63, + 0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20, 0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x30, - 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x5b,0x32,0x5d,0x2c,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65,0x6e,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x62,0x72, + 0x69,0x67,0x68,0x74,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color_0; - in float bright; - layout(location = 1) out vec4 frag_color_1; - layout(location = 2) out vec4 frag_color_2; - - void main() - { - frag_color_0 = vec4(bright, 0.0, 0.0, 1.0); - frag_color_1 = vec4(0.0, bright, 0.0, 1.0); - frag_color_2 = vec4(0.0, 0.0, bright, 1.0); - } - + #version 430 + + layout(location = 0) out vec4 frag_color_0; + layout(location = 0) in float bright; + layout(location = 1) out vec4 frag_color_1; + layout(location = 2) out vec4 frag_color_2; + + void main() + { + frag_color_0 = vec4(bright, 0.0, 0.0, 1.0); + frag_color_1 = vec4(0.0, bright, 0.0, 1.0); + frag_color_2 = vec4(0.0, 0.0, bright, 1.0); + } + */ @(private) -fs_offscreen_source_glsl330 := [326]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_offscreen_source_glsl430 := [347]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x69,0x6e,0x20,0x66,0x6c,0x6f, - 0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75, - 0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f, - 0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f, - 0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x6f,0x75,0x74,0x20, - 0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f, - 0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a, - 0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x5f,0x30,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x62,0x72,0x69,0x67,0x68,0x74, - 0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x5f,0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x2c,0x20,0x62, - 0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, - 0x5f,0x32,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x2c,0x20,0x30, - 0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29, - 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69, + 0x6e,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b,0x0a, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72, + 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f, + 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29, + 0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, + 0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61, + 0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x62, + 0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c, + 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30, + 0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c,0x20,0x30,0x2e,0x30,0x2c, + 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x32,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30, + 0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x2c, + 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform vec4 fsq_params[1]; - layout(location = 0) in vec2 pos; - out vec2 uv0; - out vec2 uv1; - out vec2 uv2; - - void main() - { - gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0); - uv0 = pos + vec2(fsq_params[0].x, 0.0); - uv1 = pos + vec2(0.0, fsq_params[0].y); - uv2 = pos; - gl_Position.y = -gl_Position.y; - } - + #version 430 + + uniform vec4 fsq_params[1]; + layout(location = 0) in vec2 pos; + layout(location = 0) out vec2 uv0; + layout(location = 1) out vec2 uv1; + layout(location = 2) out vec2 uv2; + + void main() + { + gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0); + uv0 = pos + vec2(fsq_params[0].x, 0.0); + uv1 = pos + vec2(0.0, fsq_params[0].y); + uv2 = pos; + gl_Position.y = -gl_Position.y; + } + */ @(private) -vs_fsq_source_glsl330 := [335]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_fsq_source_glsl430 := [398]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x73,0x71,0x5f,0x70, 0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69, - 0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6f,0x75,0x74,0x20, - 0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65, - 0x63,0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32, - 0x20,0x75,0x76,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e, - 0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73, - 0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31, - 0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a, - 0x20,0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20, - 0x76,0x65,0x63,0x32,0x28,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b, - 0x30,0x5d,0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, - 0x75,0x76,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76,0x65,0x63,0x32, - 0x28,0x30,0x2e,0x30,0x2c,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x30,0x5d,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x32,0x20, - 0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f, - 0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,0x6c,0x5f,0x50, - 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f, + 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29, + 0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x31, + 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20, + 0x75,0x76,0x32,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, + 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20, + 0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e, + 0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x75,0x76,0x30,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76, + 0x65,0x63,0x32,0x28,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, + 0x5d,0x2e,0x78,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75, + 0x76,0x31,0x20,0x3d,0x20,0x70,0x6f,0x73,0x20,0x2b,0x20,0x76,0x65,0x63,0x32,0x28, + 0x30,0x2e,0x30,0x2c,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b, + 0x30,0x5d,0x2e,0x79,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x32,0x20,0x3d, + 0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73, + 0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,0x6c,0x5f,0x50,0x6f, + 0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform sampler2D tex0_smp; - uniform sampler2D tex1_smp; - uniform sampler2D tex2_smp; - - in vec2 uv0; - in vec2 uv1; - in vec2 uv2; - layout(location = 0) out vec4 frag_color; - - void main() - { - frag_color = vec4((texture(tex0_smp, uv0).xyz + texture(tex1_smp, uv1).xyz) + texture(tex2_smp, uv2).xyz, 1.0); - } - + #version 430 + + layout(binding = 0) uniform sampler2D tex0_smp; + layout(binding = 1) uniform sampler2D tex1_smp; + layout(binding = 2) uniform sampler2D tex2_smp; + + layout(location = 0) in vec2 uv0; + layout(location = 1) in vec2 uv1; + layout(location = 2) in vec2 uv2; + layout(location = 0) out vec4 frag_color; + + void main() + { + frag_color = vec4((texture(tex0_smp, uv0).xyz + texture(tex1_smp, uv1).xyz) + texture(tex2_smp, uv2).xyz, 1.0); + } + */ @(private) -fs_fsq_source_glsl330 := [315]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, - 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, - 0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72, - 0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x31, - 0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61, - 0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x32,0x5f,0x73,0x6d,0x70, - 0x3b,0x0a,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b,0x0a, - 0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x31,0x3b,0x0a,0x69,0x6e,0x20, - 0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x32,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, - 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, - 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29, - 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f, - 0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x74,0x65,0x78,0x74,0x75,0x72, - 0x65,0x28,0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x30,0x29, - 0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74, - 0x65,0x78,0x31,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x31,0x29,0x2e,0x78,0x79, - 0x7a,0x29,0x20,0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78, - 0x32,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,0x2c, - 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +fs_fsq_source_glsl430 := [438]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x30, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x30,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x31, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x31,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x32, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x32,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x30,0x3b, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76, + 0x31,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, + 0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20, + 0x75,0x76,0x32,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76, + 0x65,0x63,0x34,0x28,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78, + 0x30,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x30,0x29,0x2e,0x78,0x79,0x7a,0x20, + 0x2b,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x31,0x5f,0x73, + 0x6d,0x70,0x2c,0x20,0x75,0x76,0x31,0x29,0x2e,0x78,0x79,0x7a,0x29,0x20,0x2b,0x20, + 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x32,0x5f,0x73,0x6d,0x70, + 0x2c,0x20,0x75,0x76,0x32,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29, + 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) in vec2 pos; - out vec2 uv; - - void main() - { - gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0); - uv = pos; - gl_Position.y = -gl_Position.y; - } - + #version 430 + + layout(location = 0) in vec2 pos; + layout(location = 0) out vec2 uv; + + void main() + { + gl_Position = vec4((pos * 2.0) - vec2(1.0), 0.5, 1.0); + uv = pos; + gl_Position.y = -gl_Position.y; + } + */ @(private) -vs_dbg_source_glsl330 := [189]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +vs_dbg_source_glsl430 := [210]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x0a,0x76,0x6f, - 0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, - 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65, - 0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2d, - 0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x30,0x2e,0x35,0x2c, - 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x20,0x3d,0x20, - 0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69, - 0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67,0x6c,0x5f,0x50,0x6f,0x73, - 0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76, + 0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x70,0x6f,0x73,0x20,0x2a,0x20,0x32, + 0x2e,0x30,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x32,0x28,0x31,0x2e,0x30,0x29,0x2c, + 0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x75,0x76,0x20,0x3d,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c, + 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x20,0x3d,0x20,0x2d,0x67, + 0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, } /* - #version 330 - - uniform sampler2D tex_smp; - - layout(location = 0) out vec4 frag_color; - in vec2 uv; - - void main() - { - frag_color = vec4(texture(tex_smp, uv).xyz, 1.0); - } - + #version 430 + + layout(binding = 0) uniform sampler2D tex_smp; + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec2 uv; + + void main() + { + frag_color = vec4(texture(tex_smp, uv).xyz, 1.0); + } + */ @(private) -fs_dbg_source_glsl330 := [169]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, - 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, - 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, - 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, - 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a, - 0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20, - 0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, - 0x76,0x65,0x63,0x34,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78, - 0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31, - 0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +fs_dbg_source_glsl430 := [210]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x30, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d, + 0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x74,0x65, + 0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75, + 0x76,0x29,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, } /* - cbuffer offscreen_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 pos; - static float bright; - static float bright0; - - struct SPIRV_Cross_Input - { - float4 pos : TEXCOORD0; - float bright0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float bright : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(pos, _19_mvp); - bright = bright0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - pos = stage_input.pos; - bright0 = stage_input.bright0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.bright = bright; - return stage_output; - } + cbuffer offscreen_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 pos; + static float bright; + static float bright0; + + struct SPIRV_Cross_Input + { + float4 pos : TEXCOORD0; + float bright0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float bright : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(pos, _19_mvp); + bright = bright0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + pos = stage_input.pos; + bright0 = stage_input.bright0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.bright = bright; + return stage_output; + } */ @(private) -vs_offscreen_source_hlsl4 := [736]u8 { +vs_offscreen_source_hlsl5 := [736]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x6f,0x66,0x66,0x73,0x63,0x72,0x65,0x65, 0x6e,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73, 0x74,0x65,0x72,0x28,0x62,0x30,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f, @@ -405,43 +426,43 @@ vs_offscreen_source_hlsl4 := [736]u8 { } /* - static float4 frag_color_0; - static float bright; - static float4 frag_color_1; - static float4 frag_color_2; - - struct SPIRV_Cross_Input - { - float bright : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color_0 : SV_Target0; - float4 frag_color_1 : SV_Target1; - float4 frag_color_2 : SV_Target2; - }; - - void frag_main() - { - frag_color_0 = float4(bright, 0.0f, 0.0f, 1.0f); - frag_color_1 = float4(0.0f, bright, 0.0f, 1.0f); - frag_color_2 = float4(0.0f, 0.0f, bright, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - bright = stage_input.bright; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color_0 = frag_color_0; - stage_output.frag_color_1 = frag_color_1; - stage_output.frag_color_2 = frag_color_2; - return stage_output; - } + static float4 frag_color_0; + static float bright; + static float4 frag_color_1; + static float4 frag_color_2; + + struct SPIRV_Cross_Input + { + float bright : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color_0 : SV_Target0; + float4 frag_color_1 : SV_Target1; + float4 frag_color_2 : SV_Target2; + }; + + void frag_main() + { + frag_color_0 = float4(bright, 0.0f, 0.0f, 1.0f); + frag_color_1 = float4(0.0f, bright, 0.0f, 1.0f); + frag_color_2 = float4(0.0f, 0.0f, bright, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + bright = stage_input.bright; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color_0 = frag_color_0; + stage_output.frag_color_1 = frag_color_1; + stage_output.frag_color_2 = frag_color_2; + return stage_output; + } */ @(private) -fs_offscreen_source_hlsl4 := [804]u8 { +fs_offscreen_source_hlsl5 := [804]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x30,0x3b,0x0a,0x73,0x74,0x61,0x74, 0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x62,0x72,0x69,0x67,0x68,0x74,0x3b, @@ -495,53 +516,53 @@ fs_offscreen_source_hlsl4 := [804]u8 { 0x0a,0x7d,0x0a,0x00, } /* - cbuffer fsq_params : register(b0) - { - float2 _36_offset : packoffset(c0); - }; - - - static float4 gl_Position; - static float2 pos; - static float2 uv0; - static float2 uv1; - static float2 uv2; - - struct SPIRV_Cross_Input - { - float2 pos : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float2 uv0 : TEXCOORD0; - float2 uv1 : TEXCOORD1; - float2 uv2 : TEXCOORD2; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f); - uv0 = pos + float2(_36_offset.x, 0.0f); - uv1 = pos + float2(0.0f, _36_offset.y); - uv2 = pos; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - pos = stage_input.pos; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.uv0 = uv0; - stage_output.uv1 = uv1; - stage_output.uv2 = uv2; - return stage_output; - } + cbuffer fsq_params : register(b0) + { + float2 _36_offset : packoffset(c0); + }; + + + static float4 gl_Position; + static float2 pos; + static float2 uv0; + static float2 uv1; + static float2 uv2; + + struct SPIRV_Cross_Input + { + float2 pos : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f); + uv0 = pos + float2(_36_offset.x, 0.0f); + uv1 = pos + float2(0.0f, _36_offset.y); + uv2 = pos; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + pos = stage_input.pos; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.uv0 = uv0; + stage_output.uv1 = uv1; + stage_output.uv2 = uv2; + return stage_output; + } */ @(private) -vs_fsq_source_hlsl4 := [879]u8 { +vs_fsq_source_hlsl5 := [879]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x66,0x73,0x71,0x5f,0x70,0x61,0x72,0x61, 0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30, 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x5f, @@ -599,46 +620,46 @@ vs_fsq_source_hlsl4 := [879]u8 { 0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - Texture2D tex0 : register(t0); - SamplerState smp : register(s0); - Texture2D tex1 : register(t1); - Texture2D tex2 : register(t2); - - static float2 uv0; - static float2 uv1; - static float2 uv2; - static float4 frag_color; - - struct SPIRV_Cross_Input - { - float2 uv0 : TEXCOORD0; - float2 uv1 : TEXCOORD1; - float2 uv2 : TEXCOORD2; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = float4((tex0.Sample(smp, uv0).xyz + tex1.Sample(smp, uv1).xyz) + tex2.Sample(smp, uv2).xyz, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - uv0 = stage_input.uv0; - uv1 = stage_input.uv1; - uv2 = stage_input.uv2; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + Texture2D tex0 : register(t0); + SamplerState smp : register(s0); + Texture2D tex1 : register(t1); + Texture2D tex2 : register(t2); + + static float2 uv0; + static float2 uv1; + static float2 uv2; + static float4 frag_color; + + struct SPIRV_Cross_Input + { + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = float4((tex0.Sample(smp, uv0).xyz + tex1.Sample(smp, uv1).xyz) + tex2.Sample(smp, uv2).xyz, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + uv0 = stage_input.uv0; + uv1 = stage_input.uv1; + uv2 = stage_input.uv2; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_fsq_source_hlsl4 := [818]u8 { +fs_fsq_source_hlsl5 := [818]u8 { 0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34, 0x3e,0x20,0x74,0x65,0x78,0x30,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65, 0x72,0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74, @@ -693,39 +714,39 @@ fs_fsq_source_hlsl4 := [818]u8 { 0x0a,0x00, } /* - static float4 gl_Position; - static float2 pos; - static float2 uv; - - struct SPIRV_Cross_Input - { - float2 pos : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float2 uv : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f); - uv = pos; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - pos = stage_input.pos; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.uv = uv; - return stage_output; - } + static float4 gl_Position; + static float2 pos; + static float2 uv; + + struct SPIRV_Cross_Input + { + float2 pos : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float2 uv : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = float4((pos * 2.0f) - 1.0f.xx, 0.5f, 1.0f); + uv = pos; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + pos = stage_input.pos; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.uv = uv; + return stage_output; + } */ @(private) -vs_dbg_source_hlsl4 := [555]u8 { +vs_dbg_source_hlsl5 := [555]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, 0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x32,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x73,0x74, @@ -763,38 +784,38 @@ vs_dbg_source_hlsl4 := [555]u8 { 0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - Texture2D tex : register(t0); - SamplerState smp : register(s0); - - static float4 frag_color; - static float2 uv; - - struct SPIRV_Cross_Input - { - float2 uv : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = float4(tex.Sample(smp, uv).xyz, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - uv = stage_input.uv; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + Texture2D tex : register(t0); + SamplerState smp : register(s0); + + static float4 frag_color; + static float2 uv; + + struct SPIRV_Cross_Input + { + float2 uv : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = float4(tex.Sample(smp, uv).xyz, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + uv = stage_input.uv; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_dbg_source_hlsl4 := [527]u8 { +fs_dbg_source_hlsl5 := [527]u8 { 0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34, 0x3e,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72, 0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74,0x61, @@ -830,36 +851,36 @@ fs_dbg_source_hlsl4 := [527]u8 { 0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct offscreen_params - { - float4x4 mvp; - }; - - struct main0_out - { - float bright [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 pos [[attribute(0)]]; - float bright0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant offscreen_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.pos; - out.bright = in.bright0; - return out; - } - + #include + #include + + using namespace metal; + + struct offscreen_params + { + float4x4 mvp; + }; + + struct main0_out + { + float bright [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 pos [[attribute(0)]]; + float bright0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant offscreen_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.pos; + out.bright = in.bright0; + return out; + } + */ @(private) vs_offscreen_source_metal_macos := [515]u8 { @@ -898,32 +919,32 @@ vs_offscreen_source_metal_macos := [515]u8 { 0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color_0 [[color(0)]]; - float4 frag_color_1 [[color(1)]]; - float4 frag_color_2 [[color(2)]]; - }; - - struct main0_in - { - float bright [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color_0 = float4(in.bright, 0.0, 0.0, 1.0); - out.frag_color_1 = float4(0.0, in.bright, 0.0, 1.0); - out.frag_color_2 = float4(0.0, 0.0, in.bright, 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color_0 [[color(0)]]; + float4 frag_color_1 [[color(1)]]; + float4 frag_color_2 [[color(2)]]; + }; + + struct main0_in + { + float bright [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color_0 = float4(in.bright, 0.0, 0.0, 1.0); + out.frag_color_1 = float4(0.0, in.bright, 0.0, 1.0); + out.frag_color_2 = float4(0.0, 0.0, in.bright, 1.0); + return out; + } + */ @(private) fs_offscreen_source_metal_macos := [533]u8 { @@ -963,39 +984,39 @@ fs_offscreen_source_metal_macos := [533]u8 { 0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct fsq_params - { - float2 offset; - }; - - struct main0_out - { - float2 uv0 [[user(locn0)]]; - float2 uv1 [[user(locn1)]]; - float2 uv2 [[user(locn2)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float2 pos [[attribute(0)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant fsq_params& _36 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0); - out.uv0 = in.pos + float2(_36.offset.x, 0.0); - out.uv1 = in.pos + float2(0.0, _36.offset.y); - out.uv2 = in.pos; - return out; - } - + #include + #include + + using namespace metal; + + struct fsq_params + { + float2 offset; + }; + + struct main0_out + { + float2 uv0 [[user(locn0)]]; + float2 uv1 [[user(locn1)]]; + float2 uv2 [[user(locn2)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float2 pos [[attribute(0)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant fsq_params& _36 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0); + out.uv0 = in.pos + float2(_36.offset.x, 0.0); + out.uv1 = in.pos + float2(0.0, _36.offset.y); + out.uv2 = in.pos; + return out; + } + */ @(private) vs_fsq_source_metal_macos := [653]u8 { @@ -1042,30 +1063,30 @@ vs_fsq_source_metal_macos := [653]u8 { 0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float2 uv0 [[user(locn0)]]; - float2 uv1 [[user(locn1)]]; - float2 uv2 [[user(locn2)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]], texture2d tex0 [[texture(0)]], texture2d tex1 [[texture(1)]], texture2d tex2 [[texture(2)]], sampler smp [[sampler(0)]]) - { - main0_out out = {}; - out.frag_color = float4((tex0.sample(smp, in.uv0).xyz + tex1.sample(smp, in.uv1).xyz) + tex2.sample(smp, in.uv2).xyz, 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float2 uv0 [[user(locn0)]]; + float2 uv1 [[user(locn1)]]; + float2 uv2 [[user(locn2)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]], texture2d tex0 [[texture(0)]], texture2d tex1 [[texture(1)]], texture2d tex2 [[texture(2)]], sampler smp [[sampler(0)]]) + { + main0_out out = {}; + out.frag_color = float4((tex0.sample(smp, in.uv0).xyz + tex1.sample(smp, in.uv1).xyz) + tex2.sample(smp, in.uv2).xyz, 1.0); + return out; + } + */ @(private) fs_fsq_source_metal_macos := [616]u8 { @@ -1110,30 +1131,30 @@ fs_fsq_source_metal_macos := [616]u8 { 0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float2 uv [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float2 pos [[attribute(0)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0); - out.uv = in.pos; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float2 uv [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float2 pos [[attribute(0)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.gl_Position = float4((in.pos * 2.0) - float2(1.0), 0.5, 1.0); + out.uv = in.pos; + return out; + } + */ @(private) vs_dbg_source_metal_macos := [404]u8 { @@ -1165,28 +1186,28 @@ vs_dbg_source_metal_macos := [404]u8 { 0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float2 uv [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) - { - main0_out out = {}; - out.frag_color = float4(tex.sample(smp, in.uv).xyz, 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float2 uv [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) + { + main0_out out = {}; + out.frag_color = float4(tex.sample(smp, in.uv).xyz, 1.0); + return out; + } + */ @(private) fs_dbg_source_metal_macos := [408]u8 { @@ -1219,12 +1240,13 @@ fs_dbg_source_metal_macos := [408]u8 { } dbg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "dbg_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "pos" - desc.vs.source = transmute(cstring)&vs_dbg_source_glsl330 + desc.vs.source = transmute(cstring)&vs_dbg_source_glsl430 desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_dbg_source_glsl330 + desc.fs.source = transmute(cstring)&fs_dbg_source_glsl430 desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -1236,16 +1258,15 @@ dbg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - desc.label = "dbg_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_dbg_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_dbg_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_dbg_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_dbg_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -1256,7 +1277,6 @@ dbg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "dbg_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_dbg_source_metal_macos @@ -1272,24 +1292,24 @@ dbg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "dbg_shader" } } return desc } fsq_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "fsq_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "pos" - desc.vs.source = transmute(cstring)&vs_fsq_source_glsl330 + desc.vs.source = transmute(cstring)&vs_fsq_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 16 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "fsq_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 1 - desc.fs.source = transmute(cstring)&fs_fsq_source_glsl330 + desc.fs.source = transmute(cstring)&fs_fsq_source_glsl430 desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -1317,18 +1337,17 @@ fsq_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[2].image_slot = 2 desc.fs.image_sampler_pairs[2].sampler_slot = 0 desc.fs.image_sampler_pairs[2].glsl_name = "tex2_smp" - desc.label = "fsq_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_fsq_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_fsq_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 16 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_fsq_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_fsq_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -1353,7 +1372,6 @@ fsq_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[2].used = true desc.fs.image_sampler_pairs[2].image_slot = 2 desc.fs.image_sampler_pairs[2].sampler_slot = 0 - desc.label = "fsq_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_fsq_source_metal_macos @@ -1385,42 +1403,40 @@ fsq_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[2].used = true desc.fs.image_sampler_pairs[2].image_slot = 2 desc.fs.image_sampler_pairs[2].sampler_slot = 0 - desc.label = "fsq_shader" } } return desc } offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "offscreen_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "pos" desc.attrs[1].name = "bright0" - desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl330 + desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "offscreen_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl330 + desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 desc.fs.entry = "main" - desc.label = "offscreen_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "offscreen_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos @@ -1429,7 +1445,6 @@ offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos desc.fs.entry = "main0" - desc.label = "offscreen_shader" } } return desc diff --git a/examples/noninterleaved/shader.odin b/examples/noninterleaved/shader.odin index 6c96047..cfc80fd 100644 --- a/examples/noninterleaved/shader.odin +++ b/examples/noninterleaved/shader.odin @@ -1,134 +1,138 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/noninterleaved/shader.glsl -o examples/noninterleaved/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/noninterleaved/shader.glsl -o examples/noninterleaved/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'noninterleaved': - Get shader desc: shd.noninterleaved_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_color0 = 1 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs - + ========= + Shader program: 'noninterleaved': + Get shader desc: noninterleaved_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_color0 => 1 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_position :: 0 ATTR_vs_color0 :: 1 SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; - color = color0; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; + color = color0; + } + */ @(private) -vs_source_glsl330 := [263]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_source_glsl430 := [284]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, - 0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c, - 0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, - 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33, - 0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20, - 0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72, - 0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, + 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [748]u8 { +vs_source_hlsl5 := [748]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -178,35 +182,35 @@ vs_source_hlsl4 := [748]u8 { 0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -237,36 +241,36 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [509]u8 { @@ -304,28 +308,28 @@ vs_source_metal_macos := [509]u8 { 0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -352,35 +356,34 @@ fs_source_metal_macos := [315]u8 { } noninterleaved_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "noninterleaved_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "noninterleaved_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "noninterleaved_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos @@ -389,7 +392,6 @@ noninterleaved_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "noninterleaved_shader" } } return desc diff --git a/examples/offscreen/shader.odin b/examples/offscreen/shader.odin index 71732f0..d6bea8e 100644 --- a/examples/offscreen/shader.odin +++ b/examples/offscreen/shader.odin @@ -1,249 +1,258 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/offscreen/shader.glsl -o examples/offscreen/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/offscreen/shader.glsl -o examples/offscreen/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'default': - Get shader desc: shd.default_shader_desc(sg.query_backend()); - Vertex shader: vs_default - Attribute slots: - ATTR_vs_default_position = 0 - ATTR_vs_default_normal = 1 - ATTR_vs_default_texcoord0 = 2 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs_default - Image 'tex': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex = 0 - Sampler 'smp': - Type: .FILTERING - Bind slot: SLOT_smp = 0 - Image Sampler Pair 'tex_smp': - Image: tex - Sampler: smp - - Shader program 'offscreen': - Get shader desc: shd.offscreen_shader_desc(sg.query_backend()); - Vertex shader: vs_offscreen - Attribute slots: - ATTR_vs_offscreen_position = 0 - ATTR_vs_offscreen_normal = 1 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs_offscreen - + ========= + Shader program: 'default': + Get shader desc: default_shader_desc(sg.query_backend()) + Vertex shader: vs_default + Attributes: + ATTR_vs_default_position => 0 + ATTR_vs_default_normal => 1 + ATTR_vs_default_texcoord0 => 2 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs_default + Image 'tex': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex => 0 + Sampler 'smp': + Type: .FILTERING + Bind slot: SLOT_smp => 0 + Image Sampler Pair 'tex_smp': + Image: tex + Sampler: smp + Shader program: 'offscreen': + Get shader desc: offscreen_shader_desc(sg.query_backend()) + Vertex shader: vs_offscreen + Attributes: + ATTR_vs_offscreen_position => 0 + ATTR_vs_offscreen_normal => 1 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs_offscreen */ -package main -import sg "../../sokol/gfx" -import m "../math" -ATTR_vs_offscreen_position :: 0 -ATTR_vs_offscreen_normal :: 1 ATTR_vs_default_position :: 0 ATTR_vs_default_normal :: 1 ATTR_vs_default_texcoord0 :: 2 +ATTR_vs_offscreen_position :: 0 +ATTR_vs_offscreen_normal :: 1 +SLOT_vs_params :: 0 SLOT_tex :: 0 SLOT_smp :: 0 -SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec4 position; - out vec4 nrm; - layout(location = 1) in vec4 normal; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; - nrm = normal; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 nrm; + layout(location = 1) in vec4 normal; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; + nrm = normal; + } + */ @(private) -vs_offscreen_source_glsl330 := [259]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_offscreen_source_glsl430 := [280]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72,0x6d,0x3b,0x0a,0x6c,0x61, - 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, - 0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x72,0x6d,0x61, - 0x6c,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a, - 0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f, - 0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32, - 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29, - 0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20, - 0x20,0x6e,0x72,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0x0a,0x7d, - 0x0a,0x0a,0x00, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72, + 0x6d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, + 0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, + 0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61, + 0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f, + 0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73, + 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x72,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 nrm; - - void main() - { - frag_color = vec4((nrm.xyz * 0.5) + vec3(0.5), 1.0); - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 nrm; + + void main() + { + frag_color = vec4((nrm.xyz * 0.5) + vec3(0.5), 1.0); + } + */ @(private) -fs_offscreen_source_glsl330 := [145]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_offscreen_source_glsl430 := [166]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x6e,0x72,0x6d,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, - 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x6e,0x72,0x6d,0x2e,0x78, - 0x79,0x7a,0x20,0x2a,0x20,0x30,0x2e,0x35,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33, - 0x28,0x30,0x2e,0x35,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a, - 0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x6e,0x72,0x6d,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61, + 0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28, + 0x6e,0x72,0x6d,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20,0x30,0x2e,0x35,0x29,0x20,0x2b, + 0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29, + 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec4 position; - out vec2 uv; - layout(location = 2) in vec2 texcoord0; - out vec4 nrm; - layout(location = 1) in vec4 normal; - - void main() - { - mat4 _22 = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]); - gl_Position = _22 * position; - uv = texcoord0; - nrm = _22 * normal; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec4 position; + layout(location = 1) out vec2 uv; + layout(location = 2) in vec2 texcoord0; + layout(location = 0) out vec4 nrm; + layout(location = 1) in vec4 normal; + + void main() + { + mat4 _22 = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]); + gl_Position = _22 * position; + uv = texcoord0; + nrm = _22 * normal; + } + */ @(private) -vs_default_source_glsl330 := [358]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_default_source_glsl430 := [400]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79, - 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32, - 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f, - 0x72,0x64,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72, - 0x6d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, - 0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61, - 0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x74,0x34,0x20, - 0x5f,0x32,0x32,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33, - 0x5d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x5f,0x32,0x32,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69, - 0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x74, - 0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x72, - 0x6d,0x20,0x3d,0x20,0x5f,0x32,0x32,0x20,0x2a,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c, - 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76, + 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74, + 0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, + 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72,0x6d,0x3b,0x0a,0x6c,0x61,0x79, + 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31, + 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c, + 0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x74,0x34,0x20,0x5f,0x32,0x32,0x20,0x3d,0x20, + 0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, + 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c, + 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x3b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x5f,0x32,0x32,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72, + 0x64,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6e,0x72,0x6d,0x20,0x3d,0x20,0x5f,0x32, + 0x32,0x20,0x2a,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + } /* - #version 330 - - uniform sampler2D tex_smp; - - in vec2 uv; - in vec4 nrm; - layout(location = 0) out vec4 frag_color; - - void main() - { - frag_color = vec4(texture(tex_smp, uv * vec2(20.0, 10.0)).xyz * (clamp(dot(nrm.xyz, vec3(0.57735025882720947265625, 0.57735025882720947265625, -0.57735025882720947265625)), 0.0, 1.0) * 2.0 + 0.25), 1.0); - } - + #version 430 + + layout(binding = 0) uniform sampler2D tex_smp; + + layout(location = 1) in vec2 uv; + layout(location = 0) in vec4 nrm; + layout(location = 0) out vec4 frag_color; + + void main() + { + frag_color = vec4(texture(tex_smp, uv * vec2(20.0, 10.0)).xyz * fma(clamp(dot(nrm.xyz, vec3(0.57735025882720947265625, 0.57735025882720947265625, -0.57735025882720947265625)), 0.0, 1.0), 2.0, 0.25), 1.0); + } + */ @(private) -fs_default_source_glsl330 := [336]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, - 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, - 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x32,0x20,0x75,0x76,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72, - 0x6d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, - 0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34, - 0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f, - 0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, - 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63, - 0x34,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d, - 0x70,0x2c,0x20,0x75,0x76,0x20,0x2a,0x20,0x76,0x65,0x63,0x32,0x28,0x32,0x30,0x2e, - 0x30,0x2c,0x20,0x31,0x30,0x2e,0x30,0x29,0x29,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20, - 0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x6e,0x72,0x6d,0x2e,0x78, - 0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x37,0x37,0x33,0x35, - 0x30,0x32,0x35,0x38,0x38,0x32,0x37,0x32,0x30,0x39,0x34,0x37,0x32,0x36,0x35,0x36, - 0x32,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,0x33,0x35,0x30,0x32,0x35,0x38,0x38, - 0x32,0x37,0x32,0x30,0x39,0x34,0x37,0x32,0x36,0x35,0x36,0x32,0x35,0x2c,0x20,0x2d, - 0x30,0x2e,0x35,0x37,0x37,0x33,0x35,0x30,0x32,0x35,0x38,0x38,0x32,0x37,0x32,0x30, - 0x39,0x34,0x37,0x32,0x36,0x35,0x36,0x32,0x35,0x29,0x29,0x2c,0x20,0x30,0x2e,0x30, - 0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x20,0x2b,0x20,0x30, - 0x2e,0x32,0x35,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, - +fs_default_source_glsl430 := [399]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x30, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x72,0x6d,0x3b, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64, + 0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72, + 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28, + 0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c, + 0x20,0x75,0x76,0x20,0x2a,0x20,0x76,0x65,0x63,0x32,0x28,0x32,0x30,0x2e,0x30,0x2c, + 0x20,0x31,0x30,0x2e,0x30,0x29,0x29,0x2e,0x78,0x79,0x7a,0x20,0x2a,0x20,0x66,0x6d, + 0x61,0x28,0x63,0x6c,0x61,0x6d,0x70,0x28,0x64,0x6f,0x74,0x28,0x6e,0x72,0x6d,0x2e, + 0x78,0x79,0x7a,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x37,0x37,0x33, + 0x35,0x30,0x32,0x35,0x38,0x38,0x32,0x37,0x32,0x30,0x39,0x34,0x37,0x32,0x36,0x35, + 0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x35,0x37,0x37,0x33,0x35,0x30,0x32,0x35,0x38, + 0x38,0x32,0x37,0x32,0x30,0x39,0x34,0x37,0x32,0x36,0x35,0x36,0x32,0x35,0x2c,0x20, + 0x2d,0x30,0x2e,0x35,0x37,0x37,0x33,0x35,0x30,0x32,0x35,0x38,0x38,0x32,0x37,0x32, + 0x30,0x39,0x34,0x37,0x32,0x36,0x35,0x36,0x32,0x35,0x29,0x29,0x2c,0x20,0x30,0x2e, + 0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x2c,0x20,0x32,0x2e,0x30,0x2c,0x20,0x30,0x2e, + 0x32,0x35,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 position; - static float4 nrm; - static float4 normal; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 normal : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 nrm : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - nrm = normal; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - normal = stage_input.normal; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.nrm = nrm; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 position; + static float4 nrm; + static float4 normal; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 normal : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 nrm : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + nrm = normal; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + normal = stage_input.normal; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.nrm = nrm; + return stage_output; + } */ @(private) -vs_offscreen_source_hlsl4 := [738]u8 { +vs_offscreen_source_hlsl5 := [738]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -293,35 +302,35 @@ vs_offscreen_source_hlsl4 := [738]u8 { 0x0a,0x00, } /* - static float4 frag_color; - static float4 nrm; - - struct SPIRV_Cross_Input - { - float4 nrm : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = float4((nrm.xyz * 0.5f) + 0.5f.xxx, 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - nrm = stage_input.nrm; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 nrm; + + struct SPIRV_Cross_Input + { + float4 nrm : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = float4((nrm.xyz * 0.5f) + 0.5f.xxx, 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + nrm = stage_input.nrm; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_offscreen_source_hlsl4 := [463]u8 { +fs_offscreen_source_hlsl5 := [463]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x6e,0x72,0x6d,0x3b,0x0a,0x0a,0x73,0x74, @@ -353,55 +362,55 @@ fs_offscreen_source_hlsl4 := [463]u8 { 0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 position; - static float2 uv; - static float2 texcoord0; - static float4 nrm; - static float4 normal; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 normal : TEXCOORD1; - float2 texcoord0 : TEXCOORD2; - }; - - struct SPIRV_Cross_Output - { - float4 nrm : TEXCOORD0; - float2 uv : TEXCOORD1; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - uv = texcoord0; - nrm = mul(normal, _19_mvp); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - texcoord0 = stage_input.texcoord0; - normal = stage_input.normal; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.uv = uv; - stage_output.nrm = nrm; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 position; + static float2 uv; + static float2 texcoord0; + static float4 nrm; + static float4 normal; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 normal : TEXCOORD1; + float2 texcoord0 : TEXCOORD2; + }; + + struct SPIRV_Cross_Output + { + float4 nrm : TEXCOORD0; + float2 uv : TEXCOORD1; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + uv = texcoord0; + nrm = mul(normal, _19_mvp); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + texcoord0 = stage_input.texcoord0; + normal = stage_input.normal; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.uv = uv; + stage_output.nrm = nrm; + return stage_output; + } */ @(private) -vs_default_source_hlsl4 := [941]u8 { +vs_default_source_hlsl5 := [941]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -463,41 +472,41 @@ vs_default_source_hlsl4 := [941]u8 { 0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - Texture2D tex : register(t0); - SamplerState smp : register(s0); - - static float2 uv; - static float4 nrm; - static float4 frag_color; - - struct SPIRV_Cross_Input - { - float4 nrm : TEXCOORD0; - float2 uv : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = float4(tex.Sample(smp, uv * float2(20.0f, 10.0f)).xyz * mad(clamp(dot(nrm.xyz, float3(0.57735025882720947265625f, 0.57735025882720947265625f, -0.57735025882720947265625f)), 0.0f, 1.0f), 2.0f, 0.25f), 1.0f); - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - uv = stage_input.uv; - nrm = stage_input.nrm; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + Texture2D tex : register(t0); + SamplerState smp : register(s0); + + static float2 uv; + static float4 nrm; + static float4 frag_color; + + struct SPIRV_Cross_Input + { + float4 nrm : TEXCOORD0; + float2 uv : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = float4(tex.Sample(smp, uv * float2(20.0f, 10.0f)).xyz * mad(clamp(dot(nrm.xyz, float3(0.57735025882720947265625f, 0.57735025882720947265625f, -0.57735025882720947265625f)), 0.0f, 1.0f), 2.0f, 0.25f), 1.0f); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + uv = stage_input.uv; + nrm = stage_input.nrm; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_default_source_hlsl4 := [769]u8 { +fs_default_source_hlsl5 := [769]u8 { 0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34, 0x3e,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72, 0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74,0x61, @@ -549,36 +558,36 @@ fs_default_source_hlsl4 := [769]u8 { 0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 nrm [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 normal [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - out.nrm = in.normal; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 nrm [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 normal [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + out.nrm = in.normal; + return out; + } + */ @(private) vs_offscreen_source_metal_macos := [505]u8 { @@ -616,28 +625,28 @@ vs_offscreen_source_metal_macos := [505]u8 { 0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 nrm [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = float4((in.nrm.xyz * 0.5) + float3(0.5), 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 nrm [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = float4((in.nrm.xyz * 0.5) + float3(0.5), 1.0); + return out; + } + */ @(private) fs_offscreen_source_metal_macos := [350]u8 { @@ -665,39 +674,39 @@ fs_offscreen_source_metal_macos := [350]u8 { 0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 nrm [[user(locn0)]]; - float2 uv [[user(locn1)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 normal [[attribute(1)]]; - float2 texcoord0 [[attribute(2)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - out.uv = in.texcoord0; - out.nrm = _19.mvp * in.normal; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 nrm [[user(locn0)]]; + float2 uv [[user(locn1)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 normal [[attribute(1)]]; + float2 texcoord0 [[attribute(2)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + out.uv = in.texcoord0; + out.nrm = _19.mvp * in.normal; + return out; + } + */ @(private) vs_default_source_metal_macos := [612]u8 { @@ -742,29 +751,29 @@ vs_default_source_metal_macos := [612]u8 { 0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 nrm [[user(locn0)]]; - float2 uv [[user(locn1)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) - { - main0_out out = {}; - out.frag_color = float4(tex.sample(smp, (in.uv * float2(20.0, 10.0))).xyz * fma(fast::clamp(dot(in.nrm.xyz, float3(0.57735025882720947265625, 0.57735025882720947265625, -0.57735025882720947265625)), 0.0, 1.0), 2.0, 0.25), 1.0); - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 nrm [[user(locn0)]]; + float2 uv [[user(locn1)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) + { + main0_out out = {}; + out.frag_color = float4(tex.sample(smp, (in.uv * float2(20.0, 10.0))).xyz * fma(fast::clamp(dot(in.nrm.xyz, float3(0.57735025882720947265625, 0.57735025882720947265625, -0.57735025882720947265625)), 0.0, 1.0), 2.0, 0.25), 1.0); + return out; + } + */ @(private) fs_default_source_metal_macos := [610]u8 { @@ -810,19 +819,20 @@ fs_default_source_metal_macos := [610]u8 { } default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "default_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "normal" desc.attrs[2].name = "texcoord0" - desc.vs.source = transmute(cstring)&vs_default_source_glsl330 + desc.vs.source = transmute(cstring)&vs_default_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_default_source_glsl330 + desc.fs.source = transmute(cstring)&fs_default_source_glsl430 desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -834,7 +844,6 @@ default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - desc.label = "default_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" @@ -843,13 +852,13 @@ default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.attrs[1].sem_index = 1 desc.attrs[2].sem_name = "TEXCOORD" desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_default_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_default_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_default_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_default_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -860,7 +869,6 @@ default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "default_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_default_source_metal_macos @@ -878,42 +886,40 @@ default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "default_shader" } } return desc } offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "offscreen_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "normal" - desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl330 + desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl330 + desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 desc.fs.entry = "main" - desc.label = "offscreen_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "offscreen_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos @@ -922,7 +928,6 @@ offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos desc.fs.entry = "main0" - desc.label = "offscreen_shader" } } return desc diff --git a/examples/quad/shader.odin b/examples/quad/shader.odin index c1d3665..8687ab1 100644 --- a/examples/quad/shader.odin +++ b/examples/quad/shader.odin @@ -1,113 +1,116 @@ +package main +import sg "../../sokol/gfx" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/quad/shader.glsl -o examples/quad/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/quad/shader.glsl -o examples/quad/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'quad': - Get shader desc: shd.quad_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_color0 = 1 - Fragment shader: fs - + ========= + Shader program: 'quad': + Get shader desc: quad_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_color0 => 1 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" ATTR_vs_position :: 0 ATTR_vs_color0 :: 1 /* - #version 330 - - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = position; - color = color0; - } - + #version 430 + + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = position; + color = color0; + } + */ @(private) -vs_source_glsl330 := [173]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +vs_source_glsl430 := [194]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, - 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, - 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, - 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = position; - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = position; + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [645]u8 { +vs_source_hlsl5 := [645]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, 0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, @@ -151,35 +154,35 @@ vs_source_hlsl4 := [645]u8 { 0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -210,31 +213,31 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.gl_Position = in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.gl_Position = in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [419]u8 { @@ -267,28 +270,28 @@ vs_source_metal_macos := [419]u8 { 0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -315,35 +318,33 @@ fs_source_metal_macos := [315]u8 { } quad_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "quad_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "quad_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "quad_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos desc.vs.entry = "main0" desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "quad_shader" } } return desc diff --git a/examples/shapes/shader.glsl b/examples/shapes/shader.glsl index 17934b3..670dad9 100644 --- a/examples/shapes/shader.glsl +++ b/examples/shapes/shader.glsl @@ -5,8 +5,8 @@ @vs vs uniform vs_params { - mat4 mvp; float draw_mode; + mat4 mvp; }; layout(location=0) in vec4 position; diff --git a/examples/shapes/shader.odin b/examples/shapes/shader.odin index 7f1a97a..65cb579 100644 --- a/examples/shapes/shader.odin +++ b/examples/shapes/shader.odin @@ -1,206 +1,210 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/shapes/shader.glsl -o examples/shapes/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/shapes/shader.glsl -o examples/shapes/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'shapes': - Get shader desc: shd.shapes_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_normal = 1 - ATTR_vs_texcoord = 2 - ATTR_vs_color0 = 3 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs - + ========= + Shader program: 'shapes': + Get shader desc: shapes_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_normal => 1 + ATTR_vs_texcoord => 2 + ATTR_vs_color0 => 3 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_position :: 0 ATTR_vs_normal :: 1 ATTR_vs_texcoord :: 2 ATTR_vs_color0 :: 3 SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, - draw_mode: f32, - _: [12]u8, +Vs_Params :: struct #align(16) { + using _: struct #packed { + draw_mode: f32, + _: [12]u8, + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[5]; - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec3 normal; - layout(location = 2) in vec2 texcoord; - layout(location = 3) in vec4 color0; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * position; - if (vs_params[4].x == 0.0) - { - color = vec4((normal + vec3(1.0)) * 0.5, 1.0); - } - else - { - if (vs_params[4].x == 1.0) - { - color = vec4(texcoord, 0.0, 1.0); - } - else - { - color = color0; - } - } - } - + #version 430 + + uniform vec4 vs_params[5]; + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec3 normal; + layout(location = 2) in vec2 texcoord; + layout(location = 3) in vec4 color0; + + void main() + { + gl_Position = mat4(vs_params[1], vs_params[2], vs_params[3], vs_params[4]) * position; + if (vs_params[0].x == 0.0) + { + color = vec4((normal + vec3(1.0)) * 0.5, 1.0); + } + else + { + if (vs_params[0].x == 1.0) + { + color = vec4(texcoord, 0.0, 1.0); + } + else + { + color = color0; + } + } + } + */ @(private) -vs_source_glsl330 := [600]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_source_glsl430 := [621]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x35,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, - 0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x6e,0x6f,0x72, - 0x6d,0x61,0x6c,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x3b,0x0a,0x6c,0x61,0x79,0x6f, - 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29, - 0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b, - 0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a, - 0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20, - 0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31, - 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c, - 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a, - 0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69, - 0x66,0x20,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x2e, - 0x78,0x20,0x3d,0x3d,0x20,0x30,0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, - 0x76,0x65,0x63,0x34,0x28,0x28,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x2b,0x20,0x76, - 0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x35,0x2c, - 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20, - 0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20, + 0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x33,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x3b, + 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e, + 0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70, + 0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x33,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b, + 0x34,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, 0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, - 0x73,0x5b,0x34,0x5d,0x2e,0x78,0x20,0x3d,0x3d,0x20,0x31,0x2e,0x30,0x29,0x0a,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63, - 0x34,0x28,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x2c,0x20,0x30,0x2e,0x30,0x2c, - 0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d, - 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, - 0x72,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20, - 0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x00, + 0x73,0x5b,0x30,0x5d,0x2e,0x78,0x20,0x3d,0x3d,0x20,0x30,0x2e,0x30,0x29,0x0a,0x20, + 0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x6e,0x6f,0x72,0x6d,0x61, + 0x6c,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x29,0x20,0x2a, + 0x20,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x76,0x73,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2e,0x78,0x20,0x3d,0x3d,0x20,0x31, + 0x2e,0x30,0x29,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20, + 0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x2c, + 0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x65,0x6c, + 0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - float _19_draw_mode : packoffset(c4); - }; - - - static float4 gl_Position; - static float4 position; - static float4 color; - static float3 normal; - static float2 texcoord; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float3 normal : TEXCOORD1; - float2 texcoord : TEXCOORD2; - float4 color0 : TEXCOORD3; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(position, _19_mvp); - if (_19_draw_mode == 0.0f) - { - color = float4((normal + 1.0f.xxx) * 0.5f, 1.0f); - } - else - { - if (_19_draw_mode == 1.0f) - { - color = float4(texcoord, 0.0f, 1.0f); - } - else - { - color = color0; - } - } - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - normal = stage_input.normal; - texcoord = stage_input.texcoord; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + cbuffer vs_params : register(b0) + { + float _19_draw_mode : packoffset(c0); + row_major float4x4 _19_mvp : packoffset(c1); + }; + + + static float4 gl_Position; + static float4 position; + static float4 color; + static float3 normal; + static float2 texcoord; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float3 normal : TEXCOORD1; + float2 texcoord : TEXCOORD2; + float4 color0 : TEXCOORD3; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(position, _19_mvp); + if (_19_draw_mode == 0.0f) + { + color = float4((normal + 1.0f.xxx) * 0.5f, 1.0f); + } + else + { + if (_19_draw_mode == 1.0f) + { + color = float4(texcoord, 0.0f, 1.0f); + } + else + { + color = color0; + } + } + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + normal = stage_input.normal; + texcoord = stage_input.texcoord; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [1238]u8 { +vs_source_hlsl5 := [1238]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, - 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, - 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76, - 0x70,0x20,0x3a,0x20,0x70,0x61,0x63,0x6b,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63, - 0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31, - 0x39,0x5f,0x64,0x72,0x61,0x77,0x5f,0x6d,0x6f,0x64,0x65,0x20,0x3a,0x20,0x70,0x61, - 0x63,0x6b,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x34,0x29,0x3b,0x0a,0x7d,0x3b, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x31,0x39, + 0x5f,0x64,0x72,0x61,0x77,0x5f,0x6d,0x6f,0x64,0x65,0x20,0x3a,0x20,0x70,0x61,0x63, + 0x6b,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x78,0x34,0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76,0x70,0x20,0x3a,0x20,0x70,0x61, + 0x63,0x6b,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x31,0x29,0x3b,0x0a,0x7d,0x3b, 0x0a,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34, 0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74, 0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x70,0x6f,0x73,0x69, @@ -273,35 +277,35 @@ vs_source_hlsl4 := [1238]u8 { 0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -332,53 +336,53 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - float draw_mode; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float3 normal [[attribute(1)]]; - float2 texcoord [[attribute(2)]]; - float4 color0 [[attribute(3)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.position; - if (_19.draw_mode == 0.0) - { - out.color = float4((in.normal + float3(1.0)) * 0.5, 1.0); - } - else - { - if (_19.draw_mode == 1.0) - { - out.color = float4(in.texcoord, 0.0, 1.0); - } - else - { - out.color = in.color0; - } - } - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float draw_mode; + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float3 normal [[attribute(1)]]; + float2 texcoord [[attribute(2)]]; + float4 color0 [[attribute(3)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.position; + if (_19.draw_mode == 0.0) + { + out.color = float4((in.normal + float3(1.0)) * 0.5, 1.0); + } + else + { + if (_19.draw_mode == 1.0) + { + out.color = float4(in.texcoord, 0.0, 1.0); + } + else + { + out.color = in.color0; + } + } + return out; + } + */ @(private) vs_source_metal_macos := [883]u8 { @@ -388,8 +392,8 @@ vs_source_metal_macos := [883]u8 { 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x76, 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, - 0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,0x20,0x6d,0x76,0x70,0x3b,0x0a,0x20,0x20,0x20, - 0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x64,0x72,0x61,0x77,0x5f,0x6d,0x6f,0x64,0x65, + 0x6c,0x6f,0x61,0x74,0x20,0x64,0x72,0x61,0x77,0x5f,0x6d,0x6f,0x64,0x65,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,0x20,0x6d,0x76,0x70, 0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69, 0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, 0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72, @@ -440,28 +444,28 @@ vs_source_metal_macos := [883]u8 { 0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -488,22 +492,22 @@ fs_source_metal_macos := [315]u8 { } shapes_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "shapes_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "normal" desc.attrs[2].name = "texcoord" desc.attrs[3].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 80 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 5 - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "shapes_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" @@ -514,15 +518,14 @@ shapes_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.attrs[2].sem_index = 2 desc.attrs[3].sem_name = "TEXCOORD" desc.attrs[3].sem_index = 3 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 80 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "shapes_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos @@ -531,7 +534,6 @@ shapes_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.vs.uniform_blocks[0].layout = .STD140 desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "shapes_shader" } } return desc diff --git a/examples/texcube/shader.odin b/examples/texcube/shader.odin index c90b1ec..587aa1c 100644 --- a/examples/texcube/shader.odin +++ b/examples/texcube/shader.odin @@ -1,170 +1,178 @@ +package main +import sg "../../sokol/gfx" +import m "../math" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/texcube/shader.glsl -o examples/texcube/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/texcube/shader.glsl -o examples/texcube/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'texcube': - Get shader desc: shd.texcube_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_pos = 0 - ATTR_vs_color0 = 1 - ATTR_vs_texcoord0 = 2 - Uniform block 'vs_params': - C struct: vs_params_t - Bind slot: SLOT_vs_params = 0 - Fragment shader: fs - Image 'tex': - Image Type: ._2D - Sample Type: .FLOAT - Multisampled: false - Bind slot: SLOT_tex = 0 - Sampler 'smp': - Type: .FILTERING - Bind slot: SLOT_smp = 0 - Image Sampler Pair 'tex_smp': - Image: tex - Sampler: smp - + ========= + Shader program: 'texcube': + Get shader desc: texcube_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_pos => 0 + ATTR_vs_color0 => 1 + ATTR_vs_texcoord0 => 2 + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Fragment shader: fs + Image 'tex': + Image type: ._2D + Sample type: .FLOAT + Multisampled: false + Bind slot: SLOT_tex => 0 + Sampler 'smp': + Type: .FILTERING + Bind slot: SLOT_smp => 0 + Image Sampler Pair 'tex_smp': + Image: tex + Sampler: smp */ -package main -import sg "../../sokol/gfx" -import m "../math" ATTR_vs_pos :: 0 ATTR_vs_color0 :: 1 ATTR_vs_texcoord0 :: 2 +SLOT_vs_params :: 0 SLOT_tex :: 0 SLOT_smp :: 0 -SLOT_vs_params :: 0 -Vs_Params :: struct { - mvp: m.mat4, +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, } /* - #version 330 - - uniform vec4 vs_params[4]; - layout(location = 0) in vec4 pos; - out vec4 color; - layout(location = 1) in vec4 color0; - out vec2 uv; - layout(location = 2) in vec2 texcoord0; - - void main() - { - gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * pos; - color = color0; - uv = texcoord0 * 5.0; - } - + #version 430 + + uniform vec4 vs_params[4]; + layout(location = 0) in vec4 pos; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + layout(location = 1) out vec2 uv; + layout(location = 2) in vec2 texcoord0; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * pos; + color = color0; + uv = texcoord0 * 5.0; + } + */ @(private) -vs_source_glsl330 := [332]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +vs_source_glsl430 := [374]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, - 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76, - 0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75, - 0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20, - 0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a, - 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79, - 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32, - 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f, - 0x72,0x64,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, - 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, - 0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, - 0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33, - 0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30, - 0x20,0x2a,0x20,0x35,0x2e,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75, + 0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20, + 0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, + 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x30,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76, + 0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, + 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c, + 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70, + 0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x20,0x3d, + 0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x20,0x2a,0x20,0x35,0x2e,0x30, + 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #version 330 - - uniform sampler2D tex_smp; - - layout(location = 0) out vec4 frag_color; - in vec2 uv; - in vec4 color; - - void main() - { - frag_color = texture(tex_smp, uv) * color; - } - + #version 430 + + layout(binding = 0) uniform sampler2D tex_smp; + + layout(location = 0) out vec4 frag_color; + layout(location = 1) in vec2 uv; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = texture(tex_smp, uv) * color; + } + */ @(private) -fs_source_glsl330 := [177]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, - 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, - 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, - 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, - 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a, - 0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74, - 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20, - 0x75,0x76,0x29,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a, - 0x00, +fs_source_glsl430 := [239]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x30, + 0x29,0x20,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65, + 0x72,0x32,0x44,0x20,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, + 0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f, + 0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, + 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78, + 0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76, + 0x29,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - cbuffer vs_params : register(b0) - { - row_major float4x4 _19_mvp : packoffset(c0); - }; - - - static float4 gl_Position; - static float4 pos; - static float4 color; - static float4 color0; - static float2 uv; - static float2 texcoord0; - - struct SPIRV_Cross_Input - { - float4 pos : TEXCOORD0; - float4 color0 : TEXCOORD1; - float2 texcoord0 : TEXCOORD2; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float2 uv : TEXCOORD1; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = mul(pos, _19_mvp); - color = color0; - uv = texcoord0 * 5.0f; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - pos = stage_input.pos; - color0 = stage_input.color0; - texcoord0 = stage_input.texcoord0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - stage_output.uv = uv; - return stage_output; - } + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + + static float4 gl_Position; + static float4 pos; + static float4 color; + static float4 color0; + static float2 uv; + static float2 texcoord0; + + struct SPIRV_Cross_Input + { + float4 pos : TEXCOORD0; + float4 color0 : TEXCOORD1; + float2 texcoord0 : TEXCOORD2; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float2 uv : TEXCOORD1; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(pos, _19_mvp); + color = color0; + uv = texcoord0 * 5.0f; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + pos = stage_input.pos; + color0 = stage_input.color0; + texcoord0 = stage_input.texcoord0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + stage_output.uv = uv; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [919]u8 { +vs_source_hlsl5 := [919]u8 { 0x63,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, 0x73,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29, 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72, @@ -225,41 +233,41 @@ vs_source_hlsl4 := [919]u8 { 0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - Texture2D tex : register(t0); - SamplerState smp : register(s0); - - static float4 frag_color; - static float2 uv; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - float2 uv : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = tex.Sample(smp, uv) * color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - uv = stage_input.uv; - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + Texture2D tex : register(t0); + SamplerState smp : register(s0); + + static float4 frag_color; + static float2 uv; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + float2 uv : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = tex.Sample(smp, uv) * color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + uv = stage_input.uv; + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [599]u8 { +fs_source_hlsl5 := [599]u8 { 0x54,0x65,0x78,0x74,0x75,0x72,0x65,0x32,0x44,0x3c,0x66,0x6c,0x6f,0x61,0x74,0x34, 0x3e,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65,0x72, 0x28,0x74,0x30,0x29,0x3b,0x0a,0x53,0x61,0x6d,0x70,0x6c,0x65,0x72,0x53,0x74,0x61, @@ -300,39 +308,39 @@ fs_source_hlsl4 := [599]u8 { 0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct vs_params - { - float4x4 mvp; - }; - - struct main0_out - { - float4 color [[user(locn0)]]; - float2 uv [[user(locn1)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 pos [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - float2 texcoord0 [[attribute(2)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) - { - main0_out out = {}; - out.gl_Position = _19.mvp * in.pos; - out.color = in.color0; - out.uv = in.texcoord0 * 5.0; - return out; - } - + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float2 uv [[user(locn1)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 pos [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + float2 texcoord0 [[attribute(2)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _19 [[buffer(0)]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * in.pos; + out.color = in.color0; + out.uv = in.texcoord0 * 5.0; + return out; + } + */ @(private) vs_source_metal_macos := [602]u8 { @@ -376,29 +384,29 @@ vs_source_metal_macos := [602]u8 { 0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - float2 uv [[user(locn1)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) - { - main0_out out = {}; - out.frag_color = tex.sample(smp, in.uv) * in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + float2 uv [[user(locn1)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]], texture2d tex [[texture(0)]], sampler smp [[sampler(0)]]) + { + main0_out out = {}; + out.frag_color = tex.sample(smp, in.uv) * in.color; + return out; + } + */ @(private) fs_source_metal_macos := [436]u8 { @@ -433,19 +441,20 @@ fs_source_metal_macos := [436]u8 { } texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "texcube_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "pos" desc.attrs[1].name = "color0" desc.attrs[2].name = "texcoord0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4; + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -457,7 +466,6 @@ texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - desc.label = "texcube_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" @@ -466,13 +474,13 @@ texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.attrs[1].sem_index = 1 desc.attrs[2].sem_name = "TEXCOORD" desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" desc.vs.uniform_blocks[0].size = 64 desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" desc.fs.images[0].used = true desc.fs.images[0].multisampled = false @@ -483,7 +491,6 @@ texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "texcube_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos @@ -501,7 +508,6 @@ texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc.fs.image_sampler_pairs[0].used = true desc.fs.image_sampler_pairs[0].image_slot = 0 desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.label = "texcube_shader" } } return desc diff --git a/examples/triangle/shader.odin b/examples/triangle/shader.odin index 94a4864..8313533 100644 --- a/examples/triangle/shader.odin +++ b/examples/triangle/shader.odin @@ -1,113 +1,116 @@ +package main +import sg "../../sokol/gfx" /* #version:1# (machine generated, don't edit!) Generated by sokol-shdc (https://github.com/floooh/sokol-tools) - Cmdline: sokol-shdc -i examples/triangle/shader.glsl -o examples/triangle/shader.odin -l glsl330:metal_macos:hlsl4 -f sokol_odin + Cmdline: + sokol-shdc -i examples/triangle/shader.glsl -o examples/triangle/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin Overview: - - Shader program 'triangle': - Get shader desc: shd.triangle_shader_desc(sg.query_backend()); - Vertex shader: vs - Attribute slots: - ATTR_vs_position = 0 - ATTR_vs_color0 = 1 - Fragment shader: fs - + ========= + Shader program: 'triangle': + Get shader desc: triangle_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + ATTR_vs_position => 0 + ATTR_vs_color0 => 1 + Fragment shader: fs */ -package main -import sg "../../sokol/gfx" ATTR_vs_position :: 0 ATTR_vs_color0 :: 1 /* - #version 330 - - layout(location = 0) in vec4 position; - out vec4 color; - layout(location = 1) in vec4 color0; - - void main() - { - gl_Position = position; - color = color0; - } - + #version 430 + + layout(location = 0) in vec4 position; + layout(location = 0) out vec4 color; + layout(location = 1) in vec4 color0; + + void main() + { + gl_Position = position; + color = color0; + } + */ @(private) -vs_source_glsl330 := [173]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +vs_source_glsl430 := [194]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, - 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, - 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20, - 0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, - 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, - 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, + 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69, + 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, + 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, + 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, } /* - #version 330 - - layout(location = 0) out vec4 frag_color; - in vec4 color; - - void main() - { - frag_color = color; - } - + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + */ @(private) -fs_source_glsl330 := [114]u8 { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, - 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20, - 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69, - 0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63, - 0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a, - 0x0a,0x00, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, } /* - static float4 gl_Position; - static float4 position; - static float4 color; - static float4 color0; - - struct SPIRV_Cross_Input - { - float4 position : TEXCOORD0; - float4 color0 : TEXCOORD1; - }; - - struct SPIRV_Cross_Output - { - float4 color : TEXCOORD0; - float4 gl_Position : SV_Position; - }; - - void vert_main() - { - gl_Position = position; - color = color0; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - position = stage_input.position; - color0 = stage_input.color0; - vert_main(); - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = gl_Position; - stage_output.color = color; - return stage_output; - } + static float4 gl_Position; + static float4 position; + static float4 color; + static float4 color0; + + struct SPIRV_Cross_Input + { + float4 position : TEXCOORD0; + float4 color0 : TEXCOORD1; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = position; + color = color0; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + position = stage_input.position; + color0 = stage_input.color0; + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } */ @(private) -vs_source_hlsl4 := [645]u8 { +vs_source_hlsl5 := [645]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c, 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69, 0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, @@ -151,35 +154,35 @@ vs_source_hlsl4 := [645]u8 { 0x3b,0x0a,0x7d,0x0a,0x00, } /* - static float4 frag_color; - static float4 color; - - struct SPIRV_Cross_Input - { - float4 color : TEXCOORD0; - }; - - struct SPIRV_Cross_Output - { - float4 frag_color : SV_Target0; - }; - - void frag_main() - { - frag_color = color; - } - - SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) - { - color = stage_input.color; - frag_main(); - SPIRV_Cross_Output stage_output; - stage_output.frag_color = frag_color; - return stage_output; - } + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } */ @(private) -fs_source_hlsl4 := [435]u8 { +fs_source_hlsl5 := [435]u8 { 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, @@ -210,31 +213,31 @@ fs_source_hlsl4 := [435]u8 { 0x7d,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 color [[user(locn0)]]; - float4 gl_Position [[position]]; - }; - - struct main0_in - { - float4 position [[attribute(0)]]; - float4 color0 [[attribute(1)]]; - }; - - vertex main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.gl_Position = in.position; - out.color = in.color0; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + struct main0_in + { + float4 position [[attribute(0)]]; + float4 color0 [[attribute(1)]]; + }; + + vertex main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.gl_Position = in.position; + out.color = in.color0; + return out; + } + */ @(private) vs_source_metal_macos := [419]u8 { @@ -267,28 +270,28 @@ vs_source_metal_macos := [419]u8 { 0x0a,0x0a,0x00, } /* - #include - #include - - using namespace metal; - - struct main0_out - { - float4 frag_color [[color(0)]]; - }; - - struct main0_in - { - float4 color [[user(locn0)]]; - }; - - fragment main0_out main0(main0_in in [[stage_in]]) - { - main0_out out = {}; - out.frag_color = in.color; - return out; - } - + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + */ @(private) fs_source_metal_macos := [315]u8 { @@ -315,35 +318,33 @@ fs_source_metal_macos := [315]u8 { } triangle_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc + desc.label = "triangle_shader" #partial switch backend { - case .GLCORE33: { + case .GLCORE: { desc.attrs[0].name = "position" desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl330 + desc.vs.source = transmute(cstring)&vs_source_glsl430 desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl330 + desc.fs.source = transmute(cstring)&fs_source_glsl430 desc.fs.entry = "main" - desc.label = "triangle_shader" } case .D3D11: { desc.attrs[0].sem_name = "TEXCOORD" desc.attrs[0].sem_index = 0 desc.attrs[1].sem_name = "TEXCOORD" desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl4 - desc.vs.d3d11_target = "vs_4_0" + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl4 - desc.fs.d3d11_target = "ps_4_0" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" desc.fs.entry = "main" - desc.label = "triangle_shader" } case .METAL_MACOS: { desc.vs.source = transmute(cstring)&vs_source_metal_macos desc.vs.entry = "main0" desc.fs.source = transmute(cstring)&fs_source_metal_macos desc.fs.entry = "main0" - desc.label = "triangle_shader" } } return desc diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 086c6cc..ee6d71a 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -113,6 +113,8 @@ foreign sokol_app_clib { wgpu_get_resolve_view :: proc() -> rawptr --- wgpu_get_depth_stencil_view :: proc() -> rawptr --- gl_get_framebuffer :: proc() -> u32 --- + gl_get_major_version :: proc() -> c.int --- + gl_get_minor_version :: proc() -> c.int --- android_get_native_activity :: proc() -> rawptr --- } diff --git a/sokol/build_clibs_linux.sh b/sokol/build_clibs_linux.sh index c06f4ff..073ff82 100755 --- a/sokol/build_clibs_linux.sh +++ b/sokol/build_clibs_linux.sh @@ -19,25 +19,25 @@ build_lib_x64_debug() { } # x64 + GL + Release -build_lib_x64_release sokol_log log/sokol_log_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app app/sokol_app_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time time/sokol_time_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_log log/sokol_log_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_gfx gfx/sokol_gfx_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_app app/sokol_app_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_glue glue/sokol_glue_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_time time/sokol_time_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_audio audio/sokol_audio_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_shape shape/sokol_shape_linux_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_gl gl/sokol_gl_linux_x64_gl_release SOKOL_GLCORE # x64 + GL + Debug -build_lib_x64_debug sokol_log log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_log log/sokol_log_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_gfx gfx/sokol_gfx_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_app app/sokol_app_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_glue glue/sokol_glue_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_time time/sokol_time_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_audio audio/sokol_audio_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_shape shape/sokol_shape_linux_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_gl gl/sokol_gl_linux_x64_gl_debug SOKOL_GLCORE rm *.o diff --git a/sokol/build_clibs_macos.sh b/sokol/build_clibs_macos.sh index eefcd4b..11fe402 100755 --- a/sokol/build_clibs_macos.sh +++ b/sokol/build_clibs_macos.sh @@ -81,47 +81,47 @@ build_lib_x64_debug sokol_shape shape/sokol_shape_macos_x64_metal_debug build_lib_x64_debug sokol_gl gl/sokol_gl_macos_x64_metal_debug SOKOL_METAL # ARM + GL + Release -build_lib_arm64_release sokol_log log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gfx gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_app app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_glue glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_time time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_audio audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_shape shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE33 -build_lib_arm64_release sokol_gl gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE33 +build_lib_arm64_release sokol_log log/sokol_log_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_gfx gfx/sokol_gfx_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_app app/sokol_app_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_glue glue/sokol_glue_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_time time/sokol_time_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_audio audio/sokol_audio_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_shape shape/sokol_shape_macos_arm64_gl_release SOKOL_GLCORE +build_lib_arm64_release sokol_gl gl/sokol_gl_macos_arm64_gl_release SOKOL_GLCORE # ARM + GL + Debug -build_lib_arm64_debug sokol_log log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gfx gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_app app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_glue glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_time time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_audio audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_shape shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE33 -build_lib_arm64_debug sokol_gl gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE33 +build_lib_arm64_debug sokol_log log/sokol_log_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_gfx gfx/sokol_gfx_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_app app/sokol_app_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_glue glue/sokol_glue_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_time time/sokol_time_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_audio audio/sokol_audio_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_debugtext debugtext/sokol_debugtext_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_shape shape/sokol_shape_macos_arm64_gl_debug SOKOL_GLCORE +build_lib_arm64_debug sokol_gl gl/sokol_gl_macos_arm64_gl_debug SOKOL_GLCORE # x64 + GL + Release -build_lib_x64_release sokol_log log/sokol_log_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gfx gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_app app/sokol_app_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_glue glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_time time/sokol_time_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_audio audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_shape shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE33 -build_lib_x64_release sokol_gl gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE33 +build_lib_x64_release sokol_log log/sokol_log_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_gfx gfx/sokol_gfx_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_app app/sokol_app_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_glue glue/sokol_glue_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_time time/sokol_time_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_audio audio/sokol_audio_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_shape shape/sokol_shape_macos_x64_gl_release SOKOL_GLCORE +build_lib_x64_release sokol_gl gl/sokol_gl_macos_x64_gl_release SOKOL_GLCORE # x64 + GL + Debug -build_lib_x64_debug sokol_log log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gfx gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_app app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_glue glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_time time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_audio audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_shape shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE33 -build_lib_x64_debug sokol_gl gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE33 +build_lib_x64_debug sokol_log log/sokol_log_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_gfx gfx/sokol_gfx_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_app app/sokol_app_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_glue glue/sokol_glue_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_time time/sokol_time_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_audio audio/sokol_audio_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_debugtext debugtext/sokol_debugtext_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_shape shape/sokol_shape_macos_x64_gl_debug SOKOL_GLCORE +build_lib_x64_debug sokol_gl gl/sokol_gl_macos_x64_gl_debug SOKOL_GLCORE rm *.o diff --git a/sokol/build_clibs_windows.cmd b/sokol/build_clibs_windows.cmd index 2d33813..f81e79e 100644 --- a/sokol/build_clibs_windows.cmd +++ b/sokol/build_clibs_windows.cmd @@ -18,14 +18,14 @@ for %%s in (%sources%) do ( REM GL Debug for %%s in (%sources%) do ( - cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c /Z7 + cl /c /D_DEBUG /DIMPL /DSOKOL_GLCORE c\sokol_%%s.c /Z7 lib /OUT:%%s\sokol_%%s_windows_x64_gl_debug.lib sokol_%%s.obj del sokol_%%s.obj ) REM GL Release for %%s in (%sources%) do ( - cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE33 c\sokol_%%s.c + cl /c /O2 /DNDEBUG /DIMPL /DSOKOL_GLCORE c\sokol_%%s.c lib /OUT:%%s\sokol_%%s_windows_x64_gl_release.lib sokol_%%s.obj del sokol_%%s.obj ) @@ -37,9 +37,9 @@ REM D3D11 Release DLL cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_D3D11 c\sokol.c /LD /MD /DLL /Fe:sokol_dll_windows_x64_d3d11_release.dll /link /INCREMENTAL:NO REM GL Debug DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE c\sokol.c /Z7 /LDd /MDd /DLL /Fe:sokol_dll_windows_x64_gl_debug.dll /link /INCREMENTAL:NO REM GL Release DLL -cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE33 c\sokol.c /LD /MD /DLL /Fe:sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO +cl /D_DEBUG /DIMPL /DSOKOL_DLL /DSOKOL_GLCORE c\sokol.c /LD /MD /DLL /Fe:sokol_dll_windows_x64_gl_release.dll /link /INCREMENTAL:NO del sokol.obj \ No newline at end of file diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index f5db5b7..649796c 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -18,7 +18,7 @@ the backend selected for sokol_gfx.h if both are used in the same project): - #define SOKOL_GLCORE33 + #define SOKOL_GLCORE #define SOKOL_GLES3 #define SOKOL_D3D11 #define SOKOL_METAL @@ -47,7 +47,7 @@ On Windows, SOKOL_DLL will define SOKOL_APP_API_DECL as __declspec(dllexport) or __declspec(dllimport) as needed. - On Linux, SOKOL_GLCORE33 can use either GLX or EGL. + On Linux, SOKOL_GLCORE can use either GLX or EGL. GLX is default, set SOKOL_FORCE_EGL to override. For example code, see https://github.com/floooh/sokol-samples/tree/master/sapp @@ -313,10 +313,15 @@ objects and values required for rendering. If sokol_app.h is not compiled with SOKOL_WGPU, these functions return null. - const uint32_t sapp_gl_get_framebuffer(void) + uint32_t sapp_gl_get_framebuffer(void) This returns the 'default framebuffer' of the GL context. Typically this will be zero. + int sapp_gl_get_major_version(void) + int sapp_gl_get_minor_version(void) + Returns the major and minor version of the GL context + (only for SOKOL_GLCORE, all other backends return zero here, including SOKOL_GLES3) + const void* sapp_android_get_native_activity(void); On Android, get the native activity ANativeActivity pointer, otherwise a null pointer. @@ -1892,6 +1897,10 @@ SOKOL_APP_API_DECL const void* sapp_wgpu_get_depth_stencil_view(void); /* GL: get framebuffer object */ SOKOL_APP_API_DECL uint32_t sapp_gl_get_framebuffer(void); +/* GL: get major version (only valid for desktop GL) */ +SOKOL_APP_API_DECL int sapp_gl_get_major_version(void); +/* GL: get minor version (only valid for desktop GL) */ +SOKOL_APP_API_DECL int sapp_gl_get_minor_version(void); /* Android: get native activity handle */ SOKOL_APP_API_DECL const void* sapp_android_get_native_activity(void); @@ -1959,8 +1968,8 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #if defined(TARGET_OS_IPHONE) && !TARGET_OS_IPHONE /* MacOS */ #define _SAPP_MACOS (1) - #if !defined(SOKOL_METAL) && !defined(SOKOL_GLCORE33) - #error("sokol_app.h: unknown 3D API selected for MacOS, must be SOKOL_METAL or SOKOL_GLCORE33") + #if !defined(SOKOL_METAL) && !defined(SOKOL_GLCORE) + #error("sokol_app.h: unknown 3D API selected for MacOS, must be SOKOL_METAL or SOKOL_GLCORE") #endif #else /* iOS or iOS Simulator */ @@ -1978,8 +1987,8 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #elif defined(_WIN32) /* Windows (D3D11 or GL) */ #define _SAPP_WIN32 (1) - #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE33) - #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11 or SOKOL_GLCORE33") + #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE) + #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11 or SOKOL_GLCORE") #endif #elif defined(__ANDROID__) /* Android */ @@ -1993,7 +2002,7 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #elif defined(__linux__) || defined(__unix__) /* Linux */ #define _SAPP_LINUX (1) - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) #if !defined(SOKOL_FORCE_EGL) #define _SAPP_GLX (1) #endif @@ -2003,13 +2012,13 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #include #include #else - #error("sokol_app.h: unknown 3D API selected for Linux, must be SOKOL_GLCORE33, SOKOL_GLES3") + #error("sokol_app.h: unknown 3D API selected for Linux, must be SOKOL_GLCORE, SOKOL_GLES3") #endif #else #error "sokol_app.h: Unknown platform" #endif -#if defined(SOKOL_GLCORE33) || defined(SOKOL_GLES3) +#if defined(SOKOL_GLCORE) || defined(SOKOL_GLES3) #define _SAPP_ANY_GL (1) #endif @@ -2399,11 +2408,11 @@ _SOKOL_PRIVATE double _sapp_timing_get_avg(_sapp_timing_t* t) { #if defined(SOKOL_METAL) @interface _sapp_macos_view : MTKView @end -#elif defined(SOKOL_GLCORE33) +#elif defined(SOKOL_GLCORE) @interface _sapp_macos_view : NSOpenGLView - (void)timerFired:(id)sender; @end -#endif // SOKOL_GLCORE33 +#endif // SOKOL_GLCORE typedef struct { uint32_t flags_changed_store; @@ -2545,7 +2554,7 @@ typedef struct { uint8_t raw_input_data[256]; } _sapp_win32_t; -#if defined(SOKOL_GLCORE33) +#if defined(SOKOL_GLCORE) #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 @@ -2605,7 +2614,7 @@ typedef struct { HWND msg_hwnd; HDC msg_dc; } _sapp_wgl_t; -#endif // SOKOL_GLCORE33 +#endif // SOKOL_GLCORE #endif // _SAPP_WIN32 @@ -2876,7 +2885,7 @@ typedef struct { _sapp_win32_t win32; #if defined(SOKOL_D3D11) _sapp_d3d11_t d3d11; - #elif defined(SOKOL_GLCORE33) + #elif defined(SOKOL_GLCORE) _sapp_wgl_t wgl; #endif #elif defined(_SAPP_ANDROID) @@ -3085,8 +3094,13 @@ _SOKOL_PRIVATE sapp_desc _sapp_desc_defaults(const sapp_desc* desc) { // (or expressed differently: zero is a valid value for gl_minor_version // and can't be used to indicate 'default') if (0 == res.gl_major_version) { - res.gl_major_version = 3; - res.gl_minor_version = 2; + #if defined(_SAPP_APPLE) + res.gl_major_version = 4; + res.gl_minor_version = 1; + #else + res.gl_major_version = 4; + res.gl_minor_version = 3; + #endif } res.html5_canvas_name = _sapp_def(res.html5_canvas_name, "canvas"); res.clipboard_size = _sapp_def(res.clipboard_size, 8192); @@ -3650,7 +3664,7 @@ _SOKOL_PRIVATE void _sapp_macos_update_dimensions(void) { const int cur_fb_height = (int)roundf(fb_size.height); const bool dim_changed = (_sapp.framebuffer_width != cur_fb_width) || (_sapp.framebuffer_height != cur_fb_height); - #elif defined(SOKOL_GLCORE33) + #elif defined(SOKOL_GLCORE) const int cur_fb_width = (int)roundf(bounds.size.width * _sapp.dpi_scale); const int cur_fb_height = (int)roundf(bounds.size.height * _sapp.dpi_scale); const bool dim_changed = (_sapp.framebuffer_width != cur_fb_width) || @@ -3892,7 +3906,7 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) { _sapp.macos.window.contentView = _sapp.macos.view; [_sapp.macos.window makeFirstResponder:_sapp.macos.view]; _sapp.macos.view.layer.magnificationFilter = kCAFilterNearest; - #elif defined(SOKOL_GLCORE33) + #elif defined(SOKOL_GLCORE) NSOpenGLPixelFormatAttribute attrs[32]; int i = 0; attrs[i++] = NSOpenGLPFAAccelerated; @@ -4124,7 +4138,7 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) { @end @implementation _sapp_macos_view -#if defined(SOKOL_GLCORE33) +#if defined(SOKOL_GLCORE) - (void)timerFired:(id)sender { _SOKOL_UNUSED(sender); [self setNeedsDisplay:YES]; @@ -4224,7 +4238,7 @@ _SOKOL_PRIVATE void _sapp_macos_poll_input_events(void) { // helper function to make GL context active static void _sapp_gl_make_current(void) { - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) [[_sapp.macos.view openGLContext] makeCurrentContext]; #endif } @@ -5945,7 +5959,7 @@ int main(int argc, char* argv[]) { // ██████ ███████ ██ ██ ███████ ███████ ██ ███████ ██ ██ ███████ // // >>gl helpers -#if defined(SOKOL_GLCORE33) +#if defined(SOKOL_GLCORE) typedef struct { int red_bits; int green_bits; @@ -6596,7 +6610,7 @@ _SOKOL_PRIVATE void _sapp_d3d11_present(bool do_not_wait) { #endif /* SOKOL_D3D11 */ -#if defined(SOKOL_GLCORE33) +#if defined(SOKOL_GLCORE) _SOKOL_PRIVATE void _sapp_wgl_init(void) { _sapp.wgl.opengl32 = LoadLibraryA("opengl32.dll"); if (!_sapp.wgl.opengl32) { @@ -6894,7 +6908,7 @@ _SOKOL_PRIVATE void _sapp_wgl_swap_buffers(void) { /* FIXME: DwmIsCompositionEnabled? (see GLFW) */ SwapBuffers(_sapp.win32.dc); } -#endif /* SOKOL_GLCORE33 */ +#endif /* SOKOL_GLCORE */ _SOKOL_PRIVATE bool _sapp_win32_wide_to_utf8(const wchar_t* src, char* dst, int dst_num_bytes) { SOKOL_ASSERT(src && dst && (dst_num_bytes > 1)); @@ -7311,7 +7325,7 @@ _SOKOL_PRIVATE void _sapp_win32_timing_measure(void) { // fallback if swap model isn't "flip-discard" or GetFrameStatistics failed for another reason _sapp_timing_measure(&_sapp.timing); #endif - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) _sapp_timing_measure(&_sapp.timing); #endif } @@ -7513,7 +7527,7 @@ _SOKOL_PRIVATE LRESULT CALLBACK _sapp_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM // present with DXGI_PRESENT_DO_NOT_WAIT _sapp_d3d11_present(true); #endif - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) _sapp_wgl_swap_buffers(); #endif /* NOTE: resizing the swap-chain during resize leads to a substantial @@ -7926,7 +7940,7 @@ _SOKOL_PRIVATE void _sapp_win32_run(const sapp_desc* desc) { _sapp_d3d11_create_device_and_swapchain(); _sapp_d3d11_create_default_render_target(); #endif - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) _sapp_wgl_init(); _sapp_wgl_load_extensions(); _sapp_wgl_create_context(); @@ -7954,7 +7968,7 @@ _SOKOL_PRIVATE void _sapp_win32_run(const sapp_desc* desc) { Sleep((DWORD)(16 * _sapp.swap_interval)); } #endif - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) _sapp_wgl_swap_buffers(); #endif /* check for window resized, this cannot happen in WM_SIZE as it explodes memory usage */ @@ -10947,7 +10961,7 @@ _SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { #if !defined(_SAPP_GLX) _SOKOL_PRIVATE void _sapp_egl_init(void) { -#if defined(SOKOL_GLCORE33) +#if defined(SOKOL_GLCORE) if (!eglBindAPI(EGL_OPENGL_API)) { _SAPP_PANIC(LINUX_EGL_BIND_OPENGL_API_FAILED); } @@ -10971,7 +10985,7 @@ _SOKOL_PRIVATE void _sapp_egl_init(void) { EGLint alpha_size = _sapp.desc.alpha ? 8 : 0; const EGLint config_attrs[] = { EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, #elif defined(SOKOL_GLES3) EGL_RENDERABLE_TYPE, EGL_OPENGL_ES3_BIT, @@ -11034,7 +11048,7 @@ _SOKOL_PRIVATE void _sapp_egl_init(void) { } EGLint ctx_attrs[] = { - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) EGL_CONTEXT_MAJOR_VERSION, _sapp.desc.gl_major_version, EGL_CONTEXT_MINOR_VERSION, _sapp.desc.gl_minor_version, EGL_CONTEXT_OPENGL_PROFILE_MASK, EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT, @@ -11753,6 +11767,24 @@ SOKOL_API_IMPL uint32_t sapp_gl_get_framebuffer(void) { #endif } +SOKOL_API_IMPL int sapp_gl_get_major_version(void) { + SOKOL_ASSERT(_sapp.valid); + #if defined(SOKOL_GLCORE) + return _sapp.desc.gl_major_version; + #else + return 0; + #endif +} + +SOKOL_API_IMPL int sapp_gl_get_minor_version(void) { + SOKOL_ASSERT(_sapp.valid); + #if defined(SOKOL_GLCORE) + return _sapp.desc.gl_minor_version; + #else + return 0; + #endif +} + SOKOL_API_IMPL const void* sapp_android_get_native_activity(void) { // NOTE: _sapp.valid is not asserted here because sapp_android_get_native_activity() // needs to be callable from within sokol_main() (see: https://github.com/floooh/sokol/issues/708) diff --git a/sokol/c/sokol_debugtext.h b/sokol/c/sokol_debugtext.h index 9e5062d..12ca7a6 100644 --- a/sokol/c/sokol_debugtext.h +++ b/sokol/c/sokol_debugtext.h @@ -17,7 +17,7 @@ platform-specific embedded shader code (these are the same defines as used by sokol_gfx.h and sokol_app.h): - SOKOL_GLCORE33 + SOKOL_GLCORE SOKOL_GLES3 SOKOL_D3D11 SOKOL_METAL @@ -2374,7 +2374,7 @@ static const uint8_t _sdtx_font_oric[2048] = { /* Embedded source code compiled with: - sokol-shdc -i debugtext.glsl -o debugtext.h -l glsl330:glsl300es:hlsl4:metal_macos:metal_ios:metal_sim:wgsl -b + sokol-shdc -i debugtext.glsl -o debugtext.h -l glsl410:glsl300es:hlsl4:metal_macos:metal_ios:metal_sim:wgsl -b (not that for Metal and D3D11 byte code, sokol-shdc must be run on macOS and Windows) @@ -2405,44 +2405,50 @@ static const uint8_t _sdtx_font_oric[2048] = { @program debugtext vs fs */ -#if defined(SOKOL_GLCORE33) -static const char _sdtx_vs_source_glsl330[298] = { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x6c,0x61, +#if defined(SOKOL_GLCORE) +static const uint8_t _sdtx_vs_source_glsl410[343] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x6c,0x61, 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, 0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f,0x73,0x69,0x74, - 0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76, - 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, - 0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74, - 0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65, - 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, - 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69, - 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, - 0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x2a,0x20, - 0x76,0x65,0x63,0x32,0x28,0x32,0x2e,0x30,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x29,0x20, - 0x2b,0x20,0x76,0x65,0x63,0x32,0x28,0x2d,0x31,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30, - 0x29,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20, - 0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30, - 0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f, - 0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x69,0x6f,0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x32,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76, + 0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d, + 0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50, + 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x66, + 0x6d,0x61,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x76,0x65,0x63, + 0x32,0x28,0x32,0x2e,0x30,0x2c,0x20,0x2d,0x32,0x2e,0x30,0x29,0x2c,0x20,0x76,0x65, + 0x63,0x32,0x28,0x2d,0x31,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x2c,0x20, + 0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75, + 0x76,0x20,0x3d,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72, + 0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; -static const char _sdtx_fs_source_glsl330[182] = { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +static const uint8_t _sdtx_fs_source_glsl410[224] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x75,0x76,0x3b,0x0a, - 0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74, - 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20, - 0x75,0x76,0x29,0x2e,0x78,0x78,0x78,0x78,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72, - 0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32, + 0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d, + 0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65, + 0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x29,0x2e,0x78,0x78, + 0x78,0x78,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + }; #elif defined(SOKOL_GLES3) -static const char _sdtx_vs_source_glsl300es[301] = { +static const uint8_t _sdtx_vs_source_glsl300es[301] = { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e, 0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x70,0x6f, @@ -2463,7 +2469,7 @@ static const char _sdtx_vs_source_glsl300es[301] = { 0x72,0x64,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; -static const char _sdtx_fs_source_glsl300es[255] = { +static const uint8_t _sdtx_fs_source_glsl300es[255] = { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, 0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69, @@ -3194,7 +3200,7 @@ static const uint8_t _sdtx_fs_bytecode_metal_ios[2825] = { 0x32,0x04,0x03,0x62,0x01,0x23,0x9f,0xd9,0x06,0x23,0x00,0x32,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static const char _sdtx_vs_source_metal_sim[577] = { +static const uint8_t _sdtx_vs_source_metal_sim[577] = { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, @@ -3233,7 +3239,7 @@ static const char _sdtx_vs_source_metal_sim[577] = { 0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a, 0x00, }; -static const char _sdtx_fs_source_metal_sim[441] = { +static const uint8_t _sdtx_fs_source_metal_sim[441] = { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, @@ -3351,7 +3357,7 @@ static const uint8_t _sdtx_fs_bytecode_hlsl4[608] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; #elif defined(SOKOL_WGPU) -static const char _sdtx_vs_source_wgsl[922] = { +static const uint8_t _sdtx_vs_source_wgsl[922] = { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, @@ -3411,17 +3417,17 @@ static const char _sdtx_vs_source_wgsl[922] = { 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x75,0x76,0x2c,0x20,0x63,0x6f, 0x6c,0x6f,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; -static const char _sdtx_fs_source_wgsl[663] = { +static const uint8_t _sdtx_fs_source_wgsl[663] = { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, 0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, 0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75, - 0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x33,0x32, + 0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x34,0x38, 0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x74,0x65,0x78,0x74, 0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67, 0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67, - 0x28,0x34,0x38,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73, + 0x28,0x36,0x34,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73, 0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, 0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x32,0x66, 0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20, @@ -3459,7 +3465,7 @@ static const char _sdtx_fs_source_wgsl[663] = { static const char* _sdtx_vs_src_dummy = ""; static const char* _sdtx_fs_src_dummy = ""; #else -#error "Please define one of SOKOL_GLCORE33, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND!" +#error "Please define one of SOKOL_GLCORE, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND!" #endif // ███████ ████████ ██████ ██ ██ ██████ ████████ ███████ @@ -3952,12 +3958,12 @@ static void _sdtx_setup_common(void) { shd_desc.fs.image_sampler_pairs[0].image_slot = 0; shd_desc.fs.image_sampler_pairs[0].sampler_slot = 0; shd_desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp"; - #if defined(SOKOL_GLCORE33) - shd_desc.vs.source = _sdtx_vs_source_glsl330; - shd_desc.fs.source = _sdtx_fs_source_glsl330; + #if defined(SOKOL_GLCORE) + shd_desc.vs.source = (const char*)_sdtx_vs_source_glsl410; + shd_desc.fs.source = (const char*)_sdtx_fs_source_glsl410; #elif defined(SOKOL_GLES3) - shd_desc.vs.source = _sdtx_vs_source_glsl300es; - shd_desc.fs.source = _sdtx_fs_source_glsl300es; + shd_desc.vs.source = (const char*)_sdtx_vs_source_glsl300es; + shd_desc.fs.source = (const char*)_sdtx_fs_source_glsl300es; #elif defined(SOKOL_METAL) shd_desc.vs.entry = "main0"; shd_desc.fs.entry = "main0"; @@ -3971,16 +3977,16 @@ static void _sdtx_setup_common(void) { shd_desc.fs.bytecode = SG_RANGE(_sdtx_fs_bytecode_metal_ios); break; default: - shd_desc.vs.source = _sdtx_vs_source_metal_sim; - shd_desc.fs.source = _sdtx_fs_source_metal_sim; + shd_desc.vs.source = (const char*)_sdtx_vs_source_metal_sim; + shd_desc.fs.source = (const char*)_sdtx_fs_source_metal_sim; break; } #elif defined(SOKOL_D3D11) shd_desc.vs.bytecode = SG_RANGE(_sdtx_vs_bytecode_hlsl4); shd_desc.fs.bytecode = SG_RANGE(_sdtx_fs_bytecode_hlsl4); #elif defined(SOKOL_WGPU) - shd_desc.vs.source = _sdtx_vs_source_wgsl; - shd_desc.fs.source = _sdtx_fs_source_wgsl; + shd_desc.vs.source = (const char*)_sdtx_vs_source_wgsl; + shd_desc.fs.source = (const char*)_sdtx_fs_source_wgsl; #else shd_desc.vs.source = _sdtx_vs_src_dummy; shd_desc.fs.source = _sdtx_fs_src_dummy; diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 7bf0454..4561299 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -17,7 +17,7 @@ In the same place define one of the following to select the rendering backend: - #define SOKOL_GLCORE33 + #define SOKOL_GLCORE #define SOKOL_GLES3 #define SOKOL_D3D11 #define SOKOL_METAL @@ -29,7 +29,7 @@ #include ... #include ... #define SOKOL_IMPL - #define SOKOL_GLCORE33 + #define SOKOL_GLCORE #include "sokol_gfx.h" The dummy backend replaces the platform-specific backend code with empty @@ -1516,6 +1516,7 @@ enum { SG_MAX_SHADERSTAGE_IMAGES = 12, SG_MAX_SHADERSTAGE_SAMPLERS = 8, SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS = 12, + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS = 8, SG_MAX_SHADERSTAGE_UBS = 4, SG_MAX_UB_MEMBERS = 16, SG_MAX_VERTEX_ATTRIBUTES = 16, @@ -1537,7 +1538,7 @@ typedef struct sg_color { float r, g, b, a; } sg_color; to get the currently active backend. */ typedef enum sg_backend { - SG_BACKEND_GLCORE33, + SG_BACKEND_GLCORE, SG_BACKEND_GLES3, SG_BACKEND_D3D11, SG_BACKEND_METAL_IOS, @@ -1700,6 +1701,7 @@ typedef struct sg_features { bool image_clamp_to_border; // border color and clamp-to-border UV-wrap mode is supported bool mrt_independent_blend_state; // multiple-render-target rendering can use per-render-target blend state bool mrt_independent_write_mask; // multiple-render-target rendering can use per-render-target color write masks + bool storage_buffer; // storage buffers are supported } sg_features; /* @@ -1798,6 +1800,7 @@ typedef enum sg_buffer_type { _SG_BUFFERTYPE_DEFAULT, // value 0 reserved for default-init SG_BUFFERTYPE_VERTEXBUFFER, SG_BUFFERTYPE_INDEXBUFFER, + SG_BUFFERTYPE_STORAGEBUFFER, _SG_BUFFERTYPE_NUM, _SG_BUFFERTYPE_FORCE_U32 = 0x7FFFFFFF } sg_buffer_type; @@ -2562,12 +2565,17 @@ typedef struct sg_pass { - 0..1 index buffer offsets - 0..N vertex shader stage images - 0..N vertex shader stage samplers + - 0..N vertex shader storage buffers - 0..N fragment shader stage images - 0..N fragment shader stage samplers + - 0..N fragment shader storage buffers - The max number of vertex buffer and shader stage images - are defined by the SG_MAX_VERTEX_BUFFERS and - SG_MAX_SHADERSTAGE_IMAGES configuration constants. + For the max number of bindings, see the constant definitions: + + - SG_MAX_VERTEX_BUFFERS + - SG_MAX_SHADERSTAGE_IMAGES + - SG_MAX_SHADERSTAGE_SAMPLERS + - SG_MAX_SHADERSTAGE_STORAGE_BUFFERS The optional buffer offsets can be used to put different unrelated chunks of vertex- and/or index-data into the same buffer objects. @@ -2575,6 +2583,7 @@ typedef struct sg_pass { typedef struct sg_stage_bindings { sg_image images[SG_MAX_SHADERSTAGE_IMAGES]; sg_sampler samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; + sg_buffer storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; } sg_stage_bindings; typedef struct sg_bindings { @@ -2846,6 +2855,11 @@ typedef struct sg_shader_uniform_block_desc { sg_shader_uniform_desc uniforms[SG_MAX_UB_MEMBERS]; } sg_shader_uniform_block_desc; +typedef struct sg_shader_storage_buffer_desc { + bool used; + bool readonly; +} sg_shader_storage_buffer_desc; + typedef struct sg_shader_image_desc { bool used; bool multisampled; @@ -2871,6 +2885,7 @@ typedef struct sg_shader_stage_desc { const char* entry; const char* d3d11_target; sg_shader_uniform_block_desc uniform_blocks[SG_MAX_SHADERSTAGE_UBS]; + sg_shader_storage_buffer_desc storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; sg_shader_image_desc images[SG_MAX_SHADERSTAGE_IMAGES]; sg_shader_sampler_desc samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; sg_shader_image_sampler_pair_desc image_sampler_pairs[SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS]; @@ -3301,6 +3316,7 @@ typedef struct sg_frame_stats_metal_bindings { uint32_t num_set_vertex_buffer; uint32_t num_set_vertex_texture; uint32_t num_set_vertex_sampler_state; + uint32_t num_set_fragment_buffer; uint32_t num_set_fragment_texture; uint32_t num_set_fragment_sampler_state; } sg_frame_stats_metal_bindings; @@ -3390,6 +3406,7 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(GL_FRAMEBUFFER_STATUS_INCOMPLETE_MULTISAMPLE, "framebuffer completeness check failed with GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE (gl)") \ _SG_LOGITEM_XMACRO(GL_FRAMEBUFFER_STATUS_UNKNOWN, "framebuffer completeness check failed (unknown reason) (gl)") \ _SG_LOGITEM_XMACRO(D3D11_CREATE_BUFFER_FAILED, "CreateBuffer() failed (d3d11)") \ + _SG_LOGITEM_XMACRO(D3D11_CREATE_BUFFER_SRV_FAILED, "CreateShaderResourceView() failed for storage buffer (d3d11)") \ _SG_LOGITEM_XMACRO(D3D11_CREATE_DEPTH_TEXTURE_UNSUPPORTED_PIXEL_FORMAT, "pixel format not supported for depth-stencil texture (d3d11)") \ _SG_LOGITEM_XMACRO(D3D11_CREATE_DEPTH_TEXTURE_FAILED, "CreateTexture2D() failed for depth-stencil texture (d3d11)") \ _SG_LOGITEM_XMACRO(D3D11_CREATE_2D_TEXTURE_UNSUPPORTED_PIXEL_FORMAT, "pixel format not supported for 2d-, cube- or array-texture (d3d11)") \ @@ -3436,6 +3453,7 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(WGPU_CREATE_SHADER_MODULE_FAILED, "wgpuDeviceCreateShaderModule() failed") \ _SG_LOGITEM_XMACRO(WGPU_SHADER_TOO_MANY_IMAGES, "shader uses too many sampled images on shader stage (wgpu)") \ _SG_LOGITEM_XMACRO(WGPU_SHADER_TOO_MANY_SAMPLERS, "shader uses too many samplers on shader stage (wgpu)") \ + _SG_LOGITEM_XMACRO(WGPU_SHADER_TOO_MANY_STORAGEBUFFERS, "shader uses too many storage buffer bindings on shader stage (wgpu)") \ _SG_LOGITEM_XMACRO(WGPU_SHADER_CREATE_BINDGROUP_LAYOUT_FAILED, "wgpuDeviceCreateBindGroupLayout() for shader stage failed") \ _SG_LOGITEM_XMACRO(WGPU_CREATE_PIPELINE_LAYOUT_FAILED, "wgpuDeviceCreatePipelineLayout() failed") \ _SG_LOGITEM_XMACRO(WGPU_CREATE_RENDER_PIPELINE_FAILED, "wgpuDeviceCreateRenderPipeline() failed") \ @@ -3480,6 +3498,8 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_BUFFERDESC_DATA, "immutable buffers must be initialized with data (sg_buffer_desc.data.ptr and sg_buffer_desc.data.size)") \ _SG_LOGITEM_XMACRO(VALIDATE_BUFFERDESC_DATA_SIZE, "immutable buffer data size differs from buffer size") \ _SG_LOGITEM_XMACRO(VALIDATE_BUFFERDESC_NO_DATA, "dynamic/stream usage buffers cannot be initialized with data") \ + _SG_LOGITEM_XMACRO(VALIDATE_BUFFERDESC_STORAGEBUFFER_SUPPORTED, "storage buffers not supported by the backend 3D API (requires OpenGL >= 4.3)") \ + _SG_LOGITEM_XMACRO(VALIDATE_BUFFERDESC_STORAGEBUFFER_SIZE_MULTIPLE_4, "size of storage buffers must be a multiple of 4") \ _SG_LOGITEM_XMACRO(VALIDATE_IMAGEDATA_NODATA, "sg_image_data: no data (.ptr and/or .size is zero)") \ _SG_LOGITEM_XMACRO(VALIDATE_IMAGEDATA_DATA_SIZE, "sg_image_data: data size doesn't match expected surface size") \ _SG_LOGITEM_XMACRO(VALIDATE_IMAGEDESC_CANARY, "sg_image_desc not initialized") \ @@ -3513,6 +3533,8 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_UB_SIZE_MISMATCH, "size of uniform block members doesn't match uniform block size") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_UB_ARRAY_COUNT, "uniform array count must be >= 1") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_UB_STD140_ARRAY_TYPE, "uniform arrays only allowed for FLOAT4, INT4, MAT4 in std140 layout") \ + _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_NO_CONT_STORAGEBUFFERS, "shader stage storage buffers must occupy continuous slots (sg_shader_desc.vs|fs.storage_buffers[])") \ + _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_STORAGEBUFFER_READONLY, "shader stage storage buffers must be readonly (sg_shader_desc.vs|fs.storage_buffers[].readonly)") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_NO_CONT_IMAGES, "shader stage images must occupy continuous slots (sg_shader_desc.vs|fs.images[])") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_NO_CONT_SAMPLERS, "shader stage samplers must occupy continuous slots (sg_shader_desc.vs|fs.samplers[])") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_IMAGE_SAMPLER_PAIR_IMAGE_SLOT_OUT_OF_RANGE, "shader stage: image-sampler-pair image slot index is out of range (sg_shader_desc.vs|fs.image_sampler_pairs[].image_slot)") \ @@ -3526,11 +3548,10 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_IMAGE_NOT_REFERENCED_BY_IMAGE_SAMPLER_PAIRS, "shader stage: one or more images are note referenced by (sg_shader_desc.vs|fs.image_sampler_pairs[].image_slot)") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_SAMPLER_NOT_REFERENCED_BY_IMAGE_SAMPLER_PAIRS, "shader stage: one or more samplers are not referenced by image-sampler-pairs (sg_shader_desc.vs|fs.image_sampler_pairs[].sampler_slot)") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_NO_CONT_IMAGE_SAMPLER_PAIRS, "shader stage image-sampler-pairs must occupy continuous slots (sg_shader_desc.vs|fs.image_samplers[])") \ - _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_ATTR_SEMANTICS, "D3D11 backend requires vertex attribute semantics") \ _SG_LOGITEM_XMACRO(VALIDATE_SHADERDESC_ATTR_STRING_TOO_LONG, "vertex attribute name/semantic string too long (max len 16)") \ _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_CANARY, "sg_pipeline_desc not initialized") \ _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_SHADER, "sg_pipeline_desc.shader missing or invalid") \ - _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_NO_ATTRS, "sg_pipeline_desc.layout.attrs is empty or not continuous") \ + _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_NO_CONT_ATTRS, "sg_pipeline_desc.layout.attrs is not continuous") \ _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_LAYOUT_STRIDE4, "sg_pipeline_desc.layout.buffers[].stride must be multiple of 4") \ _SG_LOGITEM_XMACRO(VALIDATE_PIPELINEDESC_ATTR_SEMANTICS, "D3D11 missing vertex attribute semantics in shader") \ _SG_LOGITEM_XMACRO(VALIDATE_ATTACHMENTSDESC_CANARY, "sg_attachments_desc not initialized") \ @@ -3634,6 +3655,10 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_EXPECTED_NONFILTERING_SAMPLER, "sg_apply_bindings: shader expected SG_SAMPLERTYPE_NONFILTERING on vertex stage, but sampler has SG_FILTER_LINEAR filters") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_UNEXPECTED_SAMPLER_BINDING, "sg_apply_bindings: unexpected sampler binding on vertex stage") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_SMP_EXISTS, "sg_apply_bindings: sampler bound to vertex stage no longer alive") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_EXPECTED_STORAGEBUFFER_BINDING, "sg_apply_bindings: storage buffer binding on vertex stage is missing or the buffer handle is invalid") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_STORAGEBUFFER_EXISTS, "sg_apply_bindings: storage buffer bound to vertex stage no longer alive") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_STORAGEBUFFER_BINDING_BUFFERTYPE, "sg_apply_bindings: buffer bound to vertex stage storage buffer slot is not of type storage buffer") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_VS_UNEXPECTED_STORAGEBUFFER_BINDING, "sg_apply_bindings: unexpected storage buffer binding on vertex stage") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_EXPECTED_IMAGE_BINDING, "sg_apply_bindings: image binding on fragment stage is missing or the image handle is invalid") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_IMG_EXISTS, "sg_apply_bindings: image bound to fragment stage no longer alive") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_IMAGE_TYPE_MISMATCH, "sg_apply_bindings: type of image bound to fragment stage doesn't match shader desc") \ @@ -3647,6 +3672,10 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_EXPECTED_NONFILTERING_SAMPLER, "sg_apply_bindings: shader expected SG_SAMPLERTYPE_NONFILTERING on fragment stage, but sampler has SG_FILTER_LINEAR filters") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_UNEXPECTED_SAMPLER_BINDING, "sg_apply_bindings: unexpected sampler binding on fragment stage") \ _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_SMP_EXISTS, "sg_apply_bindings: sampler bound to fragment stage no longer alive") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_EXPECTED_STORAGEBUFFER_BINDING, "sg_apply_bindings: storage buffer binding on fragment stage is missing or the buffer handle is invalid") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_STORAGEBUFFER_EXISTS, "sg_apply_bindings: storage buffer bound to fragment stage no longer alive") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_STORAGEBUFFER_BINDING_BUFFERTYPE, "sg_apply_bindings: buffer bound to frahment stage storage buffer slot is not of type storage buffer") \ + _SG_LOGITEM_XMACRO(VALIDATE_ABND_FS_UNEXPECTED_STORAGEBUFFER_BINDING, "sg_apply_bindings: unexpected storage buffer binding on fragment stage") \ _SG_LOGITEM_XMACRO(VALIDATE_AUB_NO_PIPELINE, "sg_apply_uniforms: must be called after sg_apply_pipeline()") \ _SG_LOGITEM_XMACRO(VALIDATE_AUB_NO_UB_AT_SLOT, "sg_apply_uniforms: no uniform block declaration at this shader stage UB slot") \ _SG_LOGITEM_XMACRO(VALIDATE_AUB_SIZE, "sg_apply_uniforms: data size doesn't match declared uniform block size") \ @@ -3774,11 +3803,17 @@ typedef struct sg_wgpu_environment { const void* device; // WGPUDevice } sg_wgpu_environment; +typedef struct sg_gl_environment { + int major_version; + int minor_version; +} sg_gl_environment; + typedef struct sg_environment { sg_environment_defaults defaults; sg_metal_environment metal; sg_d3d11_environment d3d11; sg_wgpu_environment wgpu; + sg_gl_environment gl; } sg_environment; /* @@ -4202,8 +4237,8 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #ifdef SOKOL_GFX_IMPL #define SOKOL_GFX_IMPL_INCLUDED (1) -#if !(defined(SOKOL_GLCORE33)||defined(SOKOL_GLES3)||defined(SOKOL_D3D11)||defined(SOKOL_METAL)||defined(SOKOL_WGPU)||defined(SOKOL_DUMMY_BACKEND)) -#error "Please select a backend with SOKOL_GLCORE33, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND" +#if !(defined(SOKOL_GLCORE)||defined(SOKOL_GLES3)||defined(SOKOL_D3D11)||defined(SOKOL_METAL)||defined(SOKOL_WGPU)||defined(SOKOL_DUMMY_BACKEND)) +#error "Please select a backend with SOKOL_GLCORE, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND" #endif #if defined(SOKOL_MALLOC) || defined(SOKOL_CALLOC) || defined(SOKOL_FREE) #error "SOKOL_MALLOC/CALLOC/FREE macros are no longer supported, please use sg_desc.allocator to override memory allocation functions" @@ -4320,13 +4355,13 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #if defined(__EMSCRIPTEN__) #include #endif -#elif defined(SOKOL_GLCORE33) || defined(SOKOL_GLES3) +#elif defined(SOKOL_GLCORE) || defined(SOKOL_GLES3) #define _SOKOL_ANY_GL (1) // include platform specific GL headers (or on Win32: use an embedded GL loader) #if !defined(SOKOL_EXTERNAL_GL_LOADER) #if defined(_WIN32) - #if defined(SOKOL_GLCORE33) && !defined(SOKOL_EXTERNAL_GL_LOADER) + #if defined(SOKOL_GLCORE) && !defined(SOKOL_EXTERNAL_GL_LOADER) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -4353,7 +4388,7 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #include #endif #elif defined(__linux__) || defined(__unix__) - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) #define GL_GLEXT_PROTOTYPES #include #else @@ -4725,6 +4760,12 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #endif #endif +// make some GL constants generally available to simplify compilation, +// use of those constants will be filtered by runtime flags +#ifndef GL_SHADER_STORAGE_BUFFER +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#endif + // ███████ ████████ ██████ ██ ██ ██████ ████████ ███████ // ██ ██ ██ ██ ██ ██ ██ ██ ██ // ███████ ██ ██████ ██ ██ ██ ██ ███████ @@ -4876,6 +4917,11 @@ typedef struct { size_t size; } _sg_shader_uniform_block_t; +typedef struct { + bool used; + bool readonly; +} _sg_shader_storage_buffer_t; + typedef struct { sg_image_type image_type; sg_image_sample_type sample_type; @@ -4894,10 +4940,12 @@ typedef struct { typedef struct { int num_uniform_blocks; + int num_storage_buffers; int num_images; int num_samplers; int num_image_samplers; _sg_shader_uniform_block_t uniform_blocks[SG_MAX_SHADERSTAGE_UBS]; + _sg_shader_storage_buffer_t storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; _sg_shader_image_t images[SG_MAX_SHADERSTAGE_IMAGES]; _sg_shader_sampler_t samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; _sg_shader_image_sampler_t image_samplers[SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS]; @@ -4952,6 +5000,16 @@ _SOKOL_PRIVATE void _sg_shader_common_init(_sg_shader_common_t* cmn, const sg_sh stage->image_samplers[img_smp_index].sampler_slot = img_smp_desc->sampler_slot; stage->num_image_samplers++; } + SOKOL_ASSERT(stage->num_storage_buffers == 0); + for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; sbuf_index++) { + const sg_shader_storage_buffer_desc* sbuf_desc = &stage_desc->storage_buffers[sbuf_index]; + if (!sbuf_desc->used) { + break; + } + stage->storage_buffers[sbuf_index].used = sbuf_desc->used; + stage->storage_buffers[sbuf_index].readonly = sbuf_desc->readonly; + stage->num_storage_buffers++; + } } } @@ -5081,6 +5139,10 @@ typedef struct { typedef _sg_dummy_attachments_t _sg_attachments_t; #elif defined(_SOKOL_ANY_GL) + +#define _SG_GL_TEXTURE_SAMPLER_CACHE_SIZE (SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS * SG_NUM_SHADER_STAGES) +#define _SG_GL_STORAGEBUFFER_STAGE_INDEX_PITCH (16) + typedef struct { _sg_slot_t slot; _sg_buffer_common_t cmn; @@ -5206,8 +5268,6 @@ typedef struct { GLuint sampler; } _sg_gl_cache_texture_sampler_bind_slot; -#define _SG_GL_TEXTURE_SAMPLER_CACHE_SIZE (SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS * SG_NUM_SHADER_STAGES) - typedef struct { sg_depth_state depth; sg_stencil_state stencil; @@ -5222,8 +5282,11 @@ typedef struct { _sg_gl_cache_attr_t attrs[SG_MAX_VERTEX_ATTRIBUTES]; GLuint vertex_buffer; GLuint index_buffer; + GLuint storage_buffer; // general bind point + GLuint stage_storage_buffers[SG_NUM_SHADER_STAGES][SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; GLuint stored_vertex_buffer; GLuint stored_index_buffer; + GLuint stored_storage_buffer; GLuint prog; _sg_gl_cache_texture_sampler_bind_slot texture_samplers[_SG_GL_TEXTURE_SAMPLER_CACHE_SIZE]; _sg_gl_cache_texture_sampler_bind_slot stored_texture_sampler; @@ -5256,6 +5319,7 @@ typedef struct { _sg_buffer_common_t cmn; struct { ID3D11Buffer* buf; + ID3D11ShaderResourceView* srv; } d3d11; } _sg_d3d11_buffer_t; typedef _sg_d3d11_buffer_t _sg_buffer_t; @@ -5471,6 +5535,8 @@ typedef struct { sg_image cur_fs_image_ids[SG_MAX_SHADERSTAGE_IMAGES]; sg_sampler cur_vs_sampler_ids[SG_MAX_SHADERSTAGE_SAMPLERS]; sg_sampler cur_fs_sampler_ids[SG_MAX_SHADERSTAGE_SAMPLERS]; + sg_buffer cur_vs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + sg_buffer cur_fs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; } _sg_mtl_state_cache_t; typedef struct { @@ -5498,6 +5564,7 @@ typedef struct { #define _SG_WGPU_NUM_BINDGROUPS (2) // 0: uniforms, 1: images and sampler on both shader stages #define _SG_WGPU_UNIFORM_BINDGROUP_INDEX (0) #define _SG_WGPU_IMAGE_SAMPLER_BINDGROUP_INDEX (1) +#define _SG_WGPU_MAX_BINDGROUP_ENTRIES (SG_NUM_SHADER_STAGES * (SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)) typedef struct { _sg_slot_t slot; @@ -5586,7 +5653,7 @@ typedef struct { uint32_t id; } _sg_wgpu_bindgroup_handle_t; -#define _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS (1 + SG_NUM_SHADER_STAGES * (SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS)) +#define _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS (1 + _SG_WGPU_MAX_BINDGROUP_ENTRIES) typedef struct { uint64_t hash; uint32_t items[_SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS]; @@ -5672,16 +5739,20 @@ typedef struct { int num_vbs; int num_vs_imgs; int num_vs_smps; + int num_vs_sbufs; int num_fs_imgs; int num_fs_smps; + int num_fs_sbufs; int vb_offsets[SG_MAX_VERTEX_BUFFERS]; int ib_offset; _sg_buffer_t* vbs[SG_MAX_VERTEX_BUFFERS]; _sg_buffer_t* ib; _sg_image_t* vs_imgs[SG_MAX_SHADERSTAGE_IMAGES]; _sg_sampler_t* vs_smps[SG_MAX_SHADERSTAGE_SAMPLERS]; + _sg_buffer_t* vs_sbufs[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; _sg_image_t* fs_imgs[SG_MAX_SHADERSTAGE_IMAGES]; _sg_sampler_t* fs_smps[SG_MAX_SHADERSTAGE_SAMPLERS]; + _sg_buffer_t* fs_sbufs[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; } _sg_bindings_t; typedef struct { @@ -5711,7 +5782,6 @@ typedef struct { } swapchain; } cur_pass; sg_pipeline cur_pipeline; - bool apply_bindings_called; bool next_draw_valid; #if defined(SOKOL_DEBUG) sg_log_item validate_error; @@ -6700,7 +6770,8 @@ _SOKOL_PRIVATE void _sg_dummy_update_image(_sg_image_t* img, const sg_image_data _SG_XMACRO(glSamplerParameteri, void, (GLuint sampler, GLenum pname, GLint param)) \ _SG_XMACRO(glSamplerParameterf, void, (GLuint sampler, GLenum pname, GLfloat param)) \ _SG_XMACRO(glSamplerParameterfv, void, (GLuint sampler, GLenum pname, const GLfloat* params)) \ - _SG_XMACRO(glDeleteSamplers, void, (GLsizei n, const GLuint* samplers)) + _SG_XMACRO(glDeleteSamplers, void, (GLsizei n, const GLuint* samplers)) \ + _SG_XMACRO(glBindBufferBase, void, (GLenum target, GLuint index, GLuint buffer)) // generate GL function pointer typedefs #define _SG_XMACRO(name, ret, args) typedef ret (GL_APIENTRY* PFN_ ## name) args; @@ -6747,6 +6818,7 @@ _SOKOL_PRIVATE GLenum _sg_gl_buffer_target(sg_buffer_type t) { switch (t) { case SG_BUFFERTYPE_VERTEXBUFFER: return GL_ARRAY_BUFFER; case SG_BUFFERTYPE_INDEXBUFFER: return GL_ELEMENT_ARRAY_BUFFER; + case SG_BUFFERTYPE_STORAGEBUFFER: return GL_SHADER_STORAGE_BUFFER; default: SOKOL_UNREACHABLE; return 0; } } @@ -6956,7 +7028,7 @@ _SOKOL_PRIVATE GLenum _sg_gl_mag_filter(sg_filter mag_f) { _SOKOL_PRIVATE GLenum _sg_gl_wrap(sg_wrap w) { switch (w) { case SG_WRAP_CLAMP_TO_EDGE: return GL_CLAMP_TO_EDGE; - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) case SG_WRAP_CLAMP_TO_BORDER: return GL_CLAMP_TO_BORDER; #else case SG_WRAP_CLAMP_TO_BORDER: return GL_CLAMP_TO_EDGE; @@ -7401,14 +7473,16 @@ _SOKOL_PRIVATE void _sg_gl_init_limits(void) { _sg.limits.gl_max_combined_texture_image_units = gl_int; } -#if defined(SOKOL_GLCORE33) -_SOKOL_PRIVATE void _sg_gl_init_caps_glcore33(void) { - _sg.backend = SG_BACKEND_GLCORE33; +#if defined(SOKOL_GLCORE) +_SOKOL_PRIVATE void _sg_gl_init_caps_glcore(void) { + _sg.backend = SG_BACKEND_GLCORE; + const int version = _sg.desc.environment.gl.major_version * 100 + _sg.desc.environment.gl.minor_version * 10; _sg.features.origin_top_left = false; _sg.features.image_clamp_to_border = true; _sg.features.mrt_independent_blend_state = false; _sg.features.mrt_independent_write_mask = true; + _sg.features.storage_buffer = version >= 430; // scan extensions bool has_s3tc = false; // BC1..BC3 @@ -7481,6 +7555,7 @@ _SOKOL_PRIVATE void _sg_gl_init_caps_gles3(void) { _sg.features.image_clamp_to_border = false; _sg.features.mrt_independent_blend_state = false; _sg.features.mrt_independent_write_mask = false; + _sg.features.storage_buffer = false; bool has_s3tc = false; // BC1..BC3 bool has_rgtc = false; // BC4 and BC5 @@ -7570,6 +7645,12 @@ _SOKOL_PRIVATE void _sg_gl_init_caps_gles3(void) { #endif //-- state cache implementation ------------------------------------------------ +_SOKOL_PRIVATE GLuint _sg_gl_storagebuffer_bind_index(int stage, int slot) { + SOKOL_ASSERT((stage >= 0) && (stage < SG_NUM_SHADER_STAGES)); + SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)); + return (GLuint) (stage * _SG_GL_STORAGEBUFFER_STAGE_INDEX_PITCH + slot); +} + _SOKOL_PRIVATE void _sg_gl_cache_clear_buffer_bindings(bool force) { if (force || (_sg.gl.cache.vertex_buffer != 0)) { glBindBuffer(GL_ARRAY_BUFFER, 0); @@ -7581,30 +7662,77 @@ _SOKOL_PRIVATE void _sg_gl_cache_clear_buffer_bindings(bool force) { _sg.gl.cache.index_buffer = 0; _sg_stats_add(gl.num_bind_buffer, 1); } + if (force || (_sg.gl.cache.storage_buffer != 0)) { + if (_sg.features.storage_buffer) { + glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); + } + _sg.gl.cache.storage_buffer = 0; + _sg_stats_add(gl.num_bind_buffer, 1); + } + for (int stage = 0; stage < SG_NUM_SHADER_STAGES; stage++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + if (force || (_sg.gl.cache.stage_storage_buffers[stage][i] != 0)) { + const GLuint bind_index = _sg_gl_storagebuffer_bind_index(stage, i); + if (_sg.features.storage_buffer) { + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, bind_index, 0); + } + _sg.gl.cache.stage_storage_buffers[stage][i] = 0; + _sg_stats_add(gl.num_bind_buffer, 1); + } + } + } } _SOKOL_PRIVATE void _sg_gl_cache_bind_buffer(GLenum target, GLuint buffer) { - SOKOL_ASSERT((GL_ARRAY_BUFFER == target) || (GL_ELEMENT_ARRAY_BUFFER == target)); + SOKOL_ASSERT((GL_ARRAY_BUFFER == target) || (GL_ELEMENT_ARRAY_BUFFER == target) || (GL_SHADER_STORAGE_BUFFER == target)); if (target == GL_ARRAY_BUFFER) { if (_sg.gl.cache.vertex_buffer != buffer) { _sg.gl.cache.vertex_buffer = buffer; glBindBuffer(target, buffer); _sg_stats_add(gl.num_bind_buffer, 1); } - } else { + } else if (target == GL_ELEMENT_ARRAY_BUFFER) { if (_sg.gl.cache.index_buffer != buffer) { _sg.gl.cache.index_buffer = buffer; glBindBuffer(target, buffer); _sg_stats_add(gl.num_bind_buffer, 1); } + } else if (target == GL_SHADER_STORAGE_BUFFER) { + if (_sg.gl.cache.storage_buffer != buffer) { + _sg.gl.cache.storage_buffer = buffer; + if (_sg.features.storage_buffer) { + glBindBuffer(target, buffer); + } + _sg_stats_add(gl.num_bind_buffer, 1); + } + } else { + SOKOL_UNREACHABLE; + } +} + +_SOKOL_PRIVATE void _sg_gl_cache_bind_storage_buffer(int stage, int slot, GLuint buffer) { + SOKOL_ASSERT((stage >= 0) && (stage < SG_NUM_SHADER_STAGES)); + SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)); + if (_sg.gl.cache.stage_storage_buffers[stage][slot] != buffer) { + _sg.gl.cache.stage_storage_buffers[stage][slot] = buffer; + _sg.gl.cache.storage_buffer = buffer; // not a bug + GLuint bind_index = _sg_gl_storagebuffer_bind_index(stage, slot); + if (_sg.features.storage_buffer) { + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, bind_index, buffer); + } + _sg_stats_add(gl.num_bind_buffer, 1); } } _SOKOL_PRIVATE void _sg_gl_cache_store_buffer_binding(GLenum target) { if (target == GL_ARRAY_BUFFER) { _sg.gl.cache.stored_vertex_buffer = _sg.gl.cache.vertex_buffer; - } else { + } else if (target == GL_ELEMENT_ARRAY_BUFFER) { _sg.gl.cache.stored_index_buffer = _sg.gl.cache.index_buffer; + } else if (target == GL_SHADER_STORAGE_BUFFER) { + _sg.gl.cache.stored_storage_buffer = _sg.gl.cache.storage_buffer; + } else { + SOKOL_UNREACHABLE; } } @@ -7615,12 +7743,20 @@ _SOKOL_PRIVATE void _sg_gl_cache_restore_buffer_binding(GLenum target) { _sg_gl_cache_bind_buffer(target, _sg.gl.cache.stored_vertex_buffer); _sg.gl.cache.stored_vertex_buffer = 0; } - } else { + } else if (target == GL_ELEMENT_ARRAY_BUFFER) { if (_sg.gl.cache.stored_index_buffer != 0) { // we only care about restoring valid ids _sg_gl_cache_bind_buffer(target, _sg.gl.cache.stored_index_buffer); _sg.gl.cache.stored_index_buffer = 0; } + } else if (target == GL_SHADER_STORAGE_BUFFER) { + if (_sg.gl.cache.stored_storage_buffer != 0) { + // we only care about restoring valid ids + _sg_gl_cache_bind_buffer(target, _sg.gl.cache.stored_storage_buffer); + _sg.gl.cache.stored_storage_buffer = 0; + } + } else { + SOKOL_UNREACHABLE; } } @@ -7636,12 +7772,31 @@ _SOKOL_PRIVATE void _sg_gl_cache_invalidate_buffer(GLuint buf) { glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); _sg_stats_add(gl.num_bind_buffer, 1); } + if (buf == _sg.gl.cache.storage_buffer) { + _sg.gl.cache.storage_buffer = 0; + glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0); + _sg_stats_add(gl.num_bind_buffer, 1); + } + for (int stage = 0; stage < SG_NUM_SHADER_STAGES; stage++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + if (buf == _sg.gl.cache.stage_storage_buffers[stage][i]) { + _sg.gl.cache.stage_storage_buffers[stage][i] = 0; + _sg.gl.cache.storage_buffer = 0; // not a bug! + const GLuint bind_index = _sg_gl_storagebuffer_bind_index(stage, i); + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, bind_index, 0); + _sg_stats_add(gl.num_bind_buffer, 1); + } + } + } if (buf == _sg.gl.cache.stored_vertex_buffer) { _sg.gl.cache.stored_vertex_buffer = 0; } if (buf == _sg.gl.cache.stored_index_buffer) { _sg.gl.cache.stored_index_buffer = 0; } + if (buf == _sg.gl.cache.stored_storage_buffer) { + _sg.gl.cache.stored_storage_buffer = 0; + } for (int i = 0; i < SG_MAX_VERTEX_ATTRIBUTES; i++) { if (buf == _sg.gl.cache.attrs[i].gl_vbuf) { _sg.gl.cache.attrs[i].gl_vbuf = 0; @@ -7851,7 +8006,7 @@ _SOKOL_PRIVATE void _sg_gl_reset_state_cache(void) { glEnable(GL_DITHER); glDisable(GL_POLYGON_OFFSET_FILL); _sg_stats_add(gl.num_render_state, 10); - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) glEnable(GL_MULTISAMPLE); glEnable(GL_PROGRAM_POINT_SIZE); _sg_stats_add(gl.num_render_state, 2); @@ -7872,8 +8027,8 @@ _SOKOL_PRIVATE void _sg_gl_setup_backend(const sg_desc* desc) { #if defined(SOKOL_DEBUG) while (glGetError() != GL_NO_ERROR); #endif - #if defined(SOKOL_GLCORE33) - _sg_gl_init_caps_glcore33(); + #if defined(SOKOL_GLCORE) + _sg_gl_init_caps_glcore(); #elif defined(SOKOL_GLES3) _sg_gl_init_caps_gles3(); #endif @@ -7883,7 +8038,7 @@ _SOKOL_PRIVATE void _sg_gl_setup_backend(const sg_desc* desc) { _SG_GL_CHECK_ERROR(); // incoming texture data is generally expected to be packed tightly glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) // enable seamless cubemap sampling (only desktop GL) glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); #endif @@ -8074,7 +8229,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_gl_create_sampler(_sg_sampler_t* smp, const glSamplerParameteri(smp->gl.smp, GL_TEXTURE_WRAP_S, (GLint)_sg_gl_wrap(smp->cmn.wrap_u)); glSamplerParameteri(smp->gl.smp, GL_TEXTURE_WRAP_T, (GLint)_sg_gl_wrap(smp->cmn.wrap_v)); glSamplerParameteri(smp->gl.smp, GL_TEXTURE_WRAP_R, (GLint)_sg_gl_wrap(smp->cmn.wrap_w)); - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) float border[4]; switch (smp->cmn.border_color) { case SG_BORDERCOLOR_TRANSPARENT_BLACK: @@ -8558,13 +8713,13 @@ _SOKOL_PRIVATE void _sg_gl_begin_pass(const sg_pass* pass) { if (atts) { // offscreen pass SOKOL_ASSERT(atts->gl.fb); - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) glEnable(GL_FRAMEBUFFER_SRGB); #endif glBindFramebuffer(GL_FRAMEBUFFER, atts->gl.fb); } else { // default pass - #if defined(SOKOL_GLCORE33) + #if defined(SOKOL_GLCORE) glDisable(GL_FRAMEBUFFER_SRGB); #endif // NOTE: on some platforms, the default framebuffer of a context @@ -8864,7 +9019,7 @@ _SOKOL_PRIVATE void _sg_gl_apply_pipeline(_sg_pipeline_t* pip) { if (pip->gl.color_write_mask[i] != _sg.gl.cache.color_write_mask[i]) { const sg_color_mask cm = pip->gl.color_write_mask[i]; _sg.gl.cache.color_write_mask[i] = cm; - #ifdef SOKOL_GLCORE33 + #ifdef SOKOL_GLCORE glColorMaski(i, (cm & SG_COLORMASK_R) != 0, (cm & SG_COLORMASK_G) != 0, @@ -8921,7 +9076,7 @@ _SOKOL_PRIVATE void _sg_gl_apply_pipeline(_sg_pipeline_t* pip) { } _sg_stats_add(gl.num_render_state, 1); } - #ifdef SOKOL_GLCORE33 + #ifdef SOKOL_GLCORE if (pip->gl.sample_count != _sg.gl.cache.sample_count) { _sg.gl.cache.sample_count = pip->gl.sample_count; if (pip->gl.sample_count > 1) { @@ -8977,6 +9132,18 @@ _SOKOL_PRIVATE bool _sg_gl_apply_bindings(_sg_bindings_t* bnd) { } _SG_GL_CHECK_ERROR(); + // bind storage buffers + for (int slot = 0; slot < bnd->num_vs_sbufs; slot++) { + _sg_buffer_t* sb = bnd->vs_sbufs[slot]; + GLuint gl_sb = sb->gl.buf[sb->cmn.active_slot]; + _sg_gl_cache_bind_storage_buffer(SG_SHADERSTAGE_VS, slot, gl_sb); + } + for (int slot = 0; slot < bnd->num_fs_sbufs; slot++) { + _sg_buffer_t* sb = bnd->fs_sbufs[slot]; + GLuint gl_sb = sb->gl.buf[sb->cmn.active_slot]; + _sg_gl_cache_bind_storage_buffer(SG_SHADERSTAGE_FS, slot, gl_sb); + } + // index buffer (can be 0) const GLuint gl_ib = bnd->ib ? bnd->ib->gl.buf[bnd->ib->cmn.active_slot] : 0; _sg_gl_cache_bind_buffer(GL_ELEMENT_ARRAY_BUFFER, gl_ib); @@ -9092,19 +9259,20 @@ _SOKOL_PRIVATE void _sg_gl_draw(int base_element, int num_elements, int num_inst SOKOL_ASSERT(_sg.gl.cache.cur_pipeline); const GLenum i_type = _sg.gl.cache.cur_index_type; const GLenum p_type = _sg.gl.cache.cur_primitive_type; + const bool use_instanced_draw = (num_instances > 1) || (_sg.gl.cache.cur_pipeline->cmn.use_instanced_draw); if (0 != i_type) { // indexed rendering const int i_size = (i_type == GL_UNSIGNED_SHORT) ? 2 : 4; const int ib_offset = _sg.gl.cache.cur_ib_offset; const GLvoid* indices = (const GLvoid*)(GLintptr)(base_element*i_size+ib_offset); - if (_sg.gl.cache.cur_pipeline->cmn.use_instanced_draw) { + if (use_instanced_draw) { glDrawElementsInstanced(p_type, num_elements, i_type, indices, num_instances); } else { glDrawElements(p_type, num_elements, i_type, indices); } } else { // non-indexed rendering - if (_sg.gl.cache.cur_pipeline->cmn.use_instanced_draw) { + if (use_instanced_draw) { glDrawArraysInstanced(p_type, base_element, num_elements, num_instances); } else { glDrawArrays(p_type, base_element, num_elements); @@ -9210,6 +9378,10 @@ _SOKOL_PRIVATE void _sg_gl_update_image(_sg_image_t* img, const sg_image_data* d // >>d3d11 backend #elif defined(SOKOL_D3D11) +#define _SG_D3D11_MAX_SHADERSTAGE_SRVS (32) +#define _SG_D3D11_SHADERSTAGE_IMAGE_SRV_OFFSET (0) +#define _SG_D3D11_SHADERSTAGE_BUFFER_SRV_OFFSET (16) + #if defined(__cplusplus) #define _sg_d3d11_AddRef(self) (self)->AddRef() #else @@ -9628,6 +9800,34 @@ _SOKOL_PRIVATE D3D11_USAGE _sg_d3d11_usage(sg_usage usg) { } } +_SOKOL_PRIVATE UINT _sg_d3d11_buffer_bind_flags(sg_buffer_type t) { + switch (t) { + case SG_BUFFERTYPE_VERTEXBUFFER: + return D3D11_BIND_VERTEX_BUFFER; + case SG_BUFFERTYPE_INDEXBUFFER: + return D3D11_BIND_INDEX_BUFFER; + case SG_BUFFERTYPE_STORAGEBUFFER: + // FIXME: for compute shaders we'd want UNORDERED_ACCESS? + return D3D11_BIND_SHADER_RESOURCE; + default: + SOKOL_UNREACHABLE; + return 0; + } +} + +_SOKOL_PRIVATE UINT _sg_d3d11_buffer_misc_flags(sg_buffer_type t) { + switch (t) { + case SG_BUFFERTYPE_VERTEXBUFFER: + case SG_BUFFERTYPE_INDEXBUFFER: + return 0; + case SG_BUFFERTYPE_STORAGEBUFFER: + return D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS; + default: + SOKOL_UNREACHABLE; + return 0; + } +} + _SOKOL_PRIVATE UINT _sg_d3d11_cpu_access_flags(sg_usage usg) { switch (usg) { case SG_USAGE_IMMUTABLE: @@ -9936,6 +10136,7 @@ _SOKOL_PRIVATE void _sg_d3d11_init_caps(void) { _sg.features.image_clamp_to_border = true; _sg.features.mrt_independent_blend_state = true; _sg.features.mrt_independent_write_mask = true; + _sg.features.storage_buffer = true; _sg.limits.max_image_size_2d = 16 * 1024; _sg.limits.max_image_size_cube = 16 * 1024; @@ -9994,13 +10195,15 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_buffer(_sg_buffer_t* buf, cons if (injected) { buf->d3d11.buf = (ID3D11Buffer*) desc->d3d11_buffer; _sg_d3d11_AddRef(buf->d3d11.buf); + // FIXME: for storage buffers also need to inject resource view } else { - D3D11_BUFFER_DESC d3d11_desc; - _sg_clear(&d3d11_desc, sizeof(d3d11_desc)); - d3d11_desc.ByteWidth = (UINT)buf->cmn.size; - d3d11_desc.Usage = _sg_d3d11_usage(buf->cmn.usage); - d3d11_desc.BindFlags = buf->cmn.type == SG_BUFFERTYPE_VERTEXBUFFER ? D3D11_BIND_VERTEX_BUFFER : D3D11_BIND_INDEX_BUFFER; - d3d11_desc.CPUAccessFlags = _sg_d3d11_cpu_access_flags(buf->cmn.usage); + D3D11_BUFFER_DESC d3d11_buf_desc; + _sg_clear(&d3d11_buf_desc, sizeof(d3d11_buf_desc)); + d3d11_buf_desc.ByteWidth = (UINT)buf->cmn.size; + d3d11_buf_desc.Usage = _sg_d3d11_usage(buf->cmn.usage); + d3d11_buf_desc.BindFlags = _sg_d3d11_buffer_bind_flags(buf->cmn.type); + d3d11_buf_desc.CPUAccessFlags = _sg_d3d11_cpu_access_flags(buf->cmn.usage); + d3d11_buf_desc.MiscFlags = _sg_d3d11_buffer_misc_flags(buf->cmn.type); D3D11_SUBRESOURCE_DATA* init_data_ptr = 0; D3D11_SUBRESOURCE_DATA init_data; _sg_clear(&init_data, sizeof(init_data)); @@ -10009,11 +10212,30 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_buffer(_sg_buffer_t* buf, cons init_data.pSysMem = desc->data.ptr; init_data_ptr = &init_data; } - HRESULT hr = _sg_d3d11_CreateBuffer(_sg.d3d11.dev, &d3d11_desc, init_data_ptr, &buf->d3d11.buf); + HRESULT hr = _sg_d3d11_CreateBuffer(_sg.d3d11.dev, &d3d11_buf_desc, init_data_ptr, &buf->d3d11.buf); if (!(SUCCEEDED(hr) && buf->d3d11.buf)) { _SG_ERROR(D3D11_CREATE_BUFFER_FAILED); return SG_RESOURCESTATE_FAILED; } + + // for storage buffers need to create a view object + if (buf->cmn.type == SG_BUFFERTYPE_STORAGEBUFFER) { + // FIXME: currently only shader-resource-view, in future also UAV + // storage buffer size must be multiple of 4 + SOKOL_ASSERT(_sg_multiple_u64(buf->cmn.size, 4)); + D3D11_SHADER_RESOURCE_VIEW_DESC d3d11_srv_desc; + _sg_clear(&d3d11_srv_desc, sizeof(d3d11_srv_desc)); + d3d11_srv_desc.Format = DXGI_FORMAT_R32_TYPELESS; + d3d11_srv_desc.ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX; + d3d11_srv_desc.BufferEx.FirstElement = 0; + d3d11_srv_desc.BufferEx.NumElements = buf->cmn.size / 4; + d3d11_srv_desc.BufferEx.Flags = D3D11_BUFFEREX_SRV_FLAG_RAW; + hr = _sg_d3d11_CreateShaderResourceView(_sg.d3d11.dev, (ID3D11Resource*)buf->d3d11.buf, &d3d11_srv_desc, &buf->d3d11.srv); + if (!(SUCCEEDED(hr) && buf->d3d11.srv)) { + _SG_ERROR(D3D11_CREATE_BUFFER_SRV_FAILED); + return SG_RESOURCESTATE_FAILED; + } + } _sg_d3d11_setlabel(buf->d3d11.buf, desc->label); } return SG_RESOURCESTATE_VALID; @@ -10024,6 +10246,9 @@ _SOKOL_PRIVATE void _sg_d3d11_discard_buffer(_sg_buffer_t* buf) { if (buf->d3d11.buf) { _sg_d3d11_Release(buf->d3d11.buf); } + if (buf->d3d11.srv) { + _sg_d3d11_Release(buf->d3d11.srv); + } } _SOKOL_PRIVATE void _sg_d3d11_fill_subres_data(const _sg_image_t* img, const sg_image_data* data) { @@ -10488,15 +10713,17 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, pip->d3d11.vb_strides[layout_index] = 0; } } - hr = _sg_d3d11_CreateInputLayout(_sg.d3d11.dev, - d3d11_comps, // pInputElementDesc - (UINT)attr_index, // NumElements - shd->d3d11.vs_blob, // pShaderByteCodeWithInputSignature - shd->d3d11.vs_blob_length, // BytecodeLength - &pip->d3d11.il); - if (!(SUCCEEDED(hr) && pip->d3d11.il)) { - _SG_ERROR(D3D11_CREATE_INPUT_LAYOUT_FAILED); - return SG_RESOURCESTATE_FAILED; + if (attr_index > 0) { + hr = _sg_d3d11_CreateInputLayout(_sg.d3d11.dev, + d3d11_comps, // pInputElementDesc + (UINT)attr_index, // NumElements + shd->d3d11.vs_blob, // pShaderByteCodeWithInputSignature + shd->d3d11.vs_blob_length, // BytecodeLength + &pip->d3d11.il); + if (!(SUCCEEDED(hr) && pip->d3d11.il)) { + _SG_ERROR(D3D11_CREATE_INPUT_LAYOUT_FAILED); + return SG_RESOURCESTATE_FAILED; + } } _sg_d3d11_setlabel(pip->d3d11.il, desc->label); @@ -10901,7 +11128,7 @@ _SOKOL_PRIVATE void _sg_d3d11_apply_pipeline(_sg_pipeline_t* pip) { SOKOL_ASSERT(pip); SOKOL_ASSERT(pip->shader && (pip->cmn.shader_id.id == pip->shader->slot.id)); SOKOL_ASSERT(_sg.d3d11.ctx); - SOKOL_ASSERT(pip->d3d11.rs && pip->d3d11.bs && pip->d3d11.dss && pip->d3d11.il); + SOKOL_ASSERT(pip->d3d11.rs && pip->d3d11.bs && pip->d3d11.dss); _sg.d3d11.cur_pipeline = pip; _sg.d3d11.cur_pipeline_id.id = pip->slot.id; @@ -10937,8 +11164,8 @@ _SOKOL_PRIVATE bool _sg_d3d11_apply_bindings(_sg_bindings_t* bnd) { ID3D11Buffer* d3d11_ib = bnd->ib ? bnd->ib->d3d11.buf : 0; ID3D11Buffer* d3d11_vbs[SG_MAX_VERTEX_BUFFERS] = {0}; UINT d3d11_vb_offsets[SG_MAX_VERTEX_BUFFERS] = {0}; - ID3D11ShaderResourceView* d3d11_vs_srvs[SG_MAX_SHADERSTAGE_IMAGES] = {0}; - ID3D11ShaderResourceView* d3d11_fs_srvs[SG_MAX_SHADERSTAGE_IMAGES] = {0}; + ID3D11ShaderResourceView* d3d11_vs_srvs[_SG_D3D11_MAX_SHADERSTAGE_SRVS] = {0}; + ID3D11ShaderResourceView* d3d11_fs_srvs[_SG_D3D11_MAX_SHADERSTAGE_SRVS] = {0}; ID3D11SamplerState* d3d11_vs_smps[SG_MAX_SHADERSTAGE_SAMPLERS] = {0}; ID3D11SamplerState* d3d11_fs_smps[SG_MAX_SHADERSTAGE_SAMPLERS] = {0}; for (int i = 0; i < bnd->num_vbs; i++) { @@ -10948,11 +11175,19 @@ _SOKOL_PRIVATE bool _sg_d3d11_apply_bindings(_sg_bindings_t* bnd) { } for (int i = 0; i < bnd->num_vs_imgs; i++) { SOKOL_ASSERT(bnd->vs_imgs[i]->d3d11.srv); - d3d11_vs_srvs[i] = bnd->vs_imgs[i]->d3d11.srv; + d3d11_vs_srvs[_SG_D3D11_SHADERSTAGE_IMAGE_SRV_OFFSET + i] = bnd->vs_imgs[i]->d3d11.srv; + } + for (int i = 0; i < bnd->num_vs_sbufs; i++) { + SOKOL_ASSERT(bnd->vs_sbufs[i]->d3d11.srv); + d3d11_vs_srvs[_SG_D3D11_SHADERSTAGE_BUFFER_SRV_OFFSET + i] = bnd->vs_sbufs[i]->d3d11.srv; } for (int i = 0; i < bnd->num_fs_imgs; i++) { SOKOL_ASSERT(bnd->fs_imgs[i]->d3d11.srv); - d3d11_fs_srvs[i] = bnd->fs_imgs[i]->d3d11.srv; + d3d11_fs_srvs[_SG_D3D11_SHADERSTAGE_IMAGE_SRV_OFFSET + i] = bnd->fs_imgs[i]->d3d11.srv; + } + for (int i = 0; i < bnd->num_fs_sbufs; i++) { + SOKOL_ASSERT(bnd->fs_sbufs[i]->d3d11.srv); + d3d11_fs_srvs[_SG_D3D11_SHADERSTAGE_BUFFER_SRV_OFFSET + i] = bnd->fs_sbufs[i]->d3d11.srv; } for (int i = 0; i < bnd->num_vs_smps; i++) { SOKOL_ASSERT(bnd->vs_smps[i]->d3d11.smp); @@ -10964,8 +11199,8 @@ _SOKOL_PRIVATE bool _sg_d3d11_apply_bindings(_sg_bindings_t* bnd) { } _sg_d3d11_IASetVertexBuffers(_sg.d3d11.ctx, 0, SG_MAX_VERTEX_BUFFERS, d3d11_vbs, bnd->pip->d3d11.vb_strides, d3d11_vb_offsets); _sg_d3d11_IASetIndexBuffer(_sg.d3d11.ctx, d3d11_ib, bnd->pip->d3d11.index_format, (UINT)bnd->ib_offset); - _sg_d3d11_VSSetShaderResources(_sg.d3d11.ctx, 0, SG_MAX_SHADERSTAGE_IMAGES, d3d11_vs_srvs); - _sg_d3d11_PSSetShaderResources(_sg.d3d11.ctx, 0, SG_MAX_SHADERSTAGE_IMAGES, d3d11_fs_srvs); + _sg_d3d11_VSSetShaderResources(_sg.d3d11.ctx, 0, _SG_D3D11_MAX_SHADERSTAGE_SRVS, d3d11_vs_srvs); + _sg_d3d11_PSSetShaderResources(_sg.d3d11.ctx, 0, _SG_D3D11_MAX_SHADERSTAGE_SRVS, d3d11_fs_srvs); _sg_d3d11_VSSetSamplers(_sg.d3d11.ctx, 0, SG_MAX_SHADERSTAGE_SAMPLERS, d3d11_vs_smps); _sg_d3d11_PSSetSamplers(_sg.d3d11.ctx, 0, SG_MAX_SHADERSTAGE_SAMPLERS, d3d11_fs_smps); _sg_stats_add(d3d11.bindings.num_ia_set_vertex_buffers, 1); @@ -10990,8 +11225,9 @@ _SOKOL_PRIVATE void _sg_d3d11_apply_uniforms(sg_shader_stage stage_index, int ub } _SOKOL_PRIVATE void _sg_d3d11_draw(int base_element, int num_elements, int num_instances) { + const bool use_instanced_draw = (num_instances > 1) || (_sg.d3d11.use_instanced_draw); if (_sg.d3d11.use_indexed_draw) { - if (_sg.d3d11.use_instanced_draw) { + if (use_instanced_draw) { _sg_d3d11_DrawIndexedInstanced(_sg.d3d11.ctx, (UINT)num_elements, (UINT)num_instances, (UINT)base_element, 0, 0); _sg_stats_add(d3d11.draw.num_draw_indexed_instanced, 1); } else { @@ -10999,7 +11235,7 @@ _SOKOL_PRIVATE void _sg_d3d11_draw(int base_element, int num_elements, int num_i _sg_stats_add(d3d11.draw.num_draw_indexed, 1); } } else { - if (_sg.d3d11.use_instanced_draw) { + if (use_instanced_draw) { _sg_d3d11_DrawInstanced(_sg.d3d11.ctx, (UINT)num_elements, (UINT)num_instances, (UINT)base_element, 0); _sg_stats_add(d3d11.draw.num_draw_instanced, 1); } else { @@ -11617,6 +11853,7 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) { _sg.features.origin_top_left = true; _sg.features.mrt_independent_blend_state = true; _sg.features.mrt_independent_write_mask = true; + _sg.features.storage_buffer = true; _sg.features.image_clamp_to_border = false; #if (MAC_OS_X_VERSION_MAX_ALLOWED >= 120000) || (__IPHONE_OS_VERSION_MAX_ALLOWED >= 140000) @@ -12721,7 +12958,7 @@ _SOKOL_PRIVATE bool _sg_mtl_apply_bindings(_sg_bindings_t* bnd) { } } - // apply vertex shader images + // apply vertex stage images for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_vs_imgs; slot++) { const _sg_image_t* img = bnd->vs_imgs[slot]; if (_sg.mtl.state_cache.cur_vs_image_ids[slot].id != img->slot.id) { @@ -12732,7 +12969,7 @@ _SOKOL_PRIVATE bool _sg_mtl_apply_bindings(_sg_bindings_t* bnd) { } } - // apply vertex shader samplers + // apply vertex stage samplers for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_vs_smps; slot++) { const _sg_sampler_t* smp = bnd->vs_smps[slot]; if (_sg.mtl.state_cache.cur_vs_sampler_ids[slot].id != smp->slot.id) { @@ -12743,7 +12980,19 @@ _SOKOL_PRIVATE bool _sg_mtl_apply_bindings(_sg_bindings_t* bnd) { } } - // apply fragment shader images + // apply vertex stage storage buffers + for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_vs_sbufs; slot++) { + const _sg_buffer_t* sbuf = bnd->vs_sbufs[slot]; + if (_sg.mtl.state_cache.cur_vs_storagebuffer_ids[slot].id != sbuf->slot.id) { + _sg.mtl.state_cache.cur_vs_storagebuffer_ids[slot].id = sbuf->slot.id; + SOKOL_ASSERT(sbuf->mtl.buf[sbuf->cmn.active_slot] != _SG_MTL_INVALID_SLOT_INDEX); + const NSUInteger mtl_slot = SG_MAX_SHADERSTAGE_UBS + SG_MAX_VERTEX_BUFFERS + slot; + [_sg.mtl.cmd_encoder setVertexBuffer:_sg_mtl_id(sbuf->mtl.buf[sbuf->cmn.active_slot]) offset:0 atIndex:mtl_slot]; + _sg_stats_add(metal.bindings.num_set_vertex_buffer, 1); + } + } + + // apply fragment stage images for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_fs_imgs; slot++) { const _sg_image_t* img = bnd->fs_imgs[slot]; if (_sg.mtl.state_cache.cur_fs_image_ids[slot].id != img->slot.id) { @@ -12754,7 +13003,7 @@ _SOKOL_PRIVATE bool _sg_mtl_apply_bindings(_sg_bindings_t* bnd) { } } - // apply fragment shader samplers + // apply fragment stage samplers for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_fs_smps; slot++) { const _sg_sampler_t* smp = bnd->fs_smps[slot]; if (_sg.mtl.state_cache.cur_fs_sampler_ids[slot].id != smp->slot.id) { @@ -12764,6 +13013,19 @@ _SOKOL_PRIVATE bool _sg_mtl_apply_bindings(_sg_bindings_t* bnd) { _sg_stats_add(metal.bindings.num_set_fragment_sampler_state, 1); } } + + // apply fragment stage storage buffers + for (NSUInteger slot = 0; slot < (NSUInteger)bnd->num_fs_sbufs; slot++) { + const _sg_buffer_t* sbuf = bnd->fs_sbufs[slot]; + if (_sg.mtl.state_cache.cur_fs_storagebuffer_ids[slot].id != sbuf->slot.id) { + _sg.mtl.state_cache.cur_fs_storagebuffer_ids[slot].id = sbuf->slot.id; + SOKOL_ASSERT(sbuf->mtl.buf[sbuf->cmn.active_slot] != _SG_MTL_INVALID_SLOT_INDEX); + const NSUInteger mtl_slot = SG_MAX_SHADERSTAGE_UBS + slot; + [_sg.mtl.cmd_encoder setFragmentBuffer:_sg_mtl_id(sbuf->mtl.buf[sbuf->cmn.active_slot]) offset:0 atIndex:mtl_slot]; + _sg_stats_add(metal.bindings.num_set_fragment_buffer, 1); + } + } + return true; } @@ -12882,9 +13144,11 @@ _SOKOL_PRIVATE void _sg_mtl_pop_debug_group(void) { _SOKOL_PRIVATE WGPUBufferUsageFlags _sg_wgpu_buffer_usage(sg_buffer_type t, sg_usage u) { WGPUBufferUsageFlags res = 0; if (SG_BUFFERTYPE_VERTEXBUFFER == t) { - res |= WGPUBufferUsage_Vertex; + res = WGPUBufferUsage_Vertex; + } else if (SG_BUFFERTYPE_STORAGEBUFFER == t) { + res = WGPUBufferUsage_Storage; } else { - res |= WGPUBufferUsage_Index; + res = WGPUBufferUsage_Index; } if (SG_USAGE_IMMUTABLE != u) { res |= WGPUBufferUsage_CopyDst; @@ -13241,15 +13505,17 @@ _SOKOL_PRIVATE WGPUColorWriteMaskFlags _sg_wgpu_colorwritemask(uint8_t m) { // - all images and sampler are in @group(1) // - vertex stage images start at @binding(0) // - vertex stage samplers start at @binding(16) -// - fragment stage images start at @binding(32) -// - fragment stage samplers start at @binding(48) +// - vertex stage storage buffers start at @binding(32) +// - fragment stage images start at @binding(48) +// - fragment stage samplers start at @binding(64) +// - fragment stage storage buffers start at @binding(80) // _SOKOL_PRIVATE uint32_t _sg_wgpu_image_binding(sg_shader_stage stage, int img_slot) { SOKOL_ASSERT((img_slot >= 0) && (img_slot < 16)); if (SG_SHADERSTAGE_VS == stage) { return 0 + (uint32_t)img_slot; } else { - return 32 + (uint32_t)img_slot; + return 48 + (uint32_t)img_slot; } } @@ -13258,7 +13524,16 @@ _SOKOL_PRIVATE uint32_t _sg_wgpu_sampler_binding(sg_shader_stage stage, int smp_ if (SG_SHADERSTAGE_VS == stage) { return 16 + (uint32_t)smp_slot; } else { - return 48 + (uint32_t)smp_slot; + return 64 + (uint32_t)smp_slot; + } +} + +_SOKOL_PRIVATE uint32_t _sg_wgpu_storagebuffer_binding(sg_shader_stage stage, int sbuf_slot) { + SOKOL_ASSERT((sbuf_slot >= 0) && (sbuf_slot < 16)); + if (SG_SHADERSTAGE_VS == stage) { + return 32 + (uint32_t)sbuf_slot; + } else { + return 80 + (uint32_t)sbuf_slot; } } @@ -13276,6 +13551,7 @@ _SOKOL_PRIVATE void _sg_wgpu_init_caps(void) { _sg.features.image_clamp_to_border = false; _sg.features.mrt_independent_blend_state = true; _sg.features.mrt_independent_write_mask = true; + _sg.features.storage_buffer = true; wgpuDeviceGetLimits(_sg.wgpu.dev, &_sg.wgpu.limits); @@ -13567,16 +13843,20 @@ _SOKOL_PRIVATE void _sg_wgpu_init_bindgroups_cache_key(_sg_wgpu_bindgroups_cache SOKOL_ASSERT(bnd->pip); SOKOL_ASSERT(bnd->num_vs_imgs <= SG_MAX_SHADERSTAGE_IMAGES); SOKOL_ASSERT(bnd->num_vs_smps <= SG_MAX_SHADERSTAGE_SAMPLERS); + SOKOL_ASSERT(bnd->num_vs_sbufs <= SG_MAX_SHADERSTAGE_STORAGE_BUFFERS); SOKOL_ASSERT(bnd->num_fs_imgs <= SG_MAX_SHADERSTAGE_IMAGES); SOKOL_ASSERT(bnd->num_fs_smps <= SG_MAX_SHADERSTAGE_SAMPLERS); + SOKOL_ASSERT(bnd->num_fs_sbufs <= SG_MAX_SHADERSTAGE_STORAGE_BUFFERS); _sg_clear(key->items, sizeof(key->items)); key->items[0] = bnd->pip->slot.id; const int vs_imgs_offset = 1; const int vs_smps_offset = vs_imgs_offset + SG_MAX_SHADERSTAGE_IMAGES; - const int fs_imgs_offset = vs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS; + const int vs_sbufs_offset = vs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS; + const int fs_imgs_offset = vs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; const int fs_smps_offset = fs_imgs_offset + SG_MAX_SHADERSTAGE_IMAGES; - SOKOL_ASSERT((fs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS) == _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS); + const int fs_sbufs_offset = fs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS; + SOKOL_ASSERT((fs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS) == _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS); for (int i = 0; i < bnd->num_vs_imgs; i++) { SOKOL_ASSERT(bnd->vs_imgs[i]); key->items[vs_imgs_offset + i] = bnd->vs_imgs[i]->slot.id; @@ -13585,6 +13865,10 @@ _SOKOL_PRIVATE void _sg_wgpu_init_bindgroups_cache_key(_sg_wgpu_bindgroups_cache SOKOL_ASSERT(bnd->vs_smps[i]); key->items[vs_smps_offset + i] = bnd->vs_smps[i]->slot.id; } + for (int i = 0; i < bnd->num_vs_sbufs; i++) { + SOKOL_ASSERT(bnd->vs_sbufs[i]); + key->items[vs_sbufs_offset + i] = bnd->vs_sbufs[i]->slot.id; + } for (int i = 0; i < bnd->num_fs_imgs; i++) { SOKOL_ASSERT(bnd->fs_imgs[i]); key->items[fs_imgs_offset + i] = bnd->fs_imgs[i]->slot.id; @@ -13593,6 +13877,10 @@ _SOKOL_PRIVATE void _sg_wgpu_init_bindgroups_cache_key(_sg_wgpu_bindgroups_cache SOKOL_ASSERT(bnd->fs_smps[i]); key->items[fs_smps_offset + i] = bnd->fs_smps[i]->slot.id; } + for (int i = 0; i < bnd->num_fs_sbufs; i++) { + SOKOL_ASSERT(bnd->fs_sbufs[i]); + key->items[fs_sbufs_offset + i] = bnd->fs_sbufs[i]->slot.id; + } key->hash = _sg_wgpu_hash(&key->items, (int)sizeof(key->items), 0x1234567887654321); } @@ -13623,7 +13911,7 @@ _SOKOL_PRIVATE _sg_wgpu_bindgroup_t* _sg_wgpu_create_bindgroup(_sg_bindings_t* b // create wgpu bindgroup object WGPUBindGroupLayout bgl = bnd->pip->shader->wgpu.bind_group_layout; SOKOL_ASSERT(bgl); - WGPUBindGroupEntry wgpu_entries[SG_NUM_SHADER_STAGES * SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS]; + WGPUBindGroupEntry wgpu_entries[_SG_WGPU_MAX_BINDGROUP_ENTRIES]; _sg_clear(&wgpu_entries, sizeof(wgpu_entries)); int bge_index = 0; for (int i = 0; i < bnd->num_vs_imgs; i++) { @@ -13636,6 +13924,12 @@ _SOKOL_PRIVATE _sg_wgpu_bindgroup_t* _sg_wgpu_create_bindgroup(_sg_bindings_t* b wgpu_entry->binding = _sg_wgpu_sampler_binding(SG_SHADERSTAGE_VS, i); wgpu_entry->sampler = bnd->vs_smps[i]->wgpu.smp; } + for (int i = 0; i < bnd->num_vs_sbufs; i++) { + WGPUBindGroupEntry* wgpu_entry = &wgpu_entries[bge_index++]; + wgpu_entry->binding = _sg_wgpu_storagebuffer_binding(SG_SHADERSTAGE_VS, i); + wgpu_entry->buffer = bnd->vs_sbufs[i]->wgpu.buf; + wgpu_entry->size = (uint64_t) bnd->vs_sbufs[i]->cmn.size; + } for (int i = 0; i < bnd->num_fs_imgs; i++) { WGPUBindGroupEntry* wgpu_entry = &wgpu_entries[bge_index++]; wgpu_entry->binding = _sg_wgpu_image_binding(SG_SHADERSTAGE_FS, i); @@ -13646,6 +13940,12 @@ _SOKOL_PRIVATE _sg_wgpu_bindgroup_t* _sg_wgpu_create_bindgroup(_sg_bindings_t* b wgpu_entry->binding = _sg_wgpu_sampler_binding(SG_SHADERSTAGE_FS, i); wgpu_entry->sampler = bnd->fs_smps[i]->wgpu.smp; } + for (int i = 0; i < bnd->num_fs_sbufs; i++) { + WGPUBindGroupEntry* wgpu_entry = &wgpu_entries[bge_index++]; + wgpu_entry->binding = _sg_wgpu_storagebuffer_binding(SG_SHADERSTAGE_FS, i); + wgpu_entry->buffer = bnd->fs_sbufs[i]->wgpu.buf; + wgpu_entry->size = (uint64_t) bnd->vs_sbufs[i]->cmn.size; + } WGPUBindGroupDescriptor bg_desc; _sg_clear(&bg_desc, sizeof(bg_desc)); bg_desc.layout = bgl; @@ -13792,7 +14092,7 @@ _SOKOL_PRIVATE void _sg_wgpu_bindings_cache_bg_update(const _sg_wgpu_bindgroup_t } } -_SOKOL_PRIVATE void _sg_wgpu_set_image_sampler_bindgroup(_sg_wgpu_bindgroup_t* bg) { +_SOKOL_PRIVATE void _sg_wgpu_set_bindings_bindgroup(_sg_wgpu_bindgroup_t* bg) { if (_sg_wgpu_bindings_cache_bg_dirty(bg)) { _sg_wgpu_bindings_cache_bg_update(bg); _sg_stats_add(wgpu.bindings.num_set_bindgroup, 1); @@ -13810,7 +14110,7 @@ _SOKOL_PRIVATE void _sg_wgpu_set_image_sampler_bindgroup(_sg_wgpu_bindgroup_t* b } _SOKOL_PRIVATE bool _sg_wgpu_apply_bindgroup(_sg_bindings_t* bnd) { - if ((bnd->num_vs_imgs + bnd->num_vs_smps + bnd->num_fs_imgs + bnd->num_fs_smps) > 0) { + if ((bnd->num_vs_imgs + bnd->num_vs_smps + bnd->num_vs_sbufs + bnd->num_fs_imgs + bnd->num_fs_smps + bnd->num_fs_sbufs) > 0) { if (!_sg.desc.wgpu_disable_bindgroups_cache) { _sg_wgpu_bindgroup_t* bg = 0; _sg_wgpu_bindgroups_cache_key_t key; @@ -13838,7 +14138,7 @@ _SOKOL_PRIVATE bool _sg_wgpu_apply_bindgroup(_sg_bindings_t* bnd) { _sg_wgpu_bindgroups_cache_set(key.hash, bg->slot.id); } if (bg && bg->slot.state == SG_RESOURCESTATE_VALID) { - _sg_wgpu_set_image_sampler_bindgroup(bg); + _sg_wgpu_set_bindings_bindgroup(bg); } else { return false; } @@ -13847,7 +14147,7 @@ _SOKOL_PRIVATE bool _sg_wgpu_apply_bindgroup(_sg_bindings_t* bnd) { _sg_wgpu_bindgroup_t* bg = _sg_wgpu_create_bindgroup(bnd); if (bg) { if (bg->slot.state == SG_RESOURCESTATE_VALID) { - _sg_wgpu_set_image_sampler_bindgroup(bg); + _sg_wgpu_set_bindings_bindgroup(bg); } _sg_wgpu_discard_bindgroup(bg); } else { @@ -13855,10 +14155,11 @@ _SOKOL_PRIVATE bool _sg_wgpu_apply_bindgroup(_sg_bindings_t* bnd) { } } } else { - _sg_wgpu_set_image_sampler_bindgroup(0); + _sg_wgpu_set_bindings_bindgroup(0); } return true; } + _SOKOL_PRIVATE bool _sg_wgpu_apply_index_buffer(_sg_bindings_t* bnd) { if (_sg_wgpu_bindings_cache_ib_dirty(bnd->ib, bnd->ib_offset)) { _sg_wgpu_bindings_cache_ib_update(bnd->ib, bnd->ib_offset); @@ -14180,8 +14481,7 @@ _SOKOL_PRIVATE sg_resource_state _sg_wgpu_create_shader(_sg_shader_t* shd, const SOKOL_ASSERT(shd && desc); SOKOL_ASSERT(desc->vs.source && desc->fs.source); - #define _sg_wgpu_create_shader_max_bgl_entries (SG_NUM_SHADER_STAGES * (SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS)) - WGPUBindGroupLayoutEntry wgpu_bgl_entries[_sg_wgpu_create_shader_max_bgl_entries]; + WGPUBindGroupLayoutEntry wgpu_bgl_entries[_SG_WGPU_MAX_BINDGROUP_ENTRIES]; _sg_clear(wgpu_bgl_entries, sizeof(wgpu_bgl_entries)); int bgl_index = 0; for (int stage_index = 0; stage_index < SG_NUM_SHADER_STAGES; stage_index++) { @@ -14217,8 +14517,13 @@ _SOKOL_PRIVATE sg_resource_state _sg_wgpu_create_shader(_sg_shader_t* shd, const _SG_ERROR(WGPU_SHADER_TOO_MANY_SAMPLERS); return SG_RESOURCESTATE_FAILED; } + const int num_sbufs = cmn_stage->num_storage_buffers; + if (num_sbufs > (int)_sg.wgpu.limits.limits.maxStorageBuffersPerShaderStage) { + _SG_ERROR(WGPU_SHADER_TOO_MANY_STORAGEBUFFERS); + return SG_RESOURCESTATE_FAILED; + } for (int img_index = 0; img_index < num_images; img_index++) { - SOKOL_ASSERT(bgl_index < _sg_wgpu_create_shader_max_bgl_entries); + SOKOL_ASSERT(bgl_index < _SG_WGPU_MAX_BINDGROUP_ENTRIES); WGPUBindGroupLayoutEntry* wgpu_bgl_entry = &wgpu_bgl_entries[bgl_index++]; const sg_shader_image_desc* img_desc = &stage_desc->images[img_index]; wgpu_bgl_entry->binding = _sg_wgpu_image_binding((sg_shader_stage)stage_index, img_index); @@ -14228,13 +14533,21 @@ _SOKOL_PRIVATE sg_resource_state _sg_wgpu_create_shader(_sg_shader_t* shd, const wgpu_bgl_entry->texture.multisampled = img_desc->multisampled; } for (int smp_index = 0; smp_index < num_samplers; smp_index++) { - SOKOL_ASSERT(bgl_index < _sg_wgpu_create_shader_max_bgl_entries); + SOKOL_ASSERT(bgl_index < _SG_WGPU_MAX_BINDGROUP_ENTRIES); WGPUBindGroupLayoutEntry* wgpu_bgl_entry = &wgpu_bgl_entries[bgl_index++]; const sg_shader_sampler_desc* smp_desc = &stage_desc->samplers[smp_index]; - wgpu_bgl_entry->binding =_sg_wgpu_sampler_binding((sg_shader_stage)stage_index, smp_index); + wgpu_bgl_entry->binding = _sg_wgpu_sampler_binding((sg_shader_stage)stage_index, smp_index); wgpu_bgl_entry->visibility = _sg_wgpu_shader_stage((sg_shader_stage)stage_index); wgpu_bgl_entry->sampler.type = _sg_wgpu_sampler_binding_type(smp_desc->sampler_type); } + for (int sbuf_index = 0; sbuf_index < num_sbufs; sbuf_index++) { + SOKOL_ASSERT(bgl_index < _SG_WGPU_MAX_BINDGROUP_ENTRIES); + WGPUBindGroupLayoutEntry* wgpu_bgl_entry = &wgpu_bgl_entries[bgl_index++]; + const sg_shader_storage_buffer_desc* sbuf_desc = &stage_desc->storage_buffers[sbuf_index]; + wgpu_bgl_entry->binding = _sg_wgpu_storagebuffer_binding((sg_shader_stage)stage_index, sbuf_index); + wgpu_bgl_entry->visibility = _sg_wgpu_shader_stage((sg_shader_stage)stage_index); + wgpu_bgl_entry->buffer.type = sbuf_desc->readonly ? WGPUBufferBindingType_ReadOnlyStorage : WGPUBufferBindingType_Storage; + } } WGPUBindGroupLayoutDescriptor wgpu_bgl_desc; @@ -14246,8 +14559,6 @@ _SOKOL_PRIVATE sg_resource_state _sg_wgpu_create_shader(_sg_shader_t* shd, const _SG_ERROR(WGPU_SHADER_CREATE_BINDGROUP_LAYOUT_FAILED); return SG_RESOURCESTATE_FAILED; } - - #undef _sg_wgpu_create_shader_max_bgl_entries return SG_RESOURCESTATE_VALID; } @@ -15625,6 +15936,10 @@ _SOKOL_PRIVATE bool _sg_validate_buffer_desc(const sg_buffer_desc* desc) { } else { _SG_VALIDATE(0 == desc->data.ptr, VALIDATE_BUFFERDESC_NO_DATA); } + if (desc->type == SG_BUFFERTYPE_STORAGEBUFFER) { + _SG_VALIDATE(_sg.features.storage_buffer, VALIDATE_BUFFERDESC_STORAGEBUFFER_SUPPORTED); + _SG_VALIDATE(_sg_multiple_u64(desc->size, 4), VALIDATE_BUFFERDESC_STORAGEBUFFER_SIZE_MULTIPLE_4); + } return _sg_validate_end(); #endif } @@ -15762,10 +16077,7 @@ _SOKOL_PRIVATE bool _sg_validate_shader_desc(const sg_shader_desc* desc) { _sg_validate_begin(); _SG_VALIDATE(desc->_start_canary == 0, VALIDATE_SHADERDESC_CANARY); _SG_VALIDATE(desc->_end_canary == 0, VALIDATE_SHADERDESC_CANARY); - #if defined(SOKOL_D3D11) - _SG_VALIDATE(0 != desc->attrs[0].sem_name, VALIDATE_SHADERDESC_ATTR_SEMANTICS); - #endif - #if defined(SOKOL_GLCORE33) || defined(SOKOL_GLES3) || defined(SOKOL_WGPU) + #if defined(SOKOL_GLCORE) || defined(SOKOL_GLES3) || defined(SOKOL_WGPU) // on GL or WebGPU, must provide shader source code _SG_VALIDATE(0 != desc->vs.source, VALIDATE_SHADERDESC_SOURCE); _SG_VALIDATE(0 != desc->fs.source, VALIDATE_SHADERDESC_SOURCE); @@ -15836,6 +16148,16 @@ _SOKOL_PRIVATE bool _sg_validate_shader_desc(const sg_shader_desc* desc) { uniform_blocks_continuous = false; } } + bool storage_buffers_continuous = true; + for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; sbuf_index++) { + const sg_shader_storage_buffer_desc* sbuf_desc = &stage_desc->storage_buffers[sbuf_index]; + if (sbuf_desc->used) { + _SG_VALIDATE(storage_buffers_continuous, VALIDATE_SHADERDESC_NO_CONT_STORAGEBUFFERS); + _SG_VALIDATE(sbuf_desc->readonly, VALIDATE_SHADERDESC_STORAGEBUFFER_READONLY); + } else { + storage_buffers_continuous = false; + } + } bool images_continuous = true; int num_images = 0; for (int img_index = 0; img_index < SG_MAX_SHADERSTAGE_IMAGES; img_index++) { @@ -15930,7 +16252,6 @@ _SOKOL_PRIVATE bool _sg_validate_pipeline_desc(const sg_pipeline_desc* desc) { } _SG_VALIDATE(_sg_multiple_u64((uint64_t)l_state->stride, 4), VALIDATE_PIPELINEDESC_LAYOUT_STRIDE4); } - _SG_VALIDATE(desc->layout.attrs[0].format != SG_VERTEXFORMAT_INVALID, VALIDATE_PIPELINEDESC_NO_ATTRS); const _sg_shader_t* shd = _sg_lookup_shader(&_sg.pools, desc->shader.id); _SG_VALIDATE(0 != shd, VALIDATE_PIPELINEDESC_SHADER); if (shd) { @@ -15942,7 +16263,7 @@ _SOKOL_PRIVATE bool _sg_validate_pipeline_desc(const sg_pipeline_desc* desc) { attrs_cont = false; continue; } - _SG_VALIDATE(attrs_cont, VALIDATE_PIPELINEDESC_NO_ATTRS); + _SG_VALIDATE(attrs_cont, VALIDATE_PIPELINEDESC_NO_CONT_ATTRS); SOKOL_ASSERT(a_state->buffer_index < SG_MAX_VERTEX_BUFFERS); #if defined(SOKOL_D3D11) // on D3D11, semantic names (and semantic indices) must be provided @@ -16329,6 +16650,23 @@ _SOKOL_PRIVATE bool _sg_validate_apply_bindings(const sg_bindings* bindings) { } } + // has expected vertex shader storage buffers + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + const _sg_shader_stage_t* stage = &pip->shader->cmn.stage[SG_SHADERSTAGE_VS]; + if (stage->storage_buffers[i].used) { + _SG_VALIDATE(bindings->vs.storage_buffers[i].id != SG_INVALID_ID, VALIDATE_ABND_VS_EXPECTED_STORAGEBUFFER_BINDING); + if (bindings->vs.storage_buffers[i].id != SG_INVALID_ID) { + const _sg_buffer_t* sbuf = _sg_lookup_buffer(&_sg.pools, bindings->vs.storage_buffers[i].id); + _SG_VALIDATE(sbuf != 0, VALIDATE_ABND_VS_STORAGEBUFFER_EXISTS); + if (sbuf) { + _SG_VALIDATE(sbuf->cmn.type == SG_BUFFERTYPE_STORAGEBUFFER, VALIDATE_ABND_VS_STORAGEBUFFER_BINDING_BUFFERTYPE); + } + } + } else { + _SG_VALIDATE(bindings->vs.storage_buffers[i].id == SG_INVALID_ID, VALIDATE_ABND_VS_UNEXPECTED_STORAGEBUFFER_BINDING); + } + } + // has expected fragment shader images for (int i = 0; i < SG_MAX_SHADERSTAGE_IMAGES; i++) { const _sg_shader_stage_t* stage = &pip->shader->cmn.stage[SG_SHADERSTAGE_FS]; @@ -16384,6 +16722,24 @@ _SOKOL_PRIVATE bool _sg_validate_apply_bindings(const sg_bindings* bindings) { _SG_VALIDATE(bindings->fs.samplers[i].id == SG_INVALID_ID, VALIDATE_ABND_FS_UNEXPECTED_SAMPLER_BINDING); } } + + // has expected fragment shader storage buffers + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + const _sg_shader_stage_t* stage = &pip->shader->cmn.stage[SG_SHADERSTAGE_FS]; + if (stage->storage_buffers[i].used) { + _SG_VALIDATE(bindings->fs.storage_buffers[i].id != SG_INVALID_ID, VALIDATE_ABND_FS_EXPECTED_STORAGEBUFFER_BINDING); + if (bindings->fs.storage_buffers[i].id != SG_INVALID_ID) { + const _sg_buffer_t* sbuf = _sg_lookup_buffer(&_sg.pools, bindings->fs.storage_buffers[i].id); + _SG_VALIDATE(sbuf != 0, VALIDATE_ABND_FS_STORAGEBUFFER_EXISTS); + if (sbuf) { + _SG_VALIDATE(sbuf->cmn.type == SG_BUFFERTYPE_STORAGEBUFFER, VALIDATE_ABND_FS_STORAGEBUFFER_BINDING_BUFFERTYPE); + } + } + } else { + _SG_VALIDATE(bindings->fs.storage_buffers[i].id == SG_INVALID_ID, VALIDATE_ABND_FS_UNEXPECTED_STORAGEBUFFER_BINDING); + } + } + return _sg_validate_end(); #endif } @@ -17018,6 +17374,17 @@ _SOKOL_PRIVATE sg_desc _sg_desc_defaults(const sg_desc* desc) { #endif res.environment.defaults.depth_format = _sg_def(res.environment.defaults.depth_format, SG_PIXELFORMAT_DEPTH_STENCIL); res.environment.defaults.sample_count = _sg_def(res.environment.defaults.sample_count, 1); + #if defined(SOKOL_GLCORE) + res.environment.gl.major_version = _sg_def(res.environment.gl.major_version, 4); + #if defined(__APPLE__) + res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 1); + #else + res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 3); + #endif + #elif defined(SOKOL_GLES3) + res.environment.gl.major_version = _sg_def(res.environment.gl.major_version, 3); + res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 0); + #endif res.buffer_pool_size = _sg_def(res.buffer_pool_size, _SG_DEFAULT_BUFFER_POOL_SIZE); res.image_pool_size = _sg_def(res.image_pool_size, _SG_DEFAULT_IMAGE_POOL_SIZE); res.sampler_pool_size = _sg_def(res.sampler_pool_size, _SG_DEFAULT_SAMPLER_POOL_SIZE); @@ -17823,7 +18190,6 @@ SOKOL_API_IMPL void sg_apply_pipeline(sg_pipeline pip_id) { SOKOL_ASSERT(_sg.valid); SOKOL_ASSERT(_sg.cur_pass.in_pass); _sg_stats_add(num_apply_pipeline, 1); - _sg.apply_bindings_called = false; if (!_sg_validate_apply_pipeline(pip_id)) { _sg.next_draw_valid = false; return; @@ -17846,7 +18212,6 @@ SOKOL_API_IMPL void sg_apply_bindings(const sg_bindings* bindings) { SOKOL_ASSERT(bindings); SOKOL_ASSERT((bindings->_start_canary == 0) && (bindings->_end_canary==0)); _sg_stats_add(num_apply_bindings, 1); - _sg.apply_bindings_called = true; if (!_sg_validate_apply_bindings(bindings)) { _sg.next_draw_valid = false; return; @@ -17914,6 +18279,19 @@ SOKOL_API_IMPL void sg_apply_bindings(const sg_bindings* bindings) { } } + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++, bnd.num_vs_sbufs++) { + if (bindings->vs.storage_buffers[i].id) { + bnd.vs_sbufs[i] = _sg_lookup_buffer(&_sg.pools, bindings->vs.storage_buffers[i].id); + if (bnd.vs_sbufs[i]) { + _sg.next_draw_valid &= (SG_RESOURCESTATE_VALID == bnd.vs_sbufs[i]->slot.state); + } else { + _sg.next_draw_valid = false; + } + } else { + break; + } + } + for (int i = 0; i < SG_MAX_SHADERSTAGE_IMAGES; i++, bnd.num_fs_imgs++) { if (bindings->fs.images[i].id) { bnd.fs_imgs[i] = _sg_lookup_image(&_sg.pools, bindings->fs.images[i].id); @@ -17940,6 +18318,18 @@ SOKOL_API_IMPL void sg_apply_bindings(const sg_bindings* bindings) { } } + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++, bnd.num_fs_sbufs++) { + if (bindings->fs.storage_buffers[i].id) { + bnd.fs_sbufs[i] = _sg_lookup_buffer(&_sg.pools, bindings->fs.storage_buffers[i].id); + if (bnd.fs_sbufs[i]) { + _sg.next_draw_valid &= (SG_RESOURCESTATE_VALID == bnd.fs_sbufs[i]->slot.state); + } else { + _sg.next_draw_valid = false; + } + } else { + break; + } + } if (_sg.next_draw_valid) { _sg.next_draw_valid &= _sg_apply_bindings(&bnd); _SG_TRACE_ARGS(apply_bindings, bindings); @@ -17975,20 +18365,12 @@ SOKOL_API_IMPL void sg_draw(int base_element, int num_elements, int num_instance SOKOL_ASSERT(num_elements >= 0); SOKOL_ASSERT(num_instances >= 0); _sg_stats_add(num_draw, 1); - #if defined(SOKOL_DEBUG) - if (!_sg.apply_bindings_called) { - _SG_WARN(DRAW_WITHOUT_BINDINGS); - } - #endif if (!_sg.cur_pass.valid) { return; } if (!_sg.next_draw_valid) { return; } - if (!_sg.apply_bindings_called) { - return; - } /* attempting to draw with zero elements or instances is not technically an error, but might be handled as an error in the backend API (e.g. on Metal) */ diff --git a/sokol/c/sokol_gl.h b/sokol/c/sokol_gl.h index 997ddea..15b3880 100644 --- a/sokol/c/sokol_gl.h +++ b/sokol/c/sokol_gl.h @@ -17,7 +17,7 @@ platform-specific embedded shader code (these are the same defines as used by sokol_gfx.h and sokol_app.h): - SOKOL_GLCORE33 + SOKOL_GLCORE SOKOL_GLES3 SOKOL_D3D11 SOKOL_METAL @@ -973,7 +973,7 @@ inline sgl_pipeline sgl_context_make_pipeline(sgl_context ctx, const sg_pipeline /* Embedded source code compiled with: - sokol-shdc -i sgl.glsl -o sgl.h -l glsl330:glsl300es:hlsl4:metal_macos:metal_ios:metal_sim:wgpu -b + sokol-shdc -i sgl.glsl -o sgl.h -l glsl410:glsl300es:hlsl4:metal_macos:metal_ios:metal_sim:wgpu -b (not that for Metal and D3D11 byte code, sokol-shdc must be run on macOS and Windows) @@ -1013,55 +1013,60 @@ inline sgl_pipeline sgl_context_make_pipeline(sgl_context ctx, const sg_pipeline @program sgl vs fs */ -#if defined(SOKOL_GLCORE33) -static const char _sgl_vs_source_glsl330[478] = { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +#if defined(SOKOL_GLCORE) +static const uint8_t _sgl_vs_source_glsl410[520] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x38,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a, 0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20, 0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x70,0x73, - 0x69,0x7a,0x65,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x75,0x76, - 0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f, - 0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74, - 0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65, - 0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, - 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69, - 0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, - 0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, - 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c, - 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76, - 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70, - 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f, - 0x50,0x6f,0x69,0x6e,0x74,0x53,0x69,0x7a,0x65,0x20,0x3d,0x20,0x70,0x73,0x69,0x7a, - 0x65,0x3b,0x0a,0x20,0x20,0x20,0x20,0x75,0x76,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34, - 0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x2c,0x20,0x76, - 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x35,0x5d,0x2c,0x20,0x76,0x73,0x5f, - 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x36,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61, - 0x72,0x61,0x6d,0x73,0x5b,0x37,0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28, - 0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20, - 0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20, - 0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x69,0x7a,0x65,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x34,0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f, + 0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76, + 0x65,0x63,0x32,0x20,0x74,0x65,0x78,0x63,0x6f,0x6f,0x72,0x64,0x30,0x3b,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x31,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d, + 0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50, + 0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f, + 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61, + 0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, + 0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x69,0x6e,0x74,0x53, + 0x69,0x7a,0x65,0x20,0x3d,0x20,0x70,0x73,0x69,0x7a,0x65,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x75,0x76,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61, + 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, + 0x6d,0x73,0x5b,0x35,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, + 0x5b,0x36,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x37, + 0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x74,0x65,0x78,0x63,0x6f,0x6f, + 0x72,0x64,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a, + 0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; -static const char _sgl_fs_source_glsl330[180] = { - 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x33,0x30,0x0a,0x0a,0x75,0x6e, +static const uint8_t _sgl_fs_source_glsl410[222] = { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x31,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20, 0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x3b,0x0a,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74, 0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f, 0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, - 0x6f,0x72,0x3b,0x0a,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x75,0x76,0x3b,0x0a, - 0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74, - 0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20, - 0x75,0x76,0x2e,0x78,0x79,0x29,0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, - 0x7d,0x0a,0x0a,0x00, + 0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34, + 0x20,0x75,0x76,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d, + 0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65, + 0x28,0x74,0x65,0x78,0x5f,0x73,0x6d,0x70,0x2c,0x20,0x75,0x76,0x2e,0x78,0x79,0x29, + 0x20,0x2a,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; #elif defined(SOKOL_GLES3) -static const char _sgl_vs_source_glsl300es[481] = { +static const uint8_t _sgl_vs_source_glsl300es[481] = { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73, 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x38,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f, @@ -1094,7 +1099,7 @@ static const char _sgl_vs_source_glsl300es[481] = { 0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x30,0x3b,0x0a,0x7d,0x0a,0x0a, 0x00, }; -static const char _sgl_fs_source_glsl300es[253] = { +static const uint8_t _sgl_fs_source_glsl300es[253] = { 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x70,0x72,0x65,0x63,0x69,0x73,0x69,0x6f,0x6e,0x20,0x6d,0x65,0x64,0x69,0x75,0x6d, 0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x3b,0x0a,0x70,0x72,0x65,0x63,0x69,0x73,0x69, @@ -1890,7 +1895,7 @@ static const uint8_t _sgl_fs_bytecode_metal_ios[2809] = { 0x42,0x40,0x29,0x49,0x50,0x20,0x86,0x60,0x01,0x23,0x9f,0xd9,0x06,0x23,0x00,0x32, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; -static const char _sgl_vs_source_metal_sim[756] = { +static const uint8_t _sgl_vs_source_metal_sim[756] = { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, @@ -1940,7 +1945,7 @@ static const char _sgl_vs_source_metal_sim[756] = { 0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a, 0x7d,0x0a,0x0a,0x00, }; -static const char _sgl_fs_source_metal_sim[439] = { +static const uint8_t _sgl_fs_source_metal_sim[439] = { 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, @@ -2080,7 +2085,7 @@ static const uint8_t _sgl_fs_bytecode_hlsl4[608] = { }; #elif defined(SOKOL_WGPU) -static const char _sgl_vs_source_wgsl[1162] = { +static const uint8_t _sgl_vs_source_wgsl[1162] = { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20, @@ -2155,17 +2160,17 @@ static const char _sgl_vs_source_wgsl[1162] = { 0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x75,0x76,0x2c,0x20,0x63,0x6f, 0x6c,0x6f,0x72,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, }; -static const char _sgl_fs_source_wgsl[647] = { +static const uint8_t _sgl_fs_source_wgsl[647] = { 0x64,0x69,0x61,0x67,0x6e,0x6f,0x73,0x74,0x69,0x63,0x28,0x6f,0x66,0x66,0x2c,0x20, 0x64,0x65,0x72,0x69,0x76,0x61,0x74,0x69,0x76,0x65,0x5f,0x75,0x6e,0x69,0x66,0x6f, 0x72,0x6d,0x69,0x74,0x79,0x29,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, 0x76,0x61,0x74,0x65,0x3e,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, 0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66,0x3b,0x0a,0x0a,0x40,0x67,0x72,0x6f,0x75, - 0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x33,0x32, + 0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x28,0x34,0x38, 0x29,0x20,0x76,0x61,0x72,0x20,0x74,0x65,0x78,0x20,0x3a,0x20,0x74,0x65,0x78,0x74, 0x75,0x72,0x65,0x5f,0x32,0x64,0x3c,0x66,0x33,0x32,0x3e,0x3b,0x0a,0x0a,0x40,0x67, 0x72,0x6f,0x75,0x70,0x28,0x31,0x29,0x20,0x40,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67, - 0x28,0x34,0x38,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73, + 0x28,0x36,0x34,0x29,0x20,0x76,0x61,0x72,0x20,0x73,0x6d,0x70,0x20,0x3a,0x20,0x73, 0x61,0x6d,0x70,0x6c,0x65,0x72,0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69, 0x76,0x61,0x74,0x65,0x3e,0x20,0x75,0x76,0x20,0x3a,0x20,0x76,0x65,0x63,0x34,0x66, 0x3b,0x0a,0x0a,0x76,0x61,0x72,0x3c,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x3e,0x20, @@ -2202,7 +2207,7 @@ static const char _sgl_fs_source_wgsl[647] = { static const char* _sgl_vs_source_dummy = ""; static const char* _sgl_fs_source_dummy = ""; #else -#error "Please define one of SOKOL_GLCORE33, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND!" +#error "Please define one of SOKOL_GLCORE, SOKOL_GLES3, SOKOL_D3D11, SOKOL_METAL, SOKOL_WGPU or SOKOL_DUMMY_BACKEND!" #endif // ████████ ██ ██ ██████ ███████ ███████ @@ -3284,12 +3289,12 @@ static void _sgl_setup_common(void) { shd_desc.fs.image_sampler_pairs[0].sampler_slot = 0; shd_desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp"; shd_desc.label = "sgl-shader"; - #if defined(SOKOL_GLCORE33) - shd_desc.vs.source = _sgl_vs_source_glsl330; - shd_desc.fs.source = _sgl_fs_source_glsl330; + #if defined(SOKOL_GLCORE) + shd_desc.vs.source = (const char*)_sgl_vs_source_glsl410; + shd_desc.fs.source = (const char*)_sgl_fs_source_glsl410; #elif defined(SOKOL_GLES3) - shd_desc.vs.source = _sgl_vs_source_glsl300es; - shd_desc.fs.source = _sgl_fs_source_glsl300es; + shd_desc.vs.source = (const char*)_sgl_vs_source_glsl300es; + shd_desc.fs.source = (const char*)_sgl_fs_source_glsl300es; #elif defined(SOKOL_METAL) shd_desc.vs.entry = "main0"; shd_desc.fs.entry = "main0"; @@ -3303,16 +3308,16 @@ static void _sgl_setup_common(void) { shd_desc.fs.bytecode = SG_RANGE(_sgl_fs_bytecode_metal_ios); break; default: - shd_desc.vs.source = _sgl_vs_source_metal_sim; - shd_desc.fs.source = _sgl_fs_source_metal_sim; + shd_desc.vs.source = (const char*)_sgl_vs_source_metal_sim; + shd_desc.fs.source = (const char*)_sgl_fs_source_metal_sim; break; } #elif defined(SOKOL_D3D11) shd_desc.vs.bytecode = SG_RANGE(_sgl_vs_bytecode_hlsl4); shd_desc.fs.bytecode = SG_RANGE(_sgl_fs_bytecode_hlsl4); #elif defined(SOKOL_WGPU) - shd_desc.vs.source = _sgl_vs_source_wgsl; - shd_desc.fs.source = _sgl_fs_source_wgsl; + shd_desc.vs.source = (const char*)_sgl_vs_source_wgsl; + shd_desc.fs.source = (const char*)_sgl_fs_source_wgsl; #else shd_desc.vs.source = _sgl_vs_source_dummy; shd_desc.fs.source = _sgl_fs_source_dummy; diff --git a/sokol/c/sokol_glue.h b/sokol/c/sokol_glue.h index a715b17..c029495 100644 --- a/sokol/c/sokol_glue.h +++ b/sokol/c/sokol_glue.h @@ -135,6 +135,8 @@ SOKOL_API_IMPL sg_environment sglue_environment(void) { env.d3d11.device = sapp_d3d11_get_device(); env.d3d11.device_context = sapp_d3d11_get_device_context(); env.wgpu.device = sapp_wgpu_get_device(); + env.gl.major_version = sapp_gl_get_major_version(); + env.gl.minor_version = sapp_gl_get_minor_version(); return env; } diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index de97f8a..ec05ffc 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -225,6 +225,7 @@ MAX_VERTEX_BUFFERS :: 8 MAX_SHADERSTAGE_IMAGES :: 12 MAX_SHADERSTAGE_SAMPLERS :: 8 MAX_SHADERSTAGE_IMAGESAMPLERPAIRS :: 12 +MAX_SHADERSTAGE_STORAGE_BUFFERS :: 8 MAX_SHADERSTAGE_UBS :: 4 MAX_UB_MEMBERS :: 16 MAX_VERTEX_ATTRIBUTES :: 16 @@ -239,7 +240,7 @@ Color :: struct { } Backend :: enum i32 { - GLCORE33, + GLCORE, GLES3, D3D11, METAL_IOS, @@ -338,6 +339,7 @@ Features :: struct { image_clamp_to_border : bool, mrt_independent_blend_state : bool, mrt_independent_write_mask : bool, + storage_buffer : bool, } Limits :: struct { @@ -370,6 +372,7 @@ Buffer_Type :: enum i32 { DEFAULT, VERTEXBUFFER, INDEXBUFFER, + STORAGEBUFFER, } Index_Type :: enum i32 { @@ -660,6 +663,7 @@ Pass :: struct { Stage_Bindings :: struct { images : [12]Image, samplers : [8]Sampler, + storage_buffers : [8]Buffer, } Bindings :: struct { @@ -753,6 +757,11 @@ Shader_Uniform_Block_Desc :: struct { uniforms : [16]Shader_Uniform_Desc, } +Shader_Storage_Buffer_Desc :: struct { + used : bool, + readonly : bool, +} + Shader_Image_Desc :: struct { used : bool, multisampled : bool, @@ -778,6 +787,7 @@ Shader_Stage_Desc :: struct { entry : cstring, d3d11_target : cstring, uniform_blocks : [4]Shader_Uniform_Block_Desc, + storage_buffers : [8]Shader_Storage_Buffer_Desc, images : [12]Shader_Image_Desc, samplers : [8]Shader_Sampler_Desc, image_sampler_pairs : [12]Shader_Image_Sampler_Pair_Desc, @@ -1005,6 +1015,7 @@ Frame_Stats_Metal_Bindings :: struct { num_set_vertex_buffer : u32, num_set_vertex_texture : u32, num_set_vertex_sampler_state : u32, + num_set_fragment_buffer : u32, num_set_fragment_texture : u32, num_set_fragment_sampler_state : u32, } @@ -1085,6 +1096,7 @@ Log_Item :: enum i32 { GL_FRAMEBUFFER_STATUS_INCOMPLETE_MULTISAMPLE, GL_FRAMEBUFFER_STATUS_UNKNOWN, D3D11_CREATE_BUFFER_FAILED, + D3D11_CREATE_BUFFER_SRV_FAILED, D3D11_CREATE_DEPTH_TEXTURE_UNSUPPORTED_PIXEL_FORMAT, D3D11_CREATE_DEPTH_TEXTURE_FAILED, D3D11_CREATE_2D_TEXTURE_UNSUPPORTED_PIXEL_FORMAT, @@ -1131,6 +1143,7 @@ Log_Item :: enum i32 { WGPU_CREATE_SHADER_MODULE_FAILED, WGPU_SHADER_TOO_MANY_IMAGES, WGPU_SHADER_TOO_MANY_SAMPLERS, + WGPU_SHADER_TOO_MANY_STORAGEBUFFERS, WGPU_SHADER_CREATE_BINDGROUP_LAYOUT_FAILED, WGPU_CREATE_PIPELINE_LAYOUT_FAILED, WGPU_CREATE_RENDER_PIPELINE_FAILED, @@ -1175,6 +1188,8 @@ Log_Item :: enum i32 { VALIDATE_BUFFERDESC_DATA, VALIDATE_BUFFERDESC_DATA_SIZE, VALIDATE_BUFFERDESC_NO_DATA, + VALIDATE_BUFFERDESC_STORAGEBUFFER_SUPPORTED, + VALIDATE_BUFFERDESC_STORAGEBUFFER_SIZE_MULTIPLE_4, VALIDATE_IMAGEDATA_NODATA, VALIDATE_IMAGEDATA_DATA_SIZE, VALIDATE_IMAGEDESC_CANARY, @@ -1208,6 +1223,8 @@ Log_Item :: enum i32 { VALIDATE_SHADERDESC_UB_SIZE_MISMATCH, VALIDATE_SHADERDESC_UB_ARRAY_COUNT, VALIDATE_SHADERDESC_UB_STD140_ARRAY_TYPE, + VALIDATE_SHADERDESC_NO_CONT_STORAGEBUFFERS, + VALIDATE_SHADERDESC_STORAGEBUFFER_READONLY, VALIDATE_SHADERDESC_NO_CONT_IMAGES, VALIDATE_SHADERDESC_NO_CONT_SAMPLERS, VALIDATE_SHADERDESC_IMAGE_SAMPLER_PAIR_IMAGE_SLOT_OUT_OF_RANGE, @@ -1221,11 +1238,10 @@ Log_Item :: enum i32 { VALIDATE_SHADERDESC_IMAGE_NOT_REFERENCED_BY_IMAGE_SAMPLER_PAIRS, VALIDATE_SHADERDESC_SAMPLER_NOT_REFERENCED_BY_IMAGE_SAMPLER_PAIRS, VALIDATE_SHADERDESC_NO_CONT_IMAGE_SAMPLER_PAIRS, - VALIDATE_SHADERDESC_ATTR_SEMANTICS, VALIDATE_SHADERDESC_ATTR_STRING_TOO_LONG, VALIDATE_PIPELINEDESC_CANARY, VALIDATE_PIPELINEDESC_SHADER, - VALIDATE_PIPELINEDESC_NO_ATTRS, + VALIDATE_PIPELINEDESC_NO_CONT_ATTRS, VALIDATE_PIPELINEDESC_LAYOUT_STRIDE4, VALIDATE_PIPELINEDESC_ATTR_SEMANTICS, VALIDATE_ATTACHMENTSDESC_CANARY, @@ -1329,6 +1345,10 @@ Log_Item :: enum i32 { VALIDATE_ABND_VS_EXPECTED_NONFILTERING_SAMPLER, VALIDATE_ABND_VS_UNEXPECTED_SAMPLER_BINDING, VALIDATE_ABND_VS_SMP_EXISTS, + VALIDATE_ABND_VS_EXPECTED_STORAGEBUFFER_BINDING, + VALIDATE_ABND_VS_STORAGEBUFFER_EXISTS, + VALIDATE_ABND_VS_STORAGEBUFFER_BINDING_BUFFERTYPE, + VALIDATE_ABND_VS_UNEXPECTED_STORAGEBUFFER_BINDING, VALIDATE_ABND_FS_EXPECTED_IMAGE_BINDING, VALIDATE_ABND_FS_IMG_EXISTS, VALIDATE_ABND_FS_IMAGE_TYPE_MISMATCH, @@ -1342,6 +1362,10 @@ Log_Item :: enum i32 { VALIDATE_ABND_FS_EXPECTED_NONFILTERING_SAMPLER, VALIDATE_ABND_FS_UNEXPECTED_SAMPLER_BINDING, VALIDATE_ABND_FS_SMP_EXISTS, + VALIDATE_ABND_FS_EXPECTED_STORAGEBUFFER_BINDING, + VALIDATE_ABND_FS_STORAGEBUFFER_EXISTS, + VALIDATE_ABND_FS_STORAGEBUFFER_BINDING_BUFFERTYPE, + VALIDATE_ABND_FS_UNEXPECTED_STORAGEBUFFER_BINDING, VALIDATE_AUB_NO_PIPELINE, VALIDATE_AUB_NO_UB_AT_SLOT, VALIDATE_AUB_SIZE, @@ -1376,11 +1400,17 @@ Wgpu_Environment :: struct { device : rawptr, } +Gl_Environment :: struct { + major_version : c.int, + minor_version : c.int, +} + Environment :: struct { defaults : Environment_Defaults, metal : Metal_Environment, d3d11 : D3d11_Environment, wgpu : Wgpu_Environment, + gl : Gl_Environment, } Commit_Listener :: struct { From 35b26db3c6e2d7d9398bbc4db2bad02214e05c92 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Mon, 22 Apr 2024 17:52:00 +0200 Subject: [PATCH 41/66] add a vertex-pulling-via-storage-buffer sample --- README.md | 1 + build_shaders_macos.sh | 1 + examples/vertexpull/main.odin | 151 +++++++++++ examples/vertexpull/shader.glsl | 39 +++ examples/vertexpull/shader.odin | 445 ++++++++++++++++++++++++++++++++ 5 files changed, 637 insertions(+) create mode 100644 examples/vertexpull/main.odin create mode 100644 examples/vertexpull/shader.glsl create mode 100644 examples/vertexpull/shader.odin diff --git a/README.md b/README.md index 07787cb..02b1154 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ On Linux install the following packages: libglu1-mesa-dev, mesa-common-dev, xorg odin run ../examples/sgl -debug odin run ../examples/sgl-points -debug odin run ../examples/sgl-context -debug + odin run ../examples/vertexpull -debug ``` By default, the backend 3D API will be selected based on the target platform: diff --git a/build_shaders_macos.sh b/build_shaders_macos.sh index 85511f2..c2cf0ce 100755 --- a/build_shaders_macos.sh +++ b/build_shaders_macos.sh @@ -26,3 +26,4 @@ build_shader quad build_shader shapes build_shader texcube build_shader triangle +build_shader vertexpull diff --git a/examples/vertexpull/main.odin b/examples/vertexpull/main.odin new file mode 100644 index 0000000..9a4a68f --- /dev/null +++ b/examples/vertexpull/main.odin @@ -0,0 +1,151 @@ +//------------------------------------------------------------------------------ +// vertexpull/main.odin +// +// Pull vertices from a storage buffer instead of using fixed-function +// vertex input. +//------------------------------------------------------------------------------ +package main + +import "core:runtime" +import slog "../../sokol/log" +import sg "../../sokol/gfx" +import sapp "../../sokol/app" +import sglue "../../sokol/glue" +import m "../math" + +state: struct { + rx, ry: f32, + pip: sg.Pipeline, + bind: sg.Bindings, + pass_action: sg.Pass_Action, +} + +init :: proc "c" () { + context = runtime.default_context() + sg.setup({ + environment = sglue.environment(), + logger = { func = slog.func }, + }) + + // if storage buffers are not supported on the current backend, just + // render a red screen + if !sg.query_features().storage_buffer { + state.pass_action = { + colors = { 0 = { load_action = .CLEAR, clear_value = { 1, 0, 0, 1 } } }, + } + return + } + // otherwise use a regular clear color... + state.pass_action = { + colors = { 0 = { load_action = .CLEAR, clear_value = { 0.75, 0.5, 0.25, 1 } } }, + } + + // a storage buffer with cube vertices, this is using the code-generated + // per-vertex struct from the shader + vertices := [?]Sb_Vertex{ + { pos = { -1.0, -1.0, -1.0 }, color = { 1.0, 0.0, 0.0, 1.0} }, + { pos = { 1.0, -1.0, -1.0 }, color = { 1.0, 0.0, 0.0, 1.0} }, + { pos = { 1.0, 1.0, -1.0 }, color = { 1.0, 0.0, 0.0, 1.0} }, + { pos = { -1.0, 1.0, -1.0 }, color = { 1.0, 0.0, 0.0, 1.0} }, + { pos = { -1.0, -1.0, 1.0 }, color = { 0.0, 1.0, 0.0, 1.0} }, + { pos = { 1.0, -1.0, 1.0 }, color = { 0.0, 1.0, 0.0, 1.0} }, + { pos = { 1.0, 1.0, 1.0 }, color = { 0.0, 1.0, 0.0, 1.0} }, + { pos = { -1.0, 1.0, 1.0 }, color = { 0.0, 1.0, 0.0, 1.0} }, + { pos = { -1.0, -1.0, -1.0 }, color = { 0.0, 0.0, 1.0, 1.0} }, + { pos = { -1.0, 1.0, -1.0 }, color = { 0.0, 0.0, 1.0, 1.0} }, + { pos = { -1.0, 1.0, 1.0 }, color = { 0.0, 0.0, 1.0, 1.0} }, + { pos = { -1.0, -1.0, 1.0 }, color = { 0.0, 0.0, 1.0, 1.0} }, + { pos = { 1.0, -1.0, -1.0 }, color = { 1.0, 0.5, 0.0, 1.0} }, + { pos = { 1.0, 1.0, -1.0 }, color = { 1.0, 0.5, 0.0, 1.0} }, + { pos = { 1.0, 1.0, 1.0 }, color = { 1.0, 0.5, 0.0, 1.0} }, + { pos = { 1.0, -1.0, 1.0 }, color = { 1.0, 0.5, 0.0, 1.0} }, + { pos = { -1.0, -1.0, -1.0 }, color = { 0.0, 0.5, 1.0, 1.0} }, + { pos = { -1.0, -1.0, 1.0 }, color = { 0.0, 0.5, 1.0, 1.0} }, + { pos = { 1.0, -1.0, 1.0 }, color = { 0.0, 0.5, 1.0, 1.0} }, + { pos = { 1.0, -1.0, -1.0 }, color = { 0.0, 0.5, 1.0, 1.0} }, + { pos = { -1.0, 1.0, -1.0 }, color = { 1.0, 0.0, 0.5, 1.0} }, + { pos = { -1.0, 1.0, 1.0 }, color = { 1.0, 0.0, 0.5, 1.0} }, + { pos = { 1.0, 1.0, 1.0 }, color = { 1.0, 0.0, 0.5, 1.0} }, + { pos = { 1.0, 1.0, -1.0 }, color = { 1.0, 0.0, 0.5, 1.0} }, + } + state.bind.vs.storage_buffers[SLOT_ssbo] = sg.make_buffer({ + type = .STORAGEBUFFER, + data = { ptr = &vertices, size = size_of(vertices) }, + }) + + // a regular index buffer + indices := [?]u16 { + 0, 1, 2, 0, 2, 3, + 6, 5, 4, 7, 6, 4, + 8, 9, 10, 8, 10, 11, + 14, 13, 12, 15, 14, 12, + 16, 17, 18, 16, 18, 19, + 22, 21, 20, 23, 22, 20, + } + state.bind.index_buffer = sg.make_buffer({ + type = .INDEXBUFFER, + data = { ptr = &indices, size = size_of(indices) }, + }) + + // a shader and pipeline object, not that there is no vertex layout definition + state.pip = sg.make_pipeline({ + shader = sg.make_shader(vertexpull_shader_desc(sg.query_backend())), + index_type = .UINT16, + cull_mode = .BACK, + depth = { + write_enabled = true, + compare = .LESS_EQUAL, + } + }) +} + +frame :: proc "c" () { + context = runtime.default_context() + + t := f32(sapp.frame_duration() * 60.0) + state.rx += t + state.ry += 2 * t + + vs_params := Vs_Params { + mvp = compute_mvp(state.rx, state.ry) + } + + sg.begin_pass({ action = state.pass_action, swapchain = sglue.swapchain() }) + if sg.query_features().storage_buffer { + sg.apply_pipeline(state.pip) + sg.apply_bindings(state.bind) + sg.apply_uniforms(.VS, SLOT_vs_params, { ptr = &vs_params, size = size_of(vs_params) }) + sg.draw(0, 36, 1) + } + sg.end_pass() + sg.commit() +} + +cleanup :: proc "c" () { + context = runtime.default_context() + sg.shutdown() +} + +compute_mvp :: proc (rx, ry: f32) -> m.mat4 { + proj := m.persp(fov = 60.0, aspect = sapp.widthf() / sapp.heightf(), near = 0.01, far = 10.0) + view := m.lookat(eye = {0.0, 1.5, 6.0}, center = {}, up = {0.0, 1.0, 0.0}) + view_proj := m.mul(proj, view) + rxm := m.rotate(rx, {1.0, 0.0, 0.0}) + rym := m.rotate(ry, {0.0, 1.0, 0.0}) + model := m.mul(rxm, rym) + return m.mul(view_proj, model) +} + +main :: proc () { + sapp.run({ + init_cb = init, + frame_cb = frame, + cleanup_cb = cleanup, + width = 800, + height = 600, + sample_count = 4, + window_title = "vertexpull", + icon = { sokol_default = true }, + logger = { func = slog.func }, + }) +} diff --git a/examples/vertexpull/shader.glsl b/examples/vertexpull/shader.glsl new file mode 100644 index 0000000..c4fc0f4 --- /dev/null +++ b/examples/vertexpull/shader.glsl @@ -0,0 +1,39 @@ +@header package main +@header import sg "../../sokol/gfx" +@header import m "../math" + +@ctype mat4 m.mat4 + +@vs vs +uniform vs_params { + mat4 mvp; +}; + +// NOTE: 'vertex' is a reserved name in MSL +struct sb_vertex { + vec3 pos; + vec4 color; +}; + +readonly buffer ssbo { + sb_vertex vtx[]; +}; + +out vec4 color; + +void main() { + gl_Position = mvp * vec4(vtx[gl_VertexIndex].pos, 1.0); + color = vtx[gl_VertexIndex].color; +} +@end + +@fs fs +in vec4 color; +out vec4 frag_color; + +void main() { + frag_color = color; +} +@end + +@program vertexpull vs fs \ No newline at end of file diff --git a/examples/vertexpull/shader.odin b/examples/vertexpull/shader.odin new file mode 100644 index 0000000..c76d39e --- /dev/null +++ b/examples/vertexpull/shader.odin @@ -0,0 +1,445 @@ +package main +import sg "../../sokol/gfx" +import m "../math" +/* + #version:1# (machine generated, don't edit!) + + Generated by sokol-shdc (https://github.com/floooh/sokol-tools) + + Cmdline: + sokol-shdc -i examples/vertexpull/shader.glsl -o examples/vertexpull/shader.odin -l glsl430:metal_macos:hlsl5 -f sokol_odin + + Overview: + ========= + Shader program: 'vertexpull': + Get shader desc: vertexpull_shader_desc(sg.query_backend()) + Vertex shader: vs + Attributes: + Uniform block 'vs_params': + Odin struct: Vs_Params + Bind slot: SLOT_vs_params => 0 + Storage buffer 'ssbo': + Odin struct: Ssbo + Bind slot: SLOT_ssbo => 0 + Fragment shader: fs +*/ +SLOT_vs_params :: 0 +SLOT_ssbo :: 0 +Vs_Params :: struct #align(16) { + using _: struct #packed { + mvp: m.mat4, + }, +} +Sb_Vertex :: struct #align(16) { + using _: struct #packed { + pos: [3]f32, + _: [4]u8, + color: [4]f32, + } +} +/* + #version 430 + + struct sb_vertex + { + vec3 pos; + vec4 color; + }; + + uniform vec4 vs_params[4]; + layout(binding = 0, std430) readonly buffer ssbo + { + sb_vertex vtx[]; + } _28; + + layout(location = 0) out vec4 color; + + void main() + { + gl_Position = mat4(vs_params[0], vs_params[1], vs_params[2], vs_params[3]) * vec4(_28.vtx[gl_VertexID].pos, 1.0); + color = _28.vtx[gl_VertexID].color; + } + +*/ +@(private) +vs_source_glsl430 := [388]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x73,0x74, + 0x72,0x75,0x63,0x74,0x20,0x73,0x62,0x5f,0x76,0x65,0x72,0x74,0x65,0x78,0x0a,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x6f,0x73,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d, + 0x3b,0x0a,0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x62,0x69,0x6e,0x64,0x69,0x6e,0x67,0x20,0x3d,0x20,0x30, + 0x2c,0x20,0x73,0x74,0x64,0x34,0x33,0x30,0x29,0x20,0x72,0x65,0x61,0x64,0x6f,0x6e, + 0x6c,0x79,0x20,0x62,0x75,0x66,0x66,0x65,0x72,0x20,0x73,0x73,0x62,0x6f,0x0a,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x73,0x62,0x5f,0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x76, + 0x74,0x78,0x5b,0x5d,0x3b,0x0a,0x7d,0x20,0x5f,0x32,0x38,0x3b,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a, + 0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61, + 0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73, + 0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32, + 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29, + 0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x5f,0x32,0x38,0x2e,0x76,0x74,0x78,0x5b, + 0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x44,0x5d,0x2e,0x70,0x6f,0x73, + 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x5f,0x32,0x38,0x2e,0x76,0x74,0x78,0x5b,0x67,0x6c,0x5f,0x56, + 0x65,0x72,0x74,0x65,0x78,0x49,0x44,0x5d,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a, + 0x7d,0x0a,0x0a,0x00, +} +/* + #version 430 + + layout(location = 0) out vec4 frag_color; + layout(location = 0) in vec4 color; + + void main() + { + frag_color = color; + } + +*/ +@(private) +fs_source_glsl430 := [135]u8 { + 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x6c,0x61, + 0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, + 0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66,0x72,0x61,0x67, + 0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a,0x76,0x6f,0x69, + 0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +} +/* + struct sb_vertex + { + float3 pos; + float4 color; + }; + + cbuffer vs_params : register(b0) + { + row_major float4x4 _19_mvp : packoffset(c0); + }; + + ByteAddressBuffer _28 : register(t16); + + static float4 gl_Position; + static int gl_VertexIndex; + static float4 color; + + struct SPIRV_Cross_Input + { + uint gl_VertexIndex : SV_VertexID; + }; + + struct SPIRV_Cross_Output + { + float4 color : TEXCOORD0; + float4 gl_Position : SV_Position; + }; + + void vert_main() + { + gl_Position = mul(float4(asfloat(_28.Load3(gl_VertexIndex * 32 + 0)), 1.0f), _19_mvp); + color = asfloat(_28.Load4(gl_VertexIndex * 32 + 16)); + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + gl_VertexIndex = int(stage_input.gl_VertexIndex); + vert_main(); + SPIRV_Cross_Output stage_output; + stage_output.gl_Position = gl_Position; + stage_output.color = color; + return stage_output; + } +*/ +@(private) +vs_source_hlsl5 := [871]u8 { + 0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x73,0x62,0x5f,0x76,0x65,0x72,0x74,0x65,0x78, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x6f, + 0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x63,0x62,0x75,0x66,0x66,0x65,0x72, + 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x20,0x3a,0x20,0x72,0x65,0x67, + 0x69,0x73,0x74,0x65,0x72,0x28,0x62,0x30,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, + 0x72,0x6f,0x77,0x5f,0x6d,0x61,0x6a,0x6f,0x72,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34, + 0x78,0x34,0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76,0x70,0x20,0x3a,0x20,0x70,0x61,0x63, + 0x6b,0x6f,0x66,0x66,0x73,0x65,0x74,0x28,0x63,0x30,0x29,0x3b,0x0a,0x7d,0x3b,0x0a, + 0x0a,0x42,0x79,0x74,0x65,0x41,0x64,0x64,0x72,0x65,0x73,0x73,0x42,0x75,0x66,0x66, + 0x65,0x72,0x20,0x5f,0x32,0x38,0x20,0x3a,0x20,0x72,0x65,0x67,0x69,0x73,0x74,0x65, + 0x72,0x28,0x74,0x31,0x36,0x29,0x3b,0x0a,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x69,0x6e,0x74,0x20,0x67, + 0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x3b,0x0a,0x73, + 0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c, + 0x6f,0x72,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52, + 0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74, + 0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x20,0x3a,0x20,0x53,0x56,0x5f,0x56,0x65,0x72, + 0x74,0x65,0x78,0x49,0x44,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63, + 0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75, + 0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a,0x20,0x54,0x45,0x58,0x43,0x4f,0x4f, + 0x52,0x44,0x30,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3a,0x20,0x53,0x56, + 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x76, + 0x6f,0x69,0x64,0x20,0x76,0x65,0x72,0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a, + 0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x20,0x3d,0x20,0x6d,0x75,0x6c,0x28,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x61, + 0x73,0x66,0x6c,0x6f,0x61,0x74,0x28,0x5f,0x32,0x38,0x2e,0x4c,0x6f,0x61,0x64,0x33, + 0x28,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x20, + 0x2a,0x20,0x33,0x32,0x20,0x2b,0x20,0x30,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x66, + 0x29,0x2c,0x20,0x5f,0x31,0x39,0x5f,0x6d,0x76,0x70,0x29,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x61,0x73,0x66,0x6c,0x6f,0x61,0x74, + 0x28,0x5f,0x32,0x38,0x2e,0x4c,0x6f,0x61,0x64,0x34,0x28,0x67,0x6c,0x5f,0x56,0x65, + 0x72,0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x20,0x2a,0x20,0x33,0x32,0x20,0x2b, + 0x20,0x31,0x36,0x29,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x53,0x50,0x49,0x52,0x56,0x5f, + 0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x6d,0x61,0x69, + 0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x49,0x6e, + 0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x29, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78, + 0x49,0x6e,0x64,0x65,0x78,0x20,0x3d,0x20,0x69,0x6e,0x74,0x28,0x73,0x74,0x61,0x67, + 0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65, + 0x78,0x49,0x6e,0x64,0x65,0x78,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x72, + 0x74,0x5f,0x6d,0x61,0x69,0x6e,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50, + 0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74, + 0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20, + 0x20,0x20,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e, + 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x67,0x6c, + 0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x20,0x20,0x20,0x20,0x73, + 0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x63,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72, + 0x65,0x74,0x75,0x72,0x6e,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70, + 0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x00, +} +/* + static float4 frag_color; + static float4 color; + + struct SPIRV_Cross_Input + { + float4 color : TEXCOORD0; + }; + + struct SPIRV_Cross_Output + { + float4 frag_color : SV_Target0; + }; + + void frag_main() + { + frag_color = color; + } + + SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) + { + color = stage_input.color; + frag_main(); + SPIRV_Cross_Output stage_output; + stage_output.frag_color = frag_color; + return stage_output; + } +*/ +@(private) +fs_source_hlsl5 := [435]u8 { + 0x73,0x74,0x61,0x74,0x69,0x63,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72, + 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x73,0x74,0x61,0x74,0x69,0x63, + 0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x0a, + 0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f, + 0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a,0x20,0x54,0x45, + 0x58,0x43,0x4f,0x4f,0x52,0x44,0x30,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72, + 0x75,0x63,0x74,0x20,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f, + 0x4f,0x75,0x74,0x70,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3a, + 0x20,0x53,0x56,0x5f,0x54,0x61,0x72,0x67,0x65,0x74,0x30,0x3b,0x0a,0x7d,0x3b,0x0a, + 0x0a,0x76,0x6f,0x69,0x64,0x20,0x66,0x72,0x61,0x67,0x5f,0x6d,0x61,0x69,0x6e,0x28, + 0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c, + 0x6f,0x72,0x20,0x3d,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x0a,0x0a,0x53, + 0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75, + 0x74,0x20,0x6d,0x61,0x69,0x6e,0x28,0x53,0x50,0x49,0x52,0x56,0x5f,0x43,0x72,0x6f, + 0x73,0x73,0x5f,0x49,0x6e,0x70,0x75,0x74,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69, + 0x6e,0x70,0x75,0x74,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x70,0x75,0x74,0x2e, + 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x6d,0x61,0x69,0x6e,0x28,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x53,0x50,0x49,0x52, + 0x56,0x5f,0x43,0x72,0x6f,0x73,0x73,0x5f,0x4f,0x75,0x74,0x70,0x75,0x74,0x20,0x73, + 0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a,0x20,0x20,0x20, + 0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x2e,0x66,0x72, + 0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x72,0x61,0x67,0x5f, + 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72, + 0x6e,0x20,0x73,0x74,0x61,0x67,0x65,0x5f,0x6f,0x75,0x74,0x70,0x75,0x74,0x3b,0x0a, + 0x7d,0x0a,0x00, +} +/* + #include + #include + + using namespace metal; + + struct vs_params + { + float4x4 mvp; + }; + + struct sb_vertex + { + float3 pos; + float4 color; + }; + + struct ssbo + { + sb_vertex vtx[1]; + }; + + struct main0_out + { + float4 color [[user(locn0)]]; + float4 gl_Position [[position]]; + }; + + vertex main0_out main0(constant vs_params& _19 [[buffer(0)]], const device ssbo& _28 [[buffer(12)]], uint gl_VertexIndex [[vertex_id]]) + { + main0_out out = {}; + out.gl_Position = _19.mvp * float4(_28.vtx[int(gl_VertexIndex)].pos, 1.0); + out.color = _28.vtx[int(gl_VertexIndex)].color; + return out; + } + +*/ +@(private) +vs_source_metal_macos := [617]u8 { + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x76, + 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x78,0x34,0x20,0x6d,0x76,0x70,0x3b,0x0a,0x7d,0x3b,0x0a, + 0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x73,0x62,0x5f,0x76,0x65,0x72,0x74,0x65, + 0x78,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70, + 0x6f,0x73,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20,0x63, + 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74, + 0x20,0x73,0x73,0x62,0x6f,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x73,0x62,0x5f,0x76, + 0x65,0x72,0x74,0x65,0x78,0x20,0x76,0x74,0x78,0x5b,0x31,0x5d,0x3b,0x0a,0x7d,0x3b, + 0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f, + 0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63, + 0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x34,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x5b,0x5b, + 0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a, + 0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74, + 0x20,0x6d,0x61,0x69,0x6e,0x30,0x28,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20, + 0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x26,0x20,0x5f,0x31,0x39,0x20,0x5b, + 0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x2c,0x20,0x63,0x6f, + 0x6e,0x73,0x74,0x20,0x64,0x65,0x76,0x69,0x63,0x65,0x20,0x73,0x73,0x62,0x6f,0x26, + 0x20,0x5f,0x32,0x38,0x20,0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x31,0x32, + 0x29,0x5d,0x5d,0x2c,0x20,0x75,0x69,0x6e,0x74,0x20,0x67,0x6c,0x5f,0x56,0x65,0x72, + 0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x20,0x5b,0x5b,0x76,0x65,0x72,0x74,0x65, + 0x78,0x5f,0x69,0x64,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61, + 0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d, + 0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x67,0x6c,0x5f,0x50,0x6f,0x73, + 0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x5f,0x31,0x39,0x2e,0x6d,0x76,0x70,0x20, + 0x2a,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x5f,0x32,0x38,0x2e,0x76,0x74,0x78, + 0x5b,0x69,0x6e,0x74,0x28,0x67,0x6c,0x5f,0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x6e, + 0x64,0x65,0x78,0x29,0x5d,0x2e,0x70,0x6f,0x73,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b, + 0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d, + 0x20,0x5f,0x32,0x38,0x2e,0x76,0x74,0x78,0x5b,0x69,0x6e,0x74,0x28,0x67,0x6c,0x5f, + 0x56,0x65,0x72,0x74,0x65,0x78,0x49,0x6e,0x64,0x65,0x78,0x29,0x5d,0x2e,0x63,0x6f, + 0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20, + 0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +} +/* + #include + #include + + using namespace metal; + + struct main0_out + { + float4 frag_color [[color(0)]]; + }; + + struct main0_in + { + float4 color [[user(locn0)]]; + }; + + fragment main0_out main0(main0_in in [[stage_in]]) + { + main0_out out = {}; + out.frag_color = in.color; + return out; + } + +*/ +@(private) +fs_source_metal_macos := [315]u8 { + 0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x20,0x3c,0x6d,0x65,0x74,0x61,0x6c,0x5f, + 0x73,0x74,0x64,0x6c,0x69,0x62,0x3e,0x0a,0x23,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, + 0x20,0x3c,0x73,0x69,0x6d,0x64,0x2f,0x73,0x69,0x6d,0x64,0x2e,0x68,0x3e,0x0a,0x0a, + 0x75,0x73,0x69,0x6e,0x67,0x20,0x6e,0x61,0x6d,0x65,0x73,0x70,0x61,0x63,0x65,0x20, + 0x6d,0x65,0x74,0x61,0x6c,0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d, + 0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66, + 0x6c,0x6f,0x61,0x74,0x34,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72, + 0x20,0x5b,0x5b,0x63,0x6f,0x6c,0x6f,0x72,0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d, + 0x3b,0x0a,0x0a,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f, + 0x69,0x6e,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x20,0x5b,0x5b,0x75,0x73,0x65,0x72,0x28,0x6c,0x6f,0x63, + 0x6e,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x7d,0x3b,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d, + 0x65,0x6e,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6d,0x61, + 0x69,0x6e,0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x69,0x6e,0x20,0x69,0x6e,0x20, + 0x5b,0x5b,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e,0x5d,0x5d,0x29,0x0a,0x7b,0x0a, + 0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75, + 0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e, + 0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x69,0x6e,0x2e, + 0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72, + 0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, +} +vertexpull_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { + desc: sg.Shader_Desc + desc.label = "vertexpull_shader" + #partial switch backend { + case .GLCORE: { + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + } + case .D3D11: { + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + } + case .METAL_MACOS: { + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" + } + } + return desc +} From ed5ee443b4b047aa535a7427a1a6756b22e0ca53 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Mon, 22 Apr 2024 18:24:29 +0200 Subject: [PATCH 42/66] update code-generated shaders --- examples/blend/shader.odin | 128 +++++----- examples/bufferoffsets/shader.odin | 49 ++-- examples/cube/shader.odin | 67 +++-- examples/instancing/shader.odin | 73 +++--- examples/mrt/shader.odin | 371 ++++++++++++++-------------- examples/noninterleaved/shader.odin | 67 +++-- examples/offscreen/shader.odin | 196 +++++++-------- examples/quad/shader.odin | 49 ++-- examples/shapes/shader.odin | 79 +++--- examples/texcube/shader.odin | 129 +++++----- examples/triangle/shader.odin | 49 ++-- examples/vertexpull/shader.odin | 67 +++-- 12 files changed, 638 insertions(+), 686 deletions(-) diff --git a/examples/blend/shader.odin b/examples/blend/shader.odin index c3194be..86e2661 100644 --- a/examples/blend/shader.odin +++ b/examples/blend/shader.odin @@ -693,38 +693,35 @@ bg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "bg_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.vs.source = transmute(cstring)&vs_bg_source_glsl430 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_bg_source_glsl430 - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - desc.fs.uniform_blocks[0].uniforms[0].name = "bg_fs_params" - desc.fs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.fs.uniform_blocks[0].uniforms[0].array_count = 1 - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_bg_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_bg_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_bg_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&fs_bg_source_metal_macos - desc.fs.entry = "main0" - desc.fs.uniform_blocks[0].size = 16 - desc.fs.uniform_blocks[0].layout = .STD140 - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.vs.source = transmute(cstring)&vs_bg_source_glsl430 + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_bg_source_glsl430 + desc.fs.entry = "main" + desc.fs.uniform_blocks[0].size = 16 + desc.fs.uniform_blocks[0].layout = .STD140 + desc.fs.uniform_blocks[0].uniforms[0].name = "bg_fs_params" + desc.fs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.fs.uniform_blocks[0].uniforms[0].array_count = 1 + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.vs.source = transmute(cstring)&vs_bg_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_bg_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + desc.fs.uniform_blocks[0].size = 16 + desc.fs.uniform_blocks[0].layout = .STD140 + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_bg_source_metal_macos + desc.vs.entry = "main0" + desc.fs.source = transmute(cstring)&fs_bg_source_metal_macos + desc.fs.entry = "main0" + desc.fs.uniform_blocks[0].size = 16 + desc.fs.uniform_blocks[0].layout = .STD140 } return desc } @@ -732,41 +729,38 @@ quad_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "quad_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_quad_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "quad_vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_quad_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_quad_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_quad_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_quad_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_quad_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_quad_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "quad_vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_quad_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_quad_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_quad_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_quad_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_quad_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/bufferoffsets/shader.odin b/examples/bufferoffsets/shader.odin index f085e05..c0f3c92 100644 --- a/examples/bufferoffsets/shader.odin +++ b/examples/bufferoffsets/shader.odin @@ -320,32 +320,29 @@ bufferoffsets_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "bufferoffsets_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/cube/shader.odin b/examples/cube/shader.odin index 2ac8342..112a637 100644 --- a/examples/cube/shader.odin +++ b/examples/cube/shader.odin @@ -358,41 +358,38 @@ cube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "cube_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/instancing/shader.odin b/examples/instancing/shader.odin index ed12255..9c34c74 100644 --- a/examples/instancing/shader.odin +++ b/examples/instancing/shader.odin @@ -378,44 +378,41 @@ instancing_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "instancing_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "pos" - desc.attrs[1].name = "color0" - desc.attrs[2].name = "inst_pos" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.attrs[2].sem_name = "TEXCOORD" - desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "pos" + desc.attrs[1].name = "color0" + desc.attrs[2].name = "inst_pos" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.attrs[2].sem_name = "TEXCOORD" + desc.attrs[2].sem_index = 2 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/mrt/shader.odin b/examples/mrt/shader.odin index 8d507c0..14a48d7 100644 --- a/examples/mrt/shader.odin +++ b/examples/mrt/shader.odin @@ -1242,57 +1242,54 @@ dbg_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "dbg_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "pos" - desc.vs.source = transmute(cstring)&vs_dbg_source_glsl430 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_dbg_source_glsl430 - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_dbg_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_dbg_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_dbg_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&fs_dbg_source_metal_macos - desc.fs.entry = "main0" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } + case .GLCORE: + desc.attrs[0].name = "pos" + desc.vs.source = transmute(cstring)&vs_dbg_source_glsl430 + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_dbg_source_glsl430 + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.vs.source = transmute(cstring)&vs_dbg_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_dbg_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_dbg_source_metal_macos + desc.vs.entry = "main0" + desc.fs.source = transmute(cstring)&fs_dbg_source_metal_macos + desc.fs.entry = "main0" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 } return desc } @@ -1300,110 +1297,107 @@ fsq_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "fsq_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "pos" - desc.vs.source = transmute(cstring)&vs_fsq_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 16 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "fsq_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 1 - desc.fs.source = transmute(cstring)&fs_fsq_source_glsl430 - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.images[1].used = true - desc.fs.images[1].multisampled = false - desc.fs.images[1].image_type = ._2D - desc.fs.images[1].sample_type = .FLOAT - desc.fs.images[2].used = true - desc.fs.images[2].multisampled = false - desc.fs.images[2].image_type = ._2D - desc.fs.images[2].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "tex0_smp" - desc.fs.image_sampler_pairs[1].used = true - desc.fs.image_sampler_pairs[1].image_slot = 1 - desc.fs.image_sampler_pairs[1].sampler_slot = 0 - desc.fs.image_sampler_pairs[1].glsl_name = "tex1_smp" - desc.fs.image_sampler_pairs[2].used = true - desc.fs.image_sampler_pairs[2].image_slot = 2 - desc.fs.image_sampler_pairs[2].sampler_slot = 0 - desc.fs.image_sampler_pairs[2].glsl_name = "tex2_smp" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.vs.source = transmute(cstring)&vs_fsq_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 16 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_fsq_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.images[1].used = true - desc.fs.images[1].multisampled = false - desc.fs.images[1].image_type = ._2D - desc.fs.images[1].sample_type = .FLOAT - desc.fs.images[2].used = true - desc.fs.images[2].multisampled = false - desc.fs.images[2].image_type = ._2D - desc.fs.images[2].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[1].used = true - desc.fs.image_sampler_pairs[1].image_slot = 1 - desc.fs.image_sampler_pairs[1].sampler_slot = 0 - desc.fs.image_sampler_pairs[2].used = true - desc.fs.image_sampler_pairs[2].image_slot = 2 - desc.fs.image_sampler_pairs[2].sampler_slot = 0 - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_fsq_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 16 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_fsq_source_metal_macos - desc.fs.entry = "main0" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.images[1].used = true - desc.fs.images[1].multisampled = false - desc.fs.images[1].image_type = ._2D - desc.fs.images[1].sample_type = .FLOAT - desc.fs.images[2].used = true - desc.fs.images[2].multisampled = false - desc.fs.images[2].image_type = ._2D - desc.fs.images[2].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[1].used = true - desc.fs.image_sampler_pairs[1].image_slot = 1 - desc.fs.image_sampler_pairs[1].sampler_slot = 0 - desc.fs.image_sampler_pairs[2].used = true - desc.fs.image_sampler_pairs[2].image_slot = 2 - desc.fs.image_sampler_pairs[2].sampler_slot = 0 - } + case .GLCORE: + desc.attrs[0].name = "pos" + desc.vs.source = transmute(cstring)&vs_fsq_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 16 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "fsq_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 1 + desc.fs.source = transmute(cstring)&fs_fsq_source_glsl430 + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.images[1].used = true + desc.fs.images[1].multisampled = false + desc.fs.images[1].image_type = ._2D + desc.fs.images[1].sample_type = .FLOAT + desc.fs.images[2].used = true + desc.fs.images[2].multisampled = false + desc.fs.images[2].image_type = ._2D + desc.fs.images[2].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[0].glsl_name = "tex0_smp" + desc.fs.image_sampler_pairs[1].used = true + desc.fs.image_sampler_pairs[1].image_slot = 1 + desc.fs.image_sampler_pairs[1].sampler_slot = 0 + desc.fs.image_sampler_pairs[1].glsl_name = "tex1_smp" + desc.fs.image_sampler_pairs[2].used = true + desc.fs.image_sampler_pairs[2].image_slot = 2 + desc.fs.image_sampler_pairs[2].sampler_slot = 0 + desc.fs.image_sampler_pairs[2].glsl_name = "tex2_smp" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.vs.source = transmute(cstring)&vs_fsq_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 16 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_fsq_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.images[1].used = true + desc.fs.images[1].multisampled = false + desc.fs.images[1].image_type = ._2D + desc.fs.images[1].sample_type = .FLOAT + desc.fs.images[2].used = true + desc.fs.images[2].multisampled = false + desc.fs.images[2].image_type = ._2D + desc.fs.images[2].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[1].used = true + desc.fs.image_sampler_pairs[1].image_slot = 1 + desc.fs.image_sampler_pairs[1].sampler_slot = 0 + desc.fs.image_sampler_pairs[2].used = true + desc.fs.image_sampler_pairs[2].image_slot = 2 + desc.fs.image_sampler_pairs[2].sampler_slot = 0 + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_fsq_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 16 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_fsq_source_metal_macos + desc.fs.entry = "main0" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.images[1].used = true + desc.fs.images[1].multisampled = false + desc.fs.images[1].image_type = ._2D + desc.fs.images[1].sample_type = .FLOAT + desc.fs.images[2].used = true + desc.fs.images[2].multisampled = false + desc.fs.images[2].image_type = ._2D + desc.fs.images[2].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[1].used = true + desc.fs.image_sampler_pairs[1].image_slot = 1 + desc.fs.image_sampler_pairs[1].sampler_slot = 0 + desc.fs.image_sampler_pairs[2].used = true + desc.fs.image_sampler_pairs[2].image_slot = 2 + desc.fs.image_sampler_pairs[2].sampler_slot = 0 } return desc } @@ -1411,41 +1405,38 @@ offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "offscreen_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "pos" - desc.attrs[1].name = "bright0" - desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "offscreen_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "pos" + desc.attrs[1].name = "bright0" + desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "offscreen_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/noninterleaved/shader.odin b/examples/noninterleaved/shader.odin index cfc80fd..af4f9d2 100644 --- a/examples/noninterleaved/shader.odin +++ b/examples/noninterleaved/shader.odin @@ -358,41 +358,38 @@ noninterleaved_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "noninterleaved_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/offscreen/shader.odin b/examples/offscreen/shader.odin index d6bea8e..6a5cd28 100644 --- a/examples/offscreen/shader.odin +++ b/examples/offscreen/shader.odin @@ -821,72 +821,69 @@ default_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "default_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "normal" - desc.attrs[2].name = "texcoord0" - desc.vs.source = transmute(cstring)&vs_default_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_default_source_glsl430 - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.attrs[2].sem_name = "TEXCOORD" - desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_default_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_default_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_default_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_default_source_metal_macos - desc.fs.entry = "main0" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "normal" + desc.attrs[2].name = "texcoord0" + desc.vs.source = transmute(cstring)&vs_default_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_default_source_glsl430 + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.attrs[2].sem_name = "TEXCOORD" + desc.attrs[2].sem_index = 2 + desc.vs.source = transmute(cstring)&vs_default_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_default_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_default_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_default_source_metal_macos + desc.fs.entry = "main0" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 } return desc } @@ -894,41 +891,38 @@ offscreen_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "offscreen_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "normal" - desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "normal" + desc.vs.source = transmute(cstring)&vs_offscreen_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_offscreen_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_offscreen_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_offscreen_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_offscreen_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_offscreen_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/quad/shader.odin b/examples/quad/shader.odin index 8687ab1..d6aec63 100644 --- a/examples/quad/shader.odin +++ b/examples/quad/shader.odin @@ -320,32 +320,29 @@ quad_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "quad_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/shapes/shader.odin b/examples/shapes/shader.odin index 65cb579..0cf77a8 100644 --- a/examples/shapes/shader.odin +++ b/examples/shapes/shader.odin @@ -494,47 +494,44 @@ shapes_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "shapes_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "normal" - desc.attrs[2].name = "texcoord" - desc.attrs[3].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 80 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 5 - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.attrs[2].sem_name = "TEXCOORD" - desc.attrs[2].sem_index = 2 - desc.attrs[3].sem_name = "TEXCOORD" - desc.attrs[3].sem_index = 3 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 80 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 80 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "normal" + desc.attrs[2].name = "texcoord" + desc.attrs[3].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 80 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 5 + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.attrs[2].sem_name = "TEXCOORD" + desc.attrs[2].sem_index = 2 + desc.attrs[3].sem_name = "TEXCOORD" + desc.attrs[3].sem_index = 3 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 80 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 80 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/texcube/shader.odin b/examples/texcube/shader.odin index 587aa1c..d4d9fe9 100644 --- a/examples/texcube/shader.odin +++ b/examples/texcube/shader.odin @@ -443,72 +443,69 @@ texcube_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "texcube_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "pos" - desc.attrs[1].name = "color0" - desc.attrs[2].name = "texcoord0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.attrs[2].sem_name = "TEXCOORD" - desc.attrs[2].sem_index = 2 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - desc.fs.images[0].used = true - desc.fs.images[0].multisampled = false - desc.fs.images[0].image_type = ._2D - desc.fs.images[0].sample_type = .FLOAT - desc.fs.samplers[0].used = true - desc.fs.samplers[0].sampler_type = .FILTERING - desc.fs.image_sampler_pairs[0].used = true - desc.fs.image_sampler_pairs[0].image_slot = 0 - desc.fs.image_sampler_pairs[0].sampler_slot = 0 - } + case .GLCORE: + desc.attrs[0].name = "pos" + desc.attrs[1].name = "color0" + desc.attrs[2].name = "texcoord0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + desc.fs.image_sampler_pairs[0].glsl_name = "tex_smp" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.attrs[2].sem_name = "TEXCOORD" + desc.attrs[2].sem_index = 2 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" + desc.fs.images[0].used = true + desc.fs.images[0].multisampled = false + desc.fs.images[0].image_type = ._2D + desc.fs.images[0].sample_type = .FLOAT + desc.fs.samplers[0].used = true + desc.fs.samplers[0].sampler_type = .FILTERING + desc.fs.image_sampler_pairs[0].used = true + desc.fs.image_sampler_pairs[0].image_slot = 0 + desc.fs.image_sampler_pairs[0].sampler_slot = 0 } return desc } diff --git a/examples/triangle/shader.odin b/examples/triangle/shader.odin index 8313533..d5f1524 100644 --- a/examples/triangle/shader.odin +++ b/examples/triangle/shader.odin @@ -320,32 +320,29 @@ triangle_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "triangle_shader" #partial switch backend { - case .GLCORE: { - desc.attrs[0].name = "position" - desc.attrs[1].name = "color0" - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.attrs[0].sem_name = "TEXCOORD" - desc.attrs[0].sem_index = 0 - desc.attrs[1].sem_name = "TEXCOORD" - desc.attrs[1].sem_index = 1 - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.attrs[0].name = "position" + desc.attrs[1].name = "color0" + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.attrs[0].sem_name = "TEXCOORD" + desc.attrs[0].sem_index = 0 + desc.attrs[1].sem_name = "TEXCOORD" + desc.attrs[1].sem_index = 1 + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } diff --git a/examples/vertexpull/shader.odin b/examples/vertexpull/shader.odin index c76d39e..a100451 100644 --- a/examples/vertexpull/shader.odin +++ b/examples/vertexpull/shader.odin @@ -405,41 +405,38 @@ vertexpull_shader_desc :: proc (backend: sg.Backend) -> sg.Shader_Desc { desc: sg.Shader_Desc desc.label = "vertexpull_shader" #partial switch backend { - case .GLCORE: { - desc.vs.source = transmute(cstring)&vs_source_glsl430 - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" - desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 - desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 - desc.vs.storage_buffers[0].used = true - desc.vs.storage_buffers[0].readonly = true - desc.fs.source = transmute(cstring)&fs_source_glsl430 - desc.fs.entry = "main" - } - case .D3D11: { - desc.vs.source = transmute(cstring)&vs_source_hlsl5 - desc.vs.d3d11_target = "vs_5_0" - desc.vs.entry = "main" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.storage_buffers[0].used = true - desc.vs.storage_buffers[0].readonly = true - desc.fs.source = transmute(cstring)&fs_source_hlsl5 - desc.fs.d3d11_target = "ps_5_0" - desc.fs.entry = "main" - } - case .METAL_MACOS: { - desc.vs.source = transmute(cstring)&vs_source_metal_macos - desc.vs.entry = "main0" - desc.vs.uniform_blocks[0].size = 64 - desc.vs.uniform_blocks[0].layout = .STD140 - desc.vs.storage_buffers[0].used = true - desc.vs.storage_buffers[0].readonly = true - desc.fs.source = transmute(cstring)&fs_source_metal_macos - desc.fs.entry = "main0" - } + case .GLCORE: + desc.vs.source = transmute(cstring)&vs_source_glsl430 + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.uniform_blocks[0].uniforms[0].name = "vs_params" + desc.vs.uniform_blocks[0].uniforms[0].type = .FLOAT4 + desc.vs.uniform_blocks[0].uniforms[0].array_count = 4 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_glsl430 + desc.fs.entry = "main" + case .D3D11: + desc.vs.source = transmute(cstring)&vs_source_hlsl5 + desc.vs.d3d11_target = "vs_5_0" + desc.vs.entry = "main" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_hlsl5 + desc.fs.d3d11_target = "ps_5_0" + desc.fs.entry = "main" + case .METAL_MACOS: + desc.vs.source = transmute(cstring)&vs_source_metal_macos + desc.vs.entry = "main0" + desc.vs.uniform_blocks[0].size = 64 + desc.vs.uniform_blocks[0].layout = .STD140 + desc.vs.storage_buffers[0].used = true + desc.vs.storage_buffers[0].readonly = true + desc.fs.source = transmute(cstring)&fs_source_metal_macos + desc.fs.entry = "main0" } return desc } From 4badf8fbf34956c0791bdaab2d31787a50f0cc1a Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Wed, 24 Apr 2024 19:30:10 +0200 Subject: [PATCH 43/66] fix relative sokol-tools path in build-shaders script --- build_shaders_macos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_shaders_macos.sh b/build_shaders_macos.sh index c2cf0ce..fd60fa4 100755 --- a/build_shaders_macos.sh +++ b/build_shaders_macos.sh @@ -1,6 +1,6 @@ set -e -sokol_tools_root=../../../sokol-tools-bin +sokol_tools_root=../sokol-tools-bin build_shader() { name=$1 From 4f2500146ce3668abdd82e788dc3ed6c5c1c5355 Mon Sep 17 00:00:00 2001 From: blob1807 <12388588+blob1807@users.noreply.github.com> Date: Sat, 4 May 2024 01:12:19 +1000 Subject: [PATCH 44/66] Update examples to use new base collection --- examples/blend/main.odin | 2 +- examples/bufferoffsets/main.odin | 2 +- examples/clear/main.odin | 2 +- examples/cube/main.odin | 2 +- examples/debugtext-print/main.odin | 2 +- examples/debugtext-userfont/main.odin | 2 +- examples/debugtext/main.odin | 2 +- examples/instancing/main.odin | 2 +- examples/mrt/main.odin | 2 +- examples/noninterleaved/main.odin | 2 +- examples/offscreen/main.odin | 2 +- examples/quad/main.odin | 2 +- examples/saudio/main.odin | 2 +- examples/sgl-context/main.odin | 2 +- examples/sgl-points/main.odin | 2 +- examples/sgl/main.odin | 2 +- examples/shapes/main.odin | 2 +- examples/texcube/main.odin | 2 +- examples/triangle/main.odin | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/blend/main.odin b/examples/blend/main.odin index 212d503..a5d3a48 100644 --- a/examples/blend/main.odin +++ b/examples/blend/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/bufferoffsets/main.odin b/examples/bufferoffsets/main.odin index 786e7e2..d18ed1f 100644 --- a/examples/bufferoffsets/main.odin +++ b/examples/bufferoffsets/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import sg "../../sokol/gfx" import sapp "../../sokol/app" import sglue "../../sokol/glue" diff --git a/examples/clear/main.odin b/examples/clear/main.odin index 3671f1b..7b8d5f2 100644 --- a/examples/clear/main.odin +++ b/examples/clear/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import "core:fmt" import slog "../../sokol/log" import sg "../../sokol/gfx" diff --git a/examples/cube/main.odin b/examples/cube/main.odin index 005fbb3..6729b68 100644 --- a/examples/cube/main.odin +++ b/examples/cube/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/debugtext-print/main.odin b/examples/debugtext-print/main.odin index c4958f6..3cf6cce 100644 --- a/examples/debugtext-print/main.odin +++ b/examples/debugtext-print/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/debugtext-userfont/main.odin b/examples/debugtext-userfont/main.odin index 2855ff8..aca3610 100644 --- a/examples/debugtext-userfont/main.odin +++ b/examples/debugtext-userfont/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/debugtext/main.odin b/examples/debugtext/main.odin index 9b01127..aafd423 100644 --- a/examples/debugtext/main.odin +++ b/examples/debugtext/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/instancing/main.odin b/examples/instancing/main.odin index f50d776..3538d40 100644 --- a/examples/instancing/main.odin +++ b/examples/instancing/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/mrt/main.odin b/examples/mrt/main.odin index fb8d9e6..1f6ebaf 100644 --- a/examples/mrt/main.odin +++ b/examples/mrt/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import "core:math" import slog "../../sokol/log" import sg "../../sokol/gfx" diff --git a/examples/noninterleaved/main.odin b/examples/noninterleaved/main.odin index 8f578bb..f603bbe 100644 --- a/examples/noninterleaved/main.odin +++ b/examples/noninterleaved/main.odin @@ -9,7 +9,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/offscreen/main.odin b/examples/offscreen/main.odin index d1b20b0..fa0b3e9 100644 --- a/examples/offscreen/main.odin +++ b/examples/offscreen/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/quad/main.odin b/examples/quad/main.odin index 3a54182..557a9e5 100644 --- a/examples/quad/main.odin +++ b/examples/quad/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/saudio/main.odin b/examples/saudio/main.odin index 232ba16..b74cccb 100644 --- a/examples/saudio/main.odin +++ b/examples/saudio/main.odin @@ -4,7 +4,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/sgl-context/main.odin b/examples/sgl-context/main.odin index 1657aba..0e47dd8 100644 --- a/examples/sgl-context/main.odin +++ b/examples/sgl-context/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import "core:math" import slog "../../sokol/log" import sg "../../sokol/gfx" diff --git a/examples/sgl-points/main.odin b/examples/sgl-points/main.odin index 1c61ca4..0b57a51 100644 --- a/examples/sgl-points/main.odin +++ b/examples/sgl-points/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import "core:math" import slog "../../sokol/log" import sg "../../sokol/gfx" diff --git a/examples/sgl/main.odin b/examples/sgl/main.odin index 906fe33..8008e50 100644 --- a/examples/sgl/main.odin +++ b/examples/sgl/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import "core:math" import slog "../../sokol/log" import sg "../../sokol/gfx" diff --git a/examples/shapes/main.odin b/examples/shapes/main.odin index a08dc25..9ce1faa 100644 --- a/examples/shapes/main.odin +++ b/examples/shapes/main.odin @@ -4,7 +4,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/texcube/main.odin b/examples/texcube/main.odin index c0bdef6..f4995a7 100644 --- a/examples/texcube/main.odin +++ b/examples/texcube/main.odin @@ -4,7 +4,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" diff --git a/examples/triangle/main.odin b/examples/triangle/main.odin index 9b79843..967d40a 100644 --- a/examples/triangle/main.odin +++ b/examples/triangle/main.odin @@ -5,7 +5,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" From baa1dec1d42d8ebc63916114a28e0527529fb484 Mon Sep 17 00:00:00 2001 From: GH Action Date: Fri, 3 May 2024 15:28:26 +0000 Subject: [PATCH 45/66] updated (https://github.com/floooh/sokol/commit/74720f5da79fab6e08a38988e49f7588e03469d6) --- sokol/c/sokol_app.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index f5db5b7..06dfe51 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -23,6 +23,7 @@ #define SOKOL_D3D11 #define SOKOL_METAL #define SOKOL_WGPU + #define SOKOL_NOAPI Optionally provide the following defines with your own implementations: @@ -87,7 +88,7 @@ - makes the rendered frame visible - provides keyboard-, mouse- and low-level touch-events - platforms: MacOS, iOS, HTML5, Win32, Linux/RaspberryPi, Android - - 3D-APIs: Metal, D3D11, GL3.2, GLES3, WebGL, WebGL2 + - 3D-APIs: Metal, D3D11, GL3.2, GLES3, WebGL, WebGL2, NOAPI FEATURE/PLATFORM MATRIX ======================= @@ -97,6 +98,7 @@ gles3/webgl2 | --- | --- | YES(2)| YES | YES | YES metal | --- | YES | --- | YES | --- | --- d3d11 | YES | --- | --- | --- | --- | --- + noapi | YES | TODO | TODO | --- | TODO | --- KEY_DOWN | YES | YES | YES | SOME | TODO | YES KEY_UP | YES | YES | YES | SOME | TODO | YES CHAR | YES | YES | YES | YES | TODO | YES @@ -1978,8 +1980,8 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #elif defined(_WIN32) /* Windows (D3D11 or GL) */ #define _SAPP_WIN32 (1) - #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE33) - #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11 or SOKOL_GLCORE33") + #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE33) && !defined(SOKOL_NOAPI) + #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11, SOKOL_GLCORE33 or SOKOL_NOAPI") #endif #elif defined(__ANDROID__) /* Android */ @@ -7314,6 +7316,9 @@ _SOKOL_PRIVATE void _sapp_win32_timing_measure(void) { #if defined(SOKOL_GLCORE33) _sapp_timing_measure(&_sapp.timing); #endif + #if defined(SOKOL_NOAPI) + _sapp_timing_measure(&_sapp.timing); + #endif } _SOKOL_PRIVATE LRESULT CALLBACK _sapp_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { From 97b2064a94b7104ce6d66f9bf351c303342f6f3c Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Fri, 3 May 2024 19:57:52 +0200 Subject: [PATCH 46/66] manual update --- sokol/c/sokol_app.h | 11 +++- sokol/c/sokol_gfx.h | 137 ++++++++++++++++++++++++++++++++------------ sokol/gfx/gfx.odin | 2 +- 3 files changed, 109 insertions(+), 41 deletions(-) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index 649796c..515796a 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -23,6 +23,7 @@ #define SOKOL_D3D11 #define SOKOL_METAL #define SOKOL_WGPU + #define SOKOL_NOAPI Optionally provide the following defines with your own implementations: @@ -87,7 +88,7 @@ - makes the rendered frame visible - provides keyboard-, mouse- and low-level touch-events - platforms: MacOS, iOS, HTML5, Win32, Linux/RaspberryPi, Android - - 3D-APIs: Metal, D3D11, GL3.2, GLES3, WebGL, WebGL2 + - 3D-APIs: Metal, D3D11, GL3.2, GLES3, WebGL, WebGL2, NOAPI FEATURE/PLATFORM MATRIX ======================= @@ -97,6 +98,7 @@ gles3/webgl2 | --- | --- | YES(2)| YES | YES | YES metal | --- | YES | --- | YES | --- | --- d3d11 | YES | --- | --- | --- | --- | --- + noapi | YES | TODO | TODO | --- | TODO | --- KEY_DOWN | YES | YES | YES | SOME | TODO | YES KEY_UP | YES | YES | YES | SOME | TODO | YES CHAR | YES | YES | YES | YES | TODO | YES @@ -1987,8 +1989,8 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #elif defined(_WIN32) /* Windows (D3D11 or GL) */ #define _SAPP_WIN32 (1) - #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE) - #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11 or SOKOL_GLCORE") + #if !defined(SOKOL_D3D11) && !defined(SOKOL_GLCORE) && !defined(SOKOL_NOAPI) + #error("sokol_app.h: unknown 3D API selected for Win32, must be SOKOL_D3D11, SOKOL_GLCORE or SOKOL_NOAPI") #endif #elif defined(__ANDROID__) /* Android */ @@ -7328,6 +7330,9 @@ _SOKOL_PRIVATE void _sapp_win32_timing_measure(void) { #if defined(SOKOL_GLCORE) _sapp_timing_measure(&_sapp.timing); #endif + #if defined(SOKOL_NOAPI) + _sapp_timing_measure(&_sapp.timing); + #endif } _SOKOL_PRIVATE LRESULT CALLBACK _sapp_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 4561299..4948b4d 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -24,7 +24,7 @@ #define SOKOL_WGPU #define SOKOL_DUMMY_BACKEND - I.e. for the GL 3.3 Core Profile it should look like this: + I.e. for the desktop GL it should look like this: #include ... #include ... @@ -148,9 +148,8 @@ sg_apply_pipeline(sg_pipeline pip) --- fill an sg_bindings struct with the resource bindings for the next - draw call (1..N vertex buffers, 0 or 1 index buffer, 0..N image objects and - 0..N sampler objects on the vertex-shader- and fragment-shader-stage - and then call + draw call (0..N vertex buffers, 0 or 1 index buffer, 0..N image-objects, + samplers and storage-buffers), and call: sg_apply_bindings(const sg_bindings* bindings) @@ -718,7 +717,9 @@ the sg_make_shader() function requires the following information: - Shader code or shader binary blobs for the vertex- and fragment- shader-stage: - - for the desktop GL backend, source code must be provided in '#version 330' syntax + - for the desktop GL backend, source code can be provided in '#version 410' or + '#version 430', version 430 is required for storage buffer support, but note + that this is not available on macOS - for the GLES3 backend, source code must be provided in '#version 300 es' syntax - for the D3D11 backend, shaders can be provided as source or binary blobs, the source code should be in HLSL4.0 (for best compatibility) or alternatively @@ -757,6 +758,12 @@ - please also NOTE the documentation sections about UNIFORM DATA LAYOUT and CROSS-BACKEND COMMON UNIFORM DATA LAYOUT below! + - A description of each storage buffer used in the shader: + - a boolean 'readonly' flag, note that currently only + readonly storage buffers are supported + - note that storage buffers are not supported on all backends + and platforms + - A description of each texture/image used in the shader: - the expected image type: - SG_IMAGETYPE_2D @@ -773,7 +780,7 @@ (currently it's not supported to fetch data from multisampled textures in shaders, but this is planned for a later time) - - A description of each sampler used in the shader: + - A description of each texture sampler used in the shader: - SG_SAMPLERTYPE_FILTERING, - SG_SAMPLERTYPE_NONFILTERING, - SG_SAMPLERTYPE_COMPARISON, @@ -953,6 +960,60 @@ The by far easiest way to tackle the common uniform block layout problem is to use the sokol-shdc shader cross-compiler tool! + ON STORAGE BUFFERS + ================== + Storage buffers can be used to pass large amounts of random access structured + data fromt the CPU side to the shaders. They are similar to data textures, but are + more convenient to use both on the CPU and shader side since they can be accessed + in shaders as as a 1-dimensional array of struct items. + + Storage buffers are *NOT* supported on the following platform/backend combos: + + - macOS+GL (because storage buffers require GL 4.3, while macOS only goes up to GL 4.1) + - all GLES3 platforms (WebGL2, iOS, Android - with the option that support on + Android may be added at a later point) + + Currently only 'readonly' storage buffers are supported (meaning it's not possible + to write to storage buffers from shaders). + + To use storage buffers, the following steps are required: + + - write a shader which uses storage buffers (also see the example links below) + - create one or more storage buffers via sg_make_buffer() with the + buffer type SG_BUFFERTYPE_STORAGEBUFFER + - when creating a shader via sg_make_shader(), populate the sg_shader_desc + struct with binding info (when using sokol-shdc, this step will be taken care + of automatically) + - which storage buffer bind slots on the vertex- and fragment-stage + are occupied + - whether the storage buffer on that bind slot is readonly (this is currently required + to be true) + - when calling sg_apply_bindings(), apply the matching bind slots with the previously + created storage buffers + - ...and that's it. + + For more details, see the following backend-agnostic sokol samples: + + - simple vertex pulling from a storage buffer: + - C code: https://github.com/floooh/sokol-samples/blob/master/sapp/vertexpull-sapp.c + - shader: https://github.com/floooh/sokol-samples/blob/master/sapp/vertexpull-sapp.glsl + - instanced rendering via storage buffers (vertex- and instance-pulling): + - C code: https://github.com/floooh/sokol-samples/blob/master/sapp/instancing-pull-sapp.c + - shader: https://github.com/floooh/sokol-samples/blob/master/sapp/instancing-pull-sapp.glsl + - storage buffers both on the vertex- and fragment-stage: + - C code: https://github.com/floooh/sokol-samples/blob/master/sapp/sbuftex-sapp.c + - shader: https://github.com/floooh/sokol-samples/blob/master/sapp/sbuftex-sapp.glsl + - the Ozz animation sample rewritten to pull all rendering data from storage buffers: + - C code: https://github.com/floooh/sokol-samples/blob/master/sapp/ozz-storagebuffer-sapp.cc + - shader: https://github.com/floooh/sokol-samples/blob/master/sapp/ozz-storagebuffer-sapp.glsl + + ...also see the following backend-specific vertex pulling samples (those also don't use sokol-shdc): + + - D3D11: https://github.com/floooh/sokol-samples/blob/master/d3d11/vertexpulling-d3d11.c + - desktop GL: https://github.com/floooh/sokol-samples/blob/master/glfw/vertexpulling-glfw.c + - Metal: https://github.com/floooh/sokol-samples/blob/master/metal/vertexpulling-metal.c + - WebGPU: https://github.com/floooh/sokol-samples/blob/master/wgpu/vertexpulling-wgpu.c + TRACE HOOKS: ============ @@ -1334,12 +1395,14 @@ offsets depending on resource type and shader stage. - Vertex shader textures must start at `@group(1) @binding(0)` - Vertex shader samplers must start at `@group(1) @binding(16)` - - Fragment shader textures must start at `@group(1) @binding(32)` - - Fragment shader samplers must start at `@group(1) @binding(48)` + - Vertex shader storage buffers must start at `@group(1) @binding(32)` + - Fragment shader textures must start at `@group(1) @binding(48)` + - Fragment shader samplers must start at `@group(1) @binding(64)` + - Fragment shader storage buffers must start at `@group(1) @binding(80)` Note that the actual number of allowed per-stage texture- and sampler-bindings in sokol-gfx is currently lower than the above ranges (currently only up to - 12 textures and 8 samplers per shader stage are allowed). + 12 textures, 8 samplers and 8 storage buffers are allowed per shader stage). If you use sokol-shdc to generate WGSL shader code, you don't need to worry about the above binding convention since sokol-shdc assigns bind slots @@ -1516,7 +1579,7 @@ enum { SG_MAX_SHADERSTAGE_IMAGES = 12, SG_MAX_SHADERSTAGE_SAMPLERS = 8, SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS = 12, - SG_MAX_SHADERSTAGE_STORAGE_BUFFERS = 8, + SG_MAX_SHADERSTAGE_STORAGEBUFFERS = 8, SG_MAX_SHADERSTAGE_UBS = 4, SG_MAX_UB_MEMBERS = 16, SG_MAX_VERTEX_ATTRIBUTES = 16, @@ -2575,7 +2638,7 @@ typedef struct sg_pass { - SG_MAX_VERTEX_BUFFERS - SG_MAX_SHADERSTAGE_IMAGES - SG_MAX_SHADERSTAGE_SAMPLERS - - SG_MAX_SHADERSTAGE_STORAGE_BUFFERS + - SG_MAX_SHADERSTAGE_STORAGEBUFFERS The optional buffer offsets can be used to put different unrelated chunks of vertex- and/or index-data into the same buffer objects. @@ -2583,7 +2646,7 @@ typedef struct sg_pass { typedef struct sg_stage_bindings { sg_image images[SG_MAX_SHADERSTAGE_IMAGES]; sg_sampler samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; - sg_buffer storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + sg_buffer storage_buffers[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; } sg_stage_bindings; typedef struct sg_bindings { @@ -2885,7 +2948,7 @@ typedef struct sg_shader_stage_desc { const char* entry; const char* d3d11_target; sg_shader_uniform_block_desc uniform_blocks[SG_MAX_SHADERSTAGE_UBS]; - sg_shader_storage_buffer_desc storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + sg_shader_storage_buffer_desc storage_buffers[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; sg_shader_image_desc images[SG_MAX_SHADERSTAGE_IMAGES]; sg_shader_sampler_desc samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; sg_shader_image_sampler_pair_desc image_sampler_pairs[SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS]; @@ -4945,7 +5008,7 @@ typedef struct { int num_samplers; int num_image_samplers; _sg_shader_uniform_block_t uniform_blocks[SG_MAX_SHADERSTAGE_UBS]; - _sg_shader_storage_buffer_t storage_buffers[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + _sg_shader_storage_buffer_t storage_buffers[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; _sg_shader_image_t images[SG_MAX_SHADERSTAGE_IMAGES]; _sg_shader_sampler_t samplers[SG_MAX_SHADERSTAGE_SAMPLERS]; _sg_shader_image_sampler_t image_samplers[SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS]; @@ -5001,7 +5064,7 @@ _SOKOL_PRIVATE void _sg_shader_common_init(_sg_shader_common_t* cmn, const sg_sh stage->num_image_samplers++; } SOKOL_ASSERT(stage->num_storage_buffers == 0); - for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; sbuf_index++) { + for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; sbuf_index++) { const sg_shader_storage_buffer_desc* sbuf_desc = &stage_desc->storage_buffers[sbuf_index]; if (!sbuf_desc->used) { break; @@ -5141,7 +5204,7 @@ typedef _sg_dummy_attachments_t _sg_attachments_t; #elif defined(_SOKOL_ANY_GL) #define _SG_GL_TEXTURE_SAMPLER_CACHE_SIZE (SG_MAX_SHADERSTAGE_IMAGESAMPLERPAIRS * SG_NUM_SHADER_STAGES) -#define _SG_GL_STORAGEBUFFER_STAGE_INDEX_PITCH (16) +#define _SG_GL_STORAGEBUFFER_STAGE_INDEX_PITCH (SG_MAX_SHADERSTAGE_STORAGEBUFFERS) typedef struct { _sg_slot_t slot; @@ -5283,7 +5346,7 @@ typedef struct { GLuint vertex_buffer; GLuint index_buffer; GLuint storage_buffer; // general bind point - GLuint stage_storage_buffers[SG_NUM_SHADER_STAGES][SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + GLuint stage_storage_buffers[SG_NUM_SHADER_STAGES][SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; GLuint stored_vertex_buffer; GLuint stored_index_buffer; GLuint stored_storage_buffer; @@ -5535,8 +5598,8 @@ typedef struct { sg_image cur_fs_image_ids[SG_MAX_SHADERSTAGE_IMAGES]; sg_sampler cur_vs_sampler_ids[SG_MAX_SHADERSTAGE_SAMPLERS]; sg_sampler cur_fs_sampler_ids[SG_MAX_SHADERSTAGE_SAMPLERS]; - sg_buffer cur_vs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; - sg_buffer cur_fs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + sg_buffer cur_vs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; + sg_buffer cur_fs_storagebuffer_ids[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; } _sg_mtl_state_cache_t; typedef struct { @@ -5564,7 +5627,7 @@ typedef struct { #define _SG_WGPU_NUM_BINDGROUPS (2) // 0: uniforms, 1: images and sampler on both shader stages #define _SG_WGPU_UNIFORM_BINDGROUP_INDEX (0) #define _SG_WGPU_IMAGE_SAMPLER_BINDGROUP_INDEX (1) -#define _SG_WGPU_MAX_BINDGROUP_ENTRIES (SG_NUM_SHADER_STAGES * (SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)) +#define _SG_WGPU_MAX_BINDGROUP_ENTRIES (SG_NUM_SHADER_STAGES * (SG_MAX_SHADERSTAGE_IMAGES + SG_MAX_SHADERSTAGE_SAMPLERS + SG_MAX_SHADERSTAGE_STORAGEBUFFERS)) typedef struct { _sg_slot_t slot; @@ -5749,10 +5812,10 @@ typedef struct { _sg_buffer_t* ib; _sg_image_t* vs_imgs[SG_MAX_SHADERSTAGE_IMAGES]; _sg_sampler_t* vs_smps[SG_MAX_SHADERSTAGE_SAMPLERS]; - _sg_buffer_t* vs_sbufs[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + _sg_buffer_t* vs_sbufs[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; _sg_image_t* fs_imgs[SG_MAX_SHADERSTAGE_IMAGES]; _sg_sampler_t* fs_smps[SG_MAX_SHADERSTAGE_SAMPLERS]; - _sg_buffer_t* fs_sbufs[SG_MAX_SHADERSTAGE_STORAGE_BUFFERS]; + _sg_buffer_t* fs_sbufs[SG_MAX_SHADERSTAGE_STORAGEBUFFERS]; } _sg_bindings_t; typedef struct { @@ -7647,7 +7710,7 @@ _SOKOL_PRIVATE void _sg_gl_init_caps_gles3(void) { //-- state cache implementation ------------------------------------------------ _SOKOL_PRIVATE GLuint _sg_gl_storagebuffer_bind_index(int stage, int slot) { SOKOL_ASSERT((stage >= 0) && (stage < SG_NUM_SHADER_STAGES)); - SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)); + SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGEBUFFERS)); return (GLuint) (stage * _SG_GL_STORAGEBUFFER_STAGE_INDEX_PITCH + slot); } @@ -7670,7 +7733,7 @@ _SOKOL_PRIVATE void _sg_gl_cache_clear_buffer_bindings(bool force) { _sg_stats_add(gl.num_bind_buffer, 1); } for (int stage = 0; stage < SG_NUM_SHADER_STAGES; stage++) { - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++) { if (force || (_sg.gl.cache.stage_storage_buffers[stage][i] != 0)) { const GLuint bind_index = _sg_gl_storagebuffer_bind_index(stage, i); if (_sg.features.storage_buffer) { @@ -7712,7 +7775,7 @@ _SOKOL_PRIVATE void _sg_gl_cache_bind_buffer(GLenum target, GLuint buffer) { _SOKOL_PRIVATE void _sg_gl_cache_bind_storage_buffer(int stage, int slot, GLuint buffer) { SOKOL_ASSERT((stage >= 0) && (stage < SG_NUM_SHADER_STAGES)); - SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS)); + SOKOL_ASSERT((slot >= 0) && (slot < SG_MAX_SHADERSTAGE_STORAGEBUFFERS)); if (_sg.gl.cache.stage_storage_buffers[stage][slot] != buffer) { _sg.gl.cache.stage_storage_buffers[stage][slot] = buffer; _sg.gl.cache.storage_buffer = buffer; // not a bug @@ -7778,7 +7841,7 @@ _SOKOL_PRIVATE void _sg_gl_cache_invalidate_buffer(GLuint buf) { _sg_stats_add(gl.num_bind_buffer, 1); } for (int stage = 0; stage < SG_NUM_SHADER_STAGES; stage++) { - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++) { if (buf == _sg.gl.cache.stage_storage_buffers[stage][i]) { _sg.gl.cache.stage_storage_buffers[stage][i] = 0; _sg.gl.cache.storage_buffer = 0; // not a bug! @@ -10724,8 +10787,8 @@ _SOKOL_PRIVATE sg_resource_state _sg_d3d11_create_pipeline(_sg_pipeline_t* pip, _SG_ERROR(D3D11_CREATE_INPUT_LAYOUT_FAILED); return SG_RESOURCESTATE_FAILED; } + _sg_d3d11_setlabel(pip->d3d11.il, desc->label); } - _sg_d3d11_setlabel(pip->d3d11.il, desc->label); // create rasterizer state D3D11_RASTERIZER_DESC rs_desc; @@ -13843,20 +13906,20 @@ _SOKOL_PRIVATE void _sg_wgpu_init_bindgroups_cache_key(_sg_wgpu_bindgroups_cache SOKOL_ASSERT(bnd->pip); SOKOL_ASSERT(bnd->num_vs_imgs <= SG_MAX_SHADERSTAGE_IMAGES); SOKOL_ASSERT(bnd->num_vs_smps <= SG_MAX_SHADERSTAGE_SAMPLERS); - SOKOL_ASSERT(bnd->num_vs_sbufs <= SG_MAX_SHADERSTAGE_STORAGE_BUFFERS); + SOKOL_ASSERT(bnd->num_vs_sbufs <= SG_MAX_SHADERSTAGE_STORAGEBUFFERS); SOKOL_ASSERT(bnd->num_fs_imgs <= SG_MAX_SHADERSTAGE_IMAGES); SOKOL_ASSERT(bnd->num_fs_smps <= SG_MAX_SHADERSTAGE_SAMPLERS); - SOKOL_ASSERT(bnd->num_fs_sbufs <= SG_MAX_SHADERSTAGE_STORAGE_BUFFERS); + SOKOL_ASSERT(bnd->num_fs_sbufs <= SG_MAX_SHADERSTAGE_STORAGEBUFFERS); _sg_clear(key->items, sizeof(key->items)); key->items[0] = bnd->pip->slot.id; const int vs_imgs_offset = 1; const int vs_smps_offset = vs_imgs_offset + SG_MAX_SHADERSTAGE_IMAGES; const int vs_sbufs_offset = vs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS; - const int fs_imgs_offset = vs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; + const int fs_imgs_offset = vs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGEBUFFERS; const int fs_smps_offset = fs_imgs_offset + SG_MAX_SHADERSTAGE_IMAGES; const int fs_sbufs_offset = fs_smps_offset + SG_MAX_SHADERSTAGE_SAMPLERS; - SOKOL_ASSERT((fs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGE_BUFFERS) == _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS); + SOKOL_ASSERT((fs_sbufs_offset + SG_MAX_SHADERSTAGE_STORAGEBUFFERS) == _SG_WGPU_BINDGROUPSCACHE_NUM_ITEMS); for (int i = 0; i < bnd->num_vs_imgs; i++) { SOKOL_ASSERT(bnd->vs_imgs[i]); key->items[vs_imgs_offset + i] = bnd->vs_imgs[i]->slot.id; @@ -13944,7 +14007,7 @@ _SOKOL_PRIVATE _sg_wgpu_bindgroup_t* _sg_wgpu_create_bindgroup(_sg_bindings_t* b WGPUBindGroupEntry* wgpu_entry = &wgpu_entries[bge_index++]; wgpu_entry->binding = _sg_wgpu_storagebuffer_binding(SG_SHADERSTAGE_FS, i); wgpu_entry->buffer = bnd->fs_sbufs[i]->wgpu.buf; - wgpu_entry->size = (uint64_t) bnd->vs_sbufs[i]->cmn.size; + wgpu_entry->size = (uint64_t) bnd->fs_sbufs[i]->cmn.size; } WGPUBindGroupDescriptor bg_desc; _sg_clear(&bg_desc, sizeof(bg_desc)); @@ -16149,7 +16212,7 @@ _SOKOL_PRIVATE bool _sg_validate_shader_desc(const sg_shader_desc* desc) { } } bool storage_buffers_continuous = true; - for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; sbuf_index++) { + for (int sbuf_index = 0; sbuf_index < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; sbuf_index++) { const sg_shader_storage_buffer_desc* sbuf_desc = &stage_desc->storage_buffers[sbuf_index]; if (sbuf_desc->used) { _SG_VALIDATE(storage_buffers_continuous, VALIDATE_SHADERDESC_NO_CONT_STORAGEBUFFERS); @@ -16651,7 +16714,7 @@ _SOKOL_PRIVATE bool _sg_validate_apply_bindings(const sg_bindings* bindings) { } // has expected vertex shader storage buffers - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++) { const _sg_shader_stage_t* stage = &pip->shader->cmn.stage[SG_SHADERSTAGE_VS]; if (stage->storage_buffers[i].used) { _SG_VALIDATE(bindings->vs.storage_buffers[i].id != SG_INVALID_ID, VALIDATE_ABND_VS_EXPECTED_STORAGEBUFFER_BINDING); @@ -16724,7 +16787,7 @@ _SOKOL_PRIVATE bool _sg_validate_apply_bindings(const sg_bindings* bindings) { } // has expected fragment shader storage buffers - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++) { const _sg_shader_stage_t* stage = &pip->shader->cmn.stage[SG_SHADERSTAGE_FS]; if (stage->storage_buffers[i].used) { _SG_VALIDATE(bindings->fs.storage_buffers[i].id != SG_INVALID_ID, VALIDATE_ABND_FS_EXPECTED_STORAGEBUFFER_BINDING); @@ -18279,7 +18342,7 @@ SOKOL_API_IMPL void sg_apply_bindings(const sg_bindings* bindings) { } } - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++, bnd.num_vs_sbufs++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++, bnd.num_vs_sbufs++) { if (bindings->vs.storage_buffers[i].id) { bnd.vs_sbufs[i] = _sg_lookup_buffer(&_sg.pools, bindings->vs.storage_buffers[i].id); if (bnd.vs_sbufs[i]) { @@ -18318,7 +18381,7 @@ SOKOL_API_IMPL void sg_apply_bindings(const sg_bindings* bindings) { } } - for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGE_BUFFERS; i++, bnd.num_fs_sbufs++) { + for (int i = 0; i < SG_MAX_SHADERSTAGE_STORAGEBUFFERS; i++, bnd.num_fs_sbufs++) { if (bindings->fs.storage_buffers[i].id) { bnd.fs_sbufs[i] = _sg_lookup_buffer(&_sg.pools, bindings->fs.storage_buffers[i].id); if (bnd.fs_sbufs[i]) { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index ec05ffc..9bd6100 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -225,7 +225,7 @@ MAX_VERTEX_BUFFERS :: 8 MAX_SHADERSTAGE_IMAGES :: 12 MAX_SHADERSTAGE_SAMPLERS :: 8 MAX_SHADERSTAGE_IMAGESAMPLERPAIRS :: 12 -MAX_SHADERSTAGE_STORAGE_BUFFERS :: 8 +MAX_SHADERSTAGE_STORAGEBUFFERS :: 8 MAX_SHADERSTAGE_UBS :: 4 MAX_UB_MEMBERS :: 16 MAX_VERTEX_ATTRIBUTES :: 16 From 9479d80a13bd174fe7b624764e4dfe5c6a1647c7 Mon Sep 17 00:00:00 2001 From: Barna Mumtyan Date: Fri, 3 May 2024 22:01:27 +0300 Subject: [PATCH 47/66] Added dynamic library support for macos. --- .gitignore | 1 + sokol/app/app.odin | 37 +++++++++++++++--------- sokol/audio/audio.odin | 37 +++++++++++++++--------- sokol/build_clibs_macos_dylib.sh | 48 ++++++++++++++++++++++++++++++++ sokol/debugtext/debugtext.odin | 37 +++++++++++++++--------- sokol/gfx/gfx.odin | 37 +++++++++++++++--------- sokol/gl/gl.odin | 37 +++++++++++++++--------- sokol/glue/glue.odin | 37 +++++++++++++++--------- sokol/log/log.odin | 37 +++++++++++++++--------- sokol/shape/shape.odin | 37 +++++++++++++++--------- sokol/time/time.odin | 37 +++++++++++++++--------- 11 files changed, 265 insertions(+), 117 deletions(-) create mode 100755 sokol/build_clibs_macos_dylib.sh diff --git a/.gitignore b/.gitignore index 9a923f0..681a3a6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,6 @@ build/ *.exp *.ilk *.dll +*.dylib *.exe *.dSYM/ diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 086c6cc..94c0b43 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index 6c7764f..af052e2 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } - } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + } } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/build_clibs_macos_dylib.sh b/sokol/build_clibs_macos_dylib.sh new file mode 100755 index 0000000..6b58f6f --- /dev/null +++ b/sokol/build_clibs_macos_dylib.sh @@ -0,0 +1,48 @@ +set -e + +FRAMEWORKS_METAL="-framework Metal -framework MetalKit" +FRAMEWORKS_OPENGL="-framework OpenGL" +FRAMEWORKS_CORE="-framework Foundation -framework CoreGraphics -framework Cocoa -framework QuartzCore -framework CoreAudio -framework AudioToolbox" + +build_lib_release() { + src=$1 + dst=$2 + backend=$3 + arch=$4 + frameworks="" + if [ $backend = "SOKOL_METAL" ]; then + frameworks="${frameworks} ${FRAMEWORKS_METAL}" + else + frameworks="${frameworks} ${FRAMEWORKS_OPENGL}" + fi + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -O2 -x objective-c -arch $arch -DNDEBUG -DIMPL -D$backend c/$src.c + cc -dynamiclib -arch $arch $FRAMEWORKS_CORE $frameworks -o $dst.dylib $src.o $dep +} + +build_lib_debug() { + src=$1 + dst=$2 + backend=$3 + arch=$4 + frameworks="" + if [ $backend = "SOKOL_METAL" ]; then + frameworks="${frameworks} ${FRAMEWORKS_METAL}" + else + frameworks="${frameworks} ${FRAMEWORKS_OPENGL}" + fi + echo $dst + MACOSX_DEPLOYMENT_TARGET=10.13 cc -c -g -x objective-c -arch $arch -DIMPL -D$backend c/$src.c + cc -dynamiclib -arch $arch $FRAMEWORKS_CORE $frameworks -o $dst.dylib $src.o $dep +} + +build_lib_release sokol dylib/sokol_dylib_macos_arm64_metal_release SOKOL_METAL arm64 +build_lib_debug sokol dylib/sokol_dylib_macos_arm64_metal_debug SOKOL_METAL arm64 +build_lib_release sokol dylib/sokol_dylib_macos_x64_metal_release SOKOL_METAL x86_64 +build_lib_debug sokol dylib/sokol_dylib_macos_x64_metal_debug SOKOL_METAL x86_64 +build_lib_release sokol dylib/sokol_dylib_macos_arm64_gl_release SOKOL_GLCORE33 arm64 +build_lib_debug sokol dylib/sokol_dylib_macos_arm64_gl_debug SOKOL_GLCORE33 arm64 +build_lib_release sokol dylib/sokol_dylib_macos_x64_gl_release SOKOL_GLCORE33 x86_64 +build_lib_debug sokol dylib/sokol_dylib_macos_x64_gl_debug SOKOL_GLCORE33 x86_64 + +rm *.o diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index 38ad724..c84dddd 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -36,21 +36,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index de97f8a..379c090 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index f18d691..e51cf2a 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index e60a93e..a0205b3 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 5f5abf6..988edad 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index e914a54..b490ceb 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 9b2d0c5..7c731ce 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { From 0ad866174e649406b9587e50b6511121cf573925 Mon Sep 17 00:00:00 2001 From: Barna Mumtyan Date: Sat, 4 May 2024 15:58:50 +0300 Subject: [PATCH 48/66] Added a mkdir for dylibs. --- sokol/build_clibs_macos_dylib.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sokol/build_clibs_macos_dylib.sh b/sokol/build_clibs_macos_dylib.sh index 6b58f6f..6e0abc2 100755 --- a/sokol/build_clibs_macos_dylib.sh +++ b/sokol/build_clibs_macos_dylib.sh @@ -36,6 +36,8 @@ build_lib_debug() { cc -dynamiclib -arch $arch $FRAMEWORKS_CORE $frameworks -o $dst.dylib $src.o $dep } +mkdir -p dylib + build_lib_release sokol dylib/sokol_dylib_macos_arm64_metal_release SOKOL_METAL arm64 build_lib_debug sokol dylib/sokol_dylib_macos_arm64_metal_debug SOKOL_METAL arm64 build_lib_release sokol dylib/sokol_dylib_macos_x64_metal_release SOKOL_METAL x86_64 From 1e37ab463cdd04797213980215c2c67d227b9a9e Mon Sep 17 00:00:00 2001 From: Barna Mumtyan Date: Sat, 4 May 2024 15:59:19 +0300 Subject: [PATCH 49/66] Reverted changes to odin files, and moved them to main sokol repo. --- sokol/app/app.odin | 37 ++++++++++++---------------------- sokol/audio/audio.odin | 37 ++++++++++++---------------------- sokol/debugtext/debugtext.odin | 37 ++++++++++++---------------------- sokol/gfx/gfx.odin | 37 ++++++++++++---------------------- sokol/gl/gl.odin | 37 ++++++++++++---------------------- sokol/glue/glue.odin | 37 ++++++++++++---------------------- sokol/log/log.odin | 37 ++++++++++++---------------------- sokol/shape/shape.odin | 37 ++++++++++++---------------------- sokol/time/time.odin | 37 ++++++++++++---------------------- 9 files changed, 117 insertions(+), 216 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 94c0b43..a4403cf 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -29,32 +29,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } + } else { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - } + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index af052e2..df2df3c 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -29,32 +29,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } - } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } - } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + } + } else { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } - } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } - } + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index c84dddd..d926d61 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -36,32 +36,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG {foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index 379c090..3ada918 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -29,32 +29,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - } + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index e51cf2a..03814ad 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -30,32 +30,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index a0205b3..d239f05 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -30,32 +30,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 988edad..c335d04 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -29,32 +29,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index b490ceb..f6f3889 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -30,32 +30,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 7c731ce..7086707 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -29,32 +29,21 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_DLL { - when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" }} - else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" }} - else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" }} + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + } } else { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } - } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } - } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } - } + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } } } } else when ODIN_OS == .Linux { From 70ab9b6f57b790769c8a2b4d95864ebe1e239064 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Sat, 4 May 2024 17:07:08 +0200 Subject: [PATCH 50/66] manual update --- sokol/c/sokol_gfx.h | 126 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 22 deletions(-) diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 4948b4d..2fab829 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -1014,6 +1014,72 @@ - Metal: https://github.com/floooh/sokol-samples/blob/master/metal/vertexpulling-metal.c - WebGPU: https://github.com/floooh/sokol-samples/blob/master/wgpu/vertexpulling-wgpu.c + Storage buffer shader authoring caveats when using sokol-shdc: + + - declare a storage buffer interface block with `readonly buffer [name] { ... }` + - do NOT annotate storage buffers with `layout(...)`, sokol-shdc will take care of that + - declare a struct which describes a single array item in the storage buffer interface block + - only put a single flexible array member into the storage buffer interface block + + E.g. a complete example in 'sokol-shdc GLSL': + + ```glsl + // declare a struct: + struct sb_vertex { + vec3 pos; + vec4 color; + } + // declare a buffer interface block with a single flexible struct array: + readonly buffer vertices { + sb_vertex vtx[]; + } + // in the shader function, access the storage buffer like this: + void main() { + vec3 pos = vtx[gl_VertexIndex].pos; + ... + } + ``` + + Backend-specific storage-buffer caveats (not relevant when using sokol-shdc): + + D3D11: + - storage buffers are created as 'raw' Byte Address Buffers + (https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-intro#raw-views-of-buffers) + - in HLSL, use a ByteAddressBuffer to access the buffer content + (https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/sm5-object-byteaddressbuffer) + - in D3D11, storage buffers and textures share the same bind slots, sokol-gfx reserves + shader resource slots 0..15 for textures and 16..23 for storage buffers. + - e.g. in HLSL, storage buffer bindings start at register(t16) no matter the shader stage + + Metal: + - in Metal there is no internal difference between vertex-, uniform- and + storage-buffers, all are bound to the same 'buffer bind slots' with the + following reserved ranges: + - vertex shader stage: + - uniform buffers (internal): slots 0..3 + - vertex buffers: slots 4..11 + - storage buffers: slots 12..19 + - fragment shader stage: + - uniform buffers (internal): slots 0..3 + - storage buffers: slots 4..11 + - this means in MSL, storage buffer bindings start at [[buffer(12)]] in the vertex + shaders, and at [[buffer(4)]] in fragment shaders + + GL: + - the GL backend doesn't use name-lookup to find storage buffer bindings, this + means you must annotate buffers with `layout(std430, binding=N)` in GLSL + - ...where N is 0..7 in the vertex shader, and 8..15 in the fragment shader + + WebGPU: + - in WGSL, use the following bind locations for the various shader resource types: + - vertex shader stage: + - textures `@group(1) @binding(0..15)` + - samplers `@group(1) @binding(16..31)` + - storage buffers `@group(1) @binding(32..47)` + - fragment shader stage: + - textures `@group(1) @binding(48..63)` + - samplers `@group(1) @binding(64..79)` + - storage buffers `@group(1) @binding(80..95)` TRACE HOOKS: ============ @@ -1854,8 +1920,10 @@ typedef enum sg_usage { /* sg_buffer_type - This indicates whether a buffer contains vertex- or index-data, - used in the sg_buffer_desc.type member when creating a buffer. + Indicates whether a buffer will be bound as vertex-, + index- or storage-buffer. + + Used in the sg_buffer_desc.type member when creating a buffer. The default value is SG_BUFFERTYPE_VERTEXBUFFER. */ @@ -1987,12 +2055,12 @@ typedef enum sg_cube_face { sg_shader_stage There are 2 shader stages: vertex- and fragment-shader-stage. - Each shader stage consists of: + Each shader stage - - one slot for a shader function (provided as source- or byte-code) - - SG_MAX_SHADERSTAGE_UBS slots for uniform blocks - - SG_MAX_SHADERSTAGE_IMAGES slots for images used as textures by - the shader function + - SG_MAX_SHADERSTAGE_UBS slots for applying uniform data + - SG_MAX_SHADERSTAGE_IMAGES slots for images used as textures + - SG_MAX_SHADERSTAGE_SAMPLERS slots for texture samplers + - SG_MAX_SHADERSTAGE_STORAGEBUFFERS slots for storage buffer bindings */ typedef enum sg_shader_stage { SG_SHADERSTAGE_VS, @@ -2673,11 +2741,7 @@ typedef struct sg_bindings { .usage: SG_USAGE_IMMUTABLE .data.ptr 0 (*must* be valid for immutable buffers) .data.size 0 (*must* be > 0 for immutable buffers) - .label 0 (optional string label for trace hooks) - - The label will be ignored by sokol_gfx.h, it is only useful - when hooking into sg_make_buffer() or sg_init_buffer() via - the sg_install_trace_hooks() function. + .label 0 (optional string label) For immutable buffers which are initialized with initial data, keep the .size item zero-initialized, and set the size together with the @@ -2890,6 +2954,9 @@ typedef struct sg_sampler_desc { - the texture slot of the involved texture - the sampler slot of the involved sampler - for GLSL only: the name of the combined image-sampler object + - reflection info for each storage-buffer used by the shader: + - whether the storage buffer is readonly (currently this + must be true) For all GL backends, shader source-code must be provided. For D3D11 and Metal, either shader source-code or byte-code can be provided. @@ -3292,9 +3359,9 @@ typedef struct sg_attachments_info { /* sg_frame_stats - Allows to track generic and backend-specific tracking stats about a + Allows to track generic and backend-specific stats about a render frame. Obtained by calling sg_query_frame_stats(). The returned - struct will contains information about the *previous* frame. + struct contains information about the *previous* frame. */ typedef struct sg_frame_stats_gl { uint32_t num_bind_buffer; @@ -3765,11 +3832,6 @@ typedef enum sg_log_item { The sg_desc struct contains configuration values for sokol_gfx, it is used as parameter to the sg_setup() call. - NOTE that all callback function pointers come in two versions, one without - a userdata pointer, and one with a userdata pointer. You would - either initialize one or the other depending on whether you pass data - to your callbacks. - The default configuration is: .buffer_pool_size 128 @@ -3824,6 +3886,25 @@ typedef enum sg_log_item { .environment.d3d11.device_context a pointer to the ID3D11DeviceContext object + GL specific: + .environment.gl.major_version + .environment.gl.minor_version + The major and minor version of the desktop(!) GL context (e.g. only + relevant when SOKOL_GLCORE is defined). Only two combinations are + currently supported (but you are free to pass in a higher minor version, + sokol_gfx.h just won't make use of higher-version features): + + .major_version = 4, .minor_version = 1 + Storage buffers are not available. This is the highest GL version + supported on macOS. + + .major_version = 4, .minor_version = 3 + Storage buffers are available. + + Keeping the major_version zero-initialized will use the following defaults: + - macOS: .major_version = 4, .minor_version = 1 + - otherwise: .major_version = 4, .minor_version = 3 + WebGPU specific: .wgpu_disable_bindgroups_cache When this is true, the WebGPU backend will create and immediately @@ -3863,7 +3944,7 @@ typedef struct sg_d3d11_environment { } sg_d3d11_environment; typedef struct sg_wgpu_environment { - const void* device; // WGPUDevice + const void* device; } sg_wgpu_environment; typedef struct sg_gl_environment { @@ -3914,8 +3995,9 @@ typedef struct sg_allocator { that without logging function, sokol-gfx will be completely silent, e.g. it will not report errors, warnings and validation layer messages. For maximum error verbosity, - compile in debug mode (e.g. NDEBUG *not* defined) and install - a logger (for instance the standard logging function from sokol_log.h). + compile in debug mode (e.g. NDEBUG *not* defined) and provide a + compatible logger function in the sg_setup() call + (for instance the standard logging function from sokol_log.h). */ typedef struct sg_logger { void (*func)( From 454d95f80af7b8dcd8896460124f3be8b8a633c9 Mon Sep 17 00:00:00 2001 From: Barna Mumtyan Date: Sat, 4 May 2024 20:10:44 +0300 Subject: [PATCH 51/66] Fixed some indentation. --- sokol/app/app.odin | 2 +- sokol/audio/audio.odin | 2 +- sokol/debugtext/debugtext.odin | 2 +- sokol/gfx/gfx.odin | 2 +- sokol/gl/gl.odin | 2 +- sokol/glue/glue.odin | 2 +- sokol/log/log.odin | 2 +- sokol/shape/shape.odin | 2 +- sokol/time/time.odin | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index a4403cf..086c6cc 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -33,7 +33,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { + } else { when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index df2df3c..6c7764f 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -33,7 +33,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } - } else { + } else { when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } } diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index d926d61..38ad724 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -40,7 +40,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } } diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index 3ada918..de97f8a 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -33,7 +33,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { + } else { when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } } diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index 03814ad..f18d691 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -34,7 +34,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } } diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index d239f05..e60a93e 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -34,7 +34,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } } diff --git a/sokol/log/log.odin b/sokol/log/log.odin index c335d04..5f5abf6 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -33,7 +33,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } } diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index f6f3889..e914a54 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -34,7 +34,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } } diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 7086707..9b2d0c5 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -33,7 +33,7 @@ when ODIN_OS == .Windows { when ODIN_ARCH == .arm64 { when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } - } else { + } else { when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } } From 4dea3f69bf90bd1d51595e420e99c994b2a6f825 Mon Sep 17 00:00:00 2001 From: GH Action Date: Mon, 6 May 2024 14:33:08 +0000 Subject: [PATCH 52/66] updated (https://github.com/floooh/sokol/commit/55bc9cf3fa4051d485d10412c75c893c3135e885) --- sokol/app/app.odin | 37 ++++++++++++++++++++++------------ sokol/audio/audio.odin | 37 ++++++++++++++++++++++------------ sokol/debugtext/debugtext.odin | 37 ++++++++++++++++++++++------------ sokol/gfx/gfx.odin | 37 ++++++++++++++++++++++------------ sokol/gl/gl.odin | 37 ++++++++++++++++++++++------------ sokol/glue/glue.odin | 37 ++++++++++++++++++++++------------ sokol/log/log.odin | 37 ++++++++++++++++++++++------------ sokol/shape/shape.odin | 37 ++++++++++++++++++++++------------ sokol/time/time.odin | 37 ++++++++++++++++++++++------------ 9 files changed, 216 insertions(+), 117 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index 086c6cc..2af1ed0 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index 6c7764f..27e2d05 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } - } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + } } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index 38ad724..3c9b948 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -36,21 +36,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index de97f8a..ccc349b 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index f18d691..f0eada6 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index e60a93e..0720ace 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 5f5abf6..d447545 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index e914a54..121197c 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 9b2d0c5..a0f38db 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { From 86a70dc0ec24efd87b701047072bc00526468910 Mon Sep 17 00:00:00 2001 From: Andre Weissflog Date: Thu, 9 May 2024 15:28:28 +0200 Subject: [PATCH 53/66] manually updated --- sokol/app/app.odin | 37 ++++++++++++++++++---------- sokol/audio/audio.odin | 37 ++++++++++++++++++---------- sokol/c/sokol_gfx.h | 44 ++++++---------------------------- sokol/c/sokol_glue.h | 2 -- sokol/debugtext/debugtext.odin | 37 ++++++++++++++++++---------- sokol/gfx/gfx.odin | 43 ++++++++++++++++++--------------- sokol/gl/gl.odin | 37 ++++++++++++++++++---------- sokol/glue/glue.odin | 37 ++++++++++++++++++---------- sokol/log/log.odin | 37 ++++++++++++++++++---------- sokol/shape/shape.odin | 37 ++++++++++++++++++---------- sokol/time/time.odin | 37 ++++++++++++++++++---------- 11 files changed, 223 insertions(+), 162 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index ee6d71a..dbd46de 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_app_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_app_clib { "sokol_app_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/audio/audio.odin b/sokol/audio/audio.odin index 6c7764f..27e2d05 100644 --- a/sokol/audio/audio.odin +++ b/sokol/audio/audio.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } - } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_audio_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_gl_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_gl_release.a", "system:AudioToolbox.framework" } } + } } else { - when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } - else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_arm64_metal_release.a", "system:AudioToolbox.framework" } } + } else { + when DEBUG { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_debug.a", "system:AudioToolbox.framework" } } + else { foreign import sokol_audio_clib { "sokol_audio_macos_x64_metal_release.a", "system:AudioToolbox.framework" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 2fab829..54ec466 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -3886,25 +3886,6 @@ typedef enum sg_log_item { .environment.d3d11.device_context a pointer to the ID3D11DeviceContext object - GL specific: - .environment.gl.major_version - .environment.gl.minor_version - The major and minor version of the desktop(!) GL context (e.g. only - relevant when SOKOL_GLCORE is defined). Only two combinations are - currently supported (but you are free to pass in a higher minor version, - sokol_gfx.h just won't make use of higher-version features): - - .major_version = 4, .minor_version = 1 - Storage buffers are not available. This is the highest GL version - supported on macOS. - - .major_version = 4, .minor_version = 3 - Storage buffers are available. - - Keeping the major_version zero-initialized will use the following defaults: - - macOS: .major_version = 4, .minor_version = 1 - - otherwise: .major_version = 4, .minor_version = 3 - WebGPU specific: .wgpu_disable_bindgroups_cache When this is true, the WebGPU backend will create and immediately @@ -3947,17 +3928,11 @@ typedef struct sg_wgpu_environment { const void* device; } sg_wgpu_environment; -typedef struct sg_gl_environment { - int major_version; - int minor_version; -} sg_gl_environment; - typedef struct sg_environment { sg_environment_defaults defaults; sg_metal_environment metal; sg_d3d11_environment d3d11; sg_wgpu_environment wgpu; - sg_gl_environment gl; } sg_environment; /* @@ -4790,6 +4765,8 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 + #define GL_MAJOR_VERSION 0x821B + #define GL_MINOR_VERSION 0x821C #endif #ifndef GL_UNSIGNED_INT_2_10_10_10_REV @@ -7622,7 +7599,11 @@ _SOKOL_PRIVATE void _sg_gl_init_limits(void) { _SOKOL_PRIVATE void _sg_gl_init_caps_glcore(void) { _sg.backend = SG_BACKEND_GLCORE; - const int version = _sg.desc.environment.gl.major_version * 100 + _sg.desc.environment.gl.minor_version * 10; + GLint major_version = 0; + GLint minor_version = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major_version); + glGetIntegerv(GL_MINOR_VERSION, &minor_version); + const int version = major_version * 100 + minor_version * 10; _sg.features.origin_top_left = false; _sg.features.image_clamp_to_border = true; _sg.features.mrt_independent_blend_state = false; @@ -17519,17 +17500,6 @@ _SOKOL_PRIVATE sg_desc _sg_desc_defaults(const sg_desc* desc) { #endif res.environment.defaults.depth_format = _sg_def(res.environment.defaults.depth_format, SG_PIXELFORMAT_DEPTH_STENCIL); res.environment.defaults.sample_count = _sg_def(res.environment.defaults.sample_count, 1); - #if defined(SOKOL_GLCORE) - res.environment.gl.major_version = _sg_def(res.environment.gl.major_version, 4); - #if defined(__APPLE__) - res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 1); - #else - res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 3); - #endif - #elif defined(SOKOL_GLES3) - res.environment.gl.major_version = _sg_def(res.environment.gl.major_version, 3); - res.environment.gl.minor_version = _sg_def(res.environment.gl.minor_version, 0); - #endif res.buffer_pool_size = _sg_def(res.buffer_pool_size, _SG_DEFAULT_BUFFER_POOL_SIZE); res.image_pool_size = _sg_def(res.image_pool_size, _SG_DEFAULT_IMAGE_POOL_SIZE); res.sampler_pool_size = _sg_def(res.sampler_pool_size, _SG_DEFAULT_SAMPLER_POOL_SIZE); diff --git a/sokol/c/sokol_glue.h b/sokol/c/sokol_glue.h index c029495..a715b17 100644 --- a/sokol/c/sokol_glue.h +++ b/sokol/c/sokol_glue.h @@ -135,8 +135,6 @@ SOKOL_API_IMPL sg_environment sglue_environment(void) { env.d3d11.device = sapp_d3d11_get_device(); env.d3d11.device_context = sapp_d3d11_get_device_context(); env.wgpu.device = sapp_wgpu_get_device(); - env.gl.major_version = sapp_gl_get_major_version(); - env.gl.minor_version = sapp_gl_get_minor_version(); return env; } diff --git a/sokol/debugtext/debugtext.odin b/sokol/debugtext/debugtext.odin index 38ad724..3c9b948 100644 --- a/sokol/debugtext/debugtext.odin +++ b/sokol/debugtext/debugtext.odin @@ -36,21 +36,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_debugtext_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } - else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_debug.a" } } + else { foreign import sokol_debugtext_clib { "sokol_debugtext_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index 9bd6100..be78a45 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gfx_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_gl_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:OpenGL.framework" } } + } } else { - when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } - else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_arm64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } else { + when DEBUG { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_debug.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + else { foreign import sokol_gfx_clib { "sokol_gfx_macos_x64_metal_release.a", "system:Cocoa.framework","system:QuartzCore.framework","system:Metal.framework","system:MetalKit.framework" } } + } } } } else when ODIN_OS == .Linux { @@ -1400,17 +1411,11 @@ Wgpu_Environment :: struct { device : rawptr, } -Gl_Environment :: struct { - major_version : c.int, - minor_version : c.int, -} - Environment :: struct { defaults : Environment_Defaults, metal : Metal_Environment, d3d11 : D3d11_Environment, wgpu : Wgpu_Environment, - gl : Gl_Environment, } Commit_Listener :: struct { diff --git a/sokol/gl/gl.odin b/sokol/gl/gl.odin index f18d691..f0eada6 100644 --- a/sokol/gl/gl.odin +++ b/sokol/gl/gl.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_gl_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } - else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_debug.a" } } + else { foreign import sokol_gl_clib { "sokol_gl_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/glue/glue.odin b/sokol/glue/glue.odin index e60a93e..0720ace 100644 --- a/sokol/glue/glue.odin +++ b/sokol/glue/glue.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_glue_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } - else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_debug.a" } } + else { foreign import sokol_glue_clib { "sokol_glue_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/log/log.odin b/sokol/log/log.odin index 5f5abf6..d447545 100644 --- a/sokol/log/log.odin +++ b/sokol/log/log.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_log_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } - else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_debug.a" } } + else { foreign import sokol_log_clib { "sokol_log_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/shape/shape.odin b/sokol/shape/shape.odin index e914a54..121197c 100644 --- a/sokol/shape/shape.odin +++ b/sokol/shape/shape.odin @@ -30,21 +30,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_shape_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } - else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_debug.a" } } + else { foreign import sokol_shape_clib { "sokol_shape_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { diff --git a/sokol/time/time.odin b/sokol/time/time.odin index 9b2d0c5..a0f38db 100644 --- a/sokol/time/time.odin +++ b/sokol/time/time.odin @@ -29,21 +29,32 @@ when ODIN_OS == .Windows { } } } else when ODIN_OS == .Darwin { - when USE_GL { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } - } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } - } + when USE_DLL { + when USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_gl_release.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_debug.dylib" } } + else when USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_gl_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .arm64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_arm64_metal_release.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_debug.dylib" } } + else when !USE_GL && ODIN_ARCH == .amd64 && !DEBUG { foreign import sokol_time_clib { "../dylib/sokol_dylib_macos_x64_metal_release.dylib" } } } else { - when ODIN_ARCH == .arm64 { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + when USE_GL { + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_gl_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_gl_release.a" } } + } } else { - when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } - else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + when ODIN_ARCH == .arm64 { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_arm64_metal_release.a" } } + } else { + when DEBUG { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_debug.a" } } + else { foreign import sokol_time_clib { "sokol_time_macos_x64_metal_release.a" } } + } } } } else when ODIN_OS == .Linux { From 0cc8859326198164d41733a20883297dda5d33bd Mon Sep 17 00:00:00 2001 From: GH Action Date: Fri, 10 May 2024 16:00:43 +0000 Subject: [PATCH 54/66] updated (https://github.com/floooh/sokol/commit/67339198b75a7d04da3676db2b56514bf363d4b1) --- sokol/c/sokol_gfx.h | 74 +++++++++++++++++++++++++++++++-------------- sokol/gfx/gfx.odin | 6 ++-- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 54ec466..e7478d2 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -1796,8 +1796,10 @@ typedef enum sg_pixel_format { SG_PIXELFORMAT_ETC2_RGB8A1, SG_PIXELFORMAT_ETC2_RGBA8, SG_PIXELFORMAT_ETC2_SRGB8A8, - SG_PIXELFORMAT_ETC2_RG11, - SG_PIXELFORMAT_ETC2_RG11SN, + SG_PIXELFORMAT_EAC_R11, + SG_PIXELFORMAT_EAC_R11SN, + SG_PIXELFORMAT_EAC_RG11, + SG_PIXELFORMAT_EAC_RG11SN, SG_PIXELFORMAT_ASTC_4x4_RGBA, SG_PIXELFORMAT_ASTC_4x4_SRGBA, @@ -4844,6 +4846,12 @@ inline int sg_append_buffer(sg_buffer buf_id, const sg_range& data) { return sg_ #ifndef GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 #define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 #endif + #ifndef GL_COMPRESSED_R11_EAC + #define GL_COMPRESSED_R11_EAC 0x9270 + #endif + #ifndef GL_COMPRESSED_SIGNED_R11_EAC + #define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 + #endif #ifndef GL_COMPRESSED_RG11_EAC #define GL_COMPRESSED_RG11_EAC 0x9272 #endif @@ -6218,8 +6226,10 @@ _SOKOL_PRIVATE bool _sg_is_compressed_pixel_format(sg_pixel_format fmt) { case SG_PIXELFORMAT_ETC2_RGB8A1: case SG_PIXELFORMAT_ETC2_RGBA8: case SG_PIXELFORMAT_ETC2_SRGB8A8: - case SG_PIXELFORMAT_ETC2_RG11: - case SG_PIXELFORMAT_ETC2_RG11SN: + case SG_PIXELFORMAT_EAC_R11: + case SG_PIXELFORMAT_EAC_R11SN: + case SG_PIXELFORMAT_EAC_RG11: + case SG_PIXELFORMAT_EAC_RG11SN: case SG_PIXELFORMAT_ASTC_4x4_RGBA: case SG_PIXELFORMAT_ASTC_4x4_SRGBA: return true; @@ -6347,6 +6357,8 @@ _SOKOL_PRIVATE int _sg_row_pitch(sg_pixel_format fmt, int width, int row_align) case SG_PIXELFORMAT_ETC2_RGB8: case SG_PIXELFORMAT_ETC2_SRGB8: case SG_PIXELFORMAT_ETC2_RGB8A1: + case SG_PIXELFORMAT_EAC_R11: + case SG_PIXELFORMAT_EAC_R11SN: pitch = ((width + 3) / 4) * 8; pitch = pitch < 8 ? 8 : pitch; break; @@ -6361,8 +6373,8 @@ _SOKOL_PRIVATE int _sg_row_pitch(sg_pixel_format fmt, int width, int row_align) case SG_PIXELFORMAT_BC7_SRGBA: case SG_PIXELFORMAT_ETC2_RGBA8: case SG_PIXELFORMAT_ETC2_SRGB8A8: - case SG_PIXELFORMAT_ETC2_RG11: - case SG_PIXELFORMAT_ETC2_RG11SN: + case SG_PIXELFORMAT_EAC_RG11: + case SG_PIXELFORMAT_EAC_RG11SN: case SG_PIXELFORMAT_ASTC_4x4_RGBA: case SG_PIXELFORMAT_ASTC_4x4_SRGBA: pitch = ((width + 3) / 4) * 16; @@ -6396,8 +6408,10 @@ _SOKOL_PRIVATE int _sg_num_rows(sg_pixel_format fmt, int height) { case SG_PIXELFORMAT_ETC2_RGB8A1: case SG_PIXELFORMAT_ETC2_RGBA8: case SG_PIXELFORMAT_ETC2_SRGB8A8: - case SG_PIXELFORMAT_ETC2_RG11: - case SG_PIXELFORMAT_ETC2_RG11SN: + case SG_PIXELFORMAT_EAC_R11: + case SG_PIXELFORMAT_EAC_R11SN: + case SG_PIXELFORMAT_EAC_RG11: + case SG_PIXELFORMAT_EAC_RG11SN: case SG_PIXELFORMAT_BC2_RGBA: case SG_PIXELFORMAT_BC3_RGBA: case SG_PIXELFORMAT_BC3_SRGBA: @@ -7319,9 +7333,13 @@ _SOKOL_PRIVATE GLenum _sg_gl_teximage_format(sg_pixel_format fmt) { return GL_COMPRESSED_RGBA8_ETC2_EAC; case SG_PIXELFORMAT_ETC2_SRGB8A8: return GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; - case SG_PIXELFORMAT_ETC2_RG11: + case SG_PIXELFORMAT_EAC_R11: + return GL_COMPRESSED_R11_EAC; + case SG_PIXELFORMAT_EAC_R11SN: + return GL_COMPRESSED_SIGNED_R11_EAC; + case SG_PIXELFORMAT_EAC_RG11: return GL_COMPRESSED_RG11_EAC; - case SG_PIXELFORMAT_ETC2_RG11SN: + case SG_PIXELFORMAT_EAC_RG11SN: return GL_COMPRESSED_SIGNED_RG11_EAC; case SG_PIXELFORMAT_ASTC_4x4_RGBA: return GL_COMPRESSED_RGBA_ASTC_4x4_KHR; @@ -7403,8 +7421,10 @@ _SOKOL_PRIVATE GLenum _sg_gl_teximage_internal_format(sg_pixel_format fmt) { case SG_PIXELFORMAT_ETC2_RGB8A1: return GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; case SG_PIXELFORMAT_ETC2_RGBA8: return GL_COMPRESSED_RGBA8_ETC2_EAC; case SG_PIXELFORMAT_ETC2_SRGB8A8: return GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; - case SG_PIXELFORMAT_ETC2_RG11: return GL_COMPRESSED_RG11_EAC; - case SG_PIXELFORMAT_ETC2_RG11SN: return GL_COMPRESSED_SIGNED_RG11_EAC; + case SG_PIXELFORMAT_EAC_R11: return GL_COMPRESSED_R11_EAC; + case SG_PIXELFORMAT_EAC_R11SN: return GL_COMPRESSED_SIGNED_R11_EAC; + case SG_PIXELFORMAT_EAC_RG11: return GL_COMPRESSED_RG11_EAC; + case SG_PIXELFORMAT_EAC_RG11SN: return GL_COMPRESSED_SIGNED_RG11_EAC; case SG_PIXELFORMAT_ASTC_4x4_RGBA: return GL_COMPRESSED_RGBA_ASTC_4x4_KHR; case SG_PIXELFORMAT_ASTC_4x4_SRGBA: return GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR; default: SOKOL_UNREACHABLE; return 0; @@ -7549,8 +7569,10 @@ _SOKOL_PRIVATE void _sg_gl_init_pixelformats_etc2(void) { _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGB8A1]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGBA8]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_SRGB8A8]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11SN]); } _SOKOL_PRIVATE void _sg_gl_init_pixelformats_astc(void) { @@ -11638,8 +11660,10 @@ _SOKOL_PRIVATE MTLPixelFormat _sg_mtl_pixel_format(sg_pixel_format fmt) { case SG_PIXELFORMAT_ETC2_RGB8A1: return MTLPixelFormatETC2_RGB8A1; case SG_PIXELFORMAT_ETC2_RGBA8: return MTLPixelFormatEAC_RGBA8; case SG_PIXELFORMAT_ETC2_SRGB8A8: return MTLPixelFormatEAC_RGBA8_sRGB; - case SG_PIXELFORMAT_ETC2_RG11: return MTLPixelFormatEAC_RG11Unorm; - case SG_PIXELFORMAT_ETC2_RG11SN: return MTLPixelFormatEAC_RG11Snorm; + case SG_PIXELFORMAT_EAC_R11: return MTLPixelFormatEAC_R11Unorm; + case SG_PIXELFORMAT_EAC_R11SN: return MTLPixelFormatEAC_R11Snorm; + case SG_PIXELFORMAT_EAC_RG11: return MTLPixelFormatEAC_RG11Unorm; + case SG_PIXELFORMAT_EAC_RG11SN: return MTLPixelFormatEAC_RG11Snorm; case SG_PIXELFORMAT_ASTC_4x4_RGBA: return MTLPixelFormatASTC_4x4_LDR; case SG_PIXELFORMAT_ASTC_4x4_SRGBA: return MTLPixelFormatASTC_4x4_sRGB; #endif @@ -12113,8 +12137,10 @@ _SOKOL_PRIVATE void _sg_mtl_init_caps(void) { _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGB8A1]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGBA8]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_SRGB8A8]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11SN]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ASTC_4x4_RGBA]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ASTC_4x4_SRGBA]); @@ -13518,8 +13544,10 @@ _SOKOL_PRIVATE WGPUTextureFormat _sg_wgpu_textureformat(sg_pixel_format p) { case SG_PIXELFORMAT_ETC2_RGBA8: return WGPUTextureFormat_ETC2RGBA8Unorm; case SG_PIXELFORMAT_ETC2_SRGB8: return WGPUTextureFormat_ETC2RGB8UnormSrgb; case SG_PIXELFORMAT_ETC2_SRGB8A8: return WGPUTextureFormat_ETC2RGBA8UnormSrgb; - case SG_PIXELFORMAT_ETC2_RG11: return WGPUTextureFormat_EACR11Unorm; - case SG_PIXELFORMAT_ETC2_RG11SN: return WGPUTextureFormat_EACR11Snorm; + case SG_PIXELFORMAT_EAC_R11: return WGPUTextureFormat_EACR11Unorm; + case SG_PIXELFORMAT_EAC_R11SN: return WGPUTextureFormat_EACR11Snorm; + case SG_PIXELFORMAT_EAC_RG11: return WGPUTextureFormat_EACRG11Unorm; + case SG_PIXELFORMAT_EAC_RG11SN: return WGPUTextureFormat_EACRG11Snorm; case SG_PIXELFORMAT_RGB9E5: return WGPUTextureFormat_RGB9E5Ufloat; case SG_PIXELFORMAT_ASTC_4x4_RGBA: return WGPUTextureFormat_ASTC4x4Unorm; case SG_PIXELFORMAT_ASTC_4x4_SRGBA: return WGPUTextureFormat_ASTC4x4UnormSrgb; @@ -13758,8 +13786,10 @@ _SOKOL_PRIVATE void _sg_wgpu_init_caps(void) { _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGB8A1]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RGBA8]); _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_SRGB8A8]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11]); - _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_ETC2_RG11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_R11SN]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11]); + _sg_pixelformat_sf(&_sg.formats[SG_PIXELFORMAT_EAC_RG11SN]); } if (wgpuDeviceHasFeature(_sg.wgpu.dev, WGPUFeatureName_TextureCompressionASTC)) { diff --git a/sokol/gfx/gfx.odin b/sokol/gfx/gfx.odin index be78a45..3cff0d9 100644 --- a/sokol/gfx/gfx.odin +++ b/sokol/gfx/gfx.odin @@ -328,8 +328,10 @@ Pixel_Format :: enum i32 { ETC2_RGB8A1, ETC2_RGBA8, ETC2_SRGB8A8, - ETC2_RG11, - ETC2_RG11SN, + EAC_R11, + EAC_R11SN, + EAC_RG11, + EAC_RG11SN, ASTC_4x4_RGBA, ASTC_4x4_SRGBA, } From de81c1554bfecb28dcc4f4fad16b922c7fc5ef2d Mon Sep 17 00:00:00 2001 From: GH Action Date: Mon, 13 May 2024 12:29:56 +0000 Subject: [PATCH 55/66] updated (https://github.com/floooh/sokol/commit/2703dde33182c636687b409071acbf07690cfa2b) --- sokol/c/sokol_app.h | 10 ++++++++-- sokol/c/sokol_gfx.h | 19 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index 515796a..6e4d56a 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -5769,12 +5769,18 @@ _SOKOL_PRIVATE void _sapp_emsc_wgpu_request_adapter_cb(WGPURequestAdapterStatus WGPUFeatureName_Depth32FloatStencil8, }; // check for optional features we're interested in - // FIXME: ASTC texture compression if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionBC)) { requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionBC; - } else if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionETC2)) { + } + if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionETC2)) { requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionETC2; } + if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionASTC)) { + requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionASTC; + } + if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_Float32Filterable)) { + requiredFeatures[cur_feature_index++] = WGPUFeatureName_Float32Filterable; + } WGPUDeviceDescriptor dev_desc; _sapp_clear(&dev_desc, sizeof(dev_desc)); diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index e7478d2..d5a5151 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -6483,6 +6483,12 @@ _SOKOL_PRIVATE void _sg_pixelformat_sr(_sg_pixelformat_info_t* pfi) { pfi->render = true; } +_SOKOL_PRIVATE void _sg_pixelformat_sfr(_sg_pixelformat_info_t* pfi) { + pfi->sample = true; + pfi->filter = true; + pfi->render = true; +} + _SOKOL_PRIVATE void _sg_pixelformat_srmd(_sg_pixelformat_info_t* pfi) { pfi->sample = true; pfi->render = true; @@ -13756,10 +13762,15 @@ _SOKOL_PRIVATE void _sg_wgpu_init_caps(void) { _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RGBA32UI]); _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RGBA32SI]); - // FIXME: can be made filterable with extension - _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_R32F]); - _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RG32F]); - _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RGBA32F]); + if (wgpuDeviceHasFeature(_sg.wgpu.dev, WGPUFeatureName_Float32Filterable)) { + _sg_pixelformat_sfr(&_sg.formats[SG_PIXELFORMAT_R32F]); + _sg_pixelformat_sfr(&_sg.formats[SG_PIXELFORMAT_RG32F]); + _sg_pixelformat_sfr(&_sg.formats[SG_PIXELFORMAT_RGBA32F]); + } else { + _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_R32F]); + _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RG32F]); + _sg_pixelformat_sr(&_sg.formats[SG_PIXELFORMAT_RGBA32F]); + } _sg_pixelformat_srmd(&_sg.formats[SG_PIXELFORMAT_DEPTH]); _sg_pixelformat_srmd(&_sg.formats[SG_PIXELFORMAT_DEPTH_STENCIL]); From bc683d62f95743fa052c6a38d843879396b92814 Mon Sep 17 00:00:00 2001 From: GH Action Date: Mon, 13 May 2024 12:59:47 +0000 Subject: [PATCH 56/66] updated (https://github.com/floooh/sokol/commit/13554f665ebf32522b9e0323b35f08fb836b98b2) --- sokol/c/sokol_app.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index 6e4d56a..df3c1f2 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -5765,22 +5765,28 @@ _SOKOL_PRIVATE void _sapp_emsc_wgpu_request_adapter_cb(WGPURequestAdapterStatus SOKOL_ASSERT(adapter); _sapp.wgpu.adapter = adapter; size_t cur_feature_index = 1; - WGPUFeatureName requiredFeatures[8] = { + #define _SAPP_WGPU_MAX_REQUESTED_FEATURES (8) + WGPUFeatureName requiredFeatures[_SAPP_WGPU_MAX_REQUESTED_FEATURES] = { WGPUFeatureName_Depth32FloatStencil8, }; // check for optional features we're interested in if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionBC)) { + SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES); requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionBC; } if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionETC2)) { + SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES); requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionETC2; } if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_TextureCompressionASTC)) { + SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES); requiredFeatures[cur_feature_index++] = WGPUFeatureName_TextureCompressionASTC; } if (wgpuAdapterHasFeature(adapter, WGPUFeatureName_Float32Filterable)) { + SOKOL_ASSERT(cur_feature_index < _SAPP_WGPU_MAX_REQUESTED_FEATURES); requiredFeatures[cur_feature_index++] = WGPUFeatureName_Float32Filterable; } + #undef _SAPP_WGPU_MAX_REQUESTED_FEATURES WGPUDeviceDescriptor dev_desc; _sapp_clear(&dev_desc, sizeof(dev_desc)); From 6d5971432cc39becbd1ed8acff2a3d6b40d04cbc Mon Sep 17 00:00:00 2001 From: GH Action Date: Sat, 25 May 2024 14:57:14 +0000 Subject: [PATCH 57/66] updated (https://github.com/floooh/sokol/commit/f30824cebaed82600d5d524259a9fc4af5f7a69e) --- sokol/c/sokol_audio.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sokol/c/sokol_audio.h b/sokol/c/sokol_audio.h index 6b60937..529d1e4 100644 --- a/sokol/c/sokol_audio.h +++ b/sokol/c/sokol_audio.h @@ -39,6 +39,7 @@ - on macOS: AudioToolbox - on iOS: AudioToolbox, AVFoundation + - on FreeBSD: asound - on Linux: asound - on Android: link with OpenSLES or aaudio - on Windows with MSVC or Clang toolchain: no action needed, libs are defined in-source via pragma-comment-lib @@ -51,6 +52,7 @@ - Windows: WASAPI - Linux: ALSA + - FreeBSD: ALSA - macOS: CoreAudio - iOS: CoreAudio+AVAudioSession - emscripten: WebAudio with ScriptProcessorNode @@ -780,7 +782,9 @@ inline void saudio_setup(const saudio_desc& desc) { return saudio_setup(&desc); #include "aaudio/AAudio.h" #endif #elif defined(_SAUDIO_LINUX) - #include + #if !defined(__FreeBSD__) + #include + #endif #define _SAUDIO_PTHREADS (1) #include #define ALSA_PCM_NEW_HW_PARAMS_API From 791960242eccb4d243f4c5fc771a4feee43af46a Mon Sep 17 00:00:00 2001 From: puugz Date: Sat, 1 Jun 2024 23:13:20 +0200 Subject: [PATCH 58/66] update deprecated core:runtime import to base:runtime --- examples/vertexpull/main.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/vertexpull/main.odin b/examples/vertexpull/main.odin index 9a4a68f..3a40656 100644 --- a/examples/vertexpull/main.odin +++ b/examples/vertexpull/main.odin @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ package main -import "core:runtime" +import "base:runtime" import slog "../../sokol/log" import sg "../../sokol/gfx" import sapp "../../sokol/app" From 73b7caef9e3f50cc6faefbd56e504b144c548ffc Mon Sep 17 00:00:00 2001 From: GH Action Date: Wed, 19 Jun 2024 18:16:29 +0000 Subject: [PATCH 59/66] updated (https://github.com/floooh/sokol/commit/680c0434babeb3218c0fbf0bbf0215e8eedea072) --- sokol/c/sokol_gfx.h | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index d5a5151..58a9352 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -11437,12 +11437,15 @@ _SOKOL_PRIVATE void _sg_d3d11_append_buffer(_sg_buffer_t* buf, const sg_range* d } } +// see: https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-subresources +// also see: https://learn.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-d3d11calcsubresource _SOKOL_PRIVATE void _sg_d3d11_update_image(_sg_image_t* img, const sg_image_data* data) { SOKOL_ASSERT(img && data); SOKOL_ASSERT(_sg.d3d11.ctx); SOKOL_ASSERT(img->d3d11.res); const int num_faces = (img->cmn.type == SG_IMAGETYPE_CUBE) ? 6:1; const int num_slices = (img->cmn.type == SG_IMAGETYPE_ARRAY) ? img->cmn.num_slices:1; + const int num_depth_slices = (img->cmn.type == SG_IMAGETYPE_3D) ? img->cmn.num_slices:1; UINT subres_index = 0; HRESULT hr; D3D11_MAPPED_SUBRESOURCE d3d11_msr; @@ -11452,26 +11455,35 @@ _SOKOL_PRIVATE void _sg_d3d11_update_image(_sg_image_t* img, const sg_image_data SOKOL_ASSERT(subres_index < (SG_MAX_MIPMAPS * SG_MAX_TEXTUREARRAY_LAYERS)); const int mip_width = _sg_miplevel_dim(img->cmn.width, mip_index); const int mip_height = _sg_miplevel_dim(img->cmn.height, mip_index); - const int src_pitch = _sg_row_pitch(img->cmn.pixel_format, mip_width, 1); + const int src_row_pitch = _sg_row_pitch(img->cmn.pixel_format, mip_width, 1); + const int src_depth_pitch = _sg_surface_pitch(img->cmn.pixel_format, mip_width, mip_height, 1); const sg_range* subimg_data = &(data->subimage[face_index][mip_index]); const size_t slice_size = subimg_data->size / (size_t)num_slices; + SOKOL_ASSERT(slice_size == (size_t)(src_depth_pitch * num_depth_slices)); const size_t slice_offset = slice_size * (size_t)slice_index; const uint8_t* slice_ptr = ((const uint8_t*)subimg_data->ptr) + slice_offset; hr = _sg_d3d11_Map(_sg.d3d11.ctx, img->d3d11.res, subres_index, D3D11_MAP_WRITE_DISCARD, 0, &d3d11_msr); _sg_stats_add(d3d11.num_map, 1); if (SUCCEEDED(hr)) { - // FIXME: need to handle difference in depth-pitch for 3D textures as well! - if (src_pitch == (int)d3d11_msr.RowPitch) { - memcpy(d3d11_msr.pData, slice_ptr, slice_size); - } else { - SOKOL_ASSERT(src_pitch < (int)d3d11_msr.RowPitch); - const uint8_t* src_ptr = slice_ptr; - uint8_t* dst_ptr = (uint8_t*) d3d11_msr.pData; - for (int row_index = 0; row_index < mip_height; row_index++) { - memcpy(dst_ptr, src_ptr, (size_t)src_pitch); - src_ptr += src_pitch; - dst_ptr += d3d11_msr.RowPitch; + const uint8_t* src_ptr = slice_ptr; + uint8_t* dst_ptr = (uint8_t*)d3d11_msr.pData; + for (int depth_index = 0; depth_index < num_depth_slices; depth_index++) { + if (src_row_pitch == (int)d3d11_msr.RowPitch) { + const size_t copy_size = slice_size / (size_t)num_depth_slices; + SOKOL_ASSERT((copy_size * (size_t)num_depth_slices) == slice_size); + memcpy(dst_ptr, src_ptr, copy_size); + } else { + SOKOL_ASSERT(src_row_pitch < (int)d3d11_msr.RowPitch); + const uint8_t* src_row_ptr = src_ptr; + uint8_t* dst_row_ptr = dst_ptr; + for (int row_index = 0; row_index < mip_height; row_index++) { + memcpy(dst_row_ptr, src_row_ptr, (size_t)src_row_pitch); + src_row_ptr += src_row_pitch; + dst_row_ptr += d3d11_msr.RowPitch; + } } + src_ptr += src_depth_pitch; + dst_ptr += d3d11_msr.DepthPitch; } _sg_d3d11_Unmap(_sg.d3d11.ctx, img->d3d11.res, subres_index); _sg_stats_add(d3d11.num_unmap, 1); From f46d614db2a29317137b0df57f0b515098b0fa31 Mon Sep 17 00:00:00 2001 From: GH Action Date: Mon, 24 Jun 2024 13:15:16 +0000 Subject: [PATCH 60/66] updated (https://github.com/floooh/sokol/commit/b1221d1f2bfc3cbb22f566cfa8f31b4073c287ae) --- sokol/app/app.odin | 2 +- sokol/c/sokol_app.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sokol/app/app.odin b/sokol/app/app.odin index dbd46de..c6fc270 100644 --- a/sokol/app/app.odin +++ b/sokol/app/app.odin @@ -375,7 +375,7 @@ Log_Item :: enum i32 { WIN32_WGL_SET_PIXELFORMAT_FAILED, WIN32_WGL_ARB_CREATE_CONTEXT_REQUIRED, WIN32_WGL_ARB_CREATE_CONTEXT_PROFILE_REQUIRED, - WIN32_WGL_OPENGL_3_2_NOT_SUPPORTED, + WIN32_WGL_OPENGL_VERSION_NOT_SUPPORTED, WIN32_WGL_OPENGL_PROFILE_NOT_SUPPORTED, WIN32_WGL_INCOMPATIBLE_DEVICE_CONTEXT, WIN32_WGL_CREATE_CONTEXT_ATTRIBS_FAILED_OTHER, diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index df3c1f2..901fd9a 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -88,7 +88,7 @@ - makes the rendered frame visible - provides keyboard-, mouse- and low-level touch-events - platforms: MacOS, iOS, HTML5, Win32, Linux/RaspberryPi, Android - - 3D-APIs: Metal, D3D11, GL3.2, GLES3, WebGL, WebGL2, NOAPI + - 3D-APIs: Metal, D3D11, GL4.1, GL4.3, GLES3, WebGL, WebGL2, NOAPI FEATURE/PLATFORM MATRIX ======================= @@ -1554,7 +1554,7 @@ typedef struct sapp_allocator { #define _SAPP_LOG_ITEMS \ _SAPP_LOGITEM_XMACRO(OK, "Ok") \ _SAPP_LOGITEM_XMACRO(MALLOC_FAILED, "memory allocation failed") \ - _SAPP_LOGITEM_XMACRO(MACOS_INVALID_NSOPENGL_PROFILE, "macos: invalid NSOpenGLProfile (valid choices are 1.0, 3.2 and 4.1)") \ + _SAPP_LOGITEM_XMACRO(MACOS_INVALID_NSOPENGL_PROFILE, "macos: invalid NSOpenGLProfile (valid choices are 1.0 and 4.1)") \ _SAPP_LOGITEM_XMACRO(WIN32_LOAD_OPENGL32_DLL_FAILED, "failed loading opengl32.dll") \ _SAPP_LOGITEM_XMACRO(WIN32_CREATE_HELPER_WINDOW_FAILED, "failed to create helper window") \ _SAPP_LOGITEM_XMACRO(WIN32_HELPER_WINDOW_GETDC_FAILED, "failed to get helper window DC") \ @@ -1567,7 +1567,7 @@ typedef struct sapp_allocator { _SAPP_LOGITEM_XMACRO(WIN32_WGL_SET_PIXELFORMAT_FAILED, "failed to set selected pixel format") \ _SAPP_LOGITEM_XMACRO(WIN32_WGL_ARB_CREATE_CONTEXT_REQUIRED, "ARB_create_context required") \ _SAPP_LOGITEM_XMACRO(WIN32_WGL_ARB_CREATE_CONTEXT_PROFILE_REQUIRED, "ARB_create_context_profile required") \ - _SAPP_LOGITEM_XMACRO(WIN32_WGL_OPENGL_3_2_NOT_SUPPORTED, "OpenGL 3.2 not supported by GL driver (ERROR_INVALID_VERSION_ARB)") \ + _SAPP_LOGITEM_XMACRO(WIN32_WGL_OPENGL_VERSION_NOT_SUPPORTED, "requested OpenGL version not supported by GL driver (ERROR_INVALID_VERSION_ARB)") \ _SAPP_LOGITEM_XMACRO(WIN32_WGL_OPENGL_PROFILE_NOT_SUPPORTED, "requested OpenGL profile not support by GL driver (ERROR_INVALID_PROFILE_ARB)") \ _SAPP_LOGITEM_XMACRO(WIN32_WGL_INCOMPATIBLE_DEVICE_CONTEXT, "CreateContextAttribsARB failed with ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB") \ _SAPP_LOGITEM_XMACRO(WIN32_WGL_CREATE_CONTEXT_ATTRIBS_FAILED_OTHER, "CreateContextAttribsARB failed for other reason") \ @@ -1708,7 +1708,7 @@ typedef struct sapp_desc { sapp_logger logger; // logging callback override (default: NO LOGGING!) // backend-specific options - int gl_major_version; // override GL major and minor version (the default GL version is 3.2) + int gl_major_version; // override GL major and minor version (the default GL version is 4.1 on macOS, 4.3 elsewhere) int gl_minor_version; bool win32_console_utf8; // if true, set the output console codepage to UTF-8 bool win32_console_create; // if true, attach stdout/stderr to a new console window @@ -6890,7 +6890,7 @@ _SOKOL_PRIVATE void _sapp_wgl_create_context(void) { if (!_sapp.wgl.gl_ctx) { const DWORD err = GetLastError(); if (err == (0xc0070000 | ERROR_INVALID_VERSION_ARB)) { - _SAPP_PANIC(WIN32_WGL_OPENGL_3_2_NOT_SUPPORTED); + _SAPP_PANIC(WIN32_WGL_OPENGL_VERSION_NOT_SUPPORTED); } else if (err == (0xc0070000 | ERROR_INVALID_PROFILE_ARB)) { _SAPP_PANIC(WIN32_WGL_OPENGL_PROFILE_NOT_SUPPORTED); From c1a1fadaacf925bedfef9535e793e83d52273d6a Mon Sep 17 00:00:00 2001 From: GH Action Date: Tue, 2 Jul 2024 08:45:42 +0000 Subject: [PATCH 61/66] updated (https://github.com/floooh/sokol/commit/78f07444c249deb47c7e6279b556c9dcf94d1cc7) --- sokol/c/sokol_gfx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 58a9352..686a8ab 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -3592,7 +3592,7 @@ typedef struct sg_frame_stats { _SG_LOGITEM_XMACRO(WGPU_ATTACHMENTS_CREATE_TEXTURE_VIEW_FAILED, "wgpuTextureCreateView() failed in create attachments") \ _SG_LOGITEM_XMACRO(IDENTICAL_COMMIT_LISTENER, "attempting to add identical commit listener") \ _SG_LOGITEM_XMACRO(COMMIT_LISTENER_ARRAY_FULL, "commit listener array full") \ - _SG_LOGITEM_XMACRO(TRACE_HOOKS_NOT_ENABLED, "sg_install_trace_hooks() called, but SG_TRACE_HOOKS is not defined") \ + _SG_LOGITEM_XMACRO(TRACE_HOOKS_NOT_ENABLED, "sg_install_trace_hooks() called, but SOKOL_TRACE_HOOKS is not defined") \ _SG_LOGITEM_XMACRO(DEALLOC_BUFFER_INVALID_STATE, "sg_dealloc_buffer(): buffer must be in ALLOC state") \ _SG_LOGITEM_XMACRO(DEALLOC_IMAGE_INVALID_STATE, "sg_dealloc_image(): image must be in alloc state") \ _SG_LOGITEM_XMACRO(DEALLOC_SAMPLER_INVALID_STATE, "sg_dealloc_sampler(): sampler must be in alloc state") \ From 8b29e2d92637c99b8ce2e083218db98f32c65cde Mon Sep 17 00:00:00 2001 From: GH Action Date: Thu, 4 Jul 2024 18:26:58 +0000 Subject: [PATCH 62/66] updated (https://github.com/floooh/sokol/commit/67e1663368d2ba11ec1bca13f1da09b20c69622b) --- sokol/c/sokol_audio.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sokol/c/sokol_audio.h b/sokol/c/sokol_audio.h index 529d1e4..ed90fb6 100644 --- a/sokol/c/sokol_audio.h +++ b/sokol/c/sokol_audio.h @@ -1067,6 +1067,7 @@ typedef struct { /* sokol-audio state */ typedef struct { bool valid; + bool setup_called; void (*stream_cb)(float* buffer, int num_frames, int num_channels); void (*stream_userdata_cb)(float* buffer, int num_frames, int num_channels, void* user_data); void* user_data; @@ -2486,9 +2487,11 @@ void _saudio_backend_shutdown(void) { // >>public SOKOL_API_IMPL void saudio_setup(const saudio_desc* desc) { SOKOL_ASSERT(!_saudio.valid); + SOKOL_ASSERT(!_saudio.setup_called); SOKOL_ASSERT(desc); SOKOL_ASSERT((desc->allocator.alloc_fn && desc->allocator.free_fn) || (!desc->allocator.alloc_fn && !desc->allocator.free_fn)); _saudio_clear(&_saudio, sizeof(_saudio)); + _saudio.setup_called = true; _saudio.desc = *desc; _saudio.stream_cb = desc->stream_cb; _saudio.stream_userdata_cb = desc->stream_userdata_cb; @@ -2519,6 +2522,8 @@ SOKOL_API_IMPL void saudio_setup(const saudio_desc* desc) { } SOKOL_API_IMPL void saudio_shutdown(void) { + SOKOL_ASSERT(_saudio.setup_called); + _saudio.setup_called = false; if (_saudio.valid) { _saudio_backend_shutdown(); _saudio_fifo_shutdown(&_saudio.fifo); @@ -2532,26 +2537,32 @@ SOKOL_API_IMPL bool saudio_isvalid(void) { } SOKOL_API_IMPL void* saudio_userdata(void) { + SOKOL_ASSERT(_saudio.setup_called); return _saudio.desc.user_data; } SOKOL_API_IMPL saudio_desc saudio_query_desc(void) { + SOKOL_ASSERT(_saudio.setup_called); return _saudio.desc; } SOKOL_API_IMPL int saudio_sample_rate(void) { + SOKOL_ASSERT(_saudio.setup_called); return _saudio.sample_rate; } SOKOL_API_IMPL int saudio_buffer_frames(void) { + SOKOL_ASSERT(_saudio.setup_called); return _saudio.buffer_frames; } SOKOL_API_IMPL int saudio_channels(void) { + SOKOL_ASSERT(_saudio.setup_called); return _saudio.num_channels; } SOKOL_API_IMPL bool saudio_suspended(void) { + SOKOL_ASSERT(_saudio.setup_called); #if defined(_SAUDIO_EMSCRIPTEN) if (_saudio.valid) { return 1 == saudio_js_suspended(); @@ -2565,6 +2576,7 @@ SOKOL_API_IMPL bool saudio_suspended(void) { } SOKOL_API_IMPL int saudio_expect(void) { + SOKOL_ASSERT(_saudio.setup_called); if (_saudio.valid) { const int num_frames = _saudio_fifo_writable_bytes(&_saudio.fifo) / _saudio.bytes_per_frame; return num_frames; @@ -2575,6 +2587,7 @@ SOKOL_API_IMPL int saudio_expect(void) { } SOKOL_API_IMPL int saudio_push(const float* frames, int num_frames) { + SOKOL_ASSERT(_saudio.setup_called); SOKOL_ASSERT(frames && (num_frames > 0)); if (_saudio.valid) { const int num_bytes = num_frames * _saudio.bytes_per_frame; From 64e5ef36a65923efbc4d3e4f7498c702da10f51f Mon Sep 17 00:00:00 2001 From: GH Action Date: Tue, 9 Jul 2024 21:31:35 +0000 Subject: [PATCH 63/66] updated (https://github.com/floooh/sokol/commit/ab1108641067952916dfdc04dda22a2254e73933) --- sokol/c/sokol_app.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index 901fd9a..28c9421 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -6303,6 +6303,7 @@ _SOKOL_PRIVATE void _sapp_win32_init_keytable(void) { _sapp.keycodes[0x138] = SAPP_KEYCODE_RIGHT_ALT; _sapp.keycodes[0x11D] = SAPP_KEYCODE_RIGHT_CONTROL; _sapp.keycodes[0x036] = SAPP_KEYCODE_RIGHT_SHIFT; + _sapp.keycodes[0x136] = SAPP_KEYCODE_RIGHT_SHIFT; _sapp.keycodes[0x15C] = SAPP_KEYCODE_RIGHT_SUPER; _sapp.keycodes[0x150] = SAPP_KEYCODE_DOWN; _sapp.keycodes[0x14B] = SAPP_KEYCODE_LEFT; From bd3c8a07d424db1e110a4b5d1940f2905697b54d Mon Sep 17 00:00:00 2001 From: GH Action Date: Tue, 16 Jul 2024 15:23:58 +0000 Subject: [PATCH 64/66] updated (https://github.com/floooh/sokol/commit/6ffde62519312b914faeec0542c29acde39d0bea) --- sokol/c/sokol_app.h | 1063 +++++++++++++++++++++++++++---------------- 1 file changed, 670 insertions(+), 393 deletions(-) diff --git a/sokol/c/sokol_app.h b/sokol/c/sokol_app.h index 28c9421..790e9de 100644 --- a/sokol/c/sokol_app.h +++ b/sokol/c/sokol_app.h @@ -54,7 +54,7 @@ For example code, see https://github.com/floooh/sokol-samples/tree/master/sapp Portions of the Windows and Linux GL initialization, event-, icon- etc... code - have been taken from GLFW (http://www.glfw.org/) + have been taken from GLFW (http://www.glfw.org/). iOS onscreen keyboard support 'inspired' by libgdx. @@ -1940,7 +1940,7 @@ inline void sapp_run(const sapp_desc& desc) { return sapp_run(&desc); } #endif #include // malloc, free -#include // memset +#include // memset, strncmp #include // size_t #include // roundf @@ -2668,6 +2668,7 @@ typedef struct { #if defined(_SAPP_LINUX) #define _SAPP_X11_XDND_VERSION (5) +#define _SAPP_X11_MAX_X11_KEYCODES (256) #define GLX_VENDOR 1 #define GLX_RGBA_BIT 0x00000001 @@ -2761,6 +2762,9 @@ typedef struct { Atom NET_WM_STATE_FULLSCREEN; _sapp_xi_t xi; _sapp_xdnd_t xdnd; + // XLib manual says keycodes are in the range [8, 255] inclusive. + // https://tronche.com/gui/x/xlib/input/keyboard-encoding.html + bool key_repeat[_SAPP_X11_MAX_X11_KEYCODES]; } _sapp_x11_t; #if defined(_SAPP_GLX) @@ -9637,6 +9641,354 @@ _SOKOL_PRIVATE void _sapp_x11_init_extensions(void) { } } +// translate the X11 KeySyms for a key to sokol-app key code +// NOTE: this is only used as a fallback, in case the XBK method fails +// it is layout-dependent and will fail partially on most non-US layouts. +// +_SOKOL_PRIVATE sapp_keycode _sapp_x11_translate_keysyms(const KeySym* keysyms, int width) { + if (width > 1) { + switch (keysyms[1]) { + case XK_KP_0: return SAPP_KEYCODE_KP_0; + case XK_KP_1: return SAPP_KEYCODE_KP_1; + case XK_KP_2: return SAPP_KEYCODE_KP_2; + case XK_KP_3: return SAPP_KEYCODE_KP_3; + case XK_KP_4: return SAPP_KEYCODE_KP_4; + case XK_KP_5: return SAPP_KEYCODE_KP_5; + case XK_KP_6: return SAPP_KEYCODE_KP_6; + case XK_KP_7: return SAPP_KEYCODE_KP_7; + case XK_KP_8: return SAPP_KEYCODE_KP_8; + case XK_KP_9: return SAPP_KEYCODE_KP_9; + case XK_KP_Separator: + case XK_KP_Decimal: return SAPP_KEYCODE_KP_DECIMAL; + case XK_KP_Equal: return SAPP_KEYCODE_KP_EQUAL; + case XK_KP_Enter: return SAPP_KEYCODE_KP_ENTER; + default: break; + } + } + + switch (keysyms[0]) { + case XK_Escape: return SAPP_KEYCODE_ESCAPE; + case XK_Tab: return SAPP_KEYCODE_TAB; + case XK_Shift_L: return SAPP_KEYCODE_LEFT_SHIFT; + case XK_Shift_R: return SAPP_KEYCODE_RIGHT_SHIFT; + case XK_Control_L: return SAPP_KEYCODE_LEFT_CONTROL; + case XK_Control_R: return SAPP_KEYCODE_RIGHT_CONTROL; + case XK_Meta_L: + case XK_Alt_L: return SAPP_KEYCODE_LEFT_ALT; + case XK_Mode_switch: // Mapped to Alt_R on many keyboards + case XK_ISO_Level3_Shift: // AltGr on at least some machines + case XK_Meta_R: + case XK_Alt_R: return SAPP_KEYCODE_RIGHT_ALT; + case XK_Super_L: return SAPP_KEYCODE_LEFT_SUPER; + case XK_Super_R: return SAPP_KEYCODE_RIGHT_SUPER; + case XK_Menu: return SAPP_KEYCODE_MENU; + case XK_Num_Lock: return SAPP_KEYCODE_NUM_LOCK; + case XK_Caps_Lock: return SAPP_KEYCODE_CAPS_LOCK; + case XK_Print: return SAPP_KEYCODE_PRINT_SCREEN; + case XK_Scroll_Lock: return SAPP_KEYCODE_SCROLL_LOCK; + case XK_Pause: return SAPP_KEYCODE_PAUSE; + case XK_Delete: return SAPP_KEYCODE_DELETE; + case XK_BackSpace: return SAPP_KEYCODE_BACKSPACE; + case XK_Return: return SAPP_KEYCODE_ENTER; + case XK_Home: return SAPP_KEYCODE_HOME; + case XK_End: return SAPP_KEYCODE_END; + case XK_Page_Up: return SAPP_KEYCODE_PAGE_UP; + case XK_Page_Down: return SAPP_KEYCODE_PAGE_DOWN; + case XK_Insert: return SAPP_KEYCODE_INSERT; + case XK_Left: return SAPP_KEYCODE_LEFT; + case XK_Right: return SAPP_KEYCODE_RIGHT; + case XK_Down: return SAPP_KEYCODE_DOWN; + case XK_Up: return SAPP_KEYCODE_UP; + case XK_F1: return SAPP_KEYCODE_F1; + case XK_F2: return SAPP_KEYCODE_F2; + case XK_F3: return SAPP_KEYCODE_F3; + case XK_F4: return SAPP_KEYCODE_F4; + case XK_F5: return SAPP_KEYCODE_F5; + case XK_F6: return SAPP_KEYCODE_F6; + case XK_F7: return SAPP_KEYCODE_F7; + case XK_F8: return SAPP_KEYCODE_F8; + case XK_F9: return SAPP_KEYCODE_F9; + case XK_F10: return SAPP_KEYCODE_F10; + case XK_F11: return SAPP_KEYCODE_F11; + case XK_F12: return SAPP_KEYCODE_F12; + case XK_F13: return SAPP_KEYCODE_F13; + case XK_F14: return SAPP_KEYCODE_F14; + case XK_F15: return SAPP_KEYCODE_F15; + case XK_F16: return SAPP_KEYCODE_F16; + case XK_F17: return SAPP_KEYCODE_F17; + case XK_F18: return SAPP_KEYCODE_F18; + case XK_F19: return SAPP_KEYCODE_F19; + case XK_F20: return SAPP_KEYCODE_F20; + case XK_F21: return SAPP_KEYCODE_F21; + case XK_F22: return SAPP_KEYCODE_F22; + case XK_F23: return SAPP_KEYCODE_F23; + case XK_F24: return SAPP_KEYCODE_F24; + case XK_F25: return SAPP_KEYCODE_F25; + + // numeric keypad + case XK_KP_Divide: return SAPP_KEYCODE_KP_DIVIDE; + case XK_KP_Multiply: return SAPP_KEYCODE_KP_MULTIPLY; + case XK_KP_Subtract: return SAPP_KEYCODE_KP_SUBTRACT; + case XK_KP_Add: return SAPP_KEYCODE_KP_ADD; + + // these should have been detected in secondary keysym test above! + case XK_KP_Insert: return SAPP_KEYCODE_KP_0; + case XK_KP_End: return SAPP_KEYCODE_KP_1; + case XK_KP_Down: return SAPP_KEYCODE_KP_2; + case XK_KP_Page_Down: return SAPP_KEYCODE_KP_3; + case XK_KP_Left: return SAPP_KEYCODE_KP_4; + case XK_KP_Right: return SAPP_KEYCODE_KP_6; + case XK_KP_Home: return SAPP_KEYCODE_KP_7; + case XK_KP_Up: return SAPP_KEYCODE_KP_8; + case XK_KP_Page_Up: return SAPP_KEYCODE_KP_9; + case XK_KP_Delete: return SAPP_KEYCODE_KP_DECIMAL; + case XK_KP_Equal: return SAPP_KEYCODE_KP_EQUAL; + case XK_KP_Enter: return SAPP_KEYCODE_KP_ENTER; + + // last resort: Check for printable keys (should not happen if the XKB + // extension is available). This will give a layout dependent mapping + // (which is wrong, and we may miss some keys, especially on non-US + // keyboards), but it's better than nothing... + case XK_a: return SAPP_KEYCODE_A; + case XK_b: return SAPP_KEYCODE_B; + case XK_c: return SAPP_KEYCODE_C; + case XK_d: return SAPP_KEYCODE_D; + case XK_e: return SAPP_KEYCODE_E; + case XK_f: return SAPP_KEYCODE_F; + case XK_g: return SAPP_KEYCODE_G; + case XK_h: return SAPP_KEYCODE_H; + case XK_i: return SAPP_KEYCODE_I; + case XK_j: return SAPP_KEYCODE_J; + case XK_k: return SAPP_KEYCODE_K; + case XK_l: return SAPP_KEYCODE_L; + case XK_m: return SAPP_KEYCODE_M; + case XK_n: return SAPP_KEYCODE_N; + case XK_o: return SAPP_KEYCODE_O; + case XK_p: return SAPP_KEYCODE_P; + case XK_q: return SAPP_KEYCODE_Q; + case XK_r: return SAPP_KEYCODE_R; + case XK_s: return SAPP_KEYCODE_S; + case XK_t: return SAPP_KEYCODE_T; + case XK_u: return SAPP_KEYCODE_U; + case XK_v: return SAPP_KEYCODE_V; + case XK_w: return SAPP_KEYCODE_W; + case XK_x: return SAPP_KEYCODE_X; + case XK_y: return SAPP_KEYCODE_Y; + case XK_z: return SAPP_KEYCODE_Z; + case XK_1: return SAPP_KEYCODE_1; + case XK_2: return SAPP_KEYCODE_2; + case XK_3: return SAPP_KEYCODE_3; + case XK_4: return SAPP_KEYCODE_4; + case XK_5: return SAPP_KEYCODE_5; + case XK_6: return SAPP_KEYCODE_6; + case XK_7: return SAPP_KEYCODE_7; + case XK_8: return SAPP_KEYCODE_8; + case XK_9: return SAPP_KEYCODE_9; + case XK_0: return SAPP_KEYCODE_0; + case XK_space: return SAPP_KEYCODE_SPACE; + case XK_minus: return SAPP_KEYCODE_MINUS; + case XK_equal: return SAPP_KEYCODE_EQUAL; + case XK_bracketleft: return SAPP_KEYCODE_LEFT_BRACKET; + case XK_bracketright: return SAPP_KEYCODE_RIGHT_BRACKET; + case XK_backslash: return SAPP_KEYCODE_BACKSLASH; + case XK_semicolon: return SAPP_KEYCODE_SEMICOLON; + case XK_apostrophe: return SAPP_KEYCODE_APOSTROPHE; + case XK_grave: return SAPP_KEYCODE_GRAVE_ACCENT; + case XK_comma: return SAPP_KEYCODE_COMMA; + case XK_period: return SAPP_KEYCODE_PERIOD; + case XK_slash: return SAPP_KEYCODE_SLASH; + case XK_less: return SAPP_KEYCODE_WORLD_1; // At least in some layouts... + default: break; + } + + // no matching translation was found + return SAPP_KEYCODE_INVALID; +} + + +// setup dynamic keycode/scancode mapping tables, this is required +// for getting layout-independent keycodes on X11. +// +// see GLFW x11_init.c/createKeyTables() +_SOKOL_PRIVATE void _sapp_x11_init_keytable(void) { + for (int i = 0; i < SAPP_MAX_KEYCODES; i++) { + _sapp.keycodes[i] = SAPP_KEYCODE_INVALID; + } + // use XKB to determine physical key locations independently of the current keyboard layout + XkbDescPtr desc = XkbGetMap(_sapp.x11.display, 0, XkbUseCoreKbd); + SOKOL_ASSERT(desc); + XkbGetNames(_sapp.x11.display, XkbKeyNamesMask | XkbKeyAliasesMask, desc); + + const int scancode_min = desc->min_key_code; + const int scancode_max = desc->max_key_code; + + const struct { sapp_keycode key; const char* name; } keymap[] = { + { SAPP_KEYCODE_GRAVE_ACCENT, "TLDE" }, + { SAPP_KEYCODE_1, "AE01" }, + { SAPP_KEYCODE_2, "AE02" }, + { SAPP_KEYCODE_3, "AE03" }, + { SAPP_KEYCODE_4, "AE04" }, + { SAPP_KEYCODE_5, "AE05" }, + { SAPP_KEYCODE_6, "AE06" }, + { SAPP_KEYCODE_7, "AE07" }, + { SAPP_KEYCODE_8, "AE08" }, + { SAPP_KEYCODE_9, "AE09" }, + { SAPP_KEYCODE_0, "AE10" }, + { SAPP_KEYCODE_MINUS, "AE11" }, + { SAPP_KEYCODE_EQUAL, "AE12" }, + { SAPP_KEYCODE_Q, "AD01" }, + { SAPP_KEYCODE_W, "AD02" }, + { SAPP_KEYCODE_E, "AD03" }, + { SAPP_KEYCODE_R, "AD04" }, + { SAPP_KEYCODE_T, "AD05" }, + { SAPP_KEYCODE_Y, "AD06" }, + { SAPP_KEYCODE_U, "AD07" }, + { SAPP_KEYCODE_I, "AD08" }, + { SAPP_KEYCODE_O, "AD09" }, + { SAPP_KEYCODE_P, "AD10" }, + { SAPP_KEYCODE_LEFT_BRACKET, "AD11" }, + { SAPP_KEYCODE_RIGHT_BRACKET, "AD12" }, + { SAPP_KEYCODE_A, "AC01" }, + { SAPP_KEYCODE_S, "AC02" }, + { SAPP_KEYCODE_D, "AC03" }, + { SAPP_KEYCODE_F, "AC04" }, + { SAPP_KEYCODE_G, "AC05" }, + { SAPP_KEYCODE_H, "AC06" }, + { SAPP_KEYCODE_J, "AC07" }, + { SAPP_KEYCODE_K, "AC08" }, + { SAPP_KEYCODE_L, "AC09" }, + { SAPP_KEYCODE_SEMICOLON, "AC10" }, + { SAPP_KEYCODE_APOSTROPHE, "AC11" }, + { SAPP_KEYCODE_Z, "AB01" }, + { SAPP_KEYCODE_X, "AB02" }, + { SAPP_KEYCODE_C, "AB03" }, + { SAPP_KEYCODE_V, "AB04" }, + { SAPP_KEYCODE_B, "AB05" }, + { SAPP_KEYCODE_N, "AB06" }, + { SAPP_KEYCODE_M, "AB07" }, + { SAPP_KEYCODE_COMMA, "AB08" }, + { SAPP_KEYCODE_PERIOD, "AB09" }, + { SAPP_KEYCODE_SLASH, "AB10" }, + { SAPP_KEYCODE_BACKSLASH, "BKSL" }, + { SAPP_KEYCODE_WORLD_1, "LSGT" }, + { SAPP_KEYCODE_SPACE, "SPCE" }, + { SAPP_KEYCODE_ESCAPE, "ESC" }, + { SAPP_KEYCODE_ENTER, "RTRN" }, + { SAPP_KEYCODE_TAB, "TAB" }, + { SAPP_KEYCODE_BACKSPACE, "BKSP" }, + { SAPP_KEYCODE_INSERT, "INS" }, + { SAPP_KEYCODE_DELETE, "DELE" }, + { SAPP_KEYCODE_RIGHT, "RGHT" }, + { SAPP_KEYCODE_LEFT, "LEFT" }, + { SAPP_KEYCODE_DOWN, "DOWN" }, + { SAPP_KEYCODE_UP, "UP" }, + { SAPP_KEYCODE_PAGE_UP, "PGUP" }, + { SAPP_KEYCODE_PAGE_DOWN, "PGDN" }, + { SAPP_KEYCODE_HOME, "HOME" }, + { SAPP_KEYCODE_END, "END" }, + { SAPP_KEYCODE_CAPS_LOCK, "CAPS" }, + { SAPP_KEYCODE_SCROLL_LOCK, "SCLK" }, + { SAPP_KEYCODE_NUM_LOCK, "NMLK" }, + { SAPP_KEYCODE_PRINT_SCREEN, "PRSC" }, + { SAPP_KEYCODE_PAUSE, "PAUS" }, + { SAPP_KEYCODE_F1, "FK01" }, + { SAPP_KEYCODE_F2, "FK02" }, + { SAPP_KEYCODE_F3, "FK03" }, + { SAPP_KEYCODE_F4, "FK04" }, + { SAPP_KEYCODE_F5, "FK05" }, + { SAPP_KEYCODE_F6, "FK06" }, + { SAPP_KEYCODE_F7, "FK07" }, + { SAPP_KEYCODE_F8, "FK08" }, + { SAPP_KEYCODE_F9, "FK09" }, + { SAPP_KEYCODE_F10, "FK10" }, + { SAPP_KEYCODE_F11, "FK11" }, + { SAPP_KEYCODE_F12, "FK12" }, + { SAPP_KEYCODE_F13, "FK13" }, + { SAPP_KEYCODE_F14, "FK14" }, + { SAPP_KEYCODE_F15, "FK15" }, + { SAPP_KEYCODE_F16, "FK16" }, + { SAPP_KEYCODE_F17, "FK17" }, + { SAPP_KEYCODE_F18, "FK18" }, + { SAPP_KEYCODE_F19, "FK19" }, + { SAPP_KEYCODE_F20, "FK20" }, + { SAPP_KEYCODE_F21, "FK21" }, + { SAPP_KEYCODE_F22, "FK22" }, + { SAPP_KEYCODE_F23, "FK23" }, + { SAPP_KEYCODE_F24, "FK24" }, + { SAPP_KEYCODE_F25, "FK25" }, + { SAPP_KEYCODE_KP_0, "KP0" }, + { SAPP_KEYCODE_KP_1, "KP1" }, + { SAPP_KEYCODE_KP_2, "KP2" }, + { SAPP_KEYCODE_KP_3, "KP3" }, + { SAPP_KEYCODE_KP_4, "KP4" }, + { SAPP_KEYCODE_KP_5, "KP5" }, + { SAPP_KEYCODE_KP_6, "KP6" }, + { SAPP_KEYCODE_KP_7, "KP7" }, + { SAPP_KEYCODE_KP_8, "KP8" }, + { SAPP_KEYCODE_KP_9, "KP9" }, + { SAPP_KEYCODE_KP_DECIMAL, "KPDL" }, + { SAPP_KEYCODE_KP_DIVIDE, "KPDV" }, + { SAPP_KEYCODE_KP_MULTIPLY, "KPMU" }, + { SAPP_KEYCODE_KP_SUBTRACT, "KPSU" }, + { SAPP_KEYCODE_KP_ADD, "KPAD" }, + { SAPP_KEYCODE_KP_ENTER, "KPEN" }, + { SAPP_KEYCODE_KP_EQUAL, "KPEQ" }, + { SAPP_KEYCODE_LEFT_SHIFT, "LFSH" }, + { SAPP_KEYCODE_LEFT_CONTROL, "LCTL" }, + { SAPP_KEYCODE_LEFT_ALT, "LALT" }, + { SAPP_KEYCODE_LEFT_SUPER, "LWIN" }, + { SAPP_KEYCODE_RIGHT_SHIFT, "RTSH" }, + { SAPP_KEYCODE_RIGHT_CONTROL, "RCTL" }, + { SAPP_KEYCODE_RIGHT_ALT, "RALT" }, + { SAPP_KEYCODE_RIGHT_ALT, "LVL3" }, + { SAPP_KEYCODE_RIGHT_ALT, "MDSW" }, + { SAPP_KEYCODE_RIGHT_SUPER, "RWIN" }, + { SAPP_KEYCODE_MENU, "MENU" } + }; + const int num_keymap_items = (int)(sizeof(keymap) / sizeof(keymap[0])); + + // find X11 keycode to sokol-app key code mapping + for (int scancode = scancode_min; scancode <= scancode_max; scancode++) { + sapp_keycode key = SAPP_KEYCODE_INVALID; + for (int i = 0; i < num_keymap_items; i++) { + if (strncmp(desc->names->keys[scancode].name, keymap[i].name, XkbKeyNameLength) == 0) { + key = keymap[i].key; + break; + } + } + + // fall back to key aliases in case the key name did not match + for (int i = 0; i < desc->names->num_key_aliases; i++) { + if (key != SAPP_KEYCODE_INVALID) { + break; + } + if (strncmp(desc->names->key_aliases[i].real, desc->names->keys[scancode].name, XkbKeyNameLength) != 0) { + continue; + } + for (int j = 0; j < num_keymap_items; j++) { + if (strncmp(desc->names->key_aliases[i].alias, keymap[i].name, XkbKeyNameLength) == 0) { + key = keymap[i].key; + break; + } + } + } + _sapp.keycodes[scancode] = key; + } + XkbFreeNames(desc, XkbKeyNamesMask, True); + XkbFreeKeyboard(desc, 0, True); + + int width = 0; + KeySym* keysyms = XGetKeyboardMapping(_sapp.x11.display, scancode_min, scancode_max - scancode_min + 1, &width); + for (int scancode = scancode_min; scancode <= scancode_max; scancode++) { + // translate untranslated key codes using the traditional X11 KeySym lookups + if (_sapp.keycodes[scancode] == SAPP_KEYCODE_INVALID) { + const size_t base = (size_t)((scancode - scancode_min) * width); + _sapp.keycodes[scancode] = _sapp_x11_translate_keysyms(&keysyms[base], width); + } + } + XFree(keysyms); +} + _SOKOL_PRIVATE void _sapp_x11_query_system_dpi(void) { /* from GLFW: @@ -10436,139 +10788,10 @@ _SOKOL_PRIVATE void _sapp_x11_char_event(uint32_t chr, bool repeat, uint32_t mod } _SOKOL_PRIVATE sapp_keycode _sapp_x11_translate_key(int scancode) { - int dummy; - KeySym* keysyms = XGetKeyboardMapping(_sapp.x11.display, scancode, 1, &dummy); - SOKOL_ASSERT(keysyms); - KeySym keysym = keysyms[0]; - XFree(keysyms); - switch (keysym) { - case XK_Escape: return SAPP_KEYCODE_ESCAPE; - case XK_Tab: return SAPP_KEYCODE_TAB; - case XK_Shift_L: return SAPP_KEYCODE_LEFT_SHIFT; - case XK_Shift_R: return SAPP_KEYCODE_RIGHT_SHIFT; - case XK_Control_L: return SAPP_KEYCODE_LEFT_CONTROL; - case XK_Control_R: return SAPP_KEYCODE_RIGHT_CONTROL; - case XK_Meta_L: - case XK_Alt_L: return SAPP_KEYCODE_LEFT_ALT; - case XK_Mode_switch: /* Mapped to Alt_R on many keyboards */ - case XK_ISO_Level3_Shift: /* AltGr on at least some machines */ - case XK_Meta_R: - case XK_Alt_R: return SAPP_KEYCODE_RIGHT_ALT; - case XK_Super_L: return SAPP_KEYCODE_LEFT_SUPER; - case XK_Super_R: return SAPP_KEYCODE_RIGHT_SUPER; - case XK_Menu: return SAPP_KEYCODE_MENU; - case XK_Num_Lock: return SAPP_KEYCODE_NUM_LOCK; - case XK_Caps_Lock: return SAPP_KEYCODE_CAPS_LOCK; - case XK_Print: return SAPP_KEYCODE_PRINT_SCREEN; - case XK_Scroll_Lock: return SAPP_KEYCODE_SCROLL_LOCK; - case XK_Pause: return SAPP_KEYCODE_PAUSE; - case XK_Delete: return SAPP_KEYCODE_DELETE; - case XK_BackSpace: return SAPP_KEYCODE_BACKSPACE; - case XK_Return: return SAPP_KEYCODE_ENTER; - case XK_Home: return SAPP_KEYCODE_HOME; - case XK_End: return SAPP_KEYCODE_END; - case XK_Page_Up: return SAPP_KEYCODE_PAGE_UP; - case XK_Page_Down: return SAPP_KEYCODE_PAGE_DOWN; - case XK_Insert: return SAPP_KEYCODE_INSERT; - case XK_Left: return SAPP_KEYCODE_LEFT; - case XK_Right: return SAPP_KEYCODE_RIGHT; - case XK_Down: return SAPP_KEYCODE_DOWN; - case XK_Up: return SAPP_KEYCODE_UP; - case XK_F1: return SAPP_KEYCODE_F1; - case XK_F2: return SAPP_KEYCODE_F2; - case XK_F3: return SAPP_KEYCODE_F3; - case XK_F4: return SAPP_KEYCODE_F4; - case XK_F5: return SAPP_KEYCODE_F5; - case XK_F6: return SAPP_KEYCODE_F6; - case XK_F7: return SAPP_KEYCODE_F7; - case XK_F8: return SAPP_KEYCODE_F8; - case XK_F9: return SAPP_KEYCODE_F9; - case XK_F10: return SAPP_KEYCODE_F10; - case XK_F11: return SAPP_KEYCODE_F11; - case XK_F12: return SAPP_KEYCODE_F12; - case XK_F13: return SAPP_KEYCODE_F13; - case XK_F14: return SAPP_KEYCODE_F14; - case XK_F15: return SAPP_KEYCODE_F15; - case XK_F16: return SAPP_KEYCODE_F16; - case XK_F17: return SAPP_KEYCODE_F17; - case XK_F18: return SAPP_KEYCODE_F18; - case XK_F19: return SAPP_KEYCODE_F19; - case XK_F20: return SAPP_KEYCODE_F20; - case XK_F21: return SAPP_KEYCODE_F21; - case XK_F22: return SAPP_KEYCODE_F22; - case XK_F23: return SAPP_KEYCODE_F23; - case XK_F24: return SAPP_KEYCODE_F24; - case XK_F25: return SAPP_KEYCODE_F25; - - case XK_KP_Divide: return SAPP_KEYCODE_KP_DIVIDE; - case XK_KP_Multiply: return SAPP_KEYCODE_KP_MULTIPLY; - case XK_KP_Subtract: return SAPP_KEYCODE_KP_SUBTRACT; - case XK_KP_Add: return SAPP_KEYCODE_KP_ADD; - - case XK_KP_Insert: return SAPP_KEYCODE_KP_0; - case XK_KP_End: return SAPP_KEYCODE_KP_1; - case XK_KP_Down: return SAPP_KEYCODE_KP_2; - case XK_KP_Page_Down: return SAPP_KEYCODE_KP_3; - case XK_KP_Left: return SAPP_KEYCODE_KP_4; - case XK_KP_Begin: return SAPP_KEYCODE_KP_5; - case XK_KP_Right: return SAPP_KEYCODE_KP_6; - case XK_KP_Home: return SAPP_KEYCODE_KP_7; - case XK_KP_Up: return SAPP_KEYCODE_KP_8; - case XK_KP_Page_Up: return SAPP_KEYCODE_KP_9; - case XK_KP_Delete: return SAPP_KEYCODE_KP_DECIMAL; - case XK_KP_Equal: return SAPP_KEYCODE_KP_EQUAL; - case XK_KP_Enter: return SAPP_KEYCODE_KP_ENTER; - - case XK_a: return SAPP_KEYCODE_A; - case XK_b: return SAPP_KEYCODE_B; - case XK_c: return SAPP_KEYCODE_C; - case XK_d: return SAPP_KEYCODE_D; - case XK_e: return SAPP_KEYCODE_E; - case XK_f: return SAPP_KEYCODE_F; - case XK_g: return SAPP_KEYCODE_G; - case XK_h: return SAPP_KEYCODE_H; - case XK_i: return SAPP_KEYCODE_I; - case XK_j: return SAPP_KEYCODE_J; - case XK_k: return SAPP_KEYCODE_K; - case XK_l: return SAPP_KEYCODE_L; - case XK_m: return SAPP_KEYCODE_M; - case XK_n: return SAPP_KEYCODE_N; - case XK_o: return SAPP_KEYCODE_O; - case XK_p: return SAPP_KEYCODE_P; - case XK_q: return SAPP_KEYCODE_Q; - case XK_r: return SAPP_KEYCODE_R; - case XK_s: return SAPP_KEYCODE_S; - case XK_t: return SAPP_KEYCODE_T; - case XK_u: return SAPP_KEYCODE_U; - case XK_v: return SAPP_KEYCODE_V; - case XK_w: return SAPP_KEYCODE_W; - case XK_x: return SAPP_KEYCODE_X; - case XK_y: return SAPP_KEYCODE_Y; - case XK_z: return SAPP_KEYCODE_Z; - case XK_1: return SAPP_KEYCODE_1; - case XK_2: return SAPP_KEYCODE_2; - case XK_3: return SAPP_KEYCODE_3; - case XK_4: return SAPP_KEYCODE_4; - case XK_5: return SAPP_KEYCODE_5; - case XK_6: return SAPP_KEYCODE_6; - case XK_7: return SAPP_KEYCODE_7; - case XK_8: return SAPP_KEYCODE_8; - case XK_9: return SAPP_KEYCODE_9; - case XK_0: return SAPP_KEYCODE_0; - case XK_space: return SAPP_KEYCODE_SPACE; - case XK_minus: return SAPP_KEYCODE_MINUS; - case XK_equal: return SAPP_KEYCODE_EQUAL; - case XK_bracketleft: return SAPP_KEYCODE_LEFT_BRACKET; - case XK_bracketright: return SAPP_KEYCODE_RIGHT_BRACKET; - case XK_backslash: return SAPP_KEYCODE_BACKSLASH; - case XK_semicolon: return SAPP_KEYCODE_SEMICOLON; - case XK_apostrophe: return SAPP_KEYCODE_APOSTROPHE; - case XK_grave: return SAPP_KEYCODE_GRAVE_ACCENT; - case XK_comma: return SAPP_KEYCODE_COMMA; - case XK_period: return SAPP_KEYCODE_PERIOD; - case XK_slash: return SAPP_KEYCODE_SLASH; - case XK_less: return SAPP_KEYCODE_WORLD_1; /* At least in some layouts... */ - default: return SAPP_KEYCODE_INVALID; + if ((scancode >= 0) && (scancode < _SAPP_X11_MAX_X11_KEYCODES)) { + return _sapp.keycodes[scancode]; + } else { + return SAPP_KEYCODE_INVALID; } } @@ -10607,6 +10830,21 @@ _SOKOL_PRIVATE int32_t _sapp_x11_keysym_to_unicode(KeySym keysym) { return -1; } +_SOKOL_PRIVATE bool _sapp_x11_keypress_repeat(int keycode) { + bool repeat = false; + if ((keycode >= 0) && (keycode < _SAPP_X11_MAX_X11_KEYCODES)) { + repeat = _sapp.x11.key_repeat[keycode]; + _sapp.x11.key_repeat[keycode] = true; + } + return repeat; +} + +_SOKOL_PRIVATE void _sapp_x11_keyrelease_repeat(int keycode) { + if ((keycode >= 0) && (keycode < _SAPP_X11_MAX_X11_KEYCODES)) { + _sapp.x11.key_repeat[keycode] = false; + } +} + _SOKOL_PRIVATE bool _sapp_x11_parse_dropped_files_list(const char* src) { SOKOL_ASSERT(src); SOKOL_ASSERT(_sapp.drop.buffer); @@ -10685,293 +10923,331 @@ _SOKOL_PRIVATE bool _sapp_x11_parse_dropped_files_list(const char* src) { } } -// XLib manual says keycodes are in the range [8, 255] inclusive. -// https://tronche.com/gui/x/xlib/input/keyboard-encoding.html -static bool _sapp_x11_keycodes[256]; - -_SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { - Bool filtered = XFilterEvent(event, None); - switch (event->type) { - case GenericEvent: - if (_sapp.mouse.locked && _sapp.x11.xi.available) { - if (event->xcookie.extension == _sapp.x11.xi.major_opcode) { - if (XGetEventData(_sapp.x11.display, &event->xcookie)) { - if (event->xcookie.evtype == XI_RawMotion) { - XIRawEvent* re = (XIRawEvent*) event->xcookie.data; - if (re->valuators.mask_len) { - const double* values = re->raw_values; - if (XIMaskIsSet(re->valuators.mask, 0)) { - _sapp.mouse.dx = (float) *values; - values++; - } - if (XIMaskIsSet(re->valuators.mask, 1)) { - _sapp.mouse.dy = (float) *values; - } - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); - } +_SOKOL_PRIVATE void _sapp_x11_on_genericevent(XEvent* event) { + if (_sapp.mouse.locked && _sapp.x11.xi.available) { + if (event->xcookie.extension == _sapp.x11.xi.major_opcode) { + if (XGetEventData(_sapp.x11.display, &event->xcookie)) { + if (event->xcookie.evtype == XI_RawMotion) { + XIRawEvent* re = (XIRawEvent*) event->xcookie.data; + if (re->valuators.mask_len) { + const double* values = re->raw_values; + if (XIMaskIsSet(re->valuators.mask, 0)) { + _sapp.mouse.dx = (float) *values; + values++; + } + if (XIMaskIsSet(re->valuators.mask, 1)) { + _sapp.mouse.dy = (float) *values; } - XFreeEventData(_sapp.x11.display, &event->xcookie); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); } } + XFreeEventData(_sapp.x11.display, &event->xcookie); } + } + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_focusin(XEvent* event) { + // NOTE: ignoring NotifyGrab and NotifyUngrab is same behaviour as GLFW + if ((event->xfocus.mode != NotifyGrab) && (event->xfocus.mode != NotifyUngrab)) { + _sapp_x11_app_event(SAPP_EVENTTYPE_FOCUSED); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_focusout(XEvent* event) { + // if focus is lost for any reason, and we're in mouse locked mode, disable mouse lock + if (_sapp.mouse.locked) { + _sapp_x11_lock_mouse(false); + } + // NOTE: ignoring NotifyGrab and NotifyUngrab is same behaviour as GLFW + if ((event->xfocus.mode != NotifyGrab) && (event->xfocus.mode != NotifyUngrab)) { + _sapp_x11_app_event(SAPP_EVENTTYPE_UNFOCUSED); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_keypress(XEvent* event) { + int keycode = (int)event->xkey.keycode; + + const sapp_keycode key = _sapp_x11_translate_key(keycode); + const bool repeat = _sapp_x11_keypress_repeat(keycode); + uint32_t mods = _sapp_x11_mods(event->xkey.state); + // X11 doesn't set modifier bit on key down, so emulate that + mods |= _sapp_x11_key_modifier_bit(key); + if (key != SAPP_KEYCODE_INVALID) { + _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_DOWN, key, repeat, mods); + } + KeySym keysym; + XLookupString(&event->xkey, NULL, 0, &keysym, NULL); + int32_t chr = _sapp_x11_keysym_to_unicode(keysym); + if (chr > 0) { + _sapp_x11_char_event((uint32_t)chr, repeat, mods); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_keyrelease(XEvent* event) { + int keycode = (int)event->xkey.keycode; + const sapp_keycode key = _sapp_x11_translate_key(keycode); + _sapp_x11_keyrelease_repeat(keycode); + if (key != SAPP_KEYCODE_INVALID) { + uint32_t mods = _sapp_x11_mods(event->xkey.state); + // X11 doesn't clear modifier bit on key up, so emulate that + mods &= ~_sapp_x11_key_modifier_bit(key); + _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_UP, key, false, mods); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_buttonpress(XEvent* event) { + _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); + const sapp_mousebutton btn = _sapp_x11_translate_button(event); + uint32_t mods = _sapp_x11_mods(event->xbutton.state); + // X11 doesn't set modifier bit on button down, so emulate that + mods |= _sapp_x11_button_modifier_bit(btn); + if (btn != SAPP_MOUSEBUTTON_INVALID) { + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, btn, mods); + _sapp.x11.mouse_buttons |= (1 << btn); + } + else { + // might be a scroll event + switch (event->xbutton.button) { + case 4: _sapp_x11_scroll_event(0.0f, 1.0f, mods); break; + case 5: _sapp_x11_scroll_event(0.0f, -1.0f, mods); break; + case 6: _sapp_x11_scroll_event(1.0f, 0.0f, mods); break; + case 7: _sapp_x11_scroll_event(-1.0f, 0.0f, mods); break; + } + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_buttonrelease(XEvent* event) { + _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); + const sapp_mousebutton btn = _sapp_x11_translate_button(event); + if (btn != SAPP_MOUSEBUTTON_INVALID) { + uint32_t mods = _sapp_x11_mods(event->xbutton.state); + // X11 doesn't clear modifier bit on button up, so emulate that + mods &= ~_sapp_x11_button_modifier_bit(btn); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, btn, mods); + _sapp.x11.mouse_buttons &= ~(1 << btn); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_enternotify(XEvent* event) { + // don't send enter/leave events while mouse button held down + if (0 == _sapp.x11.mouse_buttons) { + _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_leavenotify(XEvent* event) { + if (0 == _sapp.x11.mouse_buttons) { + _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_motionnotify(XEvent* event) { + if (!_sapp.mouse.locked) { + _sapp_x11_mouse_update(event->xmotion.x, event->xmotion.y, false); + _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_configurenotify(XEvent* event) { + if ((event->xconfigure.width != _sapp.window_width) || (event->xconfigure.height != _sapp.window_height)) { + _sapp.window_width = event->xconfigure.width; + _sapp.window_height = event->xconfigure.height; + _sapp.framebuffer_width = _sapp.window_width; + _sapp.framebuffer_height = _sapp.window_height; + _sapp_x11_app_event(SAPP_EVENTTYPE_RESIZED); + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_propertynotify(XEvent* event) { + if (event->xproperty.state == PropertyNewValue) { + if (event->xproperty.atom == _sapp.x11.WM_STATE) { + const int state = _sapp_x11_get_window_state(); + if (state != _sapp.x11.window_state) { + _sapp.x11.window_state = state; + if (state == IconicState) { + _sapp_x11_app_event(SAPP_EVENTTYPE_ICONIFIED); + } + else if (state == NormalState) { + _sapp_x11_app_event(SAPP_EVENTTYPE_RESTORED); + } + } + } + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_selectionnotify(XEvent* event) { + if (event->xselection.property == _sapp.x11.xdnd.XdndSelection) { + char* data = 0; + uint32_t result = _sapp_x11_get_window_property(event->xselection.requestor, + event->xselection.property, + event->xselection.target, + (unsigned char**) &data); + if (_sapp.drop.enabled && result) { + if (_sapp_x11_parse_dropped_files_list(data)) { + _sapp.mouse.dx = 0.0f; + _sapp.mouse.dy = 0.0f; + if (_sapp_events_enabled()) { + // FIXME: Figure out how to get modifier key state here. + // The XSelection event has no 'state' item, and + // XQueryKeymap() always returns a zeroed array. + _sapp_init_event(SAPP_EVENTTYPE_FILES_DROPPED); + _sapp_call_event(&_sapp.event); + } + } + } + if (_sapp.x11.xdnd.version >= 2) { + XEvent reply; + _sapp_clear(&reply, sizeof(reply)); + reply.type = ClientMessage; + reply.xclient.window = _sapp.x11.xdnd.source; + reply.xclient.message_type = _sapp.x11.xdnd.XdndFinished; + reply.xclient.format = 32; + reply.xclient.data.l[0] = (long)_sapp.x11.window; + reply.xclient.data.l[1] = result; + reply.xclient.data.l[2] = (long)_sapp.x11.xdnd.XdndActionCopy; + XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); + XFlush(_sapp.x11.display); + } + } +} + +_SOKOL_PRIVATE void _sapp_x11_on_clientmessage(XEvent* event) { + if (XFilterEvent(event, None)) { + return; + } + if (event->xclient.message_type == _sapp.x11.WM_PROTOCOLS) { + const Atom protocol = (Atom)event->xclient.data.l[0]; + if (protocol == _sapp.x11.WM_DELETE_WINDOW) { + _sapp.quit_requested = true; + } + } else if (event->xclient.message_type == _sapp.x11.xdnd.XdndEnter) { + const bool is_list = 0 != (event->xclient.data.l[1] & 1); + _sapp.x11.xdnd.source = (Window)event->xclient.data.l[0]; + _sapp.x11.xdnd.version = event->xclient.data.l[1] >> 24; + _sapp.x11.xdnd.format = None; + if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { + return; + } + uint32_t count = 0; + Atom* formats = 0; + if (is_list) { + count = _sapp_x11_get_window_property(_sapp.x11.xdnd.source, _sapp.x11.xdnd.XdndTypeList, XA_ATOM, (unsigned char**)&formats); + } else { + count = 3; + formats = (Atom*) event->xclient.data.l + 2; + } + for (uint32_t i = 0; i < count; i++) { + if (formats[i] == _sapp.x11.xdnd.text_uri_list) { + _sapp.x11.xdnd.format = _sapp.x11.xdnd.text_uri_list; + break; + } + } + if (is_list && formats) { + XFree(formats); + } + } else if (event->xclient.message_type == _sapp.x11.xdnd.XdndDrop) { + if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { + return; + } + Time time = CurrentTime; + if (_sapp.x11.xdnd.format) { + if (_sapp.x11.xdnd.version >= 1) { + time = (Time)event->xclient.data.l[2]; + } + XConvertSelection(_sapp.x11.display, + _sapp.x11.xdnd.XdndSelection, + _sapp.x11.xdnd.format, + _sapp.x11.xdnd.XdndSelection, + _sapp.x11.window, + time); + } else if (_sapp.x11.xdnd.version >= 2) { + XEvent reply; + _sapp_clear(&reply, sizeof(reply)); + reply.type = ClientMessage; + reply.xclient.window = _sapp.x11.xdnd.source; + reply.xclient.message_type = _sapp.x11.xdnd.XdndFinished; + reply.xclient.format = 32; + reply.xclient.data.l[0] = (long)_sapp.x11.window; + reply.xclient.data.l[1] = 0; // drag was rejected + reply.xclient.data.l[2] = None; + XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); + XFlush(_sapp.x11.display); + } + } else if (event->xclient.message_type == _sapp.x11.xdnd.XdndPosition) { + // drag operation has moved over the window + // FIXME: we could track the mouse position here, but + // this isn't implemented on other platforms either so far + if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { + return; + } + XEvent reply; + _sapp_clear(&reply, sizeof(reply)); + reply.type = ClientMessage; + reply.xclient.window = _sapp.x11.xdnd.source; + reply.xclient.message_type = _sapp.x11.xdnd.XdndStatus; + reply.xclient.format = 32; + reply.xclient.data.l[0] = (long)_sapp.x11.window; + if (_sapp.x11.xdnd.format) { + /* reply that we are ready to copy the dragged data */ + reply.xclient.data.l[1] = 1; // accept with no rectangle + if (_sapp.x11.xdnd.version >= 2) { + reply.xclient.data.l[4] = (long)_sapp.x11.xdnd.XdndActionCopy; + } + } + XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); + XFlush(_sapp.x11.display); + } +} + +_SOKOL_PRIVATE void _sapp_x11_process_event(XEvent* event) { + switch (event->type) { + case GenericEvent: + _sapp_x11_on_genericevent(event); break; case FocusIn: - // NOTE: ignoring NotifyGrab and NotifyUngrab is same behaviour as GLFW - if ((event->xfocus.mode != NotifyGrab) && (event->xfocus.mode != NotifyUngrab)) { - _sapp_x11_app_event(SAPP_EVENTTYPE_FOCUSED); - } + _sapp_x11_on_focusin(event); break; case FocusOut: - /* if focus is lost for any reason, and we're in mouse locked mode, disable mouse lock */ - if (_sapp.mouse.locked) { - _sapp_x11_lock_mouse(false); - } - // NOTE: ignoring NotifyGrab and NotifyUngrab is same behaviour as GLFW - if ((event->xfocus.mode != NotifyGrab) && (event->xfocus.mode != NotifyUngrab)) { - _sapp_x11_app_event(SAPP_EVENTTYPE_UNFOCUSED); - } + _sapp_x11_on_focusout(event); break; case KeyPress: - { - int keycode = (int)event->xkey.keycode; - const sapp_keycode key = _sapp_x11_translate_key(keycode); - bool repeat = _sapp_x11_keycodes[keycode & 0xFF]; - _sapp_x11_keycodes[keycode & 0xFF] = true; - uint32_t mods = _sapp_x11_mods(event->xkey.state); - // X11 doesn't set modifier bit on key down, so emulate that - mods |= _sapp_x11_key_modifier_bit(key); - if (key != SAPP_KEYCODE_INVALID) { - _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_DOWN, key, repeat, mods); - } - KeySym keysym; - XLookupString(&event->xkey, NULL, 0, &keysym, NULL); - int32_t chr = _sapp_x11_keysym_to_unicode(keysym); - if (chr > 0) { - _sapp_x11_char_event((uint32_t)chr, repeat, mods); - } - } + _sapp_x11_on_keypress(event); break; case KeyRelease: - { - int keycode = (int)event->xkey.keycode; - const sapp_keycode key = _sapp_x11_translate_key(keycode); - _sapp_x11_keycodes[keycode & 0xFF] = false; - if (key != SAPP_KEYCODE_INVALID) { - uint32_t mods = _sapp_x11_mods(event->xkey.state); - // X11 doesn't clear modifier bit on key up, so emulate that - mods &= ~_sapp_x11_key_modifier_bit(key); - _sapp_x11_key_event(SAPP_EVENTTYPE_KEY_UP, key, false, mods); - } - } + _sapp_x11_on_keyrelease(event); break; case ButtonPress: - { - _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); - const sapp_mousebutton btn = _sapp_x11_translate_button(event); - uint32_t mods = _sapp_x11_mods(event->xbutton.state); - // X11 doesn't set modifier bit on button down, so emulate that - mods |= _sapp_x11_button_modifier_bit(btn); - if (btn != SAPP_MOUSEBUTTON_INVALID) { - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_DOWN, btn, mods); - _sapp.x11.mouse_buttons |= (1 << btn); - } - else { - /* might be a scroll event */ - switch (event->xbutton.button) { - case 4: _sapp_x11_scroll_event(0.0f, 1.0f, mods); break; - case 5: _sapp_x11_scroll_event(0.0f, -1.0f, mods); break; - case 6: _sapp_x11_scroll_event(1.0f, 0.0f, mods); break; - case 7: _sapp_x11_scroll_event(-1.0f, 0.0f, mods); break; - } - } - } + _sapp_x11_on_buttonpress(event); break; case ButtonRelease: - { - _sapp_x11_mouse_update(event->xbutton.x, event->xbutton.y, false); - const sapp_mousebutton btn = _sapp_x11_translate_button(event); - if (btn != SAPP_MOUSEBUTTON_INVALID) { - uint32_t mods = _sapp_x11_mods(event->xbutton.state); - // X11 doesn't clear modifier bit on button up, so emulate that - mods &= ~_sapp_x11_button_modifier_bit(btn); - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_UP, btn, mods); - _sapp.x11.mouse_buttons &= ~(1 << btn); - } - } + _sapp_x11_on_buttonrelease(event); break; case EnterNotify: - /* don't send enter/leave events while mouse button held down */ - if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_ENTER, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); - } + _sapp_x11_on_enternotify(event); break; case LeaveNotify: - if (0 == _sapp.x11.mouse_buttons) { - _sapp_x11_mouse_update(event->xcrossing.x, event->xcrossing.y, true); - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_LEAVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xcrossing.state)); - } + _sapp_x11_on_leavenotify(event); break; case MotionNotify: - if (!_sapp.mouse.locked) { - _sapp_x11_mouse_update(event->xmotion.x, event->xmotion.y, false); - _sapp_x11_mouse_event(SAPP_EVENTTYPE_MOUSE_MOVE, SAPP_MOUSEBUTTON_INVALID, _sapp_x11_mods(event->xmotion.state)); - } + _sapp_x11_on_motionnotify(event); break; case ConfigureNotify: - if ((event->xconfigure.width != _sapp.window_width) || (event->xconfigure.height != _sapp.window_height)) { - _sapp.window_width = event->xconfigure.width; - _sapp.window_height = event->xconfigure.height; - _sapp.framebuffer_width = _sapp.window_width; - _sapp.framebuffer_height = _sapp.window_height; - _sapp_x11_app_event(SAPP_EVENTTYPE_RESIZED); - } + _sapp_x11_on_configurenotify(event); break; case PropertyNotify: - if (event->xproperty.state == PropertyNewValue) { - if (event->xproperty.atom == _sapp.x11.WM_STATE) { - const int state = _sapp_x11_get_window_state(); - if (state != _sapp.x11.window_state) { - _sapp.x11.window_state = state; - if (state == IconicState) { - _sapp_x11_app_event(SAPP_EVENTTYPE_ICONIFIED); - } - else if (state == NormalState) { - _sapp_x11_app_event(SAPP_EVENTTYPE_RESTORED); - } - } - } - } - break; - case ClientMessage: - if (filtered) { - return; - } - if (event->xclient.message_type == _sapp.x11.WM_PROTOCOLS) { - const Atom protocol = (Atom)event->xclient.data.l[0]; - if (protocol == _sapp.x11.WM_DELETE_WINDOW) { - _sapp.quit_requested = true; - } - } - else if (event->xclient.message_type == _sapp.x11.xdnd.XdndEnter) { - const bool is_list = 0 != (event->xclient.data.l[1] & 1); - _sapp.x11.xdnd.source = (Window)event->xclient.data.l[0]; - _sapp.x11.xdnd.version = event->xclient.data.l[1] >> 24; - _sapp.x11.xdnd.format = None; - if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { - return; - } - uint32_t count = 0; - Atom* formats = 0; - if (is_list) { - count = _sapp_x11_get_window_property(_sapp.x11.xdnd.source, _sapp.x11.xdnd.XdndTypeList, XA_ATOM, (unsigned char**)&formats); - } - else { - count = 3; - formats = (Atom*) event->xclient.data.l + 2; - } - for (uint32_t i = 0; i < count; i++) { - if (formats[i] == _sapp.x11.xdnd.text_uri_list) { - _sapp.x11.xdnd.format = _sapp.x11.xdnd.text_uri_list; - break; - } - } - if (is_list && formats) { - XFree(formats); - } - } - else if (event->xclient.message_type == _sapp.x11.xdnd.XdndDrop) { - if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { - return; - } - Time time = CurrentTime; - if (_sapp.x11.xdnd.format) { - if (_sapp.x11.xdnd.version >= 1) { - time = (Time)event->xclient.data.l[2]; - } - XConvertSelection(_sapp.x11.display, - _sapp.x11.xdnd.XdndSelection, - _sapp.x11.xdnd.format, - _sapp.x11.xdnd.XdndSelection, - _sapp.x11.window, - time); - } - else if (_sapp.x11.xdnd.version >= 2) { - XEvent reply; - _sapp_clear(&reply, sizeof(reply)); - reply.type = ClientMessage; - reply.xclient.window = _sapp.x11.xdnd.source; - reply.xclient.message_type = _sapp.x11.xdnd.XdndFinished; - reply.xclient.format = 32; - reply.xclient.data.l[0] = (long)_sapp.x11.window; - reply.xclient.data.l[1] = 0; // drag was rejected - reply.xclient.data.l[2] = None; - XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); - XFlush(_sapp.x11.display); - } - } - else if (event->xclient.message_type == _sapp.x11.xdnd.XdndPosition) { - /* drag operation has moved over the window - FIXME: we could track the mouse position here, but - this isn't implemented on other platforms either so far - */ - if (_sapp.x11.xdnd.version > _SAPP_X11_XDND_VERSION) { - return; - } - XEvent reply; - _sapp_clear(&reply, sizeof(reply)); - reply.type = ClientMessage; - reply.xclient.window = _sapp.x11.xdnd.source; - reply.xclient.message_type = _sapp.x11.xdnd.XdndStatus; - reply.xclient.format = 32; - reply.xclient.data.l[0] = (long)_sapp.x11.window; - if (_sapp.x11.xdnd.format) { - /* reply that we are ready to copy the dragged data */ - reply.xclient.data.l[1] = 1; // accept with no rectangle - if (_sapp.x11.xdnd.version >= 2) { - reply.xclient.data.l[4] = (long)_sapp.x11.xdnd.XdndActionCopy; - } - } - XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); - XFlush(_sapp.x11.display); - } + _sapp_x11_on_propertynotify(event); break; case SelectionNotify: - if (event->xselection.property == _sapp.x11.xdnd.XdndSelection) { - char* data = 0; - uint32_t result = _sapp_x11_get_window_property(event->xselection.requestor, - event->xselection.property, - event->xselection.target, - (unsigned char**) &data); - if (_sapp.drop.enabled && result) { - if (_sapp_x11_parse_dropped_files_list(data)) { - _sapp.mouse.dx = 0.0f; - _sapp.mouse.dy = 0.0f; - if (_sapp_events_enabled()) { - // FIXME: Figure out how to get modifier key state here. - // The XSelection event has no 'state' item, and - // XQueryKeymap() always returns a zeroed array. - _sapp_init_event(SAPP_EVENTTYPE_FILES_DROPPED); - _sapp_call_event(&_sapp.event); - } - } - } - if (_sapp.x11.xdnd.version >= 2) { - XEvent reply; - _sapp_clear(&reply, sizeof(reply)); - reply.type = ClientMessage; - reply.xclient.window = _sapp.x11.xdnd.source; - reply.xclient.message_type = _sapp.x11.xdnd.XdndFinished; - reply.xclient.format = 32; - reply.xclient.data.l[0] = (long)_sapp.x11.window; - reply.xclient.data.l[1] = result; - reply.xclient.data.l[2] = (long)_sapp.x11.xdnd.XdndActionCopy; - XSendEvent(_sapp.x11.display, _sapp.x11.xdnd.source, False, NoEventMask, &reply); - XFlush(_sapp.x11.display); - } - } + _sapp_x11_on_selectionnotify(event); break; case DestroyNotify: + // not a bug + break; + case ClientMessage: + _sapp_x11_on_clientmessage(event); break; } } @@ -11130,11 +11406,12 @@ _SOKOL_PRIVATE void _sapp_linux_run(const sapp_desc* desc) { } _sapp.x11.screen = DefaultScreen(_sapp.x11.display); _sapp.x11.root = DefaultRootWindow(_sapp.x11.display); - XkbSetDetectableAutoRepeat(_sapp.x11.display, true, NULL); _sapp_x11_query_system_dpi(); _sapp.dpi_scale = _sapp.x11.dpi / 96.0f; _sapp_x11_init_extensions(); _sapp_x11_create_cursors(); + XkbSetDetectableAutoRepeat(_sapp.x11.display, true, NULL); + _sapp_x11_init_keytable(); #if defined(_SAPP_GLX) _sapp_glx_init(); Visual* visual = 0; From f91d408343f412fa91da6008a37e73e7704a83c9 Mon Sep 17 00:00:00 2001 From: GH Action Date: Sun, 28 Jul 2024 12:37:33 +0000 Subject: [PATCH 65/66] updated (https://github.com/floooh/sokol/commit/46047a51c77698015835562f48c5784f4c0df8dd) --- sokol/c/sokol_gfx.h | 79 +++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/sokol/c/sokol_gfx.h b/sokol/c/sokol_gfx.h index 686a8ab..9e1321f 100644 --- a/sokol/c/sokol_gfx.h +++ b/sokol/c/sokol_gfx.h @@ -8299,40 +8299,57 @@ _SOKOL_PRIVATE sg_resource_state _sg_gl_create_image(_sg_image_t* img, const sg_ _sg_gl_cache_store_texture_sampler_binding(0); _sg_gl_cache_bind_texture_sampler(0, img->gl.target, img->gl.tex[slot], 0); glTexParameteri(img->gl.target, GL_TEXTURE_MAX_LEVEL, img->cmn.num_mipmaps - 1); - const int num_faces = img->cmn.type == SG_IMAGETYPE_CUBE ? 6 : 1; - int data_index = 0; - for (int face_index = 0; face_index < num_faces; face_index++) { - for (int mip_index = 0; mip_index < img->cmn.num_mipmaps; mip_index++, data_index++) { - GLenum gl_img_target = img->gl.target; - if (SG_IMAGETYPE_CUBE == img->cmn.type) { - gl_img_target = _sg_gl_cubeface_target(face_index); - } - const GLvoid* data_ptr = desc->data.subimage[face_index][mip_index].ptr; - const int mip_width = _sg_miplevel_dim(img->cmn.width, mip_index); - const int mip_height = _sg_miplevel_dim(img->cmn.height, mip_index); + + // NOTE: workaround for https://issues.chromium.org/issues/355605685 + // FIXME: on GLES3 and GL 4.3 (e.g. not macOS) the texture initialization + // should be rewritten to use glTexStorage + glTexSubImage + bool tex_storage_allocated = false; + #if defined(__EMSCRIPTEN__) + if (desc->data.subimage[0][0].ptr == 0) { + tex_storage_allocated = true; if ((SG_IMAGETYPE_2D == img->cmn.type) || (SG_IMAGETYPE_CUBE == img->cmn.type)) { - if (is_compressed) { - const GLsizei data_size = (GLsizei) desc->data.subimage[face_index][mip_index].size; - glCompressedTexImage2D(gl_img_target, mip_index, gl_internal_format, - mip_width, mip_height, 0, data_size, data_ptr); - } else { - const GLenum gl_type = _sg_gl_teximage_type(img->cmn.pixel_format); - glTexImage2D(gl_img_target, mip_index, (GLint)gl_internal_format, - mip_width, mip_height, 0, gl_format, gl_type, data_ptr); - } + glTexStorage2D(img->gl.target, img->cmn.num_mipmaps, gl_internal_format, img->cmn.width, img->cmn.height); } else if ((SG_IMAGETYPE_3D == img->cmn.type) || (SG_IMAGETYPE_ARRAY == img->cmn.type)) { - int mip_depth = img->cmn.num_slices; - if (SG_IMAGETYPE_3D == img->cmn.type) { - mip_depth = _sg_miplevel_dim(mip_depth, mip_index); + glTexStorage3D(img->gl.target, img->cmn.num_mipmaps, gl_internal_format, img->cmn.width, img->cmn.height, img->cmn.num_slices); + } + } + #endif + if (!tex_storage_allocated) { + const int num_faces = img->cmn.type == SG_IMAGETYPE_CUBE ? 6 : 1; + int data_index = 0; + for (int face_index = 0; face_index < num_faces; face_index++) { + for (int mip_index = 0; mip_index < img->cmn.num_mipmaps; mip_index++, data_index++) { + GLenum gl_img_target = img->gl.target; + if (SG_IMAGETYPE_CUBE == img->cmn.type) { + gl_img_target = _sg_gl_cubeface_target(face_index); } - if (is_compressed) { - const GLsizei data_size = (GLsizei) desc->data.subimage[face_index][mip_index].size; - glCompressedTexImage3D(gl_img_target, mip_index, gl_internal_format, - mip_width, mip_height, mip_depth, 0, data_size, data_ptr); - } else { - const GLenum gl_type = _sg_gl_teximage_type(img->cmn.pixel_format); - glTexImage3D(gl_img_target, mip_index, (GLint)gl_internal_format, - mip_width, mip_height, mip_depth, 0, gl_format, gl_type, data_ptr); + const GLvoid* data_ptr = desc->data.subimage[face_index][mip_index].ptr; + const int mip_width = _sg_miplevel_dim(img->cmn.width, mip_index); + const int mip_height = _sg_miplevel_dim(img->cmn.height, mip_index); + if ((SG_IMAGETYPE_2D == img->cmn.type) || (SG_IMAGETYPE_CUBE == img->cmn.type)) { + if (is_compressed) { + const GLsizei data_size = (GLsizei) desc->data.subimage[face_index][mip_index].size; + glCompressedTexImage2D(gl_img_target, mip_index, gl_internal_format, + mip_width, mip_height, 0, data_size, data_ptr); + } else { + const GLenum gl_type = _sg_gl_teximage_type(img->cmn.pixel_format); + glTexImage2D(gl_img_target, mip_index, (GLint)gl_internal_format, + mip_width, mip_height, 0, gl_format, gl_type, data_ptr); + } + } else if ((SG_IMAGETYPE_3D == img->cmn.type) || (SG_IMAGETYPE_ARRAY == img->cmn.type)) { + int mip_depth = img->cmn.num_slices; + if (SG_IMAGETYPE_3D == img->cmn.type) { + mip_depth = _sg_miplevel_dim(mip_depth, mip_index); + } + if (is_compressed) { + const GLsizei data_size = (GLsizei) desc->data.subimage[face_index][mip_index].size; + glCompressedTexImage3D(gl_img_target, mip_index, gl_internal_format, + mip_width, mip_height, mip_depth, 0, data_size, data_ptr); + } else { + const GLenum gl_type = _sg_gl_teximage_type(img->cmn.pixel_format); + glTexImage3D(gl_img_target, mip_index, (GLint)gl_internal_format, + mip_width, mip_height, mip_depth, 0, gl_format, gl_type, data_ptr); + } } } } From fd0e6dcc2b0eb521c78b2965b1b36992bac3159c Mon Sep 17 00:00:00 2001 From: GH Action Date: Wed, 14 Aug 2024 17:04:38 +0000 Subject: [PATCH 66/66] updated (https://github.com/floooh/sokol/commit/f8c309ff3b1b51aba5970c181d4eff795d567ac1) --- sokol/c/sokol_audio.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sokol/c/sokol_audio.h b/sokol/c/sokol_audio.h index ed90fb6..aca4942 100644 --- a/sokol/c/sokol_audio.h +++ b/sokol/c/sokol_audio.h @@ -453,6 +453,7 @@ the standard logger in sokol_log.h instead, otherwise you won't see any warnings or errors. + LICENSE =======