Может ли cairo использовать SDL_Texture в качестве цели рендеринга?

Рендеринг на SDL_Surface возможен с Cairo, но мое приложение использует SDL_Renderer и SDL_Texture, чтобы воспользоваться преимуществами ускоренного 2D-рендеринга.

В настоящее время я создаю SDL_Surface и копирую его в текстуру с помощью SDL_CreateTextureFromSurface(), но этот процесс громоздкий и, возможно, медленный (хотя это и не узкое место.) Есть ли прямой способ рисовать в SDL_Texture?


person Vortico    schedule 19.06.2014    source источник


Ответы (1)


Я понял это. Потоковая передача SDL_Texture может отображать необработанные пиксели в формате ARGB8888, который также может обрабатываться поверхностями Cairo. Cairo API достаточно низкий уровень, чтобы требовать только буфер пикселей и шаг.

SDL_Texture *texture = SDL_CreateTexture(renderer,
    SDL_PIXELFORMAT_ARGB8888,
    SDL_TEXTUREACCESS_STREAMING,
    width, height);

void *pixels;
int pitch;
SDL_LockTexture(texture, NULL, &pixels, &pitch);
cairo_surface_t *cairo_surface = cairo_image_surface_create_for_data(
    pixels,
    CAIRO_FORMAT_ARGB32,
    width, height, pitch);

paint(cairo_create(cairo_surface));

SDL_UnlockTexture(texture);

Как удобно.

person Vortico    schedule 19.06.2014