[OpenGL] Unterschied Program Pipeline und Program?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
capslock
Beiträge: 8
Registriert: 11.04.2012, 12:17

[OpenGL] Unterschied Program Pipeline und Program?

Beitrag von capslock »

Hallo,
ich bin gerade dabei mich ein bisschen in OpenGL Core Profile einzuarbeiten. Dabei ist mir aufgefallen, dass es zur Verwaltung von Shadern sowohl program pipelines als auch programs gibt. Zum Beispiel:

Code: Alles auswählen

glGenProgramPipelines(1,&pipeline);
glUseProgramStages(pipeline, GL_VERTEX_SHADER_BIT,shaders[vs].shader);
glUseProgramStages(pipeline, GL_FRAGMENT_SHADER_BIT,shaders[ps].shader);
vs:

Code: Alles auswählen

prog = glCreateProgram();
glAttachShader(prog , shaders[vs].shader);
glAttachShader(prog , shaders[ps].shader);
Wo genau liegt der Unterschied? Leider ist die offizielle Doku da nicht wirklich ausführlich.
Was mir aufgefallen ist: Bei glCreateProgram kann man vor dem linken noch die Vertex Attribute setzen. Wie werden diese dann dann bei den program pipelines gesetzt?

Danke und Gruß
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [OpenGL] Unterschied Program Pipeline und Program?

Beitrag von dot »

Das hab ich mich auch schon gefragt. Ich bin mir noch nicht ganz sicher, aber ich denk, dass es bei Program Pipeline Objects darum geht, für die einzelnen Shader Stages (also z.B. für Vertex und Pixel Shader) separate Program Objects zu haben, die dann unabhängig voneinander an die Pipeline gebunden werden können, so wie das in Direct3D z.B. schon seit jeher der Fall ist...
NytroX
Establishment
Beiträge: 367
Registriert: 03.10.2003, 12:47

Re: [OpenGL] Unterschied Program Pipeline und Program?

Beitrag von NytroX »

Hi, ja, die ProgramPipelines sind später dazugekommen, und erlauben einzelne stages zu binden und auszutauschen.
D.h. man kann dann z.B. ein Vertex- und PixelShader zusammenpacken, und einen Geo-Shader dazupacken.
Mit ActiveShaderProgram aktiviert man die Programme dann.

Interessant wird das z.B. mit OpenGL 4.3, weil man dann z.B. compute-shader nutzen kann, ohne das Program zu ändern.

Code: Alles auswählen

glBindProgramPipeline(myPipeline);
glUseProgramStages(myPipeline, GL_VERTEX_SHADER_BIT, myProgramVS);
glUseProgramStages(myPipeline, GL_FRAGMENT_SHADER_BIT, myProgramFS);
glUseProgramStages(myPipeline, GL_COMPUTE_SHADER_BIT, myProgramCS);
glDrawArrays(GL_TRIANGLES, 0, 200);
glDispatchCompute(6, 6, 6);
capslock
Beiträge: 8
Registriert: 11.04.2012, 12:17

Re: [OpenGL] Unterschied Program Pipeline und Program?

Beitrag von capslock »

Vielen Dank für die Antworten. Die program pipelines sind dann doch sehr praktisch.

Gruß
Antworten