我正在使用 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中计算亮度直方图。
GLES30.glVertexAttribPointer(Handle, 2, **GLES30.GL_INT_VEC2**, false,0, mtextureCoordinates);
这是传递坐标的正确方式吗? - vishnu dinakaranglVertexAttribIPointer()
。请注意函数名称中的额外I
。 - Reto Koradi