Difference between revisions of "Glloader"
Gongminmin (Talk | contribs) (Created page with "glloader是KlayGE游戏引擎的一个子项目。它本质上是OpenGL扩展载入库,可以载入OpenGL 1.0-4.1,OpenGL ES 1.0-2.0,以及WGL、GLX等OpenGL扩...") |
Gongminmin (Talk | contribs) |
||
(17 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | [[glloader]]是[[KlayGE|KlayGE游戏引擎]]的一个子项目,从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都提供了一条初始化路径。如果一个扩展已经提升到核心中,那么在初始化这个扩展的时候,会先尝试从核心的版本中载入,失败的话才载入扩展的版本。 | glloader独有的一个功能是,对每一个扩展,glloader都提供了一条初始化路径。如果一个扩展已经提升到核心中,那么在初始化这个扩展的时候,会先尝试从核心的版本中载入,失败的话才载入扩展的版本。 | ||
Line 7: | Line 7: | ||
== 注意 == | == 注意 == | ||
不要把GLLoader放在包含非英文名的目录中,否则autogen.py有可能无法正常执行。 | 不要把GLLoader放在包含非英文名的目录中,否则autogen.py有可能无法正常执行。 | ||
+ | |||
+ | 当用Android NDK r6编译[[glloader]]的时候,NDK的一个[http://code.google.com/p/android/issues/detail?id=16627 bug]使得用了C++的静态库无法链接到没有使用C++的动态库上。所以如果你遇到了关于std::string的链接错误,请往那个动态库中添加一个.cpp文件,以绕开那个bug。 | ||
== 接口 == | == 接口 == | ||
Line 38: | Line 40: | ||
== 依赖 == | == 依赖 == | ||
需要Python 2.6以上来运行autogen.py。 | 需要Python 2.6以上来运行autogen.py。 | ||
+ | |||
+ | [[Category:渲染]] | ||
+ | [[Category:Glloader]] | ||
+ | [[Category:子项目]] | ||
+ | |||
+ | [[ru:Glloader/ru]] | ||
+ | [[en:Glloader/en]] |
Latest revision as of 11:10, 30 April 2012
glloader是KlayGE游戏引擎的一个子项目,从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。