- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 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/
这个问题在这里已经有了答案: OpenGL Texture Coordinates in Pixel Space (3 个回答) 4年前关闭。 我正在使用 GLSL,需要一些纹理查找方面的帮助。我正在
我的程序显示从带有 openGL 的网络摄像头加载的 openCV 图像。 下面的程序通常可以工作,但我在代码后列出了一些问题。 主要的: #define GLEW_STATIC #include
当我将非最大值传递到纹理缓冲区时,在渲染时它会绘制具有最大值颜色的几何图形。我在使用 glTexBuffer() API 时发现了这个问题。 例如假设我的纹理数据是GLubyte,当我传递任何小于25
片段着色器: out vec4 Color; uniform samplerBuffer sampler; uniform int index; void main() { Color=norm
目前我使用函数 texture(...) 读取 3D 纹理,如下所示: vec3 值 = texture(texture_3D, coord).rgb 我现在要做的是: vec3 值 = texelF
我试过: #version 130 uniform sampler2D texID; in vec2 texcoord; out vec4 outcolor; void main(void) {
尝试在 OpenGL 桌面中渲染一个矩形,但 glTexBuffer(...) 中使用的内部格式和 texelFetch(...) 的相应代码不是为我工作。我有正确的原始渲染,只需要更正纹理缓冲区部分
我正在使用 OpenGL es 3.0 和我的 GLSL 版本 #version 300 es。 我正在尝试计算 GPU 中的发光直方图。我已经确定我的设备支持顶点纹理获取并尝试使用 texelFet
我是一名优秀的程序员,十分优秀!