DirectX CreateRenderTargetView未正确初始化

问题描述 投票:0回答:2

由于某种原因,我似乎无法初始化导致访问冲突的RenderTargetView(它保持为NULL)。

这是应该初始化RenderTargetView的行:

hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_pRenderTargetView);

pBackBuffer是Back缓冲区,它获取一个值,而不是NULL。但是,在整个过程中,rendertagetview保持NULL。知道为什么吗?

directx direct3d directx-11 d3dx
2个回答
2
投票

为了跟踪DirectX11错误,最好使用debug layer创建D3D11设备,当您启动应用程序时,它将在Visual Studio中将错误消息打印到输出窗口。

    // Create device and swap chain
    HRESULT hr;
    UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#if defined( DEBUG ) || defined( _DEBUG )
    flags |= D3D11_CREATE_DEVICE_DEBUG;
#endif 

    // Create device and swap chain
    D3D_FEATURE_LEVEL FeatureLevelsRequested = D3D_FEATURE_LEVEL_11_0; // Use d3d11
    UINT              numLevelsRequested = 1; // Number of levels 
    D3D_FEATURE_LEVEL FeatureLevelsSupported;

    if (FAILED (hr = D3D11CreateDeviceAndSwapChain( NULL, 
        D3D_DRIVER_TYPE_HARDWARE,
        NULL,
        0,
        &FeatureLevelsRequested,
        numLevelsRequested,
        D3D11_SDK_VERSION,
        &sd_, 
        &swap_chain_,
        &d3ddevice_,
        &FeatureLevelsSupported,
        &immediate_context_)))
    {
        MessageBox(hWnd, L"Create device and swap chain failed!", L"Error", 0);
    }

-1
投票

我认为您无法创建渲染目标视图,因为第二个参数为NULL:

HRESULT CreateRenderTargetView
(
  [in]   ID3D11Resource *pResource,
  [in]   const D3D11_RENDER_TARGET_VIEW_DESC *pDesc, <== You need to pass in a valid description
  [out]  ID3D11RenderTargetView **ppRTView
);

您可以将其初始化为如下形式:

D3D11_RENDER_TARGET_VIEW_DESC desc = {0};
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
© www.soinside.com 2019 - 2024. All rights reserved.