我目前正在嘗試在iOS上的GLSL OpenGL ES着色器中減少我的主要函數的大小。因此我提取了一些輔助函數,並在不同的着色器對象中聲明和編譯它們。之後,我想在鏈接用於渲染的程序之前,使用glAttachShader將它們重新鏈接在一起。所有的設置都已經完成,不幸的是,包含我的主函數的着色器將無法編譯,因爲它無法找到對單獨着色器中聲明的函數的引用。我如何告訴編譯器包含引用?從不同着色器導入函數
1
A
回答
2
在你的問題中有一些混雜的術語。這裏涉及兩個相關但不同的結構:
函數聲明(又名原型),只聲明瞭返回類型,函數名和參數。它具有以下形式:
returnType functionName(type0 arg0, type1 arg1, ..., typen argn);
函數定義,其具有聲明的所有部分,以及實現該功能的身體。它有以下形式:
returnType functionName(type0 arg0, type1 arg1, ..., typen argn) { // do some computation return returnValue; }
如果分裂功能的實現爲不同的着色器,函數定義是在包含該函數的實際代碼分開着色器。但是,在包含main函數的着色器或調用它的任何其他着色器中,您仍然需要聲明。
一旦聲明函數,即使實現處於不同的着色器中,也可以調用它。從規格:
所有函數必須在被調用之前用原型聲明或使用主體定義。
+0
非常感謝,現在包含主函數的着色器似乎可以正確編譯!不幸的是,現在程序鏈接失敗,說「沒有片段着色器中的主定義」 – 2014-09-23 07:52:00
相關問題
- 1. 從不同的「模塊」導入函數
- 2. CG着色器閾值函數
- 3. GLSL着色器和函數:錯誤C1108
- 4. OpenGL片段着色器不寫入SSBO
- 5. 的OpenGL着色器輸入
- 6. 從片段着色器調用JavaScript函數(HTML)
- 7. 如何讓着色器淡入顏色?
- 8. 從計算着色器獲取數據
- 9. 從幾何着色器的片段着色器
- 10. 從頂點着色器
- 11. 包含着色器的着色器?
- 12. OpenGL:glLogicOp()不同的着色填色技巧?
- 13. GLSL:頂點着色器無片段着色片段着色器
- 14. Three.JS - 不同物體的不同着色器
- 15. 使用不同GL_ELEMENT_ARRAY_BUFFER在一個着色器不同的屬性?
- 16. 從HLSL頂點着色器傳遞數組到像素着色器
- 17. GLSL紋理映射和着色在相同的着色器
- 18. 爲什麼OpenGL着色器函數不能被定義?
- 19. 將數據傳遞到不同的着色器
- 20. 着色器不工作
- 21. glDrawElements不使用着色器?
- 22. SFML着色器不工作
- 23. 找不到DirectX11着色器?
- 24. 從不同的C文件導入函數
- 25. OpenGL 3.3與片段着色器不同的顏色
- 26. cg着色器參數
- 27. 從Webkit導入documentCreateElement函數
- 28. System.EntryPointNotFoundException從DLL導入函數
- 29. 着色器呈現的不是顏色
- 30. OpenGL着色器:不插值顏色
你可能有興趣在這個崗位這裏:http://stackoverflow.com/questions/10754437/how-to-using-the-include-in-glsl-support-arb-shading-language-include – Blarglenarf 2014-09-23 05:19:45
afaik,GLSL源碼最終全部內聯,沒有'call'功能。你可以用自定義的'#inc'將源文件縫合在一起,並且它可以正常工作(或者在桌面GL的情況下@ Blarglenarf的擴展)。 – jozxyqk 2014-09-23 06:36:39
是的,我已經看過,不是我想要的。如果這是不可能的,爲什麼你可以使用glAttachShader添加多個着色器? – 2014-09-23 07:53:26