ⓅChapter 1-Introduction
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ⓅChapter 1-Introduction相关的知识,希望对你有一定的参考价值。
目录
1.2 什么是OpenGL图形系统(OpenGL Graphics System)?
OpenGL(“Open Graphics Library”)是一个针对图形硬件的API(应用程序接口)。API由数百个程序和函数组成,程序员可以通过这些程序和函数指定生成高质量图形图像(特别是三维对象的彩色图像)所涉及的着色器程序、对象和操作。
大多数OpenGL都要求图形硬件包含帧缓冲区(framebuffer)。许多OpenGL调用控制图形几何对象,如点、线和多边形,但某些图形的绘制方式(如使用抗锯齿或多重采样时)取决于帧缓冲区的存在及其属性。有些命令显式管理帧缓冲区。
1.2.1 程序员对OpenGL的视角
对于程序员来说,OpenGL是一组命令,允许指定着色器程序或着色器、着色器使用的数据,以及着色器范围之外的OpenGL状态控制方面。通常,数据表示二维或三维的几何体和纹理图像,而着色器控制几何体处理、几何体的光栅化以及光栅化生成的片段的照明和着色,从而将几何体渲染到帧缓冲区中。
一个典型的使用OpenGL的程序:
➊首先调用打开一个窗口,进入程序将要绘制的帧缓冲区。
➋然后,调用以分配OpenGL上下文并将其与窗口关联。
➌分配上下文后,将生成用于定义着色器、几何体和纹理的OpenGL命令,
➍然后是通过将几何体的指定部分传输到着色器来绘制几何体的命令。图形命令指定简单的几何对象,例如点、线段和多边形,这些对象可以由着色器进一步操作。
➎还有一些命令通过读取和写入像素直接控制帧缓冲区。
1.2.2 OpenGL的实现者视角
对于实现者来说,OpenGL是一组控制GPU操作的命令。现代GPU加速了几乎所有OpenGL操作,将数据和帧缓冲区图像存储在GPU内存中,并在专用GPU处理器中执行着色器。然而,通过将部分或全部操作移到主机CPU中,OpenGL可以在性能较差的GPU上实现,甚至可以在没有GPU的情况下实现。
实现者的任务是在CPU上提供一个软件库实现OpenGL API,同时在CPU和图形硬件之间分配每个OpenGL命令的工作,以满足GPU能力。
OpenGL包含大量信息,包括许多类型表示可编程着色器及其使用的数据的对象,以及生成,以及控制不可编程方面的其他上下文状态OpenGL。大多数这些对象和状态都可供程序员使用,他们可以通过OpenGL命令设置、操作和查询它们的值。其中一些,然而,派生状态只有通过它对OpenGL操作方式的影响才可见。本规范的主要目标之一是描述OpenGL对象和上下文状态,以阐明它们如何响应OpenGL而改变命令,并指示其效果。
1.2.3 我们的视角
我们将OpenGL视为一个管道,其中包含一些可编程阶段和一些由一组特定绘图操作调用的状态驱动的固定功能阶段。这个模型应该产生一个满足程序员和实现者需求的规范。然而,它不一定为实现提供一个模型。实现必须产生与指定方法产生的结果一致的结果,但可能有比指定方法更有效的方法来执行特定计算。
1.2.4 固定功能硬件和兼容性配置文件
旧一代的图形硬件不能使用着色器进行编程,尽管它们可以通过设置状态控制操作的特定细节进行配置。OpenGL的兼容性配置文件继续支持为此类固定功能硬件开发的传统OpenGL命令,尽管它们通常通过编写重现此类硬件操作的着色器来实现。固定功能OpenGL命令和操作在相应着色器阶段的描述之后被描述为替代接口。
1.2.5 弃用的模式
在规范的一个版本中标记为deprecated使用的功能预计将在未来的版本中删除,从而使应用程序有时间从使用不推荐使用的功能过渡。
1.3 相关的APIs
与OpenGL相关的其他API和相关规范如下所述。这些API的大部分规范可在Khronos Group网站上获得,尽管一些特定于供应商的API记录在该供应商的开发人员网站上。
1.3.1 OpenGL着色器语言
OpenGL规范应与名为OpenGL着色语言的配套文档一起阅读。后一个文档(下文称为OpenGL着色语言规范)定义了用于编写着色器的编程语言的语法和语义(参见第7章)。本文后面对着色器的描述可能包括对OpenGL着色语言规范中定义的概念和术语(例如着色语言变量类型)的引用。
OpenGL 4.6实现保证支持OpenGL着色语言的4.60版本。所有对该规范章节的引用均指该版本。如第22.2节所述,可以查询最新支持的着色语言版本。
OpenGL 4.6的核心配置文件还保证支持OpenGL着色语言1.40版之前的所有版本。在一些实现中,核心配置文件可能还支持OpenGL着色语言的早期版本,并且可能支持OpenGL着色语言的兼容配置文件版本(适用于1.40及更早版本)。在这种情况下,当使用核心配置文件API不支持的语言功能(如兼容性配置文件内置)时,将生成错误。如第22.2节所述,可以查询所有受支持版本的OpenGL着色语言的#version字符串。
OpenGL着色语言规范可在OpenGL Registry中找到。
1.3.4 SPIR-V
SPIR-V是一种二进制中间语言,用于表示多个Khronos API(如OpenCL、OpenGL和Vulkan)的图形着色器阶段和计算内核。
可在Khronos API Registry中获得SPIR-V规范以及OpenGL着色语言规范的相关SPIR-V扩展指令。
1.3.6 Windows系统绑定
OpenGL需要一个配套的API来创建和管理图形上下文、要渲染的窗口以及本规范范围之外的其他资源。有几种这样的API支持不同的操作系统和窗口系统。
1.3.7 OpenCL
OpenCL是一个开放的、免版税的标准,用于对个人计算机、服务器和移动设备(包括GPU)中的处理器进行跨平台、通用并行编程。OpenCL定义了互操作方法,以与相应的OpenGL缓冲区和纹理对象共享OpenCL内存和图像对象,并协调OpenCL和OpenGL之间的数据控制和传输。这允许应用程序在OpenCL和OpenGL之间分割数据处理;例如,通过使用OpenCL实现物理模型,然后使用OpenGL渲染并与生成的动态几何体交互。
以上是关于ⓅChapter 1-Introduction的主要内容,如果未能解决你的问题,请参考以下文章
20170608-chapter 6-《pride and prejudice 傲慢与偏见》精读