OpenGL(使用GLSL)使用glTexBuffer和texelFetch

con*_*rol 2 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; }
Run Code Online (Sandbox Code Playgroud)


所需的渲染是这样的:

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


需要哪些必要的更正?

Tri*_*ian 5

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