Переглянути джерело

libobs-d3d11: Allow rebuild even if output duplicator fails

Prevents an issue where the output duplicator would cause the program to
crash if the graphics driver crashes and the graphics subsystem needs to
be rebuilt.
jp9000 8 роки тому
батько
коміт
e74a007718
2 змінених файлів з 9 додано та 1 видалено
  1. 4 0
      libobs-d3d11/d3d11-duplicator.cpp
  2. 5 1
      libobs-d3d11/d3d11-rebuild.cpp

+ 4 - 0
libobs-d3d11/d3d11-duplicator.cpp

@@ -171,6 +171,10 @@ EXPORT bool gs_duplicator_update_frame(gs_duplicator_t *d)
 	ComPtr<IDXGIResource> res;
 	HRESULT hr;
 
+	if (!d->duplicator) {
+		return false;
+	}
+
 	hr = d->duplicator->AcquireNextFrame(0, &info, res.Assign());
 	if (hr == DXGI_ERROR_ACCESS_LOST) {
 		return false;

+ 5 - 1
libobs-d3d11/d3d11-rebuild.cpp

@@ -305,7 +305,11 @@ try {
 			((gs_pixel_shader*)obj)->Rebuild(dev);
 			break;
 		case gs_type::gs_duplicator:
-			((gs_duplicator*)obj)->Start();
+			try {
+				((gs_duplicator*)obj)->Start();
+			} catch (...) {
+				((gs_duplicator*)obj)->Release();
+			}
 			break;
 		case gs_type::gs_swap_chain:
 			((gs_swap_chain*)obj)->Rebuild(dev);