2017-09-09 4 views
-1

OpenGLのすべての型フォーマットと本当に混同しています。基本的には、整数を書くことができるテクスチャを作成し、整数を読み込むことができます。私は以下を試しました:OpenGLのテクスチャバッファに整数を書き込む方法

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

これは私に "INVALID OPERATION"エラーをもたらします。 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ではなくGL_RED_INTEGERになっているはずです。私はそれが誰にも助けになるならば答えを加えました。 – Zebrafish

答えて

0

この質問が再開されたため、問題の原因がわかったので、エラーを説明することもできます。

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

GL_REDGL_RED_INTEGER次のようになります。エラーは、この行にということです。私は、この解決法が、ニコルス・ボラスの答えで、これが閉じられたときの重複した質問へのリンクで見つけました。私の場合のようにGL_RGB32UIなくGL_R32Iとその質問のお得な情報ものの

OpenGL 2 Texture Internal Formats GL_RGB8I, GL_RGB32UI, etc

、問題は第7引数に、基本的に不足している_INTEGER接尾同じでした。

これも重複問題にリンクOpenGLのウィキ、からのものである: 浮動小数点形式を使用する画素は 正規であると仮定されることを意味し、整数ピクセル・タイプの場合...

整数。したがって、それらは正規化された の値として解釈されます。

積分データを積分画像形式に変換する場合は、 にピクセル形式の末尾に "_INTEGER"を付ける必要があります。これは、 クライアント側のピクセルデータが浮動小数点ではなく整数であることを示しています。 は、整数画像 形式の「_INTEGER」形式の接尾辞のみを使用する必要があります。フォーマットGL_R32_SNORMが存在しない理由GL_R16_SNORMを行いながら、私は精度の損失は、同じように正規化された単精度浮動小数点数として32ビット整数を読み取るにはポイントが存在しないであろうと言われたの問題としては

かなり大きいです。私を助けてくれたNicolとderhassに感謝します。

関連する問題