2017-06-22 45 views
0

嘿,我正在學習dxd11,這是我的問題。如何在着色器中初始化cbuffer

我想在.hlsl代碼中初始化cbuffer。

是這樣的

[着色器代碼]

cbuffer cbFixed{ 
    float gWeights[11] = {0.05f, 0.05f,......}; 
} 

但它不能在幾何着色器的工作。

所以我定義在主要的功能 [在着色器代碼]

... variables... 
[maxvertexcount(4)] 

void main(
    point VertexOut input[1], 
    uint primID : SV_PrimitiveID, 
    inout TriangleStream<GSOutput> tristream 
) 
{ 
    float2 tex[4] = { 
     float2(0,1), 
     float2(0,0), 
     float2(1,1), 
     float2(1,0) 
    }; 
.... do something 
} 

常量我所定義,並宣佈在主函數的常數。 在此代碼中,float2 tex [4]是常量。

如果我在主func中聲明常量,是否有任何優化問題?

還是有什麼好的建議嗎?

謝謝。

回答

0

聲明常量的正確方法是通過static constdoc)。在你的情況下:

static const float2 tex[4] = { 
    float2(0,1), 
    float2(0,0), 
    float2(1,1), 
    float2(1,0) 
}; 

如果你省略這些標誌,它將是一個正常的變量,因此可能未優化。您甚至可以在全球範圍內聲明static const變量,因此每種方法都可以訪問它們。