OpenGL学习随笔(六)

在上次想往glDrawPixel中传入GL_BGR失败之后,就想找个机会把Mesa环境搭起来,以便后续学习。Mesa是一个OpenGL的跨平台开源实现,最新Mesa 7.x支持OpenGL 2.1标准。

按照readme一步一步很容易就可以编译出windows版本的mesa。把之前编译不过的程序和mesa一起编译链接,成功!运行,结果也正确了。本以为事情就这样结束了,可是控制台上打印输出的OpenGL版本信息仍然是version 1.4.0,制造商仍然是Intel(这也是之前我以为windows的OpenGL是由Intel提供的原因)。莫非Mesa没起作用?检查了编译链接所使用的头文件和链接库都是对的,那就只剩下动态库了,把Mesa的库拷贝到可执行文件同一目录,再次执行,信息变成了version 2.1 Mesa 7.2。执行时也明显感觉到速度比之前偏慢(Mesa在windows上是基本使用软件渲染)。

这一来说明一个问题。windows提供的头文件是OpenGL 1.1的,但各显卡驱动厂商却提供了高于这个版本的OpenGL驱动,我的x60是Intel集成显卡,所以制造商是Intel,提供的版本是1.4。而我在另一台式机上执行程序,结果显示的是version 2.1,制造商是Ati。但似乎受制于操作系统这个入口,导致高于1.1标准的OpenGL API都不能正常的在windows上使用并传递给硬件进行加速。难道在Windows上都没有办法使用高于1.1版本的硬件特性吗?那些游戏厂商(比如Quake3,Quake3是在OpenGL 1.2之后发布的)是怎么解决这个问题的呢?。目前我还没找到满意的答案。

但GL_BGR是个特例,使用其接口glDrawPixel是1.1标准之内的,只是这个宏没有定义罢了,用Mesa的头文件使这个宏被定义并编译通过,在运行时windows一定是将该参数透传给了Intel OpenGL驱动程序,使得该功能在1.1的框架下也执行成功了。而像glWindowPos*这些1.1之上的函数虽然用Mesa头文件也可以编译通过,但一旦执行就会报错,除非使用Mesa的OpenGL32.dll。

另,关于Windows下的OpenGL驱动模型,历史上有MCD(Windows NT曾使用)和ICD两种。Windows XP和Vista都使用ICD,各显卡厂商也都提供了相应的驱动,如Intel 945GM集成芯片组提供的驱动文件是iglicd32.dll。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值