diff options
| -rw-r--r-- | sokol_app.h | 8 | ||||
| -rw-r--r-- | sokol_glue.h | 89 |
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 */ |