【发布时间】:2010-09-13 13:02:20
【问题描述】:
在 SDL wiki 中它说
使用此函数执行从源表面到目标表面的快速 blit。
但这对我没有多大帮助。
在这种情况下,术语表面 blitting 是什么意思?
【问题讨论】:
在 SDL wiki 中它说
使用此函数执行从源表面到目标表面的快速 blit。
但这对我没有多大帮助。
在这种情况下,术语表面 blitting 是什么意思?
【问题讨论】:
基本上,这意味着将图像从一个表面复制到另一个表面——可能会被裁剪和移动。
【讨论】:
Blitting 是指由 Wikipedia 或 Block Information Transfer 定义的 位边界块传输,在 Pygame 开发人员中广为人知。假设你有一个 Surface(你的屏幕)。你想在屏幕上画一个圆圈。所以你要做的是,画圆并将缓冲区的圆块转移到屏幕缓冲区,这个过程称为“Blitting”。您可以继续阅读有关 Blit 的更多信息here.
【讨论】:
官方代码示例
直观地说,它的意思是“在另一个表面上绘制一个精灵”。
此操作可以使用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 加速的。
【讨论】:
它将内存从内存中的一个位置(源)复制到内存中的另一个位置(目标)。
例如。它可以将像素从一个位图复制到另一个位图,从位图复制到纹理,或者将上述任何一种复制到屏幕表面或屏幕的后台缓冲区表面。
假设您有一个要在屏幕上显示的图像/图块。您将执行“blit”以将构成图像的内存复制到屏幕上使用的内存。
本质上,它调用了一个与 memcpy() 非常相似的函数,它将指定为源的字节一个接一个地复制到指定为目标的字节。
【讨论】: