Как я могу перевернуть поверхность Каира перед сохранением с 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;
}