GLSL和CG工具包根本不足以滿足我的需求,看起來我唯一的選擇是編寫我自己的編譯器。我基本上需要一個二進制着色器結構的圖表,所以我可以從腳本自己構建它。如何構建我自己的opengl着色器編譯器?
編輯:好吧我想我正在尋找的是arb程序集的二進制結構。
GLSL和CG工具包根本不足以滿足我的需求,看起來我唯一的選擇是編寫我自己的編譯器。我基本上需要一個二進制着色器結構的圖表,所以我可以從腳本自己構建它。如何構建我自己的opengl着色器編譯器?
編輯:好吧我想我正在尋找的是arb程序集的二進制結構。
如何構建我自己的opengl着色器編譯器?
你不知道。至少,不是你的意思。
OpenGL沒有定義二進制或彙編交換格式。 OpenGL本身直接將GLSL編譯成對象。即使您可以查詢二進制數據,OpenGL也不提供解釋實際的二進制數據存儲的方法。它依賴於實現。 NVIDIA和AMD將存儲不同的信息,這與英特爾存儲的信息不同。它會改變每一代硬件。等等。
您可以編寫一個編譯器,生成GLSL。但就是這樣。
如果你願意堅持使用NVIDIA,他們一直在保持ARB彙編語言的最新狀態。但顯然,任何這樣的代碼都只能用於NVIDIA。
如果CG是編譯成GLSL的話?如果不是那麼CG如何工作? – SteveDeFacto 2012-08-10 20:21:19
@Steve:定義「工作」? Cg可以通過以下兩種方式之一「工作」:NVIDIA特定的方式將其編譯爲NVIDIA的着色器彙編語言,該語言被編譯爲硬件特定的內部機器語言。 「跨平臺」的方式是將其編譯爲GLSL,然後使用OpenGL的常規工具進行編譯。 – 2012-08-10 20:30:00
@SteveDeFacto:你從未回答過最重要的問題:關於GLSL的「不足」是什麼? – 2012-08-10 20:30:37
他們怎麼沒有足夠的? +這將是一項非常艱鉅的任務,就像*非常難* – 2012-08-10 19:53:21
將您自己的着色器解析爲GLSL/Cg並使用已有的工具進行編譯。否則玩得浪費時間。 – 2012-08-10 19:56:06
你在做什麼不能完成,尤其是OpenGL-OpenCL互操作?我非常想知道。 – Ani 2012-08-10 20:09:11