【问题标题】:Can cairo use SDL_Texture as a render target?cairo 可以使用 SDL_Texture 作为渲染目标吗?
【发布时间】:2014-06-19 21:18:17
【问题描述】:

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

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

【问题讨论】:

    标签: sdl cairo sdl-2


    【解决方案1】:

    我想通了。流式 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);
    

    多么方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多