From 143c4a436dbf49ce971cff9cb857fd2d5ea53429 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 16 Apr 2025 13:46:04 +0800 Subject: [PATCH] return nullptr if D3D device cannot create render target view --- .../native/src/windows/vulkan/d3d_context.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/thermion_dart/native/src/windows/vulkan/d3d_context.cpp b/thermion_dart/native/src/windows/vulkan/d3d_context.cpp index f553a167..cb61aeae 100644 --- a/thermion_dart/native/src/windows/vulkan/d3d_context.cpp +++ b/thermion_dart/native/src/windows/vulkan/d3d_context.cpp @@ -95,38 +95,38 @@ namespace thermion::windows::d3d d3d11_texture2D_desc.CPUAccessFlags = 0; d3d11_texture2D_desc.MiscFlags = D3D11_RESOURCE_MISC_SHARED | D3D11_RESOURCE_MISC_SHARED_NTHANDLE; - Microsoft::WRL::ComPtr _d3dTexture2D; + Microsoft::WRL::ComPtr d3dTexture2D; + auto hr = _D3D11Device->CreateTexture2D(&d3d11_texture2D_desc, nullptr, &d3dTexture2D); - auto hr = _D3D11Device->CreateTexture2D(&d3d11_texture2D_desc, nullptr, &_d3dTexture2D); if FAILED (hr) { std::cout << "Failed to create D3D texture (" << hr << ")" << std::endl; return nullptr; } auto resource = Microsoft::WRL::ComPtr{}; - hr = _d3dTexture2D.As(&resource); + hr = d3dTexture2D.As(&resource); if FAILED (hr) { std::cout << "Failed to create D3D texture" << std::endl; return nullptr; } - HANDLE _d3dTexture2DHandle = nullptr; - // hr = resource->GetSharedHandle(&_d3dTexture2DHandle); - hr = resource->CreateSharedHandle(nullptr, GENERIC_ALL, nullptr, &_d3dTexture2DHandle); + HANDLE d3dTexture2DHandle = nullptr; + //hr = resource->GetSharedHandle(&d3dTexture2DHandle); + hr = resource->CreateSharedHandle(nullptr, GENERIC_ALL, nullptr, &d3dTexture2DHandle); if FAILED (hr) { std::cout << "Failed to get shared handle to external D3D texture" << std::endl; return nullptr; } - _d3dTexture2D->AddRef(); + d3dTexture2D->AddRef(); Flush(); std::cout << "Created external D3D texture " << width << "x" << height << std::endl; - auto texture = std::make_unique(_d3dTexture2D, _d3dTexture2DHandle, width, height); + auto texture = std::make_unique(d3dTexture2D, d3dTexture2DHandle, width, height); ID3D11RenderTargetView* rtv = nullptr; D3D11_RENDER_TARGET_VIEW_DESC rtvDesc = {}; @@ -134,10 +134,10 @@ namespace thermion::windows::d3d rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; rtvDesc.Texture2D.MipSlice = 0; - hr = _D3D11Device->CreateRenderTargetView(_d3dTexture2D.Get(), &rtvDesc, &rtv); + hr = _D3D11Device->CreateRenderTargetView(d3dTexture2D.Get(), &rtvDesc, &rtv); if (FAILED(hr)) { std::cout << "Failed to create render target view" << std::endl; - // return; + return std::nullptr_t(); } // Clear the texture to blue