2017-06-05 98 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做出的选择。 - 够好了。 –

相关问题