OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理、科学计算等高端应用领域的标准图形库。
Windows下常用的OpenGL库有两种,MS实现的和SGI实现的,MS-OpenGL调用会自动检测是否存在显示卡制造商提供的ICD(Installable Client DeviceDriver)驱动程序,有则调用ICD中的例程,否则使用CPU进行计算,所以能利用显示卡的OpenGL加速能力。对开发者来说使用方法并没有区别,只是有ICD驱动时更快些。SGI的版本是纯软件实现,不能利用硬件加速并且SGI已经在1999年宣布停止支持,但这套图形库便于调试程序,仍有不少开发者使用。
在Windows平台上,OpenGL驱动可能有三种模式:纯软件、MCD和ICD:
纯软件模式:微软提供一个OpenGL的软件实现,所有渲染操作均由CPU完成,速度很慢。如果安装系统时使用Windows自带的显卡驱动程序,那么OpenGL程序就会运行在软件模式下。而且由于微软有自己的Direct3D,所以对OpenGL的支持很消极,它的OpenGL纯软件实现只支持OpenGL1.1,而目前OpenGL的最新版本为 1.4
MCD(Mini Client Driver):MCD是早期微软在Windows NT上支持OpenGL时,为了简化驱动开发时使用的一个模型。在这个模型中,OpenGL渲染管线的变换、光照部分仍然由软件实现,而光栅化部分则由硬件厂商实现,因此只要硬件支持,MCD可以硬件加速光栅化部分。MCD虽然可以简化驱动开发,但是功能限制太大,现在市面上的3D加速卡均支持硬件变换和光照,MCD却不能利用这一特性,看上去MCD已经没有存在的价值
ICD(Installable Client Driver):ICD是一个完整的OpenGL驱动模型,比MCD复杂得多。硬件厂商要实现完整的OpenGL渲染管线,如变换、光照、光栅化等,因此只要硬件支持,ICD可以硬件加速整个OpenGL渲染管线。我们通常说的OpenGL硬件加速就是指的通过ICD模型获得的硬件加速,而现在硬件厂商提供的OpenGL驱动程序也都是依照ICD模型开发的。主要硬件厂商的ICD已经可以支持OpenGL的最新版1.4
Windows怎么实现OpenGL硬件加速呢?OpenGL32.dll是微软的OpenGL 1.1纯软件实现,我们的程序都要动态链接到这个dll。如果安装3D芯片厂商的驱动程序,会将一个不同名字的dll放到Windows系统目录下,比如在Windows 2000下安装nVIDIA GeForce2 MX的驱动程序,会在系统目录下放一个nvoglnt.dll(这就是nVIDIA的OpenGL驱动),并在注册表中登记nvoglnt.dll,让 Windows知道硬件加速OpenGL驱动的名字,以后运行OpenGL程序,OpenGL32.dll就会把OpenGL调用直接转到 nvoglnt.dll。
Windows平台上,一个OpenGL程序是否使用硬件加速由三个因素决定,这三个因素缺一不可,否则程序都会运行于纯软件模式:
是否有一块3D加速卡
是否安装了显卡厂商提供的最新的驱动程序,Windows自带的显卡驱动程序并不会提供OpenGL硬件加速能力
指定的像素格式是否被显卡硬件所支持
判断一种像素格式是否被显卡硬件所支持,可以用函数DescribePixelFormat取得该像素格式的数据,然后看结构体PIXELFORMATDESCRIPTOR中的dwFlags的值,如果
PFD_GENERIC_FORMAT被置1,并且PFD_GENERIC_ACCELERATED被置0,即
(pfd.dwFlags & PFD_GENERIC_FORMAT) &&
!(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明该像素格式不被显卡硬件支持,使用该像素格式的OpenGL程序将使用纯软件模式渲染
PFD_GENERIC_FORMAT被置1,并且PFD_GENERIC_ACCELERATED被置1,即
(pfd.dwFlags & PFD_GENERIC_FORMAT) &&
(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明该像素格式被显卡硬件支持,并且程序使用MCD模式渲染
PFD_GENERIC_FORMAT被置0,并且PFD_GENERIC_ACCELERATED被置0,
!(pfd.dwFlags & PFD_GENERIC_FORMAT) &&
!(pfd.dwFlags & PFD_GENERIC_ACCELERATED)
表明该像素格式被显卡硬件支持,并且程序使用ICD模式渲染
dx有两种工作模式,hal=硬件加速模式,ref=软件模拟模式
这个是在创建dx对象初始化的时候所指定的
关于这个,你可以看dxsdk当中的说明
浮点运算和硬件加速没有什么直接的关系
浮点运算是cpu的强项不是显示卡的强项,尽管gpu在不断的提升预算的性能
D3D把光栅化内部实现了,无论是硬件还是软件方式
OpenGL 驱动程序通过CPU计算来“绘制”你的屏幕。不过,CPU并不是专为OpenGL设计的硬件,并不能很好地完成这个任务。 为了提升3D显示性能,一些显卡厂商为他们的产品设计了GPU(图形处理器)来分担CPU的OpenGL运算。GPU比CPU更胜任这个任务,能大幅提高性能(最高达3,000%)是真正意义上的“硬件加速”。
如果你的计算机配备了100%兼容OpenGL硬件加速的显示卡,OpenGL的硬件加速是显卡已经在硬件中实现了的,只要你是使用并且配置好OpenGL,就会有“加速”的效果.
性能低下的 OpenGL 驱动的共同症状
以下症状表明你的OpenGL驱动不能100%兼容OpenGL硬件加速。
开启表面接受投影功能时,有些模型出现条纹或变黑。
这通常是由于OpenGL软件加速驱动的模板缓存的一个bug。
选择表面时,却选中了反向表面。
在16位色模式下,坐标轴消失,所有的线都可见且变成虚线,出现奇怪的贴图颜色
图像翻转
OpenGL与Vista
1、Vista完全支持OpenGL硬件加速
与XP中一样,Vista里的OpenGL加速也是通过标准的Windows可安装客户端驱动程序(ICD)实现的,只是该驱动需要单独安装,否则都是只能使用软加速。
另外从Areo Glass桌面合成机制上看,OpenGL和Direct3D在Vista中的地位是等同的,都是相关图形驱动从应用程序中获得数据,并使用GPU进行硬件渲染,随后提交给桌面窗口管理器(WDM),随后合成写入桌面,实现新的用户界面效果。
关于DWM对系统应能的影响:由于DWM本身就是个3D程序,因此必然会消耗CPU和GPU资源,通常情况下会导致10%的图形性能降低,因此用户需要在美丽界面和更高性能之间做出选择;不过,如果3D游戏等程序运行在全屏状态,DWM就不再执行窗口合成,也不会再拖累性能。
2、OpenGL应用程序可以从Vista改进的图形资源管理机制中获益
Vista窗口显示驱动模式(WDDM)提供了一个防火墙和Thunk Layer,以提高系统整体稳定性,这与XP截然不同。在XP里,OpenGL ICD直接与GPU硬件层会话,并掌握诸多底层功能,包括内存管理。
事实上,WDDM为OpenGL应用程序提供了不少潜在的益处,比如显存等此前由OpenGL ICD管理的图形资源现在交给了操作系统虚拟管理,又比如在多个程序运行时,OpenGL ICD可以为每个程序开放最大的材质存储空间,并由Vista负责分配资源和管理时序,从而提高系统资源的整体利用效率。
CUDA的纹理和opengl的纹理能互用吗
需要互相绑定,具体看手册实现
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22895309/viewspace-624878/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22895309/viewspace-624878/