OpenGL底层实现原理
一、什么是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在计算机上的实现,希望大家有个更加深刻的认识。
OpenGL的实现可以分为服务端和客户端两部分,其中服务端是指基于GPU的算法实现,而客户端是指算法的编写和编译。这里的客户端是指代码编译环境,主要针对的是CPU,而服务端是指代码执行环境,指的是GPU。OpenGL的跨平台主要体现在,在客户端A编写编译的代码,除了在本地服务端A的GPU下可以运行,到了其他服务端B的GPU环境下,也能够正常运行。因为他们都遵循同一个OpenGL接口标准。
OpenGL底层实现原理相关推荐
- Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...
- HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理
HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理 首先HashMap是Map的一个实现类,而Map存储形式是键值对(key,value) ...
- Spring AOP概述及底层实现原理
Spring AOP概述及底层实现原理 aop概述 AOP全称为Aspect Oriented Programming的缩写,意为:面向切面编程.将程序中公用代码进行抽离,通过动态代理实现程序功能的统 ...
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...
- Spring(二)IOC底层实现原理
IOC原理 将对象创建交给Spring去管理. 实现IOC的两种方式 IOC配置文件的方式 IOC注解的方式 IOC底层实现原理 底层实现使用的技术 1.1 xml配置文件 1.2 dom4j解析xm ...
- 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...
- python的底层实现,Python封装底层实现原理详解(通俗易懂)
事实上,Python 封装特性的实现纯属"投机取巧",之所以类对象无法直接调用以双下划线开头命名的类属性和类方法,是因为其底层实现时,Python 偷偷改变了它们的名称. 前面章节 ...
最新文章
- iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用
- python namedtuple用法_Python的collections模块中namedtuple结构使用示例
- CSS3中box-shadow的用法介绍
- Django modules模块
- BootStrap的下载及使用方法
- SpringCloud创建Eureka模块
- FixedThreadPool 使用方法测试
- curl, apt-get, apt
- jumserver 官方文档和
- altium designer2020安装教程
- 网络安全——社会工程学02
- 河北化工医药职院美和易思软件技术专业“指舞飞扬”比赛圆满成功
- 小米蓝牙广播数据解析(MiBeacon)
- 超详细:安装Linux系统教程
- CSDN复制文章到Word保留样式方法
- nodeJs各个版本下载
- C++小实验之vector的 push_back 和 emplace_back 及其使用时机
- Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach
- 爬取堆糖蜜桃猫图片并下载到本地
- 如何在AndroidStudio中使用GitHub