一、什么是OpenGL

OpenGL是Open Graphics Library的缩写,是个定义了一个跨编程语言、跨平台的编程接口的标准,显卡通常有OpenGL的实现,不同显卡上的OpenGL实现也不一定相同,OpenGL标准不是平台相关的,所以同一个程序可能在不同的显卡上运行。

这个首先说明一点,OpenGL并不是一个API库,而是一个标准,一个规范。这个规范严格的规定了每个函数要如何执行、以及函数的输出值,至于每个函数具体的实现过程、是由各个厂商的开发者,也就是OpenGL库的开发者根据自己的硬件特性开发出相应的API。市场上,OpenGL大都是显卡厂商、GPU厂商、以及浏览器厂商比如Mozilla、Google等尖端科技公司来实现。

二、OpenGL与GPU

OpenGL主要通过GPU而不是CPU进行图形绘制,这是由于两者架构不一样所致,如下图所示:

其中,黄色是控制器,绿色是计算单元,红色是缓存;

在这里需要先提到 CPU 和 GPU 的区别,它们的功能都是用于计算,也都是由很多核组成,区别在于 CPU 的核比较少,但是单个核的计算能力比较强,而 GPU 的核很多,但是每个核的计算能力都不算特别强。目前 GPU 的主要工作是用于生成图片(现在也有通过 GPU 进行高性能运算_并行运算,但是在这里不属于讨论的范围),原因就是图片是由很多像素组成,每个像素都包含有颜色、深度等信息,而为了得到这些信息数据,针对每个像素点的计算,是可以通过统一的算法来完成。GPU 就擅长处理针对这种大规模数据,使用同一个算法进行计算。而这个算法,就是使用 GLSL 写成 Shader,供 GPU 运算使用。

OpenGL的实现,是对数学思想淋漓尽致的发挥,计算机图形学的背后就是数学,也就是说GPU在图形绘制上性能更加优越。但是,我们一般进行图形绘制,少不了CPU的参与。计算机图形的图形系统需要CPU提供下基本的参数和配置,然后再GPU内部实现图形的渲染,再传输到前端。

三、OpenGL渲染流程

GPU上的渲染流程

OpenGL利用GPU进行图形绘制,主要做了两件事,1.配置图元的位置,2.配置图元的颜色,这两者分别通过顶点着色器和图元着色器这一对方法,操作GPU进行像素的位置和色彩数值计算,从而实现图形绘制。大体流程如下:

基本的流程如下图所示:

名词解释:

顶点数据:buffer是放置数据的地方,老外起的名字

顶点着色器:顶点数据传递给着色器,着色器通过glsl对顶点进行编辑

顶点变换:顶点数据有时需要矩阵变换

图元装配:顶点信息根据画图的需要,将一些点连接起来

光栅化:连接顶点的线段上用点拼接起来,三角形填充也用点

片元着色器:将所有的点通过片元着色器填充颜色或纹理图片

OpenGL在CPU和GPU上的架构

虽然OpenGL在图形绘制实现时是基于GPU进行,但是调用OpenGL的API,却是在CPU上进行,这里简单介绍下OpenGL在计算机上的实现,希望大家有个更加深刻的认识。

转载自https://www.jianshu.com/p/9b688c8e0b78

OpenGL的实现可以分为服务端和客户端两部分,其中服务端是指基于GPU的算法实现,而客户端是指算法的编写和编译。这里的客户端是指代码编译环境,主要针对的是CPU,而服务端是指代码执行环境,指的是GPU。OpenGL的跨平台主要体现在,在客户端A编写编译的代码,除了在本地服务端A的GPU下可以运行,到了其他服务端B的GPU环境下,也能够正常运行。因为他们都遵循同一个OpenGL接口标准。

OpenGL底层实现原理相关推荐

  1. Java并发机制的底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...

  2. HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理

    HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理 首先HashMap是Map的一个实现类,而Map存储形式是键值对(key,value) ...

  3. Spring AOP概述及底层实现原理

    Spring AOP概述及底层实现原理 aop概述 AOP全称为Aspect Oriented Programming的缩写,意为:面向切面编程.将程序中公用代码进行抽离,通过动态代理实现程序功能的统 ...

  4. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...

  5. Spring(二)IOC底层实现原理

    IOC原理 将对象创建交给Spring去管理. 实现IOC的两种方式 IOC配置文件的方式 IOC注解的方式 IOC底层实现原理 底层实现使用的技术 1.1 xml配置文件 1.2 dom4j解析xm ...

  6. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  7. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  8. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  9. python的底层实现,Python封装底层实现原理详解(通俗易懂)

    事实上,Python 封装特性的实现纯属"投机取巧",之所以类对象无法直接调用以双下划线开头命名的类属性和类方法,是因为其底层实现时,Python 偷偷改变了它们的名称. 前面章节 ...

最新文章

  1. iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用
  2. python namedtuple用法_Python的collections模块中namedtuple结构使用示例
  3. CSS3中box-shadow的用法介绍
  4. Django modules模块
  5. BootStrap的下载及使用方法
  6. SpringCloud创建Eureka模块
  7. FixedThreadPool 使用方法测试
  8. curl, apt-get, apt
  9. jumserver 官方文档和
  10. altium designer2020安装教程
  11. 网络安全——社会工程学02
  12. 河北化工医药职院美和易思软件技术专业“指舞飞扬”比赛圆满成功
  13. 小米蓝牙广播数据解析(MiBeacon)
  14. 超详细:安装Linux系统教程
  15. CSDN复制文章到Word保留样式方法
  16. nodeJs各个版本下载
  17. C++小实验之vector的 push_back 和 emplace_back 及其使用时机
  18. Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach
  19. 爬取堆糖蜜桃猫图片并下载到本地
  20. 如何在AndroidStudio中使用GitHub

热门文章

  1. java导出word加水印(已实现)
  2. 这个彩蛋表明,图灵测试评估的也许不是计算机,而是人类……
  3. VMware虚拟机三种网络连接模式详解
  4. MySQL更新时间的时候生成随机时间
  5. 前端基础总结--CSS
  6. Feature Enhancement Network: A Refined Scene Text Detector
  7. 自然码双拼 使用总结
  8. 构建初级前端页面以及重构开发环境(from 知乎)
  9. R语言绘图 | Venn图
  10. 主数据管理方法论之主数据全生命周期管理