2012-03-13 48 views
1

假設我有一個具有統一屬性「diffuseColor」的OpenGL程序。我已經設置它如下:如何將OpenGL程序的統一屬性值重置爲默認值?

GLint location = glGetUniformLocation(handle, "diffuseColor"); 
glUniform3f(location, 1, 0, 0); 

現在我想將它返回到默認值,它是在着色器代碼編碼。我沒有訪問源代碼,但我可以在編譯的程序上調用OpenGL API函數。有沒有辦法讀取默認值並將其設置爲glUniform3f?或者更好,有沒有像glResetUniform3f(GLint loc)

回答

3

鏈接程序時會應用統一初始值設定項。然後可以使用glGetUniformfv/glGetUniformiv來讀取該值。在更改統一值後,無法讀取統一的初始值。

無法將單一制服重置爲其初始值,但重新鏈接程序將重置其中的所有制服。鏈接一個程序是一個代價高昂的操作,應該在兩幀之間避免。

+0

很酷。我可以將值存儲在CPU上,並在需要時使用glUniformXY進行設置。謝謝。 – 2012-03-14 23:03:11