您的位置:首页 > 运维架构

如何判断是否启用了OpenGL硬件加速

2012-10-22 21:09 1116 查看
作者: 刘鹏
日期: 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模式渲染。

Reference

OpenGL显卡编程

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: