OpenGL的一些基础概念

一、什么是OpenGL
  
  OpenGL是一个图形API,包含了一系列的可以操作图形、图像的函数。它并不是一个独立的平台,需要使用一个编程语言来工作,最常见的就是使用C++。然而,更严格的定义来讲,OpenGL应该是指一套规范。
 
二、OpenGL的一些基础概念
 
1、核心模式与立即渲染模式
  早期的OpenGL使用的是立即渲染模式(固定渲染管线),OpenGL的大多数功能都被库隐藏起来,基于OpenGL的开发者很难去控制计算的自由。虽然在立即渲染模式下,图形的绘制很方便。
但是从3.2版本开始,就开始废弃立即渲染模式了,推出了核心模式,这个模式完全移除了旧的特性。 
  当使用OpenGL的核心模式时,OpenGL迫使开发者去使用现代函数。虽有难度,但更灵活,效率更高,更重要的是可以更深入的理解图形编程。
 
2、扩展
  OpenGL的一个比较重要的特性就是对扩展的支持。 当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。
 
3、状态机
   OpenGL本身就是一个巨大的状态机:一系列的变量描述此时的OpenGL如何运行。其状态通常被称为上下文(context)。一般使用设置选项、操作缓冲来更改OpenGL的状态。最后使用当前的OpenGL上下文来渲染。
 
4、对象
  OpenGL是用C语言编写的,同时支持多语言的派生,但内核仍然是C库。由于C语言不容易被翻译到其它高级语言,因此OpenGL开发过程中,引入了一个抽象层。“对象”就是其中一个。在OpenGL中的对象指的是一些选项的集合,代表OpenGL状态的一个子集。可以把对象看作是一个C风格的结构体(struct),如下代码块所示:
1 struct object_name{ 
2     GLfloat option1;
3     GLuint option2;
4     GLchar[] name;
5 };
  特别注意:基元类型
  使用OpenGL时,建议使用OpenGL定义的基元类型。比如使用float时我们加上前缀GL(因此写作GLfloat)。int、uint、char、bool等等也类似。OpenGL定义的这些GL基元类型的内存布局是与平台无关的,而int等基元类型在不同操作系统上可能有不同                 的内存布局。使用GL基元类型可以保证你的程序在不同的平台上工作一致。
 
  当我们使用一个对象时,大致如下:
1 // OpenGL的状态 
2 struct OpenGL_Context { 
3     ... 
4     object* object_Window_Target; 
5     ... 
6 };
  OpenGL常见的工作流:
 1 // 创建对象 
 2 GLuint objectId = 0; 
 3 glGenObject(1, &objectId); 
 4  
 5 // 绑定对象至上下文 
 6 glBindObject(GL_WINDOW_TARGET, objectId); 
 7  
 8 // 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项 
 9 glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800); 
10 glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600); 
11  
12 // 将上下文对象设回默认 
13 glBindObject(GL_WINDOW_TARGET, 0);

  使用对象的一个好处就是,在程序中不止可以定义一个对象,并设置它们的选项,每个对象都可以是不同的选项。 执行一个使用OpenGL状态的操作的时候,只需要绑定含有需要的设置的对象即可。

原文地址:https://www.cnblogs.com/getMyCodes/p/13529763.html