[英]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.