2011-02-24 115 views
3

我想使用OpenGL调整图像大小。我更喜欢用Java,但是C++也可以。使用OpenGL调整图像大小

我真的很新的整个事情,所以这里的文字的过程中,我看到它:

  1. 负载图像作为纹理到OGL
  2. 设置一些东西,关于国家&过滤
  3. 绘制在不同尺寸纹理到另一个纹理
  4. 得到纹理数据到一个数组或东西

您是否认为使用OpenGL和GPU比使用基于CPU的BLIT库更快?

谢谢!

+1

我认为这会更快。如果你这样做了很多,瓶颈将是GPU的RAM链接。因此,如果您需要几种不同格式的相同图像,则可以在VRAM中加载一次,然后一次生成所有图像。 – 2011-02-24 08:47:40

+0

这就是我的想法。然而,我仍然想知道如何去做... – 2011-02-24 08:56:04

+1

我真的怀疑它会快很多,因为与上面评论相同的原因 - 在GPU和RAM之间传输内容通常很慢。但愿意被证明是错误的:D – 2011-02-24 08:56:10

回答

4

您可以简单地使用硬件blit功能:glBlitFramebuffer,而不是将四边形渲染到目标FBO中。它的参数是直线前进,但它需要你的源和目标FBO的的精心准备:

  • 确保FBO的完成(glCheckFramebufferStatus
  • 集阅读FBO目标和独立写FBO目标(glBindFramebuffer
  • 组绘制缓冲区和读缓冲器(glDraw/ReadBuffers
  • 呼叫glBlitFramebuffer,在参数设定GL_LINEAR滤波器

我敢打赌,GPU上的速度会更快,特别是对于大图像。

+1

非常感谢说明! :-)高度赞赏! – 2011-02-24 14:33:59

1

取决于,如果图像很大,使用OpenGL可能会更快。但是如果只是在调整大小的过程并且不在GPU方面进行更多的处理,那么这是不值得的,因为这很可能会比CPU慢。

但是,如果您需要调整图像大小,并且可以在OpenGL中实施进一步的处理,那么这是一个值得的想法。