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硬件加速判断相关推荐

  1. Qt之使用OpenGL硬件加速

    Qt之使用OpenGL硬件加速 参考的用例 2D Painting Example 文档说的很清楚,The quality and speed of rendering in the GLWidget ...

  2. 图形处理 OpenGL硬件加速

    OpenGL被设计成独立于硬件,独立于窗口系统,在运行各种操作系统的各种计算机上都可用,并能在网络环境下以客户/服务器模式工作,是专业图形处理.科学计算等高端应用领域的标准图形库. Windows下常 ...

  3. OpenGL硬件加速指南

    OpenGLRenderer.cpp位于Framewoks/base/libs/hwui中 1.构造函数: OpenGLRenderer::OpenGLRenderer(): mCaches(Cach ...

  4. Chromium硬件加速渲染的OpenGL命令执行过程分析

    在Chromium中,由于GPU进程的存在,WebGL端.Render端和Browser端的GPU命令是代理给GPU进程执行的.Chromium将它们要执行的GPU命令进行编码,然后写入到一个命令缓冲 ...

  5. Android硬件加速(二)-RenderThread与OpenGL GPU渲染

    Android4.0之后,系统默认开启硬件加速来渲染视图,之前,理解Android硬件加速的小白文简单的讲述了硬件加速的简单模型,不过主要针对前半阶段,并没怎么说是如何使用OpenGL.GPU处理数据 ...

  6. Android 如何使用GPU硬件加速

    转自:http://blog.csdn.net/myarrow/article/details/7164638 1.名词解释 GPU:Graphic Processing Unit (图形处理器) O ...

  7. Android 系统(175)---Android硬件加速原理与实现简介

    Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...

  8. Gstreamer中的视频处理与硬件加速

     点击上方"LiveVideoStack"关注我们 ▲扫描图中二维码或点击阅读原文▲了解音视频技术大会更多信息 // 编者按:Gstreamer作为一个比较流行的开源多媒体框架,其 ...

  9. Android渲染--重温硬件加速上

    Android中绘图的API很多,比如2D的基于Skia的接口,3D的绘图OpenGLES,Vulkan等.Android早期系统多数都是采用2D的绘图模式,比如绘制一张Bitmap图片.随着用户对视 ...

最新文章

  1. 程序化广告(1):程序化广告概述
  2. 31页官方PPT,回顾史上最大芯片WSE:科技的壮丽美感!
  3. DeepID3:Face Recognition with Very Deep Neural Networks
  4. python调用命令行获取pid_python 使用标准库根据进程名获取进程的pid
  5. Kinect开发笔记之五使用PowerShell控制Kinect
  6. 讲点码德!避免这些代码坏味道,努力做一名优秀的程序员
  7. 教你如何在项目中集成推送功能
  8. 拓端tecdat|matlab使用样条插值重采样估计INR数据研究
  9. kubernetes 一个窗口可以使用kubectl 另一个窗口不可以The connection to the server localhost:8080 was refused - did you
  10. 《刺猬的优雅》观后感
  11. 驱动加载工具(InstDrv - V1.3中文版)
  12. 数字电路与逻辑设计之集成触发器
  13. 白话斯坦福机器学习课程-CS229 - 监督学习应用:梯度下降
  14. LDO芯片CMO3236 系列低功耗
  15. jeecg微服务项目调用接口报错Token验证失效的解决方法
  16. 基于GMapping的栅格地图的构建
  17. ETC营销数据统计及展示
  18. 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
  19. 机器视觉技术助力工业物联网发展,起到核心作用。
  20. 《李兴华Java架构师 》完整版

热门文章

  1. visual studio2019安装opencv
  2. 方向gravity_两种对齐方式,layout_gravity和gravity大不同
  3. jmeter逻辑控制器之while循环控制器(一)
  4. 基于51单片机来开发的智能感应开盖垃圾桶
  5. 顺序表实现 电子地图管理系统
  6. 新加坡金融科技节之声|蚂蚁金服CTO程立:面向全球开放能力
  7. 解决方案|电力行业应如何应对数字化转型危机
  8. 函数、包,字符串处理,错误处理
  9. kettle spoon判断增量更新_kettle增量更新设计
  10. 克服拖延症的7种最佳方法