mesa3D源代码阅读笔记(1)--开始阅读之前

最近正在阅读mesa3D 7.6.1版本的源代码,代码量很大,感觉到十分困难。以后是否能够读下去,并且理解它的整个实现过程,不能确定。但既然阅读了,就应该积累起来,特写下本系列笔记。

1 编译mesa3D 7.6.1是很容易的事情,里边包含有VC8的sln解决方案,打开它直接编译即可完成;

2 如何调试编译出来的opengl32.dll文件呢?其实Windows系统在检索exe所需要的dll文件时,第一顺序是在当前exe文件所在的目录,所以只要保证编译出的opengl32.dll与调试用的exe文件生成在同一目录,就可以在调试时进入到对应opengl函数的实现代码环节;

3 阅读源代码时,我首先是找opengl32.dll中导出的函数它具体对应的代码函数在哪儿。严格地说这比较难找,因为在mesa里是使用函数分发表来处理的。在glapitemp.h头文件里以宏的方式定义了许多函数,该文件被两个.c文件包含,一个是dispatch.c,一个是glapi.c。前者结合dispatch.h包含glapitemp.h将对应宏展开成为对应opengl32.dll所导出的函数体定义;而后者则是定义成为一组对应opengl到处函数的相应NoOp*函数,并且将这些函数保存到__glapi_noop_table结构变量里。实际上在运行过程中,一直会有一个extern struct _glapi_table *_glapi_Dispatch;内部函数成员地址会被修正成为相应的mesa实现函数。调用opengl函数实际上是通过dispatch.c呼叫_glapi_Dispatch里所存储的对应函数,这一过程即分发,所以说dispatch table呗;

4 当然这里wgl*系列函数和部分gl*函数都比较好找,而glBegin、glEnd以及用在它们之间的glColor*、glVertex*系列函数的分发过程就比较复杂。到现在为止,虽然调试过好几遍mesa源代码,但是仍然晕头转向的。

5 mesa7.6.1源代码里部分文件写有一些说明,真的很宝贵,但遗憾的是实在太少;整个工程模块又存有许多模块,阅读量很大;在光栅渲染环节存在许多函数分发表,搞得晕头转向。

不知道阅读这样的源代码怎样去做比较好?

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值