Je comprends la syntaxe de HLSL, par exemple supposons que je l'ai comme 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;
}
et je le compile comme ceci:
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);
Comment ça aime ... savoir changer ... Je ne sais pas exactement quel est le pipeline entre HLSL et les pixels / sommets réels à l'écran.
Est-ce bien cela qui les "applique"?
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);
Gardez à l'esprit que je suis comme un débutant littéral dans ce genre de choses. Quelqu'un peut-il peut-être expliquer ce qu'il fait? Je suppose que la fonction de sommet HLSL passe par chaque sommet, puis les change en tout ce que j'ai dans la fonction, et la sortie est ce qui a été changé ... et de même pour le pixel shader?
Autre confusion, je sais ce qu'est un pixel et je comprends ce qu'est un sommet ... mais que fait exactement le pixel shader?