2013-12-19 228 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