Шейдерная сторона вершинной композиции HLSL - PullRequest
0 голосов
/ 03 апреля 2011

Скажем, вы просите 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.

1 Ответ

0 голосов
/ 04 апреля 2011

Оба способа допустимы, HLSL действительно использует семантический индекс. Это обеспечивает большую гибкость и действительно замечательно для тех, кто привык к GLSL.

...