3

OpenGL アプリケーションで使用できる色の数を知る必要があります。

私の状況: glReadPixels を使用して描画されたピクセルを読み戻そうとしていますが、色は色ではなく整数の意味を持ちます。そのため、どれだけの情報を表現できるかを知る必要があります。

glGetGL_RED_BITS、GL_GREEN_BITS、および GL_BLUE_BITS で使用するつもりでした。しかし、これらは非推奨です。少なくとも OpenGL 3 で利用可能な関数を使用してこれを達成するにはどうすればよいですか?

4

1 に答える 1

7

オーケー、探していたものが見つかりました。についての私のコメントglGetFramebufferAttachmentParameterivは正しかったので、参考文献を次に示します。

glGetFramebufferAttachmentParameteriv — バインドされたフレームバッファ オブジェクトの添付ファイルに関する情報を取得する

ここまでは順調ですね。

デフォルトのフレームバッファがターゲットにバインドされている場合、アタッチメントは、カラー バッファを識別する GL_FRONT_LEFT、GL_FRONT_RIGHT、GL_BACK_LEFT、または GL_BACK_RIGHT のいずれかである必要があります。

そうです、スクリーンバッファに使用できます! そして今、あなたが興味を持っている部分:

pname次のいずれかです。

  • GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
  • GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
  • GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
  • GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
  • GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE

params指定されたアタッチメントの対応する赤、緑、青、アルファ、深度、またはステンシル コンポーネントのビット数が含まれます。要求されたコンポーネントが添付ファイルに存在しない場合は、0 が返されます。

そして、ああ、targetそうかもしれませGL_FRAMEBUFFERん。

編集:あなたはそれをすべて要約するために例を要求したので...

glBindFramebuffer(GL_FRAMEBUFFER, 0);
GLint ret;

glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &ret);

if (ret == GL_NONE)
    exit(1); // something is really bad there or FRONT_LEFT isn't your default buffer. Check it!

glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &ret);

そして、ここでINVALID_ENUMSあなたが得ることができる可能性があります:

  • GL_INVALID_ENUM は、ターゲットが受け入れられたトークンの 1 つでない場合に生成されます。
  • pname が GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE の値に対して有効でない場合、GL_INVALID_ENUM が生成されます。
于 2013-02-28T13:49:43.993 に答える