Мне нужно удалить все нечетные строки из текстуры - это часть простого деинтерлейсера.Как определить четную/нечетную линию текстуры в GLSL ES
В следующем примере кода вместо получения RGB из текстуры я выбираю вывод белого цвета для нечетной строки и красного цвета для четной строки - поэтому я могу визуально проверить, является ли результат ожидаемым.
_texcoord передается из вершинного шейдера и имеет диапазон [0, 1] для обоих х и у
uniform sampler2D sampler0; /* not used here because we directly output White or Red color */
varying highp vec2 _texcoord;
void main() {
highp float height = 480.0; /* assume texture has height of 480 */
highp float y = height * _texcoord.y;
if (mod(y, 2.0) >= 1.0) {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
} else {
gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
}
}
При визуализации на экране, выход не ожидается. Вертикально это RRWWWRRWWW Но я действительно ожидал RWRWRWRW (то есть альтернативный между красным и белым цветом)
Мой код работать на прошивкой и цели до GLES 2.0, так что не должно быть ничем не отличается от Android с GLES 2.0
Вопрос: Где я сделал не так?
EDIT
- Да высота текстуры правильно
- Я думаю, мой вопрос: дается _texcoord.y, как сказать, если он имеет в виду нечетной или даже линии текстуры.
Убедитесь, что высота текстуры 480 – Max
Использование 'sampler2D' это не очень хорошая идея для того, что вы пытаетесь сделать здесь. Вам нужен прямой, цельный индексный доступ к текселю, а не интерполированная выборка. –
Как отключить интерполированную выборку и использовать целочисленный доступ к текстуре? GL_TEXTURE_RECTANGLE недоступно в GLES –