使用 OpenGL 调整图像大小
Posted
技术标签:
【中文标题】使用 OpenGL 调整图像大小【英文标题】:Resizing an image using OpenGL 【发布时间】:2011-02-24 08:44:24 【问题描述】:我想使用 OpenGL 调整图像的大小。我更喜欢 Java,但 C++ 也可以。
我对整个事情真的很陌生,所以这是我所看到的文字过程:
-
将图像作为纹理加载到 OGL 中
设置一些关于状态和过滤的东西
将不同大小的纹理绘制到另一个纹理上
将纹理数据放入数组或其他东西中
您认为使用 OpenGL 和 GPU 是否比使用基于 CPU 的 BLIT 库更快?
谢谢!
【问题讨论】:
我认为它会更快。如果你经常这样做,瓶颈将是 GPURAM 链接。因此,如果您需要几种不同格式的相同图像,则只需将其加载到 VRAM 中一次,然后一次性生成所有图像即可。 我就是这么想的。但是,我仍然想知道如何做到这一点...... 我真的怀疑它会更快,原因与上面的评论相同 - 在 GPU 和 RAM 之间传输内容通常很慢。但愿意被证明是错误的:D 这很慢,除非您在屏幕外缓冲区中执行此操作。然后它超级快 请注意 OpenGL 2.0 之前的实现要求纹理的尺寸是 2 的幂(即 1、2、4、8、16,...) 【参考方案1】:您可以简单地使用硬件 blit 功能,而不是将四边形渲染到目标 FBO:glBlitFramebuffer
。它的论点直截了当,但需要仔细准备您的源和目标 FBO:
glCheckFramebufferStatus
)
独立设置读取 FBO 目标和写入 FBO 目标 (glBindFramebuffer
)
设置绘制缓冲区和读取缓冲区 (glDraw/ReadBuffers
)
调用glBlitFramebuffer
,在参数中设置GL_LINEAR过滤器
我敢打赌它在 GPU 上会快得多,尤其是对于大图像。
【讨论】:
【参考方案2】:取决于,如果图像很大,使用 OpenGL 可能会更快。但是,如果它只是进行调整大小的过程,而不是在 GPU 端进行更多处理,那么它是不值得的,因为它很可能会比 CPU 慢。
但是如果你需要调整图像的大小,并且可以在OpenGL中实现进一步的处理,那么是一个值得的想法。
【讨论】:
以上是关于使用 OpenGL 调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章