2015-06-20 182 views
0

我想從幾何着色器內的單個頂點(如POINT列表)中構建紋理四邊形。我現在無法解決的問題是沒有任何東西被渲染。我已經嘗試用Visual Studios的圖形調試器進行調試,並發現我的幾何着色器的輸出看起來是空的。HLSL幾何着色器空輸出

這是我的幾何着色器:

struct PS_INPUT 
{ 
    float4 position : SV_POSITION; 
    float2 texCoord : TEXCOORD; 
}; 

struct VS_OUTPUT 
{ 
    float4 position : SV_POSITION; 
    float3 normal : NORMAL; 
}; 

[maxvertexcount(4)] 
void GS(
    point VS_OUTPUT input[1], 
    inout TriangleStream<PS_INPUT> output 
) 
{ 
    float3 decalNormal = input[0].normal; 
    float3 upVector = float3(0.0, 1.0f, 0.0f); 
    float3 frontVector = 0.2f * decalNormal; 
    // 2.0f = half-decal width 
    float3 rightVector = normalize(cross(decalNormal, upVector)) * 4.0f; 
    upVector = float3(0, 4.0f, 0); 

    float3 vertices[4] = { { 1, 0, 0 }, { 0, 0, 1 }, { -1, 0, 0 }, { 0, 0, -1 } }; 
    vertices[0] = input[0].position.xyz - rightVector - upVector + frontVector; // Bottom Left 
    vertices[1] = input[0].position.xyz + rightVector - upVector + frontVector; // Bottom Right 
    vertices[2] = input[0].position.xyz - rightVector + upVector + frontVector; // Top Left 
    vertices[3] = input[0].position.xyz + rightVector + upVector + frontVector; // Top Right 

    float2 texCoord[4] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }; 
    texCoord[0] = float2(0, 1); 
    texCoord[1] = float2(1, 1); 
    texCoord[2] = float2(0, 0); 
    texCoord[3] = float2(1, 0); 

    PS_INPUT outputVert; 
    for (uint i = 0; i < 4; i++) 
    { 
     outputVert.position = float4(vertices[i], 1.0f); 
     outputVert.texCoord = texCoord[i]; 
     output.Append(outputVert); 
    } 
} 

這是繪製調用流水線級的屏幕截圖。正如你可以看到頂點着色器內有3個像素,但幾何着色器之後沒有任何東西。

pipelinestage draw call

我已經禁用了所有撲殺:

D3D11_RASTERIZER_DESC rDesc; 
ZeroMemory(&rDesc, sizeof(D3D11_RASTERIZER_DESC)); 
rDesc.FillMode = D3D11_FILL_SOLID; 
rDesc.CullMode = D3D11_CULL_NONE; // no culling for now... 
rDesc.FrontCounterClockwise = false; 
rDesc.DepthClipEnable = false; 

和深度測試:

dsDesc.DepthEnable = false; 

而設置的一切是這樣的:

context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); 
context->RSSetState(m_pRasterizer); 
context->IASetInputLayout(m_pInputLayout); 
context->VSSetShader(m_pVS, 0, 0); 
context->GSSetShader(m_pGS, 0, 0); 
context->PSSetShader(m_pPS, 0, 0); 

這裏有什麼問題?我認爲目前沒有像素着色器,因爲幾何着色器沒有輸出任何東西,是嗎? 謝謝!

回答

0

我修復了我自己的問題。我忘了將幾何着色器中的頂點位置與我的視圖投影矩陣相乘!