纹理描述用于映射纹理并将数据传递到GPU

时间:2014-03-11 20:04:19

标签: graphics textures directx-11 texture-mapping render-to-texture

我使用的是DirectX11,我在使用Map / Unmap功能时遇到了一些问题。

第一个问题是我应该使用Map / Unmap还是UpdateSubresource?谷歌已经提出了人们说一个比另一个更快的页面,所以我绝对不确定哪个更快。

回答(参见我对此的评论)。

问题2: 我需要在CPU上操作纹理并将其发送到GPU然后渲染它。我的纹理标志如下。

textureDesc.Width = textureWidth;
textureDesc.Height = textureHeight;
textureDesc.ArraySize = 1;
textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
textureDesc.SampleDesc.Count = 1;
textureDesc.Usage = D3D11_USAGE_DEFAULT;
textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
textureDesc.CPUAccessFlags = 0;
textureDesc.MiscFlags = 0;

纹理很好但是当我运行" Map" function我收到错误"一个或多个参数无效。"。

回答(参见我对此的评论)。

问题3.我有以下代码写入纹理(只是测试代码),它有什么问题吗?

result = deviceContext->Map(m_renderTargetTexture, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);

FLOAT* pTexels = (FLOAT*)mappedResource.pData;
for( UINT col = 0; col < 20; col++ )
{
    pTexels[col*4 + 0] = 1; // Alpha
    pTexels[col*4 + 1] = 1; // Blue
    pTexels[col*4 + 2] = 1; // Green
    pTexels[col*4 + 3] = 1; // Red
}

deviceContext->Unmap(m_renderTargetTexture, 0);

D3DX11SaveTextureToFile( deviceContext, m_renderTargetTexture, D3DX11_IFF_JPG, L".\.\FILE.jpg");

最后的问题更多是对最佳实践的调查。我需要发送一组数据(1D,2D和最终3D)。我的问题是从CPU发送数据到GPU的最佳方法是什么。通过在CPU上创建的纹理然后传递给GPU?或者还有其他方法更好吗?

感谢。


问题3的工作代码。但是,尝试使用此纹理创建渲染目标视图失败,我不确定为什么。几乎可以肯定与我正在使用的描述有关。

UCHAR* pTexels = (UCHAR*)mappedResource.pData;
for( UINT row = 0; row < textureDesc.Height; row++ )
{
    //Row number * height
    UINT rowStart = row * mappedResource.RowPitch;
    for( UINT col = 0; col < textureDesc.Width; col++ )
    {
        //width * number of channels (r,g,b,a)
        UINT colStart = col * 4;
        pTexels[rowStart + colStart + 0] = 255; // Red
        pTexels[rowStart + colStart + 1] = 0; // Green
        pTexels[rowStart + colStart + 2] = 0; // Blue
        pTexels[rowStart + colStart + 3] = 255; // Alpha
    }
}

0 个答案:

没有答案