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

Graphics 纹理描述,用于映射纹理并将数据传递到GPU,graphics,textures,directx-11,texture-mapping,render-to-texture,Graphics,Textures,Directx 11,Texture Mapping,Render To Texture,我使用的是DirectX11,映射/取消映射函数有一些问题 第一个问题是我应该使用Map/Unmap还是UpdateSubresource?谷歌已经推出了人们说一个比另一个快的页面,所以我完全不确定哪一个更快 回答(见我对此的评论) 问题2: 我需要在CPU上操作纹理并将其发送到GPU,然后进行渲染。我的纹理标志如下 纹理创建得很好,但当我运行“Map”函数时,会出现错误“一个或多个参数无效” 回答(见我对此的评论) 问题3。我有以下代码要写到纹理(简单的测试代码),有什么问题吗 result=

我使用的是DirectX11,映射/取消映射函数有一些问题

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

回答(见我对此的评论)

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

纹理创建得很好,但当我运行“Map”函数时,会出现错误“一个或多个参数无效”

回答(见我对此的评论)

问题3。我有以下代码要写到纹理(简单的测试代码),有什么问题吗

result=deviceContext->Map(m_renderTargetTexture,0,D3D11_Map_WRITE_DISCARD,0,&mappedResource);
FLOAT*pTexels=(FLOAT*)mappedResource.pData;
对于(UINT col=0;col<20;col++)
{
pTexels[col*4+0]=1;//α
pTexels[col*4+1]=1;//蓝色
pTexels[col*4+2]=1;//绿色
pTexels[col*4+3]=1;//红色
}
deviceContext->取消映射(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
    }
}
UCHAR*pTexels=(UCHAR*)mappedResource.pData;
对于(UINT行=0;行
Question2:问题在于使用和CPUAccessFlags。用法必须设置为D3D11_Usage_DYNAMIC,CPUAccessFlags必须设置为D3D11_CPU_ACCESS_WRITE。有关问题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");
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
    }
}