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
什麼需要必要的修正?
它工作正常!令我困惑的是枚舉值和相應的texData,我可以假設對於GL_R32F texData應該是一個浮點數組,其中每個元素只會提供R值? – control
@ppu這是正確的,你仍然可以使用texel座標獲取texels(0代表你的第一個紅色值,texel代表你的第二個紅色值,等等) – Trillian