Android中的EGL/GLES库不是在运行时直接链接的,而是在第一次使用时根据配置选择性载入的。更具体的,libEGL.so文件包含了一个“载入器”,它会尝试载入硬件图形库或是软件图形库(libagl)。载入器的源代码位于:frameworks/base/openl/libs/EGL/Loader.cpp。载入什么库取决于配置文件/system/lib/egl/egl.cfg,egl.cfg有如下形式:
0 1 <name>
0 0 android
其中第一个数字为display number,该项必为0因为EGL/ELES库不支持其它的。
第二个数字如果为0代表硬件库,0代表软件图形库。如果有硬件图形库,则必须放在软件图形库对应行前。
第三个域是共享库后缀,库的全称为libEGL_<name>.so,libGLESv1_C_<name>.so和libGLESv2_<name>.so,这些库必须被放在/system/lib/egl下面。android为系统软件图形库保留。
举例来说,在emulator项目中,egl.cfg的内容为:
0 1 emulation
0 0 android
第一行代表硬件图形库,第二行代表软件图形库。