OpenGL的介绍

介绍

OpenGL是什么?它是一个图形库,用来渲染2D,3D图形。它并不是一个API(Application Programming Interface),应用程序编程接口,仅仅是一个由Khronos组织制定并维护的规范。这个规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定。

 

OpenGL库的开发者通常是显卡生产商,主要是英伟达(Nvdia),电脑上的显卡所支持的OpenGL版本都为这个系列的显卡专门开发的。不管是Windows,Linux还是macos,都有针对于其宿主机的显卡驱动,通常更新驱动都能获取到最新的OpenGL版本。在Linux下输入glxinfo | grep “OpenGL” 可获取当前系统的OpenGL相关信息,下图是安装了Deepin Linux的笔记本,显卡是很老的gtx 950m,支持OpenGL4.6版本。

 

而在虚拟机下,由于Vmware和Virtual Box并不能虚拟出真实的显卡,所以VMware开发了SVGA驱动,基于Mesa(一个三维计算机图形库,以开源形式实现了OpenGL的应用程序接口)和此驱动,在目前最新的VMware Workstation15 Pro中仅可使用OpenGL3.3的Core Profile版本(需要把显卡设置里的3D加速打开),对OpenGL的支持非常有限,而Virtual Box的支持更差。不过对于一般的程序,VMware支持的OpenGL够用了。

VMware官方文档:

The VMware guest operating system OpenGL driver for Windows and Linux supports the OpenGL 3.3 core profile only. The OpenGL3.3 compatibility profile is not supported. 

 

实现方式

对于OpenGL的实现,从1992年的第一个版本OpenGL1.0开始,到如今的4.6,经历了固定管线到可编程管线两个时期的迭代。从2010年发布的OpenGL3.3开始,即全新的现代OpenGL,支持可编程管线和着色器,并引入了Core Profile和Compatibility Profile两种模式。

(1)Core Profile:只包含最新的Shader相关的函数,程序必须使用Shader编写。
(2)Compatibility Profile:可以兼容之前的OpenGL固定管线的内容,也可以使用Core Profile中的内容。

 

固定管线和可编程管线的区别

现代OpenGL通常是以2010年发布的3.3版本作为起始版本(ES版本为2.0及以上),所有OpenGL的更高的版本都是在3.3的基础上,引入了额外的功能,并没有改动核心架构。新版本只是引入了一些更有效率或更有用的方式去完成同样的功能。因此,所有的概念和技术在现代OpenGL版本里都保持一致。

相对于之前的固定管线的OpenGL,可编程管线的OpenGL可以插入特定的代码片段在指定的位置上,从而大大提高了渲染步骤的灵活性,实现了固定管线无法实现,或者极难实现的丰富多彩的酷炫特效。但在另一方面,可编程管线意味着难度更大,抽象的概念更多。下图是不同时期对于OpenGL的实现方式,目前最流行的方法是使用可编程管线的glfw和glad。

 

 

 

 

 

 

 

在QT中实现

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值