2011-02-24 181 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中實施進一步的處理,那麼這是一個值得的想法。