嗨,我正在使用着色器,我有一个关于我是否可以在这里做某事的快速问题。当将数据映射到缓冲区时,我通常会看到它是这样完成的。定义类或结构来表示缓冲区中的内容。
class MatrixBuffer
{
public:
D3DXMATRIX worldMatrix;
D3DXMATRIX viewMatrix;
D3DXMATRIX projectionMatrix;
}
然后在创建输入布局时设置输入元素描述,我得到了所有这些。现在,当我看到人们在渲染之前更新缓冲区时,我看到它大多是这样完成的:
MatrixBuffer * dataPtr;
if(FAILED(deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource)))
return false;
dataPtr = (MatrixBuffer *) mappedResource.pData;
dataPtr->world = worldMatrix;
dataPtr->view = viewMatrix;
dataPtr->projection = projectionMatrix;
deviceContext->Unmap(m_matrixBuffer, 0);
其中分配的值实际上是有效的 D3DXMATRIX。看来没关系,如果我这样做会不会有什么问题?
MatrixBuffer* dataPtr;
if(FAILED(deviceContext->Map(m_matrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource)))
return false;
dataPtr = (MatrixBuffer *) mappedResource.pData;
*dataPtr = matrices;
deviceContext->Unmap(m_matrixBuffer, 0);
矩阵是一个有效填写的 MatrixBuffer 对象?由于某些特殊的直接 X 处理此问题,以后会不会产生可怕的后果,还是可以?