Browse Source

libobs: Add graphics API to get graphics object pointer

jp9000 6 years ago
parent
commit
bf41fd5a6b

+ 5 - 0
libobs-d3d11/d3d11-subsystem.cpp

@@ -829,6 +829,11 @@ void device_leave_context(gs_device_t *device)
 	UNUSED_PARAMETER(device);
 }
 
+void *device_get_device_obj(gs_device_t *device)
+{
+	return (void *)device->device.Get();
+}
+
 gs_swapchain_t *device_swapchain_create(gs_device_t *device,
 					const struct gs_init_data *data)
 {

+ 5 - 0
libobs-opengl/gl-cocoa.m

@@ -165,6 +165,11 @@ void device_leave_context(gs_device_t *device)
 	[NSOpenGLContext clearCurrentContext];
 }
 
+void *device_get_device_obj(gs_device_t *device)
+{
+	return device->plat->context;
+}
+
 void device_load_swapchain(gs_device_t *device, gs_swapchain_t *swap)
 {
 	if (device->cur_swap == swap)

+ 5 - 0
libobs-opengl/gl-windows.c

@@ -542,6 +542,11 @@ void device_leave_context(gs_device_t *device)
 	UNUSED_PARAMETER(device);
 }
 
+void *device_get_device_obj(gs_device_t *device)
+{
+	return device->plat->hrc;
+}
+
 void device_load_swapchain(gs_device_t *device, gs_swapchain_t *swap)
 {
 	HDC hdc = device->plat->window.hdc;

+ 5 - 0
libobs-opengl/gl-x11.c

@@ -510,6 +510,11 @@ extern void device_leave_context(gs_device_t *device)
 	}
 }
 
+void *device_get_device_obj(gs_device_t *device)
+{
+	return device->plat->context;
+}
+
 extern void gl_getclientsize(const struct gs_swap_chain *swap, uint32_t *width,
 			     uint32_t *height)
 {

+ 1 - 0
libobs/graphics/device-exports.h

@@ -33,6 +33,7 @@ EXPORT int device_create(gs_device_t **device, uint32_t adapter);
 EXPORT void device_destroy(gs_device_t *device);
 EXPORT void device_enter_context(gs_device_t *device);
 EXPORT void device_leave_context(gs_device_t *device);
+EXPORT void *device_get_device_obj(gs_device_t *device);
 EXPORT gs_swapchain_t *device_swapchain_create(gs_device_t *device,
 					       const struct gs_init_data *data);
 EXPORT void device_resize(gs_device_t *device, uint32_t x, uint32_t y);

+ 1 - 0
libobs/graphics/graphics-imports.c

@@ -50,6 +50,7 @@ bool load_graphics_imports(struct gs_exports *exports, void *module,
 	GRAPHICS_IMPORT(device_destroy);
 	GRAPHICS_IMPORT(device_enter_context);
 	GRAPHICS_IMPORT(device_leave_context);
+	GRAPHICS_IMPORT(device_get_device_obj);
 	GRAPHICS_IMPORT(device_swapchain_create);
 	GRAPHICS_IMPORT(device_resize);
 	GRAPHICS_IMPORT(device_get_size);

+ 1 - 0
libobs/graphics/graphics-internal.h

@@ -34,6 +34,7 @@ struct gs_exports {
 	void (*device_destroy)(gs_device_t *device);
 	void (*device_enter_context)(gs_device_t *device);
 	void (*device_leave_context)(gs_device_t *device);
+	void *(*device_get_device_obj)(gs_device_t *device);
 	gs_swapchain_t *(*device_swapchain_create)(
 		gs_device_t *device, const struct gs_init_data *data);
 	void (*device_resize)(gs_device_t *device, uint32_t x, uint32_t y);

+ 8 - 0
libobs/graphics/graphics.c

@@ -288,6 +288,14 @@ graphics_t *gs_get_context(void)
 	return thread_graphics;
 }
 
+void *gs_get_device_obj(void)
+{
+	if (!gs_valid("gs_get_device_obj"))
+		return NULL;
+
+	return thread_graphics->exports.device_get_device_obj(thread_graphics);
+}
+
 const char *gs_get_device_name(void)
 {
 	return gs_valid("gs_get_device_name")

+ 1 - 0
libobs/graphics/graphics.h

@@ -500,6 +500,7 @@ EXPORT void gs_destroy(graphics_t *graphics);
 EXPORT void gs_enter_context(graphics_t *graphics);
 EXPORT void gs_leave_context(void);
 EXPORT graphics_t *gs_get_context(void);
+EXPORT void *gs_get_device_obj(void);
 
 EXPORT void gs_matrix_push(void);
 EXPORT void gs_matrix_pop(void);