簡體   English   中英

沒有任何vbo輸入的頂點着色器輸出

[英]vertex shader output without any vbo input

我正在使用C ++在OpenGL 3.2中進行編碼,並且遇到了奇怪的頂點着色器問題。

因此,我有許多具有恆定大小的四邊形(實際上是正方形)。 我實際上想跳過vbo並僅使用ibo來確定着色器中的值。

因此,在執行此操作時,我發現OpenGL似乎具有使GLSL輸出變為非活動狀態的一些標准,類似於其對輸入所做的操作。 這是我的代碼:

//vertex shader
#version 140
in int p; //dummy input
out vec2 t; //finicky output
void main() { 
    p;    // line in question
    vec2 pos;
    vec4 st = vec4(-2.5, 2.5, 0.0, 5);  //const values  
    if (gl_VertexID == 0)       { pos.x = st.x; pos.y = st.z; t.x = 1; t.y = 1;}
    else if (gl_VertexID == 1)  { pos.x = st.x; pos.y = st.w; t.x = 1; t.y = 0;}
    else if (gl_VertexID == 2)  { pos.x = st.y; pos.y = st.z; t.x = 0; t.y = 1;}
    else if (gl_VertexID == 3)  { pos.x = st.y; pos.y = st.w; t.x = 0; t.y = 0;}    
    gl_Position = gl_ModelViewProjectionMatrix * vec4( pos, 0.0, 1.0 ); 
}
//fragment shader
#version 140
uniform sampler2D tex;
in vec2 t;
void main() { 
    gl_FragColor = texture2D(tex, t);
}

沒有此虛擬輸入和行“ p;” 使p處於活動狀態,OpenGL不會嘗試將頂點着色器輸出與片段着色器連接。 無論如何,有沒有使用虛擬vbo來覆蓋它?

這可能與您的OpenGL實現有關。 我在3.2規范中找不到任何說明頂點屬性是必需的東西。 相反,“ 2.11.3頂點屬性”部分的第一句話清楚地表明,具有頂點屬性是可選的:

頂點着色器可以定義命名的屬性變量,這些變量綁定到由VertexAttrib*設置的通用頂點屬性。

請注意,它說的是“可以” ,而不是“必須”。

作為實驗,我嘗試了一個與您的着色器非常相似的着色器的小示例,並且效果很好。 根本沒有任何頂點屬性(頂點着色器中沒有in變量)。 它在具有Intel Iris圖形的MacBook Pro上運行。 當然,一個實驗的結果不是結論性的證明,但是它無疑有助於確認它應該起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM