ฉันเข้าใจไวยากรณ์ของ 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 ผ่านทุกจุดสุดยอดแล้วเปลี่ยนเป็นสิ่งที่ฉันมีในฟังก์ชั่นและเอาท์พุทคือสิ่งที่มีการเปลี่ยนแปลง ... และในทำนองเดียวกันสำหรับ pixel shader?
ความสับสนอีกอย่างฉันรู้ว่าพิกเซลคืออะไรและฉันเข้าใจว่าจุดยอดคืออะไร ... แต่พิกเซลเชดเดอร์ทำอะไรกันแน่