我遇到了保留被复制/剪辑 blitted 表面的 alpha 通道的问题(将表面的部分 blitting 到较小的表面上,它们是 spritesheets)。我尝试了各种解决方案,但最终结果是任何应该具有透明度的表面最终变得完全不透明(alpha 蒙版变为白色)。
所以我的问题是,如何将一个 RGBA SDL_Surface 复制到另一个新表面(也是 RGBA),包括 alpha 通道?如果它有任何不同,如何将 RGBA 表面的一部分复制到新的 RGBA 表面(与源表面的剪切部分大小相同),ala tilesheet blitting。
似乎 SDL_BlitSurface 混合了 alpha 通道,所以例如,当我想将瓷砖从瓷砖表面复制到新表面时(当然,这是空白的,我假设 SDL 默认用黑色或白色填充表面) ,它最终会丢失它的 alpha 蒙版,因此当该图块最终被传送到屏幕时,它不会与屏幕上的任何内容混合。
SDL_DisplayFormatAlpha 非常适合使用 alpha 蒙版复制表面,但它不采用剪辑参数,它仅用于复制整个表面,而不是其中的一部分,因此是我的问题。