2013-04-09 53 views
7

我一直在搜索OpenGL二進制格式,他們實際上是什麼意思。到目前爲止,我還沒有取得太大的成功。我知道我可以如下獲取的格式數量和集:OpenGL二進制程序格式是否標準化?

::glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, &values[0]); 

,其中值是大小的整數的std ::向量:

::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value); 

對於司機在我的機器這個回報單一的二進制格式。這只是一個數字,否則對我來說毫無意義。

所以我的問題如下:

(1)什麼格式號/代碼代表什麼? (2)是否有標準的ARB二進制格式,還是它們都依賴於供應商? (3)供應商之間是否有共同的格式? (4)如果有多種格式,你應該如何在它們之間進行選擇?

我有一種模糊的感覺,爲了充分利用這一點,我必須在給定的機器上預編譯和緩存着色器。我的意思是它不像DX,它可以將着色器編譯器作爲構建後事件運行,並將它們打包在一起,並在任何帶有D3D的(Windows)機器上使用它們。

回答

11

(1)格式數字/代碼代表什麼?

它們表示唯一標識符。

(2)是否存在標準的ARB二進制格式,還是它們都依賴於供應商?

它們都是供應商特定的。

(3)供應商之間是否有共同的格式?

(4)如果有多種格式,你是如何認爲他們之間做出選擇?

你不知道。你沒有選擇格式。當您撥打glGetProgramBinary時,您將獲得由駕駛員決定的特定格式的二進制數據。當您使用load that program later時,您必須將二進制數據傳遞給特定的格式。

我有一種模糊的感覺,我必須預先編譯和緩存給定機器上的着色器,以利用這一點。

是的,這是該功能的目的:允許您緩存着色器編譯。但是,如果驅動程序的着色器版本更改爲(因此與創建緩存版本時不同),則必須始終確保程序能夠正常工作。所以你仍然需要能夠從文本格式重建着色器。

+0

好的,謝謝Nicol。 – Robinson 2013-04-09 11:49:48

相關問題