You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:32:39