如何判断是否启用了OpenGL硬件加速
2012-10-22 21:09
1116 查看
作者: 刘鹏
日期: 2009-09-15
随着 GPU、显卡等图形设备的增强,图形硬件加速得到广泛的运用,那么如何判断是否启用了硬件加速呢?本文针对不同的系统做了详细的介绍。
日期: 2009-09-15
随着 GPU、显卡等图形设备的增强,图形硬件加速得到广泛的运用,那么如何判断是否启用了硬件加速呢?本文针对不同的系统做了详细的介绍。
X Window对于 X Window 使用 glxinfo 和 glxgears 检测.glxinfo 显示 GLX 相关信息,包括图形加速、显卡、OpenGL 版本等。 direct rendering: Yes Yes 表示硬件加速,No 表示软件 OpenGL renderer string: Mesa GLX Indirect indirect表示是不是硬件加速。 glxgears 显示两个旋转的齿轮,并给出 FPS,即每秒多少祯,硬件加速要比软件加速快很多。配合 cpu 占用率,软件加速 CPU 负载明显增大。 Windows1在Windows平台上,OpenGL驱动可能有三种模式:纯软件、MCD和ICD。安装系统时使用Windows自带的显卡驱动程序,那么OpenGL程序就会运行在软件模式下。 MCD(Mini Client Driver):penGL渲染管线的变换、光照部分仍然由软件实现,而光栅化部分则由硬件厂商实现,因此只要硬件支持,MCD可以硬件加速光栅化部分。 完整的OpenGL驱动模型,比MCD复杂得多。硬件厂商要实现完整的OpenGL渲染管线,如变换、光照、光栅化等,因此只要硬件支持,ICD可以硬件加速整个OpenGL渲染管线。 Windows怎么实现OpenGL硬件加速呢? OpenGL32.dll 是微软的 OpenGL1.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模式渲染。 ReferenceOpenGL显卡编程 |
相关文章推荐
- /LGC图形渲染/如何判断是否启用了硬件加速
- 如何判断是否启用了硬件加速
- 在Android中如何判断NFC是否启用
- 在Android中如何判断NFC是否启用
- js如何判断用户是否是用微信浏览器
- 在android中如何判断当前的apk是否处于运行状态
- C#如何判断同网段计算机是否存在
- 如何判断浏览器是否支持placeholder属性
- [转]如何判断一个点是否在一个多边形内部
- Python 中如何判断变量是否已经定义
- 教你如何用 Linux Shell脚本判断IP是否合法(多种方法)
- php 如何判断一个常量是否已经定义
- 如何通过代码判断手机中是否有SIM卡
- 如何判断两个链表是否相交并求出相交点
- mysql 如何判断 "字符串" 是否为 "数字"
- jquery如何判断某元素是否具备指定的样式
- linux系统中如何判断是否安装了mysql
- 如何判断链表是否存在环和求链表中间节点
- 如何判断标准输入或输出是否经过了重定向,即是否在命令行上使用了“”?
- openfire xmpp 如何判断用户是否在线