2017-06-05 80 views
1

我的問題比實踐更具理論性。我想了解LWJGL中OpenGL API設計背後的想法。爲什麼org.lwjgl.opengl.GL43類沒有glDrawElements方法?

例如,在Android的API的OpenGL每個以下的OpenGL API版本只是擴展了以前,我的意思是: android.opengl.GLES30延伸android.opengl.GLES20 android.opengl.GLES31延伸android.opengl.GLES30 等

這裏你可以看到源代碼:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/opengl/GLES20.javahttp://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/opengl/GLES30.javahttp://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/opengl/GLES31.java

爲什麼LWJGL沒有這樣的概念呢?當我必須使用GL11.glDrawElements()時,這種設計背後的原因是什麼?而不是GL43.glDrawElements(); ?

+0

@thokra它很好地回答了這個問題,爲什麼不讓它成爲一個無聊? – eldo

+0

@eldo:完成。我重新修改了一下,並提供了一些額外的信息。 – thokra

回答

1

這是他們用LWJGL做出的選擇。自從OpenGL 1.1以來,索引幾何的提交就已經存在,並且他們習慣於在後面的修訂版中加入添加,而不是像擴展加載器(如GLEW)那樣爲您提供一組累積入口點。它不一定非要這樣(顯然,谷歌走了另一條路,其他人也是如此,獨立於編程語言),但最終,這並不重要。重要的是,切入點是暴露給你的。有時候很高興看到(並知道)在哪個時間點將特定的API提升爲核心,但對於開發人員而言,這樣做可能會非常麻煩。

如果以您選擇的語言以另一種方式定義它,並且假定該語言支持與本機代碼進行交互,那麼您最終調用的函數仍然是相同的,因爲在引擎蓋下,相應的函數指針將以某種形式GetProcAddress(取決於平臺YMMV)進行檢索,並且會引用由ICD定義的相同C函數(除非您直接與OpenGL實現鏈接,在這種情況下,您可能不需要解析函數名稱靜態鏈接時,或在程序加載時自動處理)。

+0

這是他們用LWJGL做出的選擇。 - 夠好了。 –

相關問題