2014-01-13 69 views
0

爲了我的目的,我想清除我的畫布的繪圖表面,並抓取當前的對象,將其保存到管理包裝器中,然後使用它一步後,從畫布的display()方法(依次調用display(GLAutoDrawable drawable)方法)。看起來,從display()方法返回後,會發生導致GL對象失效的情況,就像我想通過調用glGenBuffers(1, buffer)來獲得可用的textureID一樣 - 我接收到0 - 不是有效的紋理ID來加載紋理。JOGL在顯示之外渲染(GLAutoDrawable可繪製)

有沒有辦法讓GL對象在顯示方法之外工作? (gl.getContext().makeCurrent()不會改變任何東西...)

編輯:經過修改後,似乎對glGenTextures的調用實際上什麼都沒有 - 當我在顯示方法內創建一個紋理,然後從調用外調用它以後顯示,我得到相同的紋理ID在緩衝區之前 - 所以調用不會更改緩衝區內的值 - 也glGetError返回0 ...

編輯2:Java: openGL: JOGL: What happens behind the scenes when I call the display() method?包含該問題,但沒有答案怎麼做。看到一步一步的做法可能會很有趣,如果讓代碼在某處存在一次,可能不需要修改它...

回答

0

反而使用GLAutoDrawable.invoke(),它比嘗試獲取更安全GLContext存儲在GLAutoDrawable中並在其上調用makeCurrent()。無論如何,你正在試圖挫敗GLEventListener的主要目的,它既無用又危險。最後,獲得關於JOGL建議的最佳地點是官方JogAmp論壇,因爲我們無法在任何地方: http://forum.jogamp.org