是否存在具有像素完美绘图和2D硬件加速的2D图形API?

时间:2010-10-12 21:49:05

标签: opengl graphics 2d sdl

我们目前处于制作2D游戏的第一阶段,这将关注可破坏的环境和物体。

但是,我们已经遇到了选择正确的图形API

的严重问题

目前,我们使用 SDL - 但我们看到的问题是它不是真正的高性能,并且没有硬件加速的表面缩放和旋转! - 这也使动画相机变焦几乎不可能

我们也考虑过使用 OpenGL ,但我们看到的问题是我们需要的直接像素访问。你认为这是正确的选择吗?

我们正在寻找的是一种硬件加速的图形API,提供直接的像素访问和修改,以及表面的快速blitting,旋转和缩放

3 个答案:

答案 0 :(得分:4)

OpenGL可以为您提供直接的像素访问,但有时很难理解为什么它没有一些功能......

glDrawPixels可能是最简单,最可靠的方法 - 你可以将一块像素从“常规”内存复制到帧缓冲区 - 这不是特别快,但它的旧版本(由MSDN记录)如此古老),跨平台(和硬件)得到很好的支持,并为您提供像素渲染的完全控制和准确性 - 您甚至可以将所有渲染逻辑编程为在CPU上运行,并将其用于绘制像素。但是,尝试利用使用硬件的性能优势可能是明智的......

使用硬件很好,但即使是最简单的操作也无法保证像素完美的精度 - 通常驱动程序会做一些与你期望的有些不同的事情 - GL_LINES,GL_LINE_LOOP等通常表现得最好 - 难以使用它们的像素精度,据我所知,如果你想要更粗的线条,就没有办法让它们一致地渲染 - 不同的驱动程序会做不同的事情。虽然它可能只是单个像素差异,但我知道这通常足以导致问题。

然而,某些操作很可能是像素完美的,例如,在屏幕大小的四边形上采样纹理。这对于延迟渲染和类似技术至关重要,其中全屏缓冲需要以某种方式合成 - 只要你避免了舍入错误的常见问题,你通常可以用像素完美精度定位三角形/四边形 - 只是不要在周围迭代通过累加浮点值来屏幕 - 通过使用每个像素具有整数值的变换使其尽可能简单,这可以通过glOrtho函数实现。事实上,根据经验,三角形渲染方法最受关注,并且需要最一致,因为最流行的图形软件(游戏)完全依赖于它们。

如果您正在努力寻找进行特定操作的方法,那么请考虑查看着色器 - 它们几乎总是足以满足您的任何需求(尽管使其具有高性能可能具有挑战性)并为您提供额外的水平您可能需要高质量的二维渲染器控制。

答案 1 :(得分:0)

也许看看SFML

从功能列表中:

  

现代效果和   硬件加速:alpha混合,   旋转,着色器,......

答案 2 :(得分:-1)

Cortex Command已经做了很多你正在考虑的事情,他们使用的是Allegro - 但它不是硬件加速的。你可以访问OpenGL对象和DirectX纹理中的像素,你不会经常这样做,因为从图形RAM到主存储器来回复制东西并不一定便宜。

您可以最小化操作像素的频率。对于2D API,我个人非常喜欢HGE,但它是基于DirectX的。