GLSL - 何时何地调用顶点和片段?

时间:2014-04-22 10:09:41

标签: c++ opengl glsl shader

我想知道何时在opengl循环中准确调用顶点和片段着色器。它是在glutDisplayFunc()或glutMainLoop()的末尾,还是在每个顶点绘制调用?并且顶点和片段是否一个接一个地连续调用(即:顶点然后片段),或完全不同的时间?

说我有以下代码片段:

glPushMatrix();
    glRotatef(rot,0.0f,1.0f,0.0);
    glTranslatef(0.0f,0.0f,25);
    glColor3f(0.0,0.0,1.0);
    drawSphere(4,20,20); // draw triangles

    glColor3f(1.0,0.0,0.0);
    glTranslatef(0.0f,0.0f,5);
    drawSphere(4,20,20); // draw triangles
glPopMatrix();

在每次顶点调用后是否调用顶点着色器,然后读取堆栈顶部的当前矩阵,然后将预定义的ModelView矩阵均匀发送到顶点着色器?片段着色器何时运行?

1 个答案:

答案 0 :(得分:4)

  

它是在glutDisplayFunc()或glutMainLoop()的末尾,

两者都没有,因为GLUT 不是 OpenGL的一部分。它只是一些库(用于创建简单的OpenGL应用程序)。

  

还是在每个顶点绘制调用?

从程序员的角度来看,当它恰好发生时没有指定。 OpenGL有一个命令队列,并且断言它们在它们之间进行处理,进入命令队列并到达所谓的"同步点"。同步点是在前OpenGL命令生成的OpenGL上下文之外使用或传输数据的任何命令(如使用glReadPixels读取的图像)。

对于所有实际意义,只要指定了整个基元,就可以假设顶点和片段得到处理。因此,如果你绘制三角形,那么你得到的每3个顶点都需要绘制一个三角形并开始处理它。