(转)如何在Windows下使用OpenGL 2.0的API(包括GLSL)

来源:互联网 发布:印度火星探测知乎 编辑:程序博客网 时间:2024/05/17 12:48
 
 

 

 

opengl版本太低

http://forum.ubuntu.com.cn/viewtopic.php?f=42&t=163346&view=previous

上面的文章是Ubuntu论坛的一个贴子,讲述了opengl、mesa、和显卡驱动的关系,不过我还是没有看明白(晕啊)

【摘录】OpenGL是一套国际标准,所谓国际标准,就是写在纸面上的东西,而不是实际可用的东西。不过各大厂商会遵照这堆纸编写他们的驱动程序中的OpenGL功能。即OpenGL是标准,驱动+ICD+OpenGL.dll是实现
Mesa3D是开源的OpenGL实现。
Mesa3D的核心功能是软加速的,即所有的运算都由CPU来执行,写屏使用Xlib,不干显卡加速的事。DRI是Mesa3D的一个组件,负责硬加速,在这里被称作直接渲染(Direct Rendering)。由于Mesa3D的当前的复杂结构,软加速实现的功能不能替代直接渲染中没有实现的功能。也就是说Mesa3D的核心和DRI各渲染各的。所以出现了Mesa3D称已经实现了OpenGL2.1了,但是DRI驱动还在OpenGL1.3/1.4的缘故。
每次Mesa3D发布新版本的时候,都会有release note,其中一个重要部分就是Driver Status,里面详细提到了Mesa3D各个驱动当前的OpenGL支持状态,一下是目前最新的Mesa3D-7.2的情况。
Driver Status

Driver Status
---------------------- ----------------------
DRI drivers varies with the driver
XMesa/GLX (on Xlib) implements OpenGL 2.1
OSMesa (off-screen) implements OpenGL 2.1
Windows/Win32 implements OpenGL 2.1
Glide (3dfx Voodoo1/2) implements OpenGL 1.3
SVGA unsupported
Wind River UGL unsupported
DJGPP unsupported
GGI unsupported
BeOS unsupported
Allegro unsupported
D3D unsupported

其中DRI表示的是varies with the driver,所以DRI组件中对各个显卡的支持情况各有不同,intel的,到7.2,是支持到OpenGL1.4

/////////////////////////////////////////////////////////////

如何在Windows下使用OpenGL 2.0的API(包括GLSL)

http://bbs.gameres.com/showthread.asp?threadid=109485

先简单的说我所知道的opengl在windows下的开发方式:

1、使用windows自带的opengl1.1+ glut(需要自己编译 )或者其他的glut增强版人freeglut、openglut

2、使用mesa

3、使用windows自带的opengl1.1+   glut + glew进行扩展

在windows下配置mesa实现的opengl有些注意事项:

首先,你要到www.mesa3d.org下载源程序包,一般要用到两个包mesaLib.zip和mesaGLUT.zip。值得一题的是,和许多开源项目一样,Mesa3D也只是提供了源代码,并没有提供直接可用的二进制文件,使用者需要重新编译源代码来的到可以使用的二进制文件。下载完成之后,把两个包放在同一个目录下面,直接选择“解压到当前目录...”来解压两个包,默认情况下,两个包被解压到了同一个文件夹下面(比如,Mesa-7.0.3)。然后,按照“/Mesa-7.0.3/windows/VC8”路径找到Visual Studio 2005的解决方案文件(mesa.sln)。打开它,发现这个解决方案中有好多工程(一般是4个,gdi、glu、mesa、osmesa),什么设置也不用修改(默认是Debug目标,而不是Release,千万不要修改),直接分别在右边的“解决方案资源管理器”中右键单击各个工程项,选择“生成”。等待所有的工程都生成成功之后你可以从“/Mesa-7.0.3/lib”这个路径下面得到3个DLL文件(opengl32.dll、glu32.dll、osmesa32.dll)和对应的库文件(*.lib)。同样在“/Mesa-7.0.3/windows/VC8/progs/glut”路径下面,你可找到GLUT的工程文件(glut.vcproj),依照同样的方法,生成GLUT工程。之后可以在“/Mesa-7.0.3/lib”这个路径下找到glut32.dll以及相应的库文件。

好了OpenGL 2.0的DLL和相应的库文件就全都得到了。编程的时候所需的所有头文件可以在“Mesa-7.0.3/include”这个路径下找到(或者你干脆就把这个目录设置成Visual Studio的include搜索目录)。

这里需要注意一点,由于编程时要对gl.h、glu.h等头文件进行#include进行引用,这些头文件会和Visual Studio中自带的gl.h、glu.h等头文件冲突,所以最好删除Visual Studio中的相应文件(建议对这些文件备份);同理,Visual Studio中的opengl32.lib文件也要删掉(建议备份)。

 

我自己添加的:

或者还有另外一种方法,在设置环境变量的时候,将mesa的include、lib、path添加到系统的include、lib、path的前面,参考我下面的

// mesa(opengl另外的一个实现).bat

@echo off

echo 设置Mesa(OpenGL的非官方实现)环境变量
echo 注意:
echo    -- 由于windows系统自带了1.1opengl的实现
echo    -- 在windows sdk的include目录下有gl.h和glu.h
echo    -- 以及system32目录下的opengl32.dll和glu32.dll
echo    -- 因此,需要将mesa的include、lib、path添加到系统path的前面,
echo    -- 否则的话,编译会出现错误

set MESA_DIR=D:/program/Mesa/Mesa-7.4.2

rem 已经将D:/program/Mesa/Mesa-7.4.2/bin加入到了用户的path环境变量中
rem windows搜索path路径时,先从用户path搜索,然后在搜索系统的path,
rem 因此,mesa的dll总是在windows的opengl32.dll和glu32.dll之前搜索到
rem set path=D:/program/Mesa/Mesa-7.4.2/bin;%path%

set include=%MESA_DIR%/include;%include%

rem 不包含debug版本,已经编译了debug版本,
rem 不过我看它的demo没有链接debug版本的lib和dll

set lib=%MESA_DIR%/lib;%lib%

根据上面引用的帖子的内容,很多人认为mesa在windows下比d3d慢,有几种说法:

1、在windows下的opengl开发就使用windows自带的1.1版本的opengl实现,如果要使用opengl2.0、2.1或者更高版本的opengl,则可以用扩展技术,但是这需要显卡驱动的支持,并且不能跨平台

2、使用glew。这个库对不同的opengl扩展进行了统一的封装

3、直接使用windows的d3d或者managed d3d(.net版本的d3d)

4、mesa在linux上更加适合,且性能不比d3d在windows上的性能差,也就是说mesa不适合于windows

原创粉丝点击