浏览代码

libobs-opengl: Make sure current swap is valid

jp9000 10 年之前
父节点
当前提交
de65407ac4
共有 1 个文件被更改,包括 31 次插入6 次删除
  1. 31 6
      libobs-opengl/gl-subsystem.c

+ 31 - 6
libobs-opengl/gl-subsystem.c

@@ -276,26 +276,46 @@ gs_swapchain_t *device_swapchain_create(gs_device_t *device,
 void device_resize(gs_device_t *device, uint32_t cx, uint32_t cy)
 {
 	/* GL automatically resizes the device, so it doesn't do much */
-	device->cur_swap->info.cx = cx;
-	device->cur_swap->info.cy = cy;
+	if (device->cur_swap) {
+		device->cur_swap->info.cx = cx;
+		device->cur_swap->info.cy = cy;
+	} else {
+		blog(LOG_WARNING, "device_resize (GL): No active swap");
+	}
 
 	gl_update(device);
 }
 
 void device_get_size(const gs_device_t *device, uint32_t *cx, uint32_t *cy)
 {
-	*cx = device->cur_swap->info.cx;
-	*cy = device->cur_swap->info.cy;
+	if (device->cur_swap) {
+		*cx = device->cur_swap->info.cx;
+		*cy = device->cur_swap->info.cy;
+	} else {
+		blog(LOG_WARNING, "device_get_size (GL): No active swap");
+		*cx = 0;
+		*cy = 0;
+	}
 }
 
 uint32_t device_get_width(const gs_device_t *device)
 {
-	return device->cur_swap->info.cx;
+	if (device->cur_swap) {
+		return device->cur_swap->info.cx;
+	} else {
+		blog(LOG_WARNING, "device_get_width (GL): No active swap");
+		return 0;
+	}
 }
 
 uint32_t device_get_height(const gs_device_t *device)
 {
-	return device->cur_swap->info.cy;
+	if (device->cur_swap) {
+		return device->cur_swap->info.cy;
+	} else {
+		blog(LOG_WARNING, "device_get_height (GL): No active swap");
+		return 0;
+	}
 }
 
 gs_texture_t *device_voltexture_create(gs_device_t *device, uint32_t width,
@@ -876,6 +896,11 @@ static inline bool can_render(const gs_device_t *device)
 		return false;
 	}
 
+	if (!device->cur_swap && !device->cur_render_target) {
+		blog(LOG_ERROR, "No active swap chain or render target");
+		return false;
+	}
+
 	return true;
 }