GPU程式設計入門(7 效果(effect)基礎 2

2021-04-13 06:10:31 字數 1945 閱讀 8776

這次我們結合directx的例子程式 effectparam來解釋一下引數塊和共享引數的概念,例子位於:directx安裝目錄/samples/c++/direct3d/effectparam ,這兩個東西一起說,自然是他們之間有關係的,一般一起用的。。。下面開始.

首先是共享引數,效果的引數就是效果裡頭申明的所有非靜態的變數,包括全域性變數和注釋,如果在申明的時候技術上「shared」關鍵字

shared float4x4 g_mworld;                     

//world view matrix

shared float4x4 g_mview; 

//world * view * projection matrix

shared float4x4 g_mproj; 

//world * view * projection matrix

shared float4 g_vlight 

=float4( 

0.0f

, 0.0f, -

10.0f

, 1.0f

);  

//light position in view space

shared float4 g_vlightcolor 

=float4( 

1.0f

, 1.0f

, 1.0f

, 1.0f

);texture  g_txscene;

float4   diffuse;

在建立effect時傳入lpd3deffectpool引數,就可以在不同效果間共享引數。建立效果池**如下

id3dxeffectpool 

*g_peffectpool

=null;    

//共享池

d3dxcreateeffectpool( 

&g_peffectpool);

對於乙個在多個effect中共享的引數,他們必須是相同的名字,型別和語義

由於貢獻引數的effect必須使用同乙個裝置(device),所以那些依賴於渲染裝置的引數是不能共享的,比如說texture,當含有共享引數的effect背釋放時,共享引數從共享池中釋放。既然是共享引數,那麼當在某個地方改變引數值的時候,所有使用該引數的effect中的引數值都改變,這個太明顯了吧。。。。

例子程式中共享的引數就是上面那些。。。。

然後是引數塊(parameter blocks),它是一組effect狀態改變塊,乙個引數塊可以記錄狀態的改變,從而可以在後面通過呼叫某個函式設定這些狀態,建立引數塊的**:

m_peffect

->

beginparameterblock();         

//開始設定引數塊

.........

//使用相應函式設定引數,比如m_peffect->setvector(***x);什麼的

m_peffect

->

endparameterblock();          

//j結束引數塊的設定

一般在結束引數塊設定的時候會返回乙個控制代碼,這個控制代碼(假設是m_hparam,上面的**裡頭忘記了,哈哈。。)在呼叫引數塊的時候使用,具體就是

m_peffect

->

->

m_hparam )    

//其中,pmat是材質物件

呼叫了這個之後,效果就把引數塊中的所有引數作為乙個整天一起操作了,就好像一次是使用了多個api函式設定引數的效果一樣。例項effectparam為乙個標準的direct3d材質屬性設定了乙個包含環境光,漫反射,鏡面放射,自發光和鏡面反射強度的引數塊,具體**。。。還是貼出來吧。。。叮咚,不知道怎麼了,**塊不見了,那就不貼了,自己找去,就算是我督促大家去看例子吧。

好了,今天的內容就是這些了,其實directx自帶的例子都是很漂亮的,對初學者都是很難得的資源,好好研究,一定會有很大收穫的。。。。。bye~~!

GPU 程式設計入門到精通(四)之 GPU 程式優化

gpu 程式設計入門到精通 三 之 第乙個 gpu 程式 中講到了怎樣利用 cuda5.5 在 gpu 中執行乙個程式。通過程式的執行。我們看到了 gpu 確實能夠作為乙個運算器。可是,我們在前面的樣例中並沒有正真的發揮 gpu 並行處理程式的能力。也就是說之前的樣例僅僅利用了 gpu 的乙個執行緒...

GPU程式設計自學7 常量記憶體與事件

gpu通常包含大量的數學計算單元,因此效能瓶頸往往不在於晶元的數學計算吞吐量,而在於晶元的記憶體頻寬,即有時候輸入資料的速率甚至不能維持滿負荷的運算。於是我們需要一些手段來減少記憶體通訊量。目前的gpu均提供了64kb的常量記憶體,並且對常量記憶體採取了不同於全域性記憶體的處理方式。在某些場景下,使...

GPU 程式設計入門到精通之 第乙個 GPU 程式

gpu 程式設計入門到精通 三 之 第乙個 gpu 程式 中講到了如何利用 cuda5.5 在 gpu 中執行乙個程式。通過程式的執行,我們看到了 gpu 確實可以作為乙個運算器,但是,我們在前面的例子中並沒有正真的發揮 gpu 並行處理程式的能力,也就是說之前的例子只利用了 gpu 的乙個執行緒,...