我们先从main开始,这应该是一个正确的思路。在这里面我个人感觉从debug开始。试一下。打开debug.h文件,最上面的注释是一段版权说明。略过。接下来我们看到一个宏判断。并且下面那几个函数都是在别的地方定义的。所以我有种找错地方的感觉。研究一下那几个函数是在哪定义的。在config.h中我们看到这样#define _HAVE_FULL_GL 1,这说明config会比debug运行更早。所以改变目标。直达config.h。最上面定义了一堆最大缓存的值。这个很有意思。好像我们对opengl的所有配置都可以从这里来实现。等水平深了这个东西需要好好研究一下。看完之后回到我们的debug。继续寻找那几个函数在哪声明的呢?亲。我很用力的去找了。但是找不到。只能接着继续往下看了。我们看到这有五个函数声明

extern void _mesa_print_tri_caps( const char *name, GLuint flags );
extern void _mesa_print_enable_flags( const char *msg, GLuint flags );
extern void _mesa_print_state( const char *msg, GLuint state );
extern void _mesa_print_info( void );
extern void _mesa_init_debug( GLcontext *ctx );

首先应该关注的肯定是_mesa_init_debug,这个函数应该会完成一些初始化设置工作。而print_info应该是打印一些提醒信息。

到这里我才明白过来。这个类应该就是debug过程中输出的那一大堆东西。例如什么状态信息啊。提示信息啊。标志信息啊。然后我们看函数定义。我们看到包含了很多头文件。这些头文件应该都出现过。研究下。发现全是main文件夹里面的。这样爽了。最起码不需要研究外面的东西。glheader应该是包含了所有的gl头文件。imports应该是引用的东西。context肯定是设备相关的东西。depth莫非是深度信息。算了。不说了。下面的不懂了。macros是宏指令,

往下看,我们看到了很多熟悉的函数_mesa_DepthMask看着熟悉不?如果把前面的mesa改成gl呢。。哦,soga,看来我们找对地方了。额。突然发现是误打误撞,这些东西在depth。c里面,有些时候还真是需要一些好人品。好吧。我们硬着头皮把debug.c看完。看到这个没?

const char *_mesa_prim_name[GL_POLYGON+4] = {
"GL_POINTS",
"GL_LINES",
"GL_LINE_LOOP",
"GL_LINE_STRIP",
"GL_TRIANGLES",
"GL_TRIANGLE_STRIP",
"GL_TRIANGLE_FAN",
"GL_QUADS",
"GL_QUAD_STRIP",
"GL_POLYGON",
"outside begin/end",
"inside unkown primitive",
"unknown state"
};

我感觉像是捡到宝了。这里面包含了opengl绘制时候的图元。当然还有一些处理信息。我潜意识觉得这个东西很有用。所以我记住了这个名字_mesa_prim_name。在c语言中最折磨人的就是包含的很多头文件。然后各种定义都可以在这里引用。我快疯了。

看_mesa_init_debug吧。额。写不下去了。我还是先看吧。看懂了再说。