最近在Android平台上写NDK程序,使用OpenGL ES(注意:这里是OpenGL ES 1.0和1.1版本),发现程序在运行过程中出现如下错误:
通过log,在android的源码中的\frameworks\base\opengl\libs\EGL\目录下有Loader.cpp文件,通过这 个文件我们可以发现,我们的OpenGL的调用都是通过加载实现了OpenGL
ES的dll,然后在该dll中查找我们调用的接口,如果接口没有找到,EGL就会打印出log,如上所示。
Android实现的所有OpenGL ES的接口,在gl.h和glext.h中已经给出,但是真正有没有实现还是另外一回事。本人通过实践表明,下列的接口都是Android在OpenGL ES1.0和1.1版本中都没有实现的,分别是:
1. glGetFloatv
2. glTexEnvi
3. glIsEnabled
我目前只发现这三个,也会还会有更多。如果大家在为Android开发NDK程序使用了OpenGL ES
1.0或1.1版本的过程中,出现了上述错误,那么请注意你是否调用了上述3个接口中的任意一个(或许还有更多)。
这么看来,算是被Google忽悠了一把,这么大的bug,也不吭一声。顺便抱怨一下NDK开发调试不方便(2.2版本以下的Android NDK程序,毕竟2.2还是很新,还不是主流),而且NDK r4没有增量编译,只有全部构建,对于比较大的程序,比如我现在手上的这个,就需要花费比较长的时间进行重新编译。最后还是希望NDK开发能越来越方便、强大,以便更多的C/C++的程序员能投身其中。