天天看點

GLES2.0中文API-glUseProgram

名稱

glUseProgram- 使用程式對象作為目前渲染狀态的一部分

C規範

void glUseProgram(GLuint program);

參數

program

指定程式對象的句柄,該程式對象的可執行檔案将用作目前渲染狀态的一部分。

描述

glUseProgram使用程式對象program作為目前渲染狀态的一部分。通過使用glAttachShader成功将着色器對象附加到程式對象,使用glCompileShader成功編譯着色器對象,并成功連結程式對象與glLinkProgram,之後就可以在程式對象中建立每個階段的可執行檔案。

程式對象将會包含一個可執行檔案,該檔案将會運作頂點(類型為

GL_VERTEX_SHADER

 的着色器對象)和片元(類型為

GL_FRAGMENT_SHADER

 的着色器對象)處理器(前提是這兩個着色器都成功的編譯并被連結到程式對象上了)。

在使用程式對象時,應用程式可以自由修改附着的着色器對象,編譯附着的着色器對象,附着着色器對象以及分離或删除着色器對象。這些操作都不會影響屬于目前狀态的可執行檔案。但是,如果連結操作成功,則重新連結目前正在使用的程式對象将安裝程式對象作為目前渲染狀态的一部分(請參閱glLinkProgram)。如果目前正在使用的程式對象重新連結失敗,其連結狀态将設定為GL_FALSE,但可執行檔案和關聯狀态将保持目前狀态的一部分,直到後續調用glUseProgram将其從使用中删除。從使用中删除後,在成功重新連結之前,它不能成為目前狀态的一部分。

如果program為0,則目前呈現狀态引用無效的程式對象,并且會使得任何glDrawArrays或glDrawElements指令的頂點和片段着色器執行的結果未定義。

注意

與紋理對象和緩沖區對象一樣,隻要上下文的伺服器端共享相同的位址空間,程式對象的名稱空間就可以在一組上下文中共享。如果名稱空間跨上下文共享,則也會共享任何附着對象和與這些附着對象關聯的資料。

當從不同的執行線程通路對象時,應用程式負責跨API調用提供同步。

錯誤

GL_INVALID_VALUE

 :如果program是0,或者不是OpenGL生成的值。

GL_INVALID_OPERATION

 :program不是程式對象

GL_INVALID_OPERATION

 :如果program不能成為目前狀态的一部分。

相關Gets

glGet 參數GL_CURRENT_PROGRAM

glGetActiveAttrib 使用有效的程式對象和活動屬性變量的索引

glGetActiveUniform 使用有效的程式對象和活動的統一變量的索引

glGetAttachedShaders 使用有效的程式對象

glGetAttribLocation 使用有效的程式對象和屬性變量的名稱

glGetProgramiv 使用有效的程式對象和要查詢的參數

glGetProgramInfoLog 使用有效的程式對象

glGetUniform 使用有效的程式對象和統一變量的位置

glGetUniformLocation 使用有效的程式對象和統一變量的名稱

glIsProgram

另見

glAttachShader,glBindAttribLocation,glBindAttribLocation,glCreateProgram,glDeleteProgram,glDeleteShader,glLinkProgram,glGetUniform ,glValidateProgram,glVertexAttrib

版權

https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glUseProgram.xml

https://blog.csdn.net/flycatdeng

Copyright © 1991-2006 Silicon Graphics, Inc.本文檔的許可是根據SGI Free Software B License.詳見http://oss.sgi.com/projects/FreeB/.

GLES2.0中文API-glUseProgram

Android,OpenGL ES,圖形學

繼續閱讀