我创建了一个简单的应用程序,它使用片段着色器获取输入图像并输出已处理的图像。使用2 ^ n图像时,没问题。但是,如果我使用矩形非2次幂图像,我会从上到下运行黑色针迹。
这是原作:
这是在处理之后:
这是我的片段着色器:
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个)。
这里是方形图像(如预期的那样):
以下是相同的三角形如何查找矩形图像/纹理。他们看起来很奇怪:
它们看起来根本不像三角形。有谁知道发生了什么?
答案 0 :(得分:1)
我们是在看一块图像还是整个图片?问,因为三角形边界不对齐。
也就是说,每个非神器像素都是两幅图像之间的完美匹配,我认为这种错误可以排除我想到的一个错误。不仅如此,工件实际上是基于完全擦除的单个颜色通道。 (对于每个3个像素的系列,第一个具有R = 0,第二个具有G = 0,并且第三个具有B = 0)。
总而言之,这看起来像是与着色器或绘图完全无关的错误。你确定它不是在读取内存时踩踏的东西吗?它也可能是一个平台错误(h / w,驱动程序......)。它可以在多个平台上重现吗?
答案 1 :(得分:0)
似乎司机不好。更新它们解决了这个问题。