Glloader

From KlayGE
Jump to: navigation, search

glloaderKlayGE游戏引擎的一个子项目,从2004年开始开发(详见glloader的发展历程)。它本质上是OpenGL扩展载入库,可以载入OpenGL 1.0-4.2,OpenGL ES 1.0-2.0,同时也支持WGL、GLX、EGL和其他GL/GLES扩展,只要编写xml脚本就能自动生成扩展载入代码。glloader有一个XML格式的数据库,包含了GL/GLES的所有入口函数、标示和类型定义。

glloader独有的一个功能是,对每一个扩展,glloader都提供了一条初始化路径。如果一个扩展已经提升到核心中,那么在初始化这个扩展的时候,会先尝试从核心的版本中载入,失败的话才载入扩展的版本。

设置完include和lib目录之后,你需要做的唯一事情就是把#include <glloader/glloader.h>添加到你的代码中。

注意

不要把GLLoader放在包含非英文名的目录中,否则autogen.py有可能无法正常执行。

当用Android NDK r6编译glloader的时候,NDK的一个bug使得用了C++的静态库无法链接到没有使用C++的动态库上。所以如果你遇到了关于std::string的链接错误,请往那个动态库中添加一个.cpp文件,以绕开那个bug。

接口

int glloader_is_supported(const char* name);

检测一个扩展是否支持。参数name为扩展的名字字符串。如果支持返回非0,否则返回0。

注意:可以使用GL_VERSION_x_y来检测是否支持x.y版本OpenGL核心。


void* glloader_get_gl_proc_address(const char* name);

载入一个OpenGL函数。参数name为要载入的函数名称。返回函数地址。

注意:如果试图载入一个不存在的函数,并不一定会返回NULL。


int glloader_num_features();

返回支持的扩展数量。


const char* glloader_get_feature_name(int index);

获取扩展的名字。index参数的取值范围是[0, glloader_num_features() - 1]。

代码自动生成

由于载入代码具有极大的重复性,所以glloader采用了代码自动生成技术。在xml目录下的xml脚本包含一个扩展定义的typedef、常量、函数和初始化路径。用户可以根据格式写出自己需要支持的扩展脚本,然后运行autogen.py,就会在src和include目录下生成相应的载入代码。

依赖

需要Python 2.6以上来运行autogen.py。