Tôi hiểu cú pháp của HLSL, ví dụ: giả sử tôi có cái này là HLSL của tôi:
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;
}
và tôi biên dịch nó như thế này:
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);
Làm thế nào để nó ... biết thay đổi ... Tôi bối rối về chính xác đường ống giữa HLSL và các pixel / đỉnh thực tế trên màn hình là gì.
Đây có phải là những gì thực sự "áp dụng" chúng?
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);
Hãy nhớ rằng tôi giống như một người mới bắt đầu theo nghĩa đen . Ai đó có thể giải thích những gì nó đang làm? Tôi giả sử hàm HLSL đỉnh đi qua mọi đỉnh và sau đó thay đổi chúng thành bất cứ thứ gì tôi có trong hàm và đầu ra là thứ đã được thay đổi ... và tương tự cho trình đổ bóng pixel?
Một sự nhầm lẫn khác, tôi biết pixel là gì và tôi hiểu đỉnh là gì ... nhưng chính xác thì pixel shader làm gì?