在 SDL wiki 中它说
使用此函数执行从源表面到目标表面的快速 blit。
然而,这对我没有多大帮助。
在这种情况下,术语表面 blitting 是什么意思?
基本上,这意味着将图像从一个表面复制到另一个表面——可能会被裁剪和移动。
Blitting 是指由 Wikipedia 或Block Information Transfer定义的位边界块传输,在 Pygame 开发人员中广为人知。假设你有一个 Surface(你的屏幕)。你想在屏幕上画一个圆圈。所以你要做的是,画圆并将缓冲区的圆块转移到屏幕缓冲区,这个过程称为“Blitting”。您可以在此处继续阅读有关 Blit的更多信息。
官方代码示例
直观地说,它的意思是“在另一个表面上绘制一个精灵”。
此操作可以使用SDL_Texture
+进行 GPU 加速SDL_RenderCopy
。
以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 内存,然后就可以有效地重用它,另请参见:表面和纹理之间的差异(SDL / 通用)
当我在 Ubuntu 15.10 上运行这个示例时,nvidia-settings
说 GPU 使用率达到 100%,我得到的 FPS 比逐个像素地绘制到屏幕上要高得多,因此它是 GPU 加速的。
它将内存从内存中的一个位置(源)复制到内存中的另一个位置(目标)。
例如。它可以将像素从一个位图复制到另一个位图,从位图复制到纹理,或者将上述任何一种复制到屏幕表面或屏幕的后台缓冲区表面。
假设您有一个要在屏幕上显示的图像/图块。您将执行“blit”以将构成图像的内存复制到屏幕上使用的内存。
本质上,它调用了一个与 memcpy() 非常相似的函数,它将指定为源的字节一个接一个地复制到指定为目标的字节。