OpenGL硬件加速判断
OpenGL硬件加速
在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模式渲染
OpenGL硬件加速判断相关推荐
- Qt之使用OpenGL硬件加速
Qt之使用OpenGL硬件加速 参考的用例 2D Painting Example 文档说的很清楚,The quality and speed of rendering in the GLWidget ...
- 图形处理 OpenGL硬件加速
OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理.科学计算等高端应用领域的标准图形库. Windows下常 ...
- OpenGL硬件加速指南
OpenGLRenderer.cpp位于Framewoks/base/libs/hwui中 1.构造函数: OpenGLRenderer::OpenGLRenderer(): mCaches(Cach ...
- Chromium硬件加速渲染的OpenGL命令执行过程分析
在Chromium中,由于GPU进程的存在,WebGL端.Render端和Browser端的GPU命令是代理给GPU进程执行的.Chromium将它们要执行的GPU命令进行编码,然后写入到一个命令缓冲 ...
- Android硬件加速(二)-RenderThread与OpenGL GPU渲染
Android4.0之后,系统默认开启硬件加速来渲染视图,之前,理解Android硬件加速的小白文简单的讲述了硬件加速的简单模型,不过主要针对前半阶段,并没怎么说是如何使用OpenGL.GPU处理数据 ...
- Android 如何使用GPU硬件加速
转自:http://blog.csdn.net/myarrow/article/details/7164638 1.名词解释 GPU:Graphic Processing Unit (图形处理器) O ...
- Android 系统(175)---Android硬件加速原理与实现简介
Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...
- Gstreamer中的视频处理与硬件加速
点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息 // 编者按:Gstreamer作为一个比较流行的开源多媒体框架,其 ...
- Android渲染--重温硬件加速上
Android中绘图的API很多,比如2D的基于Skia的接口,3D的绘图OpenGLES,Vulkan等.Android早期系统多数都是采用2D的绘图模式,比如绘制一张Bitmap图片.随着用户对视 ...
最新文章
- 程序化广告(1):程序化广告概述
- 31页官方PPT,回顾史上最大芯片WSE:科技的壮丽美感!
- DeepID3:Face Recognition with Very Deep Neural Networks
- python调用命令行获取pid_python 使用标准库根据进程名获取进程的pid
- Kinect开发笔记之五使用PowerShell控制Kinect
- 讲点码德!避免这些代码坏味道,努力做一名优秀的程序员
- 教你如何在项目中集成推送功能
- 拓端tecdat|matlab使用样条插值重采样估计INR数据研究
- kubernetes 一个窗口可以使用kubectl 另一个窗口不可以The connection to the server localhost:8080 was refused - did you
- 《刺猬的优雅》观后感
- 驱动加载工具(InstDrv - V1.3中文版)
- 数字电路与逻辑设计之集成触发器
- 白话斯坦福机器学习课程-CS229 - 监督学习应用:梯度下降
- LDO芯片CMO3236 系列低功耗
- jeecg微服务项目调用接口报错Token验证失效的解决方法
- 基于GMapping的栅格地图的构建
- ETC营销数据统计及展示
- 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
- 机器视觉技术助力工业物联网发展,起到核心作用。
- 《李兴华Java架构师 》完整版