Всем привет!
Столкнулся с такой проблемой: есть шейдер, он конвертирует 12-битный YUV кадр (YUV420P) в RGB24.
Вот нарисовалась проблема: на карте nVidia отработал шикарно, но вот на ATI некорректно отображает картинку... Изображение получается размером 1/4 нужного, а 3/4 занимает что-то непонятное... Ну и, конечно же, цвета не совпадают, но что-то отдаленно похожее на оригинал есть.
Вот сам шейдер:
uniform sampler2DRect y_texture, u_texture, v_texture;
uniform float imageHeight;
void main(void) {
float sx, sy, r, g, b, y, u, v;
sx = gl_TexCoord[0].x;
sy = imageHeight - gl_TexCoord[0].y;
y = texture2DRect(y_texture, vec2(sx / 2.0, sy / 2.0)).r;
u = texture2DRect(u_texture, vec2(sx / 2.0, sy / 2.0)).r;
v = texture2DRect(v_texture, vec2(sx / 2.0, sy / 2.0)).r;
y = 1.1643 * (y - 0.0625);
u = u - 0.5;
v = v - 0.5;
r = y + 1.5958 * v;
g = y - 0.39173 * u - 0.8129 * v;
b = y + 2.017 * u;
gl_FragColor = vec4(r, g, b, 1.0);
}
Подскажите, please, что можно сделать...
Спасибо!