如何让texelFetch函数读取并返回整数类型数据?
texelFetch处理整数型数据异常问题
函数texelFetch处理浮点型数据正常,但无法正确处理整数型数据。
浮点型可用示例
宿主代码
float Test[5][2] = { 2.0f, 2.0f }; GLuint tex; GLuint tbo; glGenBuffers(1, &tbo); glBindBuffer(GL_TEXTURE_BUFFER, tbo); glBufferData(GL_TEXTURE_BUFFER, sizeof(Test), Test, GL_STATIC_DRAW); glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_BUFFER, tex); glTexBuffer(GL_TEXTURE_BUFFER, GL_RG32F, tbo);
片段着色器代码
uniform samplerBuffer textureData; void main() { vec2 TexBegin = texelFetch(textureData, 0).xy; if (TexBegin.x == 2) { color = vec4(1.0, 0.0, 0.0, 1.0); } else { color = vec4(0.0, 0.0, 0.0, 1.0); } }
整数型异常示例(仅返回0)
宿主代码
int Test[5][2] = { 2, 2 }; GLuint tex; GLuint tbo; glGenBuffers(1, &tbo); glBindBuffer(GL_TEXTURE_BUFFER, tbo); glBufferData(GL_TEXTURE_BUFFER, sizeof(Test), Test, GL_STATIC_DRAW); glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_BUFFER, tex); glTexBuffer(GL_TEXTURE_BUFFER, GL_RG32I, tbo);
片段着色器代码
uniform samplerBuffer textureData; void main() { vec2 TexBegin = texelFetch(textureData, 0).xy; if (TexBegin.x == 2) { color = vec4(1.0, 0.0, 0.0, 1.0); } else { color = vec4(0.0, 0.0, 0.0, 1.0); } }
将vec2改为ivec2时会报错:“cannot convert float to int”。
内容的提问来源于stack exchange,提问作者Couchy123
相关产品推荐
相关产品推荐

