[英]GLSL 1.0.0 - Trouble using “Varying” in vertex and fragment shaders
[英]GLSL - When and where is the vertex and fragment called?
我想知道何时在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矩阵发送给顶点着色器? 片段着色器何时运行?
是在glutDisplayFunc()或glutMainLoop()的末尾,
两者都不是,因为GLUT 不属于OpenGL。 这只是一个库(用于创建简单的OpenGL应用程序)。
还是在每个顶点绘制调用中?
从程序员的角度来看,确切发生的时间未指定。 OpenGL有一个命令队列,并且在进入命令队列并到达所谓的“同步点”之间断言要在它们之间进行处理。 同步点是任何在以前的OpenGL命令产生的OpenGL上下文之外使用或传输数据的命令(例如,使用glReadPixels
读取的图像)。
对于所有实际手段,您都可以假定一旦指定了整个图元,就可以处理顶点和片段。 因此,如果您绘制三角形,那么每得到3个顶点,您便会绘制一个三角形,然后开始处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.