Как я могу перевернуть поверхность Каира перед сохранением с Python?

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

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

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

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

открыт для предложений, не так много информации о смешивании Каира и OpenGL с Python.

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;                         
}
Другие вопросы по тегам