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

时间:2017-06-05 09:06:53

标签: opengl lwjgl

我的问题比理论更具理论性。我想了解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.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(); ?

1 个答案:

答案 0 :(得分:1)

这是他们用LWJGL做出的选择。从OpenGL 1.1开始提交索引几何已经存在并且它们习惯于在以后的版本中暴露添加的内容,而不是给你一组累积的入口点,就像扩展加载器一样GLEW。

它不一定是这样的(显然,谷歌走的是另一条道路,其他道路也是如此,独立于编程语言),但最终,它并不重要。重要的是入口点是暴露给你的。有时很高兴看到(并且知道)特定API在哪个时间点被提升为核心,但是对于开发人员而言,将这样的内容划分起来可能非常麻烦。

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