2014-06-19 13 views
9

Rendering to an SDL_Surface ist möglich, mit Kairo, aber meine Anwendung verwendet SDL_Renderer und SDL_Texture Vorteil von 2D zu nehmen Rendering beschleunigt.Can kairo Verwendung SDL_Texture als Ziel machen?

Ich erstelle gerade eine SDL_Surface und kopiere sie in eine Textur mit SDL_CreateTextureFromSurface(), aber dieser Prozess ist umständlich und möglicherweise langsam (obwohl es kein Flaschenhals ist). Gibt es eine direkte Möglichkeit, zu einem SDL_Texture zu zeichnen?

Antwort

17

Ich habe es herausgefunden. Streaming SDL_Textures können die rohen Pixel im Format ARGB8888 belichten, das ein Format Oberflächen Cairo kann auch handhaben. Die Cairo API ist niedrig genug, um nur den Pixelpuffer und die Tonhöhe zu benötigen.

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

Wie praktisch.