1. 程式人生 > >GLES2.0中文API-glLinkProgram

GLES2.0中文API-glLinkProgram

名稱

glLinkProgram- 連線一個program物件。

C規範

void glLinkProgram(GLuint program);

引數

program

指定要連結的program物件的控制代碼。

描述

glLinkProgram連結program指定的program物件。附加到program的型別為GL_VERTEX_SHADER的著色器物件用於建立將在可程式設計頂點處理器上執行的可執行檔案。 附加到program的型別為GL_FRAGMENT_SHADER的著色器物件用於建立將在可程式設計片段處理器上執行的可執行檔案。

連結操作的狀態將儲存為program物件狀態的一部分。 如果程式物件連結沒有錯誤並且可以使用,則此值將設定為GL_TRUE

,否則將設定為GL_FALSE。 可以通過使用引數programGL_LINK_STATUS呼叫glGetShaderiv來查詢它。

作為連結操作成功的結果,屬於program的所有啟用的使用者定義的統一變數的值將被初始化為0,並且將為每個program物件的活動統一變數分配一個可以通過呼叫glGetUniformLocation來查詢的位置。 此外,任何尚未繫結到通用頂點屬性索引的活動使用者定義屬性變數此時也將繫結到一個索引。

由於OpenGL ES著色語言規範中指定的多種原因,program物件的連結可能會失敗。 以下列出了導致連結錯誤的一些條件:

  • 頂點著色器和片元著色器不同時存在於程式物件中。
  • 已超出支援的活動屬性變數數。
  • 已超出統一變數的儲存限制。
  • 已超出支援的活動統一變數的數量。
  • 頂點著色器或片段著色器缺失main函式。
  • 片元著色器中實際使用的易變變數未在頂點著色器中以相同的方式宣告(或根本未宣告)。
  • 對函式或變數名的引用尚未解析。
  • 使用兩種不同型別或兩種不同的初始值宣告的全域性共享變數。
  • 一個或多個附加的著色器物件尚未成功編譯(通過glCompileShader)或未成功載入預編譯的著色器二進位制檔案(通過glShaderBinary)。
  • 繫結通用屬性矩陣導致矩陣的某些行超出允許的最大值GL_MAX_VERTEX_ATTRIBS
  • 沒有足夠的連續頂點屬性槽來繫結屬性矩陣

成功連結program物件後,可以通過呼叫glUseProgram使program物件成為當前狀態的一部分。 無論連結操作是否成功,program物件的資訊日誌都將被覆蓋。 可以通過呼叫glGetProgramInfoLog來檢索資訊日誌。

如果連結操作成功並且由於先前呼叫glUseProgram而指定的program物件當前已被使用,glLinkProgram還將安裝生成的可執行檔案作為當前呈現狀態的一部分。如果當前正在使用的program物件重新連結失敗,其連結狀態將設定為GL_FALSE,但可執行檔案和關聯狀態將保持當前狀態的一部分,直到後續呼叫glUseProgram將其從使用中刪除。 從使用中刪除後,在成功重新連結之前,它不能成為當前狀態的一部分。

連結操作完成時,program物件的資訊日誌就被更新了,而且程式也被生成了。在連結操作之後,應用程式可以自由修改附加的著色器物件,編譯附加的著色器物件,分離著色器物件,刪除著色器物件以及附加其他著色器物件。 這些操作都不會影響資訊日誌或作為程式物件一部分的程式。

注意

如果連結操作不成功,則關於程式上的先前連結操作的任何資訊都將丟失(即,失敗的連結不會恢復舊的程式狀態)。 即使連結操作不成功,仍然可以從程式中檢索某些資訊。 例如,glGetActiveAttribglGetActiveUniform

錯誤

GL_INVALID_VALUE:如果programshader不是由OpenGL所生成的值。

GL_INVALID_OPERATION:如果program引數傳的不是program物件

相關Gets

glGet 引數:GL_CURRENT_PROGRAM

glGetActiveAttrib 引數:有效的program物件和啟用狀態的屬性變數的控制代碼。

glGetActiveUniform 引數:有效的program物件和啟用狀態的統一變數的控制代碼。

glGetAttachedShaders 引數:有效的program物件

glGetAttribLocation​​​​​​​ 引數:有效的program物件和屬性變數的名稱(在shader中的變數字串)。

glGetProgramiv 引數:有效的program物件和GL_LINK_STATUS

glGetProgramInfoLog 引數:有效的program物件

glGetUniform​​​​​​​ 引數:有效的program物件和一個統一變數地址

glGetUniformLocation​​​​​​​ 引數:有效的program物件和統一變數的名稱(在shader中的變數字串)。

glIsProgram​​​​​​​

另見

glAttachShaderglBindAttribLocationglCompileShaderglShaderBinaryglCreateProgramglDeleteProgramglDetachShaderglUniformglUseProgramglValidateProgram

版權

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

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

Android,OpenGL ES,圖形學