c – 如何在SDL中扩展到分辨率?
我正在用C编写一个使用SDL的2D平台游戏.但是,我遇到了一个涉及扩展到解决方案的巨大问题.我想让游戏在全高清看起来很漂亮,所以游戏的所有图像都是创建的,这样游戏的自然分辨率就是1920×1080.然而,如果有人使用较小的分辨率,或者如果有人使用较大的分辨率,则我希望游戏能够缩小到正确的分辨率.
问题是我无法找到一个有效的方式来做到这一点.我开始使用SDL_gfx库预缩放所有图像,但这不起作用,因为它创建了大量的一个一个错误,一个像素丢失了.而且,动画播放时,由于我的动画包含在一个图像中,所以每帧都会稍微向上或向下移动. 然后经过一些回顾,我试过使用opengl来处理缩放.目前,我的程序将所有图像绘制到1920×1080的SDL_Surface.然后将该表面转换为opengl纹理,将该纹理缩放到屏幕分辨率,然后绘制纹理.这在视觉上工作很好,但问题是它的效率不高.目前我得到的最大fps为18: 所以我的问题是有没有人知道有效的方法来缩放SDL显示屏幕分辨率? 解决方法
这是无效的,因为OpenGL不是设计为这样工作.当前设计的主要性能问题:
>第一个问题:您正在使用SDL软件光栅化.对不起,不管你用这个配置做什么,这将是一个瓶颈.在1920×1080的分辨率下,您有2073,600像素的颜色.假设需要10个时钟周期来遮蔽每个4通道像素,在2GHz处理器上运行的最大值为96.4 fps.这听起来不错,除了你可能不能遮住那些快速的像素,你还没有完成AI,用户输入,游戏机制,声音,物理和其他一切,你可能会画出一些像素至少一次. SDL_gfx可能很快,但对于大分辨率,CPU基本上是超额的. 我的建议:将您的应用程序完全切换到OpenGL.这不需要渲染到纹理并复制到屏幕上 – 只需直接渲染到屏幕上!此外,缩放由您的视图矩阵(glOrtho / gluOrtho2D for 2D)自动处理,因此您完全不必关心缩放问题 – 您的视口将只显示相同尺度的所有内容.这是您的问题的理想解决方案. 现在,它带来了一个主要的缺点,你必须使用OpenGL绘制命令重新编码所有内容(这是非常有用的,但是不要太难,特别是从长远来看).不过,您可以尝试以下想法来提高速度: >公益组织像素缓冲区对象可以通过使异步的纹理加载/复制来解决问题二. 希望这可以帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |