2012-12-10 73 views
1

有一個奇怪的問題,我的glsl着色器。它不渲染任何東西(例如balck屏幕),並使我的glDrawElements投射GL_INVALID_OPERATION。下圖顯示了使用的着色器。當我註釋掉v = texture3D(texVol,pos).r;並用代替v = 0.4;它輸出所期望的(類橙色)並且不產生gl錯誤。texture3d genereates GL_INVALID_OPERATION

uniform sampler2D texBack; 
uniform sampler3D texVol; 
uniform vec3 texSize; 
uniform vec2 winSize; 
uniform float iso; 

varying vec3 inCoords; 

vec4 raytrace(in vec3 entryPoint,in vec3 exitPoint){ 
    vec3 dir = exitPoint - entryPoint; 
    vec3 pos = entryPoint; 
    vec4 color = vec4(0.0,0.0,0.0,0.0); 
    int steps = int(2.0*length(texSize)); 
    dir = dir * (1.0/steps); 
    vec3 n; 
    float v,m=0.0,avg=0.0,avg2=0.0; 
    for(int i = 0;i<steps || i < 2500;i++){ 
     v = texture3D(texVol,pos).r; 
     m = max(v,m); 
     avg += v; 
     pos += dir; 
    } 
    return vec4(avg/steps,m,0,1); 

} 

void main() 
{ 
    vec2 texCoord = gl_FragCoord.xy/winSize; 
    vec3 exitPoint = texture2D(texBack,texCoord).xyz; 
    gl_FragColor = raytrace(inCoords,exitPoint); 
} 

我正在使用VBO渲染彩色立方體作爲入口和存在點爲我的光芒。它們存儲在FBO中,當我直接將它們呈現給屏幕時,它們看起來很好。 我試圖chaning到在glBegin/glEnd並繪製四邊形立方體,然後我得到了同樣的錯誤。 我無法找到我做錯了什麼,現在我需要你的幫助。爲什麼我的texture3D生成GL_INVALID_OPERATION?

注: 我已經啓用了2D和3D紋理。

編輯: - 我剛把整個項目上傳到github。瀏覽到更多的代碼enter link description here - 這是在Intel HD 3000和Nvidia GT550M

回答

0

測試根據的OpenGL規範glDrawElements()在以下情況下產生GL_INVALID_OPERATION:

  1. 如果幾何着色器是有源和模式是與當前安裝的程序對象的輸入基本類型的幾何形狀着色器不兼容。

  2. 如果非零緩衝區對象名稱被綁定到使能陣列或元件陣列和緩衝對象的數據存儲當前映射。

這意味着問題與片段着色器無關。如果您不使用幾何着色器,則應相應地修復緩衝區對象。

它看起來像你沒有提供你的問題更多的相關信息。

相關問題