而這些RHI全域函式的定義形式分成StaticRHI和DynamicRHI兩種。差別在於這些函式是轉呼靜態成員函式還是虛擬函式,根據不同平台擇一使用。
Windows | DynamicRHI |
Mac | DynamicRHI |
XBox360 | StaticRHI |
PS3 | StaticRHI |
PS Vita | StaticRHI |
WiiU | StaticRHI |
StaticRHI
StaticRHI會有一個型別為STATIC_RHI_CLASS_NAME類別的全域變數叫GStaticRHI。在StaticRHI.h裡會把RHI全域函式實作成去轉呼GStaticRHI的同名靜態成員函式。
DynamicRHI
DynamicRHI一樣也有一個全域變數叫GDynamicRHI,型別為FDynamicRHI。在DynamicRHI.h裡一樣會把RHI全域函式實作成去轉呼GDynamicRHI的同名成員函式,只是它們是宣告成純虛擬函而非靜態成員函式。實際實作是在各平台裡的原始碼。
在D3D9版,FD3D9DynamicRHI類別繼承FDynamicRHI,並且實作這些虛擬RHI函式。
在D3D10版,FD3D10DynamicRHI類別繼承FDynamicRHI,並且實作這些虛擬RHI函式。
例如D3D9版的RHISetViewport(),實際上它對應到的函式是FD3D9DynamicRHI::SetViewport()。
沒有留言:
張貼留言