2
比方說,我有一個非常簡單的GLSL頂點着色器:統一變量的操作是否被緩存在GLSL中?
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
in vec3 position;
in vec3 color;
out vec3 vertexColor;
void main()
{
mat4 mvp = projection * view * model;
vertexColor = color;
gl_Position = mvp * vec4(position, 1.0);
}
是變量mvp
重新計算每個頂點,或者是預先計算和存儲,直到它依靠變化的均勻變量?
爲什麼難以實施?你只需要在編譯過程中爲變量創建一個依賴關係樹,然後更新所有依賴於任何變化的統一變量的變量。 –
@ Bobby-Z:你說「只是」,就好像那是微不足道的。它還要求你實現一個任意的表達式計算器,它可以根據輸入的統一的當前值計算該「依賴關係樹」的值。還有一個事實是,制服佔用着色資源,這是有限的。你會有效地創建第四個「mat4」統一值。如果製造出來的制服之一是什麼推動你超過舞臺上統一的限制,會發生什麼? –
計算依賴關係樹是微不足道的。在編譯過程中,你會發現'mat4'的初始化表達式中引用的所有變量,找出所有這些變量是否均勻,或者如果不是,則遞歸檢查這些變量是否僅依賴於統一變量。大多數現代編譯器都用變量來做類似的事情。 –