首页 文章

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

提问于
浏览
9

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

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

1 回答

  • 17

    我已经弄清楚了 . Streaming 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);
    

    多方便

相关问题