Seite 1 von 1

[OpenGL] Unterschied Program Pipeline und Program?

Verfasst: 25.08.2012, 15:43
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ß

Re: [OpenGL] Unterschied Program Pipeline und Program?

Verfasst: 25.08.2012, 17:21
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...

Re: [OpenGL] Unterschied Program Pipeline und Program?

Verfasst: 04.09.2012, 23:03
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);

Re: [OpenGL] Unterschied Program Pipeline und Program?

Verfasst: 08.09.2012, 11:56
von capslock
Vielen Dank für die Antworten. Die program pipelines sind dann doch sehr praktisch.

Gruß