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

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

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

1 ответов


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

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);

Как удобно.