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