Opengl es 使用OpenGL ES 2.0处理图像时出现的问题

Opengl es 使用OpenGL ES 2.0处理图像时出现的问题,opengl-es,textures,Opengl Es,Textures,我制作了一个简单的应用程序,使用片段着色器获取输入图像并输出经过处理的图像。当使用2^n图像时,这是可以的。但是如果我使用一个非二次方矩形图像,我会得到一个从上到下的黑色缝线 这是原件: 这是在处理之后: 下面是我的片段着色器: precision mediump float; uniform vec2 uSize; uniform sampler2D sTexture; void main() { gl_FragColor = texture2D(sTexture, vec2(gl

我制作了一个简单的应用程序,使用片段着色器获取输入图像并输出经过处理的图像。当使用2^n图像时,这是可以的。但是如果我使用一个非二次方矩形图像,我会得到一个从上到下的黑色缝线

这是原件:

这是在处理之后:

下面是我的片段着色器:

precision mediump float;
uniform vec2 uSize;
uniform sampler2D sTexture;
void main()
{
    gl_FragColor = texture2D(sTexture, vec2(gl_FragCoord) / uSize)
}

其中,uSize是具有图像大小的vec2

一般来说,我可以使用2次幂纹理,但由于OGLES2支持矩形纹理,我想省掉一些工作

谢谢

更新 我的顶点在这里:

static GLfloat vVertices[] =
    {
     -1.0f,  1.0f, 0.0f,
     -1.0f, -1.0f, 0.0f,
      1.0f, -1.0f, 0.0f,

      1.0f, -1.0f, 0.0f,
      1.0f,  1.0f, 0.0f,
     -1.0f,  1.0f, 0.0f,
    };
这是顶点着色器:

attribute vec4 vPosition;
void main()
{
   gl_Position = vPosition;
}
更新 现在,这很奇怪。下面是分别渲染的两个三角形(首先使用前3个顶点,然后使用下一个(最后)3个顶点)

下面是方形图像(如预期的那样):

下面是相同的三角形如何寻找矩形图像/纹理。它们看起来很奇怪:


它们看起来根本不像三角形。有人知道发生了什么吗?

我们是在看图像的一大块还是完整的东西?询问,因为三角形边界与对角线不对齐

也就是说,每一个非伪影像素都是两幅图像之间的完美匹配,我认为这排除了我所想到的一个错误。不仅如此,伪影实际上是基于一个被完全擦除的颜色通道。(对于3个像素的每个系列,第一个像素的R=0,第二个像素的G=0,第三个像素的B=0)


总而言之,这看起来像是一个与着色器或图形完全无关的错误。你确定这不是在阅读后踩在记忆上的东西吗?它也可能是一个平台错误(h/w、驱动程序…)。它可以在多个平台上复制吗?

我们是在看一大块图像还是整个图像?询问,因为三角形边界与对角线不对齐

也就是说,每一个非伪影像素都是两幅图像之间的完美匹配,我认为这排除了我所想到的一个错误。不仅如此,伪影实际上是基于一个被完全擦除的颜色通道。(对于3个像素的每个系列,第一个像素的R=0,第二个像素的G=0,第三个像素的B=0)


总而言之,这看起来像是一个与着色器或图形完全无关的错误。你确定这不是在阅读后踩在记忆上的东西吗?它也可能是一个平台错误(h/w、驱动程序…)。它能在多个平台上重现吗?

似乎驱动程序不好。更新它们修复了问题。

似乎驱动程序不好。更新它们修复了问题。

问题可能出在绘图代码中,而不是着色器中(特别是顶点位置)。是否要发布它?“其中,uSize是一个具有图像大小的vec2”-这是不正确的。它应该包含屏幕大小,因为您将屏幕坐标(
gl\u FragCoord
)除以它。屏幕大小是否与
glSetView()
设置的屏幕大小相同?如果是,那么uSize应该是正确的,因为为FBO对象调用了
glSetView
。这确实是因为我的顶点的位置……我真的不知道该布局。它在任何方面、形状或形式上都与您显示的顶点数据不对应(尽管它看起来像3个三角形)。此外,三角形的边看起来完全不符合要求。看起来像黑魔法,真的(或者是平台问题)。问题可能出在绘图代码中,而不是着色器(特别是顶点位置)。是否要发布它?“其中,uSize是一个具有图像大小的vec2”-这是不正确的。它应该包含屏幕大小,因为您将屏幕坐标(
gl\u FragCoord
)除以它。屏幕大小是否与
glSetView()
设置的屏幕大小相同?如果是,那么uSize应该是正确的,因为为FBO对象调用了
glSetView
。这确实是因为我的顶点的位置……我真的不知道该布局。它在任何方面、形状或形式上都与您显示的顶点数据不对应(尽管它看起来像3个三角形)。此外,三角形的边看起来完全不符合要求。看起来像是黑魔法,真的(或者是平台问题)。嗯,我不知道,但我认为这不太可能是平台错误。是的,这是输入GPU的完整图像,在我的应用程序中使用它之前,我只是将它裁剪成不规则的大小。我不知道,但我认为这不太可能是平台错误。是的,这是输入GPU的完整图像,在我的应用程序中使用之前,我只是将其裁剪成不规则的大小。