我需要一個vec4和一個浮點數從頂點着色器傳遞到幾何着色器,然後到片段着色器。 3個着色器屬於3個不同的程序,以便保持統一的唯一性,並且3個被收集在單個程序流水線中,並根據需要附加/分離幾何着色器。程序流水線着色器變量交換
的GL_ARB_separate_shader_object擴展說:
GLSL有一個「按名稱交會」爲不同的輸出變量連接到不同的後續着色器的輸入變量模型。對於單獨的着色器,無法保證前面的着色器是否會寫入給定的用戶定義的輸入變量。 HLSL9,Cg和OpenGL程序集擴展程序通過「API資源集合」模型處理這種情況。 在GLSL術語中,這意味着單獨的GLSL着色器/必須/通過內置變量變量而不是用戶定義的變量變量進行通信。
細,在頂點和幾何着色器我用gl_FrontColor爲vec4,和gl_FogFragCoord浮子,在經由gl_FogFragCoord和gl_Color片段讀取它們。
It works,fine .. but ..我是說.. cmon,真的嗎?
我可以理解所有這些背後的基本原理,但它對我來說確實是一個糟糕的解決方法。 真的沒有其他方法可以使不同程序的不同着色器相互通信,如果它們全部在相同的程序管道中工作的話?
ah我明白了..很好_is_有趣確實..無論如何,我嘗試使用常規進出/像往常一樣,但着色器不會閱讀他們(每個將看到他'在'歸零)..不應該這項工作?或者在程序流水線中的着色器之間傳入/傳出時可能會丟失一些東西? – user815129
@ user815129:那是一個新問題。這是「我有一些不起作用的代碼」問題,而不是「這個規範是什麼意思?」題。你應該問這個問題,並且不僅要發佈你的着色器代碼,還要發佈着色器*加載代碼。單獨的程序在加載時需要一些特殊的處理。 –
@ user815129:另外,當嘗試新的東西時,你應該總是從一個簡單的實例開始。這樣,您可以在將其批量放入應用程序之前,在受控環境中使用它。 –