浏览代码

libobs-d3d11: Use discrete function to get shared handle

Allows us to reacquire the shared handle if the texture is rebuilt.
jp9000 6 年之前
父节点
当前提交
8f3ea18276
共有 2 个文件被更改,包括 16 次插入8 次删除
  1. 1 0
      libobs-d3d11/d3d11-subsystem.hpp
  2. 15 8
      libobs-d3d11/d3d11-texture2d.cpp

+ 1 - 0
libobs-d3d11/d3d11-subsystem.hpp

@@ -369,6 +369,7 @@ struct gs_texture_2d : gs_texture {
 	void InitResourceView();
 	void InitRenderTargets();
 	void BackupTexture(const uint8_t **data);
+	void GetSharedHandle(IDXGIResource *dxgi_res);
 
 	void RebuildSharedTextureFallback();
 	void Rebuild(ID3D11Device *dev);

+ 15 - 8
libobs-d3d11/d3d11-texture2d.cpp

@@ -71,6 +71,20 @@ void gs_texture_2d::BackupTexture(const uint8_t **data)
 	}
 }
 
+void gs_texture_2d::GetSharedHandle(IDXGIResource *dxgi_res)
+{
+	HANDLE handle;
+	HRESULT hr;
+
+	hr = dxgi_res->GetSharedHandle(&handle);
+	if (FAILED(hr)) {
+		blog(LOG_WARNING, "GetSharedHandle: Failed to "
+				"get shared handle: %08lX", hr);
+	} else {
+		sharedHandle = (uint32_t)(uintptr_t)handle;
+	}
+}
+
 void gs_texture_2d::InitTexture(const uint8_t **data)
 {
 	HRESULT hr;
@@ -129,14 +143,7 @@ void gs_texture_2d::InitTexture(const uint8_t **data)
 			blog(LOG_WARNING, "InitTexture: Failed to query "
 					"interface: %08lX", hr);
 		} else {
-			HANDLE handle;
-			hr = dxgi_res->GetSharedHandle(&handle);
-			if (FAILED(hr)) {
-				blog(LOG_WARNING, "InitTexture: Failed to "
-						"get shared handle: %08lX", hr);
-			} else {
-				sharedHandle = (uint32_t)(uintptr_t)handle;
-			}
+			GetSharedHandle(dxgi_res);
 
 			if (flags & GS_SHARED_KM_TEX) {
 				ComPtr<IDXGIKeyedMutex> km;