为何选用SDL_Surface而非SDL_Texture?技术场景探讨
虽然SDL_Texture依靠GPU渲染的速度优势明显,但SDL_Surface在不少场景下依然不可替代,具体来说:
像素级直接操作场景
SDL_Surface是驻留在CPU内存中的像素缓冲区,你可以直接读写每一个像素的颜色值,比如实现自定义的像素滤镜、逐像素绘制图形、做精确的像素级碰撞检测。而SDL_Texture存储在GPU显存里,要修改像素的话必须先把数据回读到CPU,修改完再重新上传到GPU,来回的拷贝开销会让操作变得异常低效,这种场景下SDL_Surface是最优选择。离线图像预处理
在程序加载阶段对图像做裁剪、拼接、调色、添加水印这类预处理工作时,用SDL_Surface在CPU上完成操作再转成SDL_Texture用于渲染,不仅更灵活,还不会占用GPU的渲染资源,避免影响实时渲染的帧率。轻量应用开发
对于小型工具、简单的2D小游戏这类对性能要求不高的场景,SDL_Surface的渲染性能完全够用,而且不需要处理GPU上下文管理、纹理格式兼容这些额外的复杂度,开发成本更低,上手更快。无GPU加速的运行环境
在一些老旧设备、没有图形硬件的服务器端程序,或者禁用GPU加速的环境中,SDL_Texture无法正常工作,而SDL_Surface可以直接依靠CPU完成渲染输出,保证程序的兼容性。文本渲染的中间流程
SDL_TTF库生成文本时,默认输出的是SDL_Surface——因为文本字形的点阵生成必须在CPU上完成,之后再转成SDL_Texture用于渲染更合理。如果强行用SDL_Texture处理文本,反而会增加不必要的流程开销。
内容的提问来源于stack exchange,提问作者Stressed

