簡體   English   中英

如果未綁定,統一值是否保留在 GLSL 着色器中?

[英]Do uniform values remain in GLSL shader if unbound?

我正在編寫一個程序,該程序對不同的圖元使用兩種不同的着色器。 我的問題是:如果我綁定一個程序,向它發送統一變量,然后使用另一個着色器程序並返回到第一個,傳遞的統一值會保留嗎? 這是一些偽代碼:

glUseProgram(shader1);
glUniform(shader1,...);
//stuff

for(elements in a list) {
    if(element.type = 1) {
        glUseProgram(shader2);
        element.draw();
    } else {
        glUseProgram(shader1); //Here, do the uniforms from above remain, if shader2 was bound before?
        element.draw();
    }
}

是的,制服是特定於某個程序的,如果您解除綁定並重新綁定它,它就會持久存在。

此外,如果您願意,您可以在該示例中使用glGetUniform輕松驗證這一點

來自OpenGL 4.1 規范

2.11.7 統一變量

...制服是程序對象特定的狀態。 一旦加載,它們就會保留它們的值,只要程序對象被使用,只要程序對象沒有被重新鏈接,它們的值就會恢復。 ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM