Я сделал простое приложение, которое берет входное изображение и выводит обработанное изображение, используя фрагментный шейдер. При использовании изображения 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 поддерживает прямоугольные текстуры, я подумывал о том, чтобы избавить себя от некоторой работы.
Спасибо!
UPDATE
Вот мои вершины:
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;
}
UPDATE
Теперь это странно. Вот два треугольника, представленные отдельно (сначала с использованием первых 3 вершин, а затем с использованием следующих (последних) трех).
Здесь перейдем к квадратному изображению (как и ожидалось):
А вот как выглядят одинаковые треугольники для изображения / текстуры прямоугольника. Они выглядят странно :
Они совсем не похожи на треугольники. Кто-нибудь знает, что происходит?