亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 JOGL 中靜態使用 GL 對象?

如何在 JOGL 中靜態使用 GL 對象?

嗶嗶one 2023-03-02 15:53:47
我正在嘗試使用 JOGL 制作一個簡單的游戲引擎。但是我不想使用 EventListener 類,而是像在 LWJGL 中那樣創建一個靜態對象。不,我不使用 LWJGL,因為我遇到了很多麻煩。這是我的事件監聽器:class EventListener implements GLEventListener {    public static GL2 gl;    @Override    public void display(GLAutoDrawable drawable) {        gl = drawable.getGL().getGL2();        gl.glClear(GL.GL_COLOR_BUFFER_BIT);        gl.glClearColor(0, 1, 0, 1);    }    @Override    public void dispose(GLAutoDrawable drawable) {    }    @Override    public void init(GLAutoDrawable drawable) {    }    @Override    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {    }}在主類中,它清除了一個綠屏,因此它可以完美地工作。但是,如果我嘗試在其他類中使用“gl”對象,它什么也不做。提前致謝!
查看完整描述

1 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

實際上,這是個壞主意。您不能將 GL 實例存儲到字段中,因為它很容易出錯,原因有以下幾個:

  • GL 實例隨時可能失效

  • 您可以在 OpenGL 上下文不是當前的線程上訪問它

  • 您可以在 OpenGL 上下文已成為當前線程的線程上訪問它,但有時它不是當前的(在釋放上下文之后)

這就是您應該使用 GLEventListener 的原因。否則,您可以通過調用GLContext.getCurrentGL()獲取有效的 GL 實例,但如果沒有當前上下文,它會拋出 GLException。您也可以使用GLAutoDrawable.invoke(),它允許在正確的時間在正確的線程上運行您的代碼,但 GLEventListener 更有用,因為您可以在初始化時執行一些代碼。

順便說一下,JOGL 的具體問題應該在官方 JogAmp 論壇上而不是在這里提問。StackOverflow 是解決一般 OpenGL 問題的好地方,但大多數 JogAmp 貢獻者從來沒有來過這里。是的,StackOverflow 不是靈丹妙藥。

PS:如果你想了解JOGL的設計選擇,尤其是實例設計,我建議你閱讀這篇文章評論。


查看完整回答
反對 回復 2023-03-02
  • 1 回答
  • 0 關注
  • 81 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號