【发布时间】:2011-04-03 03:11:47
【问题描述】:
假设您要求 directX 从多个顶点缓冲区发送顶点数据,如下所示:
immediateContext->IASetVertexBuffers( 0, 3, bufferArray, &vertexStride, 0 );
immediateContext->IASetIndexBuffer( indexBuffer, DXGI_FORMAT_R32_UINT, 0 );
immediateContext->DrawIndexed( numIndices, 0 , 0 );
现在我应该在 HLSL 方面做这样的事情:
struct FatVertex
{
float4 dataFromVertexBuffer1: SemanticName1
float4 dataFromVertexBuffer2: SemanticName2
float4 dataFromVertexBuffer3: SemanticName3
};
PixelShaderInput VertexShader( FatVertex input )
{
// Transform things, fill PixelShaderInput struct etc.
}
或者是这样的:
struct BufferData1
{
float4 dataFromVertexBuffer1: SemanticName1
};
struct BufferData2
{
float4 dataFromVertexBuffer2: SemanticName2
};
struct BufferData3
{
float4 dataFromVertexBuffer3: SemanticName3
};
PixelShaderInput VertexShader( BufferData1 input1, BufferData2 input2, BufferData3 input3 )
{
// Transform things, fill PixelShaderInput struct etc.
}
或者两者都是完全有效的(因为我假设语义名称告诉 Direct3D 将东西放在哪里)。
这都是 Direct3D11。
【问题讨论】:
标签: directx semantics shader hlsl