我们应该将OpenGL用于2D图形吗?

时间:2011-03-17 09:56:37

标签: opengl graphics gdi

如果我们想制作像MS Paint这样的应用程序,我们是否应该使用OpenGL来渲染图形? 如果使用传统的GDI与OpenGL,我想提一下性能。 如果为此目的存在一些更好的库,请见我一个。

2 个答案:

答案 0 :(得分:8)

GDI,X11,OpenGL ......是渲染API,即你通常不会将它们用于图像处理(你可以这样做,但它需要一些预防措施)。

在像MS Paint这样的绘图应用程序中,如果它是基于像素的,你通常会使用惯用代码或特殊的图像处理库来操作一些图片缓冲区,然后将完整的缓冲区发送到渲染API。

如果您的数据模型由笔画和单个形状(即矢量图形)组成,那么OpenGL就是一个非常好的后端。然而,可能值得研究其他一些矢量图形API,比如OpenVG(在当前的实现中,它位于OpenGL之上,但可能会直接在GPU上运行本机实现)。

在您的使用方案中,您不会在当前计算机上遇到任何性能问题,因此请勿从该标准中选择API。在纹理,alpha混合等方面,OpenGL肯定比GDI更快。但是,根据系统和GPU,纯GDI可以胜过OpenGL,用于绘制弧形或用复杂的缠绕规则填充复杂的自相交多边形等简单的事物。

答案 1 :(得分:4)

没有充分理由为此使用OpenGL。除非您有多年的GDI经验,但对OpenGL不了解。

另一方面,在许多情况下,OpenGL可能非常出色。如果计算机中有合理的新卡,则在GLSL着色器中合成图层或调整色调/饱和度/亮度/对比度将快几个数量级(事实上,几乎“立即”)。使用“模糊”笔(即,一次又一次地混合具有α透明度的精灵)来抚摸自由编排路径将快几个数量级。在具有一定合理尺寸的图像上,大多数滤波器内核应该接近实时运行。重新调整双线性过滤在硬件中运行。

这样的事情在512x512图像上无关紧要,因为在这样的分辨率下几乎所有东西都是即时的,但是在数码相机的典型4096x3072(或更大)图像上,它可能非常明显,特别是如果你有4个-6层。