Saya memahami sintaks HLSL, misalnya mari kita berpura-pura memiliki ini sebagai HLSL saya:
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;
}
dan saya kompilasi seperti ini:
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);
Bagaimana rasanya ... tahu untuk mengubah ... Saya bingung tentang apa sebenarnya saluran pipa antara HLSL dan piksel / simpul aktual pada layar.
Apakah ini yang sebenarnya "menerapkan" mereka?
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);
Ingatlah bahwa saya seperti pemula dalam hal ini. Bisakah seseorang menjelaskan apa yang dilakukannya? Saya mengasumsikan fungsi HLSL verteks melewati setiap titik dan kemudian mengubahnya menjadi apa pun yang saya miliki dalam fungsi, dan outputnya adalah apa yang diubah ... dan juga untuk pixel shader?
Kebingungan lain, saya tahu apa itu pixel, dan saya mengerti apa itu vertex ... tapi apa sebenarnya yang dilakukan pixel shader?