OpenGL介绍

前言:本文章的内容是基于OpenGL教程做的总结。

一.首先要明白OpenGL是什么

Opengl不是一个语言,它通常被认为是一个图形接口库,(我一直都是这么理解的),但更准确地说OpenGL本身并不是API,它仅仅是一个规范。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定,也就是那些开发OpenGL库的人,它们根据自己的硬件开发出相应的api。OpenGL的大多数实现都是由显卡厂商来实现的。

OpenGL使用C语言开发的,所以它有很多C语言的特性,例如,它不支持函数重载,因此里面会有很多函数名相近功能相同但只是用于处理不同数据类型的函数组。

二.立即渲染模式与核心模式

早期OpenGL使用立即渲染模式,也就是固定渲染管线,现在是使用核心模式。所有OpenGL包括现在4.5的版本都是基于3.3的核心架构引入额外的功能。当我们使用核心模式时,OpenGL迫使我们使用现代的函数,当我们使用一个已经废弃的函数时,OpenGL会停止绘图抛出异常。

三.OpenGL扩展特性

OpenGL一大特性就是对扩展的支持,这样的话,只要显卡支持该扩展,开发者就可以不必等待一个新的OpenGL规范面世,就可以使用新特性。

四.状态机

OpenGL自身是一个巨大的状态机:一系列的变量描述OpenGL此刻应当如何运行,OpenGL的状态通常被称为OpenGL上下文(context)。OpenGL在渲染的时候需要一个Context,这个Context记录了OpenGL渲染需要的所有信息,可以把它理解成一个大的结构体,它里面记录了当前绘制使用的颜色、是否有光照计算以及开启的光源等非常多我们使用OpenGL函数调用设置的状态和状态属性。
我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。

假设当我们想告诉OpenGL去画线段而不是三角形的时候,我们通过改变一些上下文变量来改变OpenGL状态,从而告诉OpenGL如何去绘图。一旦我们改变了OpenGL的状态为绘制线段,下一个绘制命令就会画出线段而不是三角形。
当使用OpenGL的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。以及状态应用函数(State-using Function),这类函数会根据当前OpenGL的状态执行一些操作。只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。

关于context部分的更多内容,可以参考:https://blog.csdn.net/csxiaoshui/article/details/79032464

五.OpenGL采用的是客户端-服务器模式

对于OpenGL来说,cpu以及程序等可以视为客户端,而GPU硬件则可以视为服务器。

这一部分请参考GPU介绍与OpenGL介绍。

你可能感兴趣的:(OpenGL)