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

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模式渲染。

 

 

转来的

你可能感兴趣的:(如何判断是否启用了硬件加速)