最近在Android平臺(tái)上寫NDK程序,使用OpenGL ES(注意:這里是OpenGL ES 1.0和1.1版本),發(fā)現(xiàn)程序在運(yùn)行過(guò)程中出現(xiàn)如下錯(cuò)誤:

通過(guò)log,在android的源碼中的\frameworks\base\opengl\libs\EGL\目錄下有Loader.cpp文件,通過(guò)這 個(gè)文件我們可以發(fā)現(xiàn),我們的OpenGL的調(diào)用都是通過(guò)加載實(shí)現(xiàn)了OpenGL
ES的dll,然后在該dll中查找我們調(diào)用的接口,如果接口沒(méi)有找到,EGL就會(huì)打印出log,如上所示。
Android實(shí)現(xiàn)的所有OpenGL ES的接口,在gl.h和glext.h中已經(jīng)給出,但是真正有沒(méi)有實(shí)現(xiàn)還是另外一回事。本人通過(guò)實(shí)踐表明,下列的接口都是Android在OpenGL ES1.0和1.1版本中都沒(méi)有實(shí)現(xiàn)的,分別是:
1. glGetFloatv
2. glTexEnvi
3. glIsEnabled
我目前只發(fā)現(xiàn)這三個(gè),也會(huì)還會(huì)有更多。如果大家在為Android開發(fā)NDK程序使用了OpenGL ES
1.0或1.1版本的過(guò)程中,出現(xiàn)了上述錯(cuò)誤,那么請(qǐng)注意你是否調(diào)用了上述3個(gè)接口中的任意一個(gè)(或許還有更多)。
這么看來(lái),算是被Google忽悠了一把,這么大的bug,也不吭一聲。順便抱怨一下NDK開發(fā)調(diào)試不方便(2.2版本以下的Android NDK程序,畢竟2.2還是很新,還不是主流),而且NDK r4沒(méi)有增量編譯,只有全部構(gòu)建,對(duì)于比較大的程序,比如我現(xiàn)在手上的這個(gè),就需要花費(fèi)比較長(zhǎng)的時(shí)間進(jìn)行重新編譯。最后還是希望NDK開發(fā)能越來(lái)越方便、強(qiáng)大,以便更多的C/C++的程序員能投身其中。