Может ли 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);
Как удобно.