【问题标题】:D3D12 ClearRenderTargetViewD3D12 ClearRenderTargetView
【发布时间】:2019-10-27 02:51:01
【问题描述】:

传递一个浮点数组并收到警告,“清除的值与传递给资源创建的值不匹配。”

1 无警告地工作

2 没有,我尝试使用 GetFloatArray() 方法仍然收到警告

渲染目标格式为:

clearValue.Format = DXGI_FORMAT::DXGI_FORMAT_R8G8B8A8_UNORM;

我的 CColor 对象:

float RGBA[4];

float* GetFloatArray()
{
    return RGBA;
}

ClearRenderTargetView(s):

// #1
globalObjects->videoDevice->commandList->ClearRenderTargetView(
   globalObjects->videoDevice->swapChainRenderTargets[globalObjects->videoDevice->frameIndex]->handle,
   CColorCornflowerBlue.GetFloatArray(), 0, nullptr);

// #2
const float c[4] =
{ 
    CColorLovelyPurple.RGBA[0],
    CColorLovelyPurple.RGBA[1],
    CColorLovelyPurple.RGBA[2],
    CColorLovelyPurple.RGBA[3]
};

commandList->ClearRenderTargetView(renderTargets[globalObjects->videoDevice->frameIndex]->handle,
c, 0, nullptr);

任何想法或其他人是否有同样的问题将不胜感激。

【问题讨论】:

    标签: directx-12


    【解决方案1】:

    您没有向我们展示创建渲染目标视图的代码(renderTargets[globalObjects->videoDevice->frameIndex]->handle),但是在创建它时,可以在D3D12_CLEAR_VALUE 中设置清除值:

    D3D12_CLEAR_VALUE clearValue = {};
    clearValue.Format = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;
    clearValue.Color = c;
    

    只需更改.Color 以匹配调用commandList->ClearRenderTargetView() 中的颜色

    【讨论】:

    • 添加 clearValue.Color[0] = 0.0F; clearValue.Color[1] = 0.0F; clearValue.Color[2] = 0.0F; clearValue.Color[3] = 1.0F;和相同的结果。
    • 似乎交换链格式可以,但不是额外的渲染目标。 swapChainDesc.BufferDesc.Format = DXGI_FORMAT::DXGI_FORMAT_R8G8B8A8_UNORM;
    【解决方案2】:

    原来我不理解第二个渲染目标视图并且使用不正确。对于那些试图制造开销的人来说,它不是第二个渲染目标,而是一个 2D 图像。我的总体目标是开销而不是多个渲染目标。

    commandList->CopyResource(texture->texture.Get(), renderTargets[globalObjects->videoDevice->frameIndex]->resource.Get());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-26
      • 2021-01-05
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      相关资源
      最近更新 更多