gpt4 book ai didi

使用 glTexBuffer 和 texelFetch 的 OpenGL(带 GLSL)

转载 作者:行者123 更新时间:2023-12-03 19:17:07 24 4
gpt4 key购买 nike

尝试在 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);<br/>
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_BUFFER, textureID);
glTexBuffer(GL_TEXTURE_BUFFER,GL_RGBA8UI,texBuffObj[0]);
<hr/>Fragement Shader Snippet: <p></p>

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


所需的渲染是这样的:

offset value 0 primitive color : 255, 0, 0, 0, //Red
offset value 4 primitive color : 0, 255, 0, 255, //Green
offset value 8 primitive color : 0, 0, 255, 255, //Blue
offset value 12 primitive color : 255, 0, 255, 255, //PINK


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

最佳答案

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

关于使用 glTexBuffer 和 texelFetch 的 OpenGL(带 GLSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20681347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com