2013-02-28 54 views
2

我需要知道我可以在我的OpenGL應用程序中使用多少種不同的顏色。如何找出我的OpenGL可以在它的顏色緩衝區上表示多少種顏色?

我的情況:我將使用glReadPixels回讀繪製的像素,但顏色將具有整數含義而不是顏色。所以我需要知道我可以代表多少信息。

我打算使用帶有GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS的glGet。但是這些已被棄用。我如何使用至少在OpenGL 3中可用的函數來實現這一點?

+3

'glGetFramebufferAttachmentParameteriv'如何用null(即屏幕)綁定?我不確定,所以發表評論。 'pname'接受'FRAMEBUFFER_ATTACHMENT_RED_SIZE'等。 – 2013-02-28 13:36:52

+0

@BartekBanachewicz:這應該不只是一個評論的答案。 – 2013-02-28 13:39:39

+0

正如我所說,我不確定,而且我不想發佈我不確定的信息。然而,我正在挖掘上述功能文檔,如果我確認它實際上按預期工作,我會發布它。 – 2013-02-28 13:45:00

回答

6

Okey,我找到了我在找的東西。我的評論大約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將包含指定附件的相應紅色,綠色,藍色,alpha,深度或模板組件中的位數 。如果 請求的組件不在附件中,則返回零。

而哦,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沒有一個被接受的 令牌。
  • 如果pname對於GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE的 值無效,則會生成GL_INVALID_ENUM。
+0

左右?我只有後端和前端緩衝區,我猜 – 2013-02-28 14:05:31

+1

默認前端緩衝區是左邊的,IIRC :)即沒有「中間」緩衝區。更清晰?或考慮立體使用。這似乎是一個很好的新問題。 – 2013-02-28 14:07:32

+0

你可以舉一個例子嗎?無論我嘗試使用哪種組合,我都會收到INVALID_ENUM,=/ – 2013-02-28 14:13:55

相關問題