cairo可以使用SDL_Texture作为渲染目标吗?

时间:2014-06-19 21:18:17

标签: sdl cairo sdl-2

Cairo可以使用

Rendering to an SDL_Surface,但我的应用程序使用SDL_Renderer和SDL_Texture来利用2D加速渲染。

我目前正在创建一个SDL_Surface并将其复制到带有SDL_CreateTextureFromSurface()的纹理,但是这个过程很麻烦且可能很慢(尽管它不是瓶颈。)是否有直接的方法来绘制SDL_Texture? / p>

1 个答案:

答案 0 :(得分:20)

我已经弄清楚了。 Streaming SDL_Textures可以以ARGB8888格式显示原始像素,这是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);

多么方便。