Я понимаю синтаксис HLSL, например, давайте представим, что у меня это HLSL:
struct VOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
VOut VShader(float4 position : POSITION, float4 color : COLOR)
{
VOut output;
output.position = position;
output.position.xy *= 0.7f; // "shrink" the vertex on the x and y axes
output.color = color;
return output;
}
float4 PShader(float4 position : SV_POSITION, float4 color : COLOR) : SV_TARGET
{
return color;
}
и я собираю это так:
D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0);
D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, &PS, 0, 0);
Как это нравится ... знать, чтобы изменить ... Я не совсем понимаю, каков конвейер между HLSL и фактическими пикселями / вершинами на экране.
Является ли это то, что на самом деле «относится» их?
dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS);
dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS);
// set the shader objects
devcon->VSSetShader(pVS, 0, 0);
devcon->PSSetShader(pPS, 0, 0);
Имейте в виду, я как буквальный новичок в этом деле. Может кто-то может объяснить, что он делает? Я предполагаю, что функция вершины HLSL проходит через каждую вершину, а затем меняет их на то, что у меня есть в функции, и вывод - что изменилось ... и аналогично для пиксельного шейдера?
Еще одна путаница, я знаю, что такое пиксель, и я понимаю, что такое вершина ... но что именно делает пиксельный шейдер?