簡體   English   中英

從GLKView / GLKit獲取默認幀緩沖區ID

[英]Getting default frame buffer id from GLKView/GLKit

我在我的IOS OpenGL ES 2.0項目中使用GLkit / GLKView來管理我的應用程序的默認FBO /生命周期。

在桌面OpenGL中為了綁定默認FBO(前緩沖區),我可以調用glBindFrameBuffer(GL_FRAMEBUFFER,0),但在IOS應用程序中不是這種情況,因為您必須自己創建默認FBO並且它將具有唯一ID;

問題是GLKit / GLKView編碼風格迫使我使用GLKView的“bindDrawable”函數激活默認FBO,這使得我的跨平台渲染系統的設計有點難看(必須在我的c ++引擎類和橋中將GLKView指針存儲為void *每次我想執行默認的FBO綁定時都拋出它)

有沒有辦法獲得GLKit / GLKView創建的默認FBO ID,以便我可以存儲並使用它來綁定我的代碼中的任何位置的默認幀緩沖區?

在最壞的情況下,我可以恢復自己創建默認的FBO並消除GLKit / GLKView,但它是一個很好的框架,我想繼續使用它。

抱歉我的英文不好,並提前感謝您的回復。

也許您可以在bindDrawable調用之后獲取“當前”幀緩沖區ID,方法是:

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);

給出的答案肯定是正確的解決方案,但是它沒有解決您對嵌入式系統的標准openGL和openGL之間的概念差異的理解中的錯誤。 // - - - - - - - - - - - - - - - - - - - - - - - - 一世我覺得有必要在這里指出,對glBindFramebuffer(GL_FRAMEBUFFER,0)的調用不會將渲染返回到主幀緩沖區,盡管對於運行Windows,Unix(Mac)或Linux的機器來說似乎是這樣。 台式機和筆記本電腦沒有主要默認系統幀緩沖的概念。 這個想法始於手持設備。 當您使用零作為參數進行openGL綁定調用時,您正在做的是將此函數設置為NULL。 這是你禁用這個功能的方法。 與glBindTexture(GL_TEXTURE_2D,0)相同; 在某些手持設備上,當您將幀緩沖區設置為NULL而不激活另一個幀緩沖區時,驅動程序可能會自動激活主系統幀緩沖區。 這將是制造商做出的選擇,而不是您應該依賴的東西,這不是openGL ES規范的一部分。 對於台式機和筆記本電腦,這是絕對必要的,因為需要禁用幀緩沖區才能恢復正常的openGL渲染。 但要記住! 這不是返回任何主幀緩沖區,而是關閉激活的幀緩沖區。

到默認的幀緩沖結合在GLKit的正確方法是調用bindDrawable方法上GLKview

[self bindDrawable][myglkview bindDrawable]取決於上下文。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM