OpenGL(使用GLSL)使用glTexBuffer和texelFetch

时间:2013-12-19 12:04:49

标签: opengl

尝试在OpenGL桌面中渲染矩形,但glTexBuffer(...)中使用的内部格式和texelFetch(...)的相应代码对我不起作用。我有正确的原始渲染,只需要纠正纹理缓冲部分。以下是相关的代码段

<小时/>
unsigned char texData [16] = 
    { 
        255, 0, 0, 0, //Red 
        0,255,0,255, //Green 
        0,0,255,255, //Blue 
        255,0,255,255, //PINK
    }; 
    glGenBuffers( 2,texBuffObj);
    glBindBuffer( GL_TEXTURE_BUFFER,texBuffObj[0]);
    glBufferData( GL_TEXTURE_BUFFER,sizeof(texData),texData,GL_DYNAMIC_DRAW);
glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_BUFFER, textureID); glTexBuffer(GL_TEXTURE_BUFFER,GL_RGBA8UI,texBuffObj[0]);
Fragement Shader Snippet:

#version 330 core uniform usamplerBuffer samplerTexBuffer; out vec4 color; in vec2 vs_texCoord; in vec3 vert_Color; void main() { int offset = 8; // 0:RED 4:GREEN 8:BLUE 12:PINK vec4 colBuff; colBuff = texelFetch(samplerTexBuffer,offset) ; color = colBuff; }


所需的渲染是这样的:

  

偏移值 0 原始颜色:255,0,0,0,//红色
  偏移值 4 原始颜色:0,255,0,255,//绿色
  偏移值 8 原始颜色:0,0,255,255,//蓝色
  偏移值 12 原始颜色:255,0,255,255,// PINK


需要进行哪些必要的更正?

1 个答案:

答案 0 :(得分:5)

texelFetch获取纹素坐标,而不是缓冲区中的字节偏移量。由于您的纹素是4个字节宽,因此您希望使用索引0,1,2,3而不是0,4,8,12来检索它们。