как я могу перевернуть поверхность каира перед сохранением с помощью python?

Я создаю текстуры с помощью cairo и сохраняю, проблема в том, что если я использую поверхность напрямую с opengl, она переворачивается по вертикали.

если я сохраняю и загружаю, я могу использовать pil и im.tostring(), чтобы перевернуть его.

есть ли хороший способ перевернуть его на поверхность каира, возможно, сохранив мой png, а затем перевернув для использования или сохранив изображения вверх ногами.

в качестве альтернативы я могу создать изображение PIL и поделиться буфером с ciaro, чтобы затем использовать метод PIL tostring для ориентации текстуры.

открыт для предложений, мало информации о смешивании cairo и opengl с python.


person Oly    schedule 26.03.2014    source источник


Ответы (1)


Одним из решений является настройка координат текстуры или применение матрицы масштабирования (1,-1) к матрице текстуры, если используется старый стек матриц.

Другой способ — инвертировать пиксель (texcoord.y = 1.0 -texcoord.y) в шейдере, который самостоятельно выполняет рендеринг, в новую текстуру через FBO. (это хороший вариант)

uniform sampler2D diffuseTexture;

void main (void)  
{
    vec2 t = gl_TexCoord[0].st;
    t.y = 1.0 - t.y;
    vec4 c = texture2D(diffuseTexture, t);          
    gl_FragColor = c;                         
}
person j-p    schedule 26.03.2014
comment
Я столкнулся с этим как с вариантом, который мне показался лучшей идеей, когда я редактировал изображение, но в конечном итоге может использовать этот метод. Интересно, сильно ли это влияет на производительность? Я постоянно обновляю текстуры, потому что они содержат текст. - person Oly; 26.03.2014