Difference between revisions of "Glloader"

From KlayGE
Jump to: navigation, search
m (Ru link)
 
(8 intermediate revisions by one user not shown)
Line 1: Line 1:
glloader是[[KlayGE|KlayGE游戏引擎]]的一个子项目,从2004年开始开发(详见[[glloader的发展历程]])。它本质上是OpenGL扩展载入库,可以载入OpenGL 1.0-4.1,OpenGL ES 1.0-2.0,以及WGL、GLX等OpenGL扩展,只要编写xml脚本就能自动生成扩展载入代码。
+
[[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]]
 
[[ru:Glloader/ru]]
 
[[en:Glloader/en]]
 
[[en:Glloader/en]]

Latest revision as of 12:10, 30 April 2012

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。