SDL透明覆盖
SDL Transparent Overlay
我想在SDL中创建一个假"爆炸"效果。为此,我希望屏幕从目前的状态变为白色。
最初,我考虑过这样使用SDL_FillRect(其中explosionTick是当前的alpha值):
SDL_FillRect(screen , NULL , SDL_MapRGBA(screen->format , 255, 255 , 255, explosionTick ));
但它不是一个反向渐变的矩形,而是完全白色的,没有alpha。我尝试的另一种方法是使用一个充满透明白色(阿尔法值为1)的全屏位图,并为每次爆炸闪电一次
for(int a=0; a<explosionTick; a++){
SDL_BlitSurface(boom, NULL, screen, NULL);
}
但是,这最终导致实时运行速度减慢。有没有什么简单的方法可以在不损失性能的情况下达到这种效果?谢谢你抽出时间。
好吧,你需要混合和AFAIK,SDL唯一的方法就是使用SDL_Blitsurface。所以你只需要优化闪电战。我建议对这些进行基准测试:
- 尝试使用SDL_SetAlpha来使用每表面alpha而不是每像素alpha。理论上,SDL的工作量较小,因此您可能希望获得一些速度提升。但我从来没有比较过它,过去也有一些问题
- 你并不真的需要一个全屏位图,只需重复一个粗行即可。它应该不那么占用内存,而且可能会增加缓存。此外,你可能会通过在每次通过时做一半的线来伪造一些平滑度(需要闪电战的像素更少,看起来仍然像全局屏幕效果)
- 为了获得最佳性能,请验证位图是否为显示格式。如果使用逐曲面alpha,请选中SDL_DisplayFormatAlpha或SDL_Display Format
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 如何在全屏模式下(在OpenGL中)使背景透明
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 我可以重新分配/覆盖std::字符串吗
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用子类覆盖基类中定义的函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- C++指针在 for 循环中被覆盖
- dx11 渲染到纹理仅显示透明颜色
- SDL2 透明背景
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- 如何创建透明垫子
- C++生成器透明位图覆盖画布
- 在OpenGL中部分透明的HUD风格覆盖层
- SDL透明覆盖