7
當我將非最大值傳遞到紋理緩衝區時,渲染時繪製幾何圖形的顏色爲最大值。我在使用glTexBuffer()API時發現了這個問題。使用texelFetch進行紋理編輯()
E.g.假設我的紋理數據是GLubyte,當我傳遞小於255的任何值時,那麼顏色與用255繪製的顏色相同,而不是黑色和那種顏色的混合。
我試過AMD和nvidia顯卡,但結果是一樣的。 你能告訴我哪裏可能出錯嗎?
我在這裏複製我的代碼:
韋爾着色器:
in vec2 a_position;
uniform float offset_x;
void main()
{
gl_Position = vec4(a_position.x + offset_x, a_position.y, 1.0, 1.0);
}
破片着色器:
out vec4 Color;
uniform isamplerBuffer sampler;
uniform int index;
void main()
{
Color=texelFetch(sampler,index);
}
代碼:
GLubyte arr[]={128,5,250};
glGenBuffers(1,&bufferid);
glBindBuffer(GL_TEXTURE_BUFFER,bufferid);
glBufferData(GL_TEXTURE_BUFFER,sizeof(arr),arr,GL_STATIC_DRAW);
glBindBuffer(GL_TEXTURE_BUFFER,0);
glGenTextures(1, &buffer_texture);
glBindTexture(GL_TEXTURE_BUFFER, buffer_texture);
glTexBuffer(GL_TEXTURE_BUFFER, GL_R8, bufferid);
glUniform1f(glGetUniformLocation(shader_data.psId,"offset_x"),0.0f);
glUniform1i(glGetUniformLocation(shader_data.psId,"sampler"),0);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),0);
glGenBuffers(1,&bufferid1);
glBindBuffer(GL_ARRAY_BUFFER,bufferid1);
glBufferData(GL_ARRAY_BUFFER,sizeof(vertices4),vertices4,GL_STATIC_DRAW);
attr_vertex = glGetAttribLocation(shader_data.psId, "a_position");
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0, 0);
glEnableVertexAttribArray(attr_vertex);
glDrawArrays(GL_TRIANGLE_FAN,0,4);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),1);
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0,(void *)(32));
glDrawArrays(GL_TRIANGLE_FAN,0,4);
glUniform1i(glGetUniformLocation(shader_data.psId,"index"),2);
glVertexAttribPointer(attr_vertex, 2 , GL_FLOAT, GL_FALSE ,0,(void *)(64));
glDrawArrays(GL_TRIANGLE_FAN,0,4);
在這種情況下,它把一切與暗紅色col的3個正方形要麼。
非常感謝你.. !! 現在,問題是,當我通過samplerBuffer替換isamplerBuffer時,它給出了GL_R8,GL_R16,GL_R16F,GL_R32F的正確輸出,但對於http://www.opengl.org/sdk/docs/man3/xhtml上給出的其他內部格式/glTexBuffer.xml。 你能告訴我如何實現所有內部格式正確的o/p ..? 其實我沒有太多有關glsl的知識..請幫助我.. – debonair
@ user1737197:堆棧溢出不是一個網絡論壇。在這裏,如果您有新問題,請使用「提問」按鈕來提問。或者你可以[去OpenGL Wiki並在那裏閱讀](http://www.opengl.org/wiki/GLSL_Sampler)。 –
對不起,我已經創建了新的問題。 – debonair