gpt4 book ai didi

android - 'texelFetch' : no matching overloaded function found in opengl es 3. 0

转载 作者:太空狗 更新时间:2023-10-29 14:48:25 43 4
gpt4 key购买 nike

我正在使用 OpenGL es 3.0 和我的 GLSL 版本 #version 300 es

我正在尝试计算 GPU 中的发光直方图。我已经确定我的设备支持顶点纹理获取并尝试使用 texelFetch 函数读取顶点着色器中的颜色信息。我使用 texelFetch 是因为我传入每个纹理坐标以便读取每个像素的颜色信息。

附上代码

#version 300 es 
uniform sampler2D imageTexture;
in vec2 texturePosition;
const float SCREEN_WIDTH = 1024.0;
in vec4 position;
vec2 texturePos;
out vec3 colorFactor;
const vec3 W = vec3(0.299, 0.587, 0.114);
void main() {
texturePos = texturePosition / SCREEN_WIDTH;
vec3 color = texelFetch(imageTexture, texturePos.xy,0).rgb;
float luminance = dot(color.xyz,W);
colorFactor = vec3(1.0, 1.0, 1.0);
gl_Position = vec4(-1.0 + (luminance * 0.00784313725), 0.0, 0.0, 1.0);
gl_PointSize = 1.0;
};

现在收到错误“texelFetch”:找不到匹配的重载函数。

有人可以帮助解决错误并提供在 GPU 中计算发光直方图的建议。

最佳答案

texturePos 需要是 ivec2,具有整数纹理坐标(即纹理中的像素位置)而不是标准化的 [0.0 1.0] 浮点坐标。

下面的代码应该可以工作:

#version 300 es 
uniform sampler2D imageTexture;
in ivec2 texturePosition;
in vec4 position;
out vec3 colorFactor;
const vec3 W = vec3(0.299, 0.587, 0.114);
void main() {
vec3 color = texelFetch(imageTexture, texturePosition, 0).rgb;
float luminance = dot(color, W);
colorFactor = vec3(1.0, 1.0, 1.0);
gl_Position = vec4(-1.0 + (luminance * 0.00784313725), 0.0, 0.0, 1.0);
gl_PointSize = 1.0;
};

但您需要为“texturePosition”输入数组提供整数,其中包含您希望作为整数包含在直方图中的所有 (x,y) 像素坐标。 (与 VBO)。

正如评论中所指出的,您需要使用 glVertexAttribIPointer() 来提供整数类型。

关于android - 'texelFetch' : no matching overloaded function found in opengl es 3. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37519251/

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