使用Cairo可以将内容渲染到SDL_Surface上,但我的应用程序使用SDL_Renderer和SDL_Texture来利用2D加速渲染。
我目前正在创建一个SDL_Surface,并使用SDL_CreateTextureFromSurface()
将其复制到纹理中,但这个过程可能很繁琐且慢(尽管它不是瓶颈)。是否有一种直接的方法可以绘制到SDL_Texture上?
使用Cairo可以将内容渲染到SDL_Surface上,但我的应用程序使用SDL_Renderer和SDL_Texture来利用2D加速渲染。
我目前正在创建一个SDL_Surface,并使用SDL_CreateTextureFromSurface()
将其复制到纹理中,但这个过程可能很繁琐且慢(尽管它不是瓶颈)。是否有一种直接的方法可以绘制到SDL_Texture上?
我已经想出来了。流式传输SDL_Textures可以将原始像素以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);
多么方便啊。