aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2021-04-27 20:32:16 +0200
committerAndre Weissflog <floooh@gmail.com>2021-04-27 20:32:16 +0200
commit852fbb904921534cea92c8ae4da969a255f28ef1 (patch)
tree9222525591d5f9844627d64e6533be4fba3bfc5d
parentabf6d31366b7bbec82fc7fef29d90ee4787c44aa (diff)
sokol_glue.h: helper function to fill per-window sg_context_desc
-rw-r--r--sokol_glue.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/sokol_glue.h b/sokol_glue.h
index 74ecb7c3..5eae6ca1 100644
--- a/sokol_glue.h
+++ b/sokol_glue.h
@@ -95,6 +95,7 @@ extern "C" {
#if defined(SOKOL_GFX_INCLUDED) && defined(SOKOL_APP_INCLUDED)
SOKOL_GLUE_API_DECL sg_context_desc sapp_sgcontext(void);
+SOKOL_GLUE_API_DECL sg_context_desc sapp_window_sgcontext(sapp_window win);
#endif
#ifdef __cplusplus
@@ -111,6 +112,16 @@ SOKOL_GLUE_API_DECL sg_context_desc sapp_sgcontext(void);
#define SOKOL_API_IMPL
#endif
+static const void* _sglue_metal_get_renderpass_descriptor(void* user_data) {
+ sapp_window win = { (uint32_t) user_data };
+ return sapp_metal_get_window_renderpass_descriptor(win);
+}
+
+static const void* _sglue_metal_get_drawable(void* user_data) {
+ sapp_window win = { (uint32_t) user_data };
+ return sapp_metal_get_window_drawable(win);
+}
+
#if defined(SOKOL_GFX_INCLUDED) && defined(SOKOL_APP_INCLUDED)
SOKOL_API_IMPL sg_context_desc sapp_sgcontext(void) {
sg_context_desc desc;
@@ -132,6 +143,28 @@ SOKOL_API_IMPL sg_context_desc sapp_sgcontext(void) {
desc.wgpu.depth_stencil_view_cb = sapp_wgpu_get_depth_stencil_view;
return desc;
}
+
+SOKOL_API_IMPL sg_context_desc sapp_window_sgcontext(sapp_window window) {
+ sg_context_desc desc;
+ memset(&desc, 0, sizeof(desc));
+ desc.color_format = (sg_pixel_format) sapp_color_format();
+ desc.depth_format = (sg_pixel_format) sapp_depth_format();
+ desc.sample_count = sapp_sample_count();
+ desc.gl.force_gles2 = sapp_gles2();
+ desc.metal.device = sapp_metal_get_device();
+ desc.metal.renderpass_descriptor_userdata_cb = _sglue_metal_get_renderpass_descriptor;
+ desc.metal.drawable_userdata_cb = _sglue_metal_get_drawable;
+ desc.metal.user_data = (void*)(uintptr_t)window.id;
+ desc.d3d11.device = sapp_d3d11_get_device();
+ desc.d3d11.device_context = sapp_d3d11_get_device_context();
+ desc.d3d11.render_target_view_cb = sapp_d3d11_get_render_target_view;
+ desc.d3d11.depth_stencil_view_cb = sapp_d3d11_get_depth_stencil_view;
+ desc.wgpu.device = sapp_wgpu_get_device();
+ desc.wgpu.render_view_cb = sapp_wgpu_get_render_view;
+ desc.wgpu.resolve_view_cb = sapp_wgpu_get_resolve_view;
+ desc.wgpu.depth_stencil_view_cb = sapp_wgpu_get_depth_stencil_view;
+ return desc;
+}
#endif
#endif /* SOKOL_GLUE_IMPL */