为什么 org.lwjgl.opengl.GL43 class 没有 glDrawElements 方法?

Why org.lwjgl.opengl.GL43 class has no glDrawElements method?

我的问题理论性多于实际性。我想了解 LWJGL 中 OpenGL API 设计背后的想法。

例如在 Android OpenGL API 之后的每个 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.java, http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/opengl/GLES30.java, http://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(); ?

这是他们用 LWJGL 做出的选择。自 OpenGL 1.1 以来就存在索引几何体的提交,它们养成了在以后的修订版中公开 添加 的内容的习惯,而不是给你一组累积的入口点,这与像 GLEW 这样的扩展加载器。

它不必像这样(显然,Google 走上了一条不同的道路,其他人也是如此,与编程语言无关)但最终,这并不重要。重要的是入口点向您公开。有时很高兴看到(并知道)特定 API 在哪个时间点被提升为核心,但像这样划分内容对开发人员来说可能非常麻烦。

如果它是用您选择的语言以另一种方式定义的,并且假设这种语言支持与本机代码的接口,那么您最终调用的函数仍然是相同的,因为在引擎盖下,相应的函数指针是用某种形式的 GetProcAddress 检索的(取决于平台,YMMV),并且会引用 ICD 定义的相同 C 函数(除非你 link 直接针对 OpenGL 实现,在这种情况下当 link 静态时,或者在程序加载期间自动处理时,您解析函数名称是不必要的。