From 8f3ea18276a618fe122845b5ff6c6a68e4d3c8c3 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 3 Mar 2019 08:41:23 -0800 Subject: [PATCH] libobs-d3d11: Use discrete function to get shared handle Allows us to reacquire the shared handle if the texture is rebuilt. --- libobs-d3d11/d3d11-subsystem.hpp | 1 + libobs-d3d11/d3d11-texture2d.cpp | 23 +++++++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libobs-d3d11/d3d11-subsystem.hpp b/libobs-d3d11/d3d11-subsystem.hpp index 9a934316d..48b3839ed 100644 --- a/libobs-d3d11/d3d11-subsystem.hpp +++ b/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); diff --git a/libobs-d3d11/d3d11-texture2d.cpp b/libobs-d3d11/d3d11-texture2d.cpp index e2e42caf6..a3fa20512 100644 --- a/libobs-d3d11/d3d11-texture2d.cpp +++ b/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 km;