我需要知道我可以在我的OpenGL應用程序中使用多少種不同的顏色。如何找出我的OpenGL可以在它的顏色緩衝區上表示多少種顏色?
我的情況:我將使用glReadPixels回讀繪製的像素,但顏色將具有整數含義而不是顏色。所以我需要知道我可以代表多少信息。
我打算使用帶有GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS的glGet
。但是這些已被棄用。我如何使用至少在OpenGL 3中可用的函數來實現這一點?
我需要知道我可以在我的OpenGL應用程序中使用多少種不同的顏色。如何找出我的OpenGL可以在它的顏色緩衝區上表示多少種顏色?
我的情況:我將使用glReadPixels回讀繪製的像素,但顏色將具有整數含義而不是顏色。所以我需要知道我可以代表多少信息。
我打算使用帶有GL_RED_BITS,GL_GREEN_BITS和GL_BLUE_BITS的glGet
。但是這些已被棄用。我如何使用至少在OpenGL 3中可用的函數來實現這一點?
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。
左右?我只有後端和前端緩衝區,我猜 – 2013-02-28 14:05:31
默認前端緩衝區是左邊的,IIRC :)即沒有「中間」緩衝區。更清晰?或考慮立體使用。這似乎是一個很好的新問題。 – 2013-02-28 14:07:32
你可以舉一個例子嗎?無論我嘗試使用哪種組合,我都會收到INVALID_ENUM,=/ – 2013-02-28 14:13:55
'glGetFramebufferAttachmentParameteriv'如何用null(即屏幕)綁定?我不確定,所以發表評論。 'pname'接受'FRAMEBUFFER_ATTACHMENT_RED_SIZE'等。 – 2013-02-28 13:36:52
@BartekBanachewicz:這應該不只是一個評論的答案。 – 2013-02-28 13:39:39
正如我所說,我不確定,而且我不想發佈我不確定的信息。然而,我正在挖掘上述功能文檔,如果我確認它實際上按預期工作,我會發布它。 – 2013-02-28 13:45:00