【问题标题】:What is a Blit in SDL?SDL 中的 Blit 是什么?
【发布时间】:2010-09-13 13:02:20
【问题描述】:

在 SDL wiki 中它说

使用此函数执行从源表面到目标表面的快速 blit。

但这对我没有多大帮助。

在这种情况下,术语表面 blitting 是什么意思?

【问题讨论】:

标签: sdl blit


【解决方案1】:

基本上,这意味着将图像从一个表面复制到另一个表面——可能会被裁剪和移动。

【讨论】:

  • StretchBlt() 为您进行缩放。
【解决方案2】:

Blitting 是指由 Wikipedia 或 Block Information Transfer 定义的 位边界块传输,在 Pygame 开发人员中广为人知。假设你有一个 Surface(你的屏幕)。你想在屏幕上画一个圆圈。所以你要做的是,画圆并将缓冲区的圆块转移到屏幕缓冲区,这个过程称为“Blitting”。您可以继续阅读有关 Blit 的更多信息here.

【讨论】:

    【解决方案3】:

    官方代码示例

    直观地说,它的意思是“在另一个表面上绘制一个精灵”。

    此操作可以使用SDL_Texture + SDL_RenderCopy 进行 GPU 加速。

    http://hg.libsdl.org/SDL/file/e12c38730512/test/testsprite2.c 为例,特别是评论:

    /* Blit the sprite onto the screen */
    SDL_RenderCopy(renderer, sprite, NULL, position);
    

    其中明确表示SDL_RenderCopy 是一种 blit 方式。

    在该示例中,纹理仅被创建并发送到 GPU 内存一次,然后就可以有效地重复使用,另请参见:Difference between surface and texture (SDL / general)

    当我在 Ubuntu 15.10 上运行此示例时,nvidia-settings 说 GPU 使用率达到 100%,并且我获得的 FPS 比逐像素绘制到屏幕上要高得多,因此它是 GPU 加速的。

    【讨论】:

      【解决方案4】:

      它将内存从内存中的一个位置(源)复制到内存中的另一个位置(目标)。

      例如。它可以将像素从一个位图复制到另一个位图,从位图复制到纹理,或者将上述任何一种复制到屏幕表面或屏幕的后台缓冲区表面。

      假设您有一个要在屏幕上显示的图像/图块。您将执行“blit”以将构成图像的内存复制到屏幕上使用的内存。

      本质上,它调用了一个与 memcpy() 非常相似的函数,它将指定为源的字节一个接一个地复制到指定为目标的字节。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        相关资源
        最近更新 更多