2013-12-19 292 views
2

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


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; }


所要求渲染是使得具有:

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


什么需要必要的修正?

回答

5

texelFetch需要texel坐标,而不是缓冲区中的字节偏移量。由于你的texel是4个字节宽,你想要使用索引0,1,2,3而不是0,4,8,12来检索它们。

+0

它工作正常!令我困惑的是枚举值和相应的texData,我可以假设对于GL_R32F texData应该是一个浮点数组,其中每个元素只会提供R值? – control

+1

@ppu这是正确的,你仍然可以使用texel坐标获取texels(0代表你的第一个红色值,texel代表你的第二个红色值,等等) – Trillian