2017-09-09 98 views
-1

我真的很困惑於OpenGL中的所有類型格式。我基本上想創建一個我可以寫整數的紋理,也可以從中讀取整數。我試過以下內容:如何在OpenGL中將整數寫入紋理緩衝區

glTexImage2D(GL_TEXTURE_2D, 0, GL_R32I, bufferRes.x, bufferRes.y, 0, GL_RED, GL_INT, NULL); 

這給了我一個「無效的操作」錯誤。如果我將GL_R32I更改爲GL_RED,我不會收到此錯誤。但是不是GL_R32I正確的格式?如果不是,這是爲了什麼?

另外,如果我想在着色器爲花車閱讀本的質感,我知道,在我使用的16位整數我做了另一種情況:

glTexImage2D(GL_TEXTURE_2D, 0, GL_R16_SNORM, width, height, 0, GL_RED, GL_SHORT, NULL) 

這是做正確的方法。但是沒有GL_R32_SNORM。我真的很困惑所有這些,因爲我記得GL_R16I工作,但GL_R32I不是。

+0

什麼是您的硬件?可能您的硬件不支持內部格式「GL_R32I」。 – Rabbid76

+0

@Rabbid它支持它,事實證明我對第7個參數的格式不正確,應該是GL_RED_INTEGER而不是GL_RED。如果對任何人有任何幫助,我都會添加一個答案。 – Zebrafish

回答

0

由於此問題已重新打開,並且由於我找到問題所在,所以我最好解釋一下錯誤。錯誤的是,在這條線:

glTexImage2D(GL_TEXTURE_2D, 0, GL_R32I, width, height, 0, GL_RED, GL_INT, NULL); 

GL_RED應該是GL_RED_INTEGER。我在Nicol Bolas的答案中發現了這個解決方案,當這個問題關閉時,它會鏈接到重複問題。

OpenGL 2 Texture Internal Formats GL_RGB8I, GL_RGB32UI, etc

雖然與GL_RGB32UI這個問題的交易,而不是GL_R32I在我的情況下,這個問題基本上是一樣的,丟失的_INTEGER後綴第七屆說法。

這是從OpenGL的維基,在重複的問題也與:

...對於整數像素類型,使用 浮點格式表示該像素將被認爲是歸一化的 整數。因此,它們將被解釋爲標準化的值 。

如果要將積分數據轉換爲積分圖像格式,則 必須將像素格式後綴爲「_INTEGER」。這表明客戶端像素數據是整數而不是浮點數。你應該只使用「_INTEGER」格式後綴與積分圖像 格式。

至於爲什麼格式GL_R32_SNORM不存在這個問題,而GL_R16_SNORM呢,有人告訴我,就不會有一點在讀的32位整數作爲標準化的單精度浮點數的精度損失會相當大。感謝Nicol和derhass幫助我。

相關問題