glCreateProgram: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Hinweise)
K (Siehe auch)
 
(10 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= glCreateProgram (glCreateProgramObjectARB) =
 
= glCreateProgram (glCreateProgramObjectARB) =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''glCreateProgram''' - Erstellt ein Programmobjekt.
 
'''glCreateProgram''' - Erstellt ein Programmobjekt.
  
<br>
+
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
 
  function '''glCreateProgram''' : GLuint;
 
  function '''glCreateProgram''' : GLuint;
 
  function '''glCreateProgramObjectARB''' : glHandle;
 
  function '''glCreateProgramObjectARB''' : glHandle;
  
== Beschreibung ==
 
'''glCreateProgram''' erstellt ein leeres Programmobjekt und gibt ein Handle darauf zurück. Ein Programmobjekt ist ein Kontainerobjekt, an das Shaderobjekte gebunden werden können. Durch diese Methodik wird es möglich Shader modular zu machen, so dass Teile eines Shaders durch mehrere Shaderobjekte definiert werden können. Es bietet ausserdem die Möglichkeit die Kompatibilität zwischen den Shadern zu prüfen, die genutzt werden um einen ausführbaren Satz von Shadern zu erstellen (z.B. die Kompatibilität zwischen einem Vertexshader und einem Fragmentshader). Sobald ein Shaderobjekt nicht mehr als Teil eines Programmobjektes benötigt wird, kann dieses übrigens gelöscht werden.
 
  
Ein ausführbarer Satz von Shadern wird generiert, indem man die an das Programmobjekt gebundenen Shader linkt. Dieses ausführbare Shaderset kann dann durch einen Aufruf an [[glUseProgram]] als Ersatz für die feste Renderpipeline gesetzt werden. Programmobjekte können mittels [[glDeleteObject]] gelöscht werden, und ihr Speicher wird freigegeben sobald diese in keinem Renderkontext mehr verwendet werden.
 
  
<br>
+
== Beschreibung ==
 +
'''glCreateProgram''' erstellt ein leeres Programmobjekt und gibt ein Handle darauf zurück. Ein Programmobjekt ist ein Kontainerobjekt, an das Shaderobjekte gebunden werden können. Durch diese Methodik wird es möglich Shader modular zu machen, so dass Teile eines Shaders durch mehrere Shaderobjekte definiert werden können. Es bietet außerdem die Möglichkeit die Kompatibilität zwischen den Shadern zu prüfen, die genutzt werden um einen ausführbaren Satz von Shadern zu erstellen (z.B. die Kompatibilität zwischen einem Vertexshader und einem Fragmentshader). Sobald ein Shaderobjekt nicht mehr als Teil eines Programmobjektes benötigt wird, kann dieses übrigens gelöscht werden.
 +
 
 +
Ein ausführbarer Satz von Shadern wird generiert, indem man die an das Programmobjekt gebundenen Shader linkt. Dieses ausführbare Shaderset kann dann durch einen Aufruf an [[glUseProgram]] als Ersatz für die feste Renderpipeline gesetzt werden. Programmobjekte können mittels [[glDeleteProgram]] und [[glDeleteShader]] gelöscht werden, und ihr Speicher wird freigegeben sobald diese in keinem Renderkontext mehr verwendet werden.
 +
 
 +
 
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 22: Zeile 26:
 
Änderungen an einem Programmobjekt in einem Renderkontext müssen allerdings nicht unbedingt in anderen Renderkontexten (die das Objekt auch nutzen) effektiv werden, sofern man dort nicht explizit [[glUseProgram]] aufruft.
 
Änderungen an einem Programmobjekt in einem Renderkontext müssen allerdings nicht unbedingt in anderen Renderkontexten (die das Objekt auch nutzen) effektiv werden, sofern man dort nicht explizit [[glUseProgram]] aufruft.
  
<br>
+
'''glCreateProgram''' ist erst ab OpenGL Version 2.0 oder höher verfügbar.
 +
 
 +
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
'''GL_INVALID_OPERATION''' wird generiert wenn '''glCreateProgram''' zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird.
 
'''GL_INVALID_OPERATION''' wird generiert wenn '''glCreateProgram''' zwischen einem [[glBegin]] und dem passenden [[glEnd]] aufgerufen wird.
  
<br>
+
 
 +
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGetHandle]] mit dem Argument ''GL_PROGRAM_OBJECT''.
+
[[glGet]] mit dem Argument '''GL_PROGRAM_OBJECT'''.
  
[[glGetAttachedObjects]] mit dem Handle eines gültigen Programmobjektes.
+
[[glGetAttachedShaders]] mit dem Handle eines gültigen Programmobjektes.
  
 
[[glGetInfoLog]]  mit dem Handle eines gültigen Programmobjektes.
 
[[glGetInfoLog]]  mit dem Handle eines gültigen Programmobjektes.
Zeile 37: Zeile 44:
 
[[glGetObjectParameter]]  mit dem Handle eines gültigen Programmobjektes.
 
[[glGetObjectParameter]]  mit dem Handle eines gültigen Programmobjektes.
  
<br>
+
 
 +
 
 
== Siehe auch ==
 
== Siehe auch ==
[[glAttachObject]], [[glCreateShader]], [[glDeleteObject]], [[glDetachObject]], [[glLinkProgram]], [[glUseProgramObject]], [[glValidateProgram]]<br>
+
[[glAttachShader]], [[glCreateShader]], [[glDeleteShader]], [[glDeleteProgram]], [[glDetachShader]], [[glLinkProgram]], [[glUseProgram]], [[glValidateProgram]]
'''Hintergrundwissen :''' [[Shader]]<br>
+
 
 +
'''Hintergrundwissen :''' [[Shader]]
 +
 
 
[http://developer.3dlabs.com/openGL2/slapi/CreateProgramObjectARB.htm Englische Originalversion]  (Copyright 3DLabs Inc.)
 
[http://developer.3dlabs.com/openGL2/slapi/CreateProgramObjectARB.htm Englische Originalversion]  (Copyright 3DLabs Inc.)
  
 
[[Kategorie:GL|CreateProgram]]
 
[[Kategorie:GL|CreateProgram]]
 +
[[Kategorie:GL2.0|CreateProgram]]
 
[[Kategorie:SHADER_OBJECTS|CreateProgram]]
 
[[Kategorie:SHADER_OBJECTS|CreateProgram]]
 +
[[Kategorie:GL3|CreateProgram]]

Aktuelle Version vom 21. Februar 2014, 17:53 Uhr

glCreateProgram (glCreateProgramObjectARB)

Name

glCreateProgram - Erstellt ein Programmobjekt.


Delphi-Spezifikation

function glCreateProgram : GLuint;
function glCreateProgramObjectARB : glHandle;


Beschreibung

glCreateProgram erstellt ein leeres Programmobjekt und gibt ein Handle darauf zurück. Ein Programmobjekt ist ein Kontainerobjekt, an das Shaderobjekte gebunden werden können. Durch diese Methodik wird es möglich Shader modular zu machen, so dass Teile eines Shaders durch mehrere Shaderobjekte definiert werden können. Es bietet außerdem die Möglichkeit die Kompatibilität zwischen den Shadern zu prüfen, die genutzt werden um einen ausführbaren Satz von Shadern zu erstellen (z.B. die Kompatibilität zwischen einem Vertexshader und einem Fragmentshader). Sobald ein Shaderobjekt nicht mehr als Teil eines Programmobjektes benötigt wird, kann dieses übrigens gelöscht werden.

Ein ausführbarer Satz von Shadern wird generiert, indem man die an das Programmobjekt gebundenen Shader linkt. Dieses ausführbare Shaderset kann dann durch einen Aufruf an glUseProgram als Ersatz für die feste Renderpipeline gesetzt werden. Programmobjekte können mittels glDeleteProgram und glDeleteShader gelöscht werden, und ihr Speicher wird freigegeben sobald diese in keinem Renderkontext mehr verwendet werden.


Hinweise

Wie Displaylisten und Texturenobjekte kann auch der Namensraum für Objekthandles über mehere Kontexte geteilt werden, solange die Serverseiten der Kontexte den gleichen Adressraum besitzen. Wenn Handles über mehrere Kontexte verteilt genutzt werden, werden auch alle angehangenen Objekte und deren Daten dort verfügbar gemacht.

Änderungen an einem Programmobjekt in einem Renderkontext müssen allerdings nicht unbedingt in anderen Renderkontexten (die das Objekt auch nutzen) effektiv werden, sofern man dort nicht explizit glUseProgram aufruft.

glCreateProgram ist erst ab OpenGL Version 2.0 oder höher verfügbar.


Fehlermeldungen

GL_INVALID_OPERATION wird generiert wenn glCreateProgram zwischen einem glBegin und dem passenden glEnd aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit dem Argument GL_PROGRAM_OBJECT.

glGetAttachedShaders mit dem Handle eines gültigen Programmobjektes.

glGetInfoLog mit dem Handle eines gültigen Programmobjektes.

glGetObjectParameter mit dem Handle eines gültigen Programmobjektes.


Siehe auch

glAttachShader, glCreateShader, glDeleteShader, glDeleteProgram, glDetachShader, glLinkProgram, glUseProgram, glValidateProgram

Hintergrundwissen : Shader

Englische Originalversion (Copyright 3DLabs Inc.)