aboutsummaryrefslogtreecommitdiff
path: root/sokol_glue.h
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2025-10-12 12:57:44 +0200
committerAndre Weissflog <floooh@gmail.com>2025-10-12 12:57:44 +0200
commit95995c55d0301b5b6fe0e25bdbad8df3ffb95f8a (patch)
tree04fe4ff77a8369fca3a6c8086ad34eb149198569 /sokol_glue.h
parent98d0fc95f52c21a916b90935845d9bde2b2e6d39 (diff)
sokol_glue.h: port to new sapp env/swapchain/desc api
Diffstat (limited to 'sokol_glue.h')
-rw-r--r--sokol_glue.h89
1 files changed, 60 insertions, 29 deletions
diff --git a/sokol_glue.h b/sokol_glue.h
index a715b174..551fd113 100644
--- a/sokol_glue.h
+++ b/sokol_glue.h
@@ -124,39 +124,70 @@ SOKOL_GLUE_API_DECL sg_swapchain sglue_swapchain(void);
#define SOKOL_API_IMPL
#endif
+#ifndef _SOKOL_PRIVATE
+ #if defined(__GNUC__) || defined(__clang__)
+ #define _SOKOL_PRIVATE __attribute__((unused)) static
+ #else
+ #define _SOKOL_PRIVATE static
+ #endif
+#endif
+
+#ifndef SOKOL_ASSERT
+ #include <assert.h>
+ #define SOKOL_ASSERT(c) assert(c)
+#endif
+#ifndef SOKOL_UNREACHABLE
+ #define SOKOL_UNREACHABLE SOKOL_ASSERT(false)
+#endif
+
+_SOKOL_PRIVATE sg_pixel_format _sglue_to_sgpixelformat(sapp_pixel_format fmt) {
+ switch (fmt) {
+ case SAPP_PIXELFORMAT_RGBA8: return SG_PIXELFORMAT_RGBA8;
+ case SAPP_PIXELFORMAT_SRGB8A8: return SG_PIXELFORMAT_SRGB8A8;
+ case SAPP_PIXELFORMAT_BGRA8: return SG_PIXELFORMAT_BGRA8;
+ case SAPP_PIXELFORMAT_DEPTH_STENCIL: return SG_PIXELFORMAT_DEPTH_STENCIL;
+ case SAPP_PIXELFORMAT_DEPTH: return SG_PIXELFORMAT_DEPTH;
+ case SAPP_PIXELFORMAT_SBGRA8: // FIXME!
+ default:
+ SOKOL_UNREACHABLE;
+ return SG_PIXELFORMAT_NONE;
+ }
+}
SOKOL_API_IMPL sg_environment sglue_environment(void) {
- sg_environment env;
- memset(&env, 0, sizeof(env));
- env.defaults.color_format = (sg_pixel_format) sapp_color_format();
- env.defaults.depth_format = (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;
+ sg_environment res;
+ memset(&res, 0, sizeof(res));
+ const sapp_environment env = sapp_get_environment();
+ res.defaults.color_format = _sglue_to_sgpixelformat(env.defaults.color_format);
+ res.defaults.depth_format = _sglue_to_sgpixelformat(env.defaults.depth_format);
+ res.defaults.sample_count = env.defaults.sample_count;
+ res.metal.device = env.metal.device;
+ res.d3d11.device = env.d3d11.device;
+ res.d3d11.device_context = env.d3d11.device_context;
+ res.wgpu.device = env.wgpu.device;
+ return res;
}
-SOKOL_API_IMPL sg_swapchain sglue_swapchain(void) {
- sg_swapchain swapchain;
- memset(&swapchain, 0, sizeof(swapchain));
- swapchain.width = sapp_width();
- swapchain.height = sapp_height();
- swapchain.sample_count = sapp_sample_count();
- swapchain.color_format = (sg_pixel_format)sapp_color_format();
- swapchain.depth_format = (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;
+SOKOL_API_IMPL sg_swapchain sglue_swapchain_next(void) {
+ sg_swapchain res;
+ memset(&res, 0, sizeof(res));
+ const sapp_swapchain sc = sapp_swapchain_next();
+ res.width = sc.width;
+ res.height = sc.height;
+ res.sample_count = sc.sample_count;
+ res.color_format = _sglue_to_sgpixelformat(sc.color_format);
+ res.depth_format = _sglue_to_sgpixelformat(sc.depth_format);
+ res.metal.current_drawable = sc.metal.current_drawable;
+ res.metal.depth_stencil_texture = sc.metal.depth_stencil_texture;
+ res.metal.msaa_color_texture = sc.metal.msaa_color_texture;
+ res.d3d11.render_view = sc.d3d11.render_view;
+ res.d3d11.resolve_view = sc.d3d11.resolve_view;
+ res.d3d11.depth_stencil_view = sc.d3d11.depth_stencil_view;
+ res.wgpu.render_view = sc.wgpu.render_view;
+ res.wgpu.resolve_view = sc.wgpu.resolve_view;
+ res.wgpu.depth_stencil_view = sc.wgpu.depth_stencil_view;
+ res.gl.framebuffer = sc.gl.framebuffer;
+ return res;
}
#endif /* SOKOL_GLUE_IMPL */