我想知道何时在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矩阵均匀发送到顶点着色器?片段着色器何时运行?
答案 0 :(得分:4)
它是在glutDisplayFunc()或glutMainLoop()的末尾,
两者都没有,因为GLUT 不是 OpenGL的一部分。它只是一些库(用于创建简单的OpenGL应用程序)。
还是在每个顶点绘制调用?
从程序员的角度来看,当它恰好发生时没有指定。 OpenGL有一个命令队列,并且断言它们在它们之间进行处理,进入命令队列并到达所谓的"同步点"。同步点是在前OpenGL命令生成的OpenGL上下文之外使用或传输数据的任何命令(如使用glReadPixels
读取的图像)。
对于所有实际意义,只要指定了整个基元,就可以假设顶点和片段得到处理。因此,如果你绘制三角形,那么你得到的每3个顶点都需要绘制一个三角形并开始处理它。