Java 使用OpenGL调整图像大小

Java 使用OpenGL调整图像大小,java,c++,opengl,resize,rendering,Java,C++,Opengl,Resize,Rendering,我想使用OpenGL调整图像的大小。我更喜欢java,C++也可以。< /P> 我对整件事真的很陌生,所以在我看来,这是一个用文字表达的过程: 将图像作为纹理加载到OGL中 设置一些关于状态和筛选的内容 将不同大小的纹理绘制到另一个纹理上 将纹理数据放入数组或其他东西中 您认为使用OpenGL和GPU是否比使用基于CPU的BLIT库更快 谢谢 视情况而定,如果图像很大,使用OpenGL可能会更快。但是,如果它只是做调整大小的过程,而在GPU端没有更多的处理,那么它就不值得了,因为它很可能会比CP

我想使用OpenGL调整图像的大小。我更喜欢java,C++也可以。< /P> 我对整件事真的很陌生,所以在我看来,这是一个用文字表达的过程:

  • 将图像作为纹理加载到OGL中
  • 设置一些关于状态和筛选的内容
  • 将不同大小的纹理绘制到另一个纹理上
  • 将纹理数据放入数组或其他东西中
  • 您认为使用OpenGL和GPU是否比使用基于CPU的BLIT库更快


    谢谢

    视情况而定,如果图像很大,使用OpenGL可能会更快。但是,如果它只是做调整大小的过程,而在GPU端没有更多的处理,那么它就不值得了,因为它很可能会比CPU慢


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

    您可以简单地使用硬件blit功能:
    glBlitFramebuffer
    。其论点直截了当,但需要仔细准备您的来源和目的地FBO:

    • 确保FBO完整(
      glCheckFramebufferStatus
    • 独立设置读取FBO目标和写入FBO目标(
      glBindFramebuffer
    • 设置绘制缓冲区和读取缓冲区(
      glDraw/ReadBuffers
    • 调用
      glBlitFramebuffer
      ,在参数中设置GL\u线性过滤器

    我打赌它在GPU上会快得多,尤其是对于大图像。

    我认为卡车装载速度会更快。如果您经常这样做,那么瓶颈将是GPURAM链接。因此,如果你需要几种不同格式的相同图像,那么在VRAM中加载一次,然后一次生成所有图像,这就是我的想法。然而,我仍然想知道如何做到这一点…我真的怀疑它会快得多,原因与上面的评论相同——在GPU和RAM之间传输数据通常很慢。但愿意被证明是错误的:DIt很慢,除非你在屏幕外的缓冲区中进行。然后要注意的是,2.0之前的OpenGL实现要求纹理的尺寸为2的幂(即1、2、4、8、16等)