我了解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函数遍历每个顶点,然后将它们更改为我在函数中拥有的任何东西,并且输出是已更改的内容……对于像素着色器来说,类似吗?
另一个困惑,我知道什么是像素,我知道什么是顶点……但是像素着色器到底是做什么的?