【问题标题】:Shader side of Vertex composition HLSL顶点合成 HLSL 的着色器端
【发布时间】: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


    【解决方案1】:

    这两种方式都是合法的,HLSL 确实使用了语义索引。这提供了很大的灵活性,对于习惯 GLSL 的人来说真的非常棒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多