aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sokol_app.h8
-rw-r--r--sokol_glue.h89
2 files changed, 64 insertions, 33 deletions
diff --git a/sokol_app.h b/sokol_app.h
index b608246f..18f31729 100644
--- a/sokol_app.h
+++ b/sokol_app.h
@@ -1821,7 +1821,7 @@ typedef enum sapp_log_item {
typedef enum sapp_pixel_format {
_SAPP_PIXELFORMAT_DEFAULT,
SAPP_PIXELFORMAT_RGBA8,
- SAPP_PIXELFORMAT_SRGBA8,
+ SAPP_PIXELFORMAT_SRGB8A8,
SAPP_PIXELFORMAT_BGRA8,
SAPP_PIXELFORMAT_SBGRA8,
SAPP_PIXELFORMAT_DEPTH,
@@ -13418,9 +13418,9 @@ SOKOL_API_IMPL sapp_swapchain sapp_swapchain_next(void) {
_sapp_clear(&res, sizeof(res));
res.width =
res.height =
- res.sample_count = _sapp_color_format();
- res.color_format = _SAPP_PIXELFORMAT_DEPTH_STENCIL;
- res.depth_format = _sapp.sample_count;
+ res.color_format = sapp_color_format();
+ res.depth_format = sapp_depth_format();
+ res.sample_count = sapp_color_format();
#if defined(SOKOL_METAL)
#if defined(_SAPP_MACOS)
res.metal.current_drawable = (__bridge const void*) [_sapp.macos.view currentDrawable];
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 */