OpenGL是一个图形库,主要用于3D作图。然而,其并不提供窗口处理函数,如果想要与操作系统的窗口进行通信,需要引入GLUT也就是实用工具库。同时,由于OpenGL具有很好的平台兼容性,因此对一些函数的实现需要以指针形式进行调用。类似于动态链接库中函数的动态加载。为了便于这一部分函数的调用,进一步引入了GLEW库对函数指针的调用进行封装。编写OpenGL程序需要引入上诉函数库中的一个或者多个。下面就以一个Demo程序来介绍OpenGL程序编写的一些基本步骤。
由于OpenGL程序涉及到计算机中的两中类型的处理单元——CPU和GPU。OpenGL程序由CPU调度运行,同时部分指令在CPU对存储在系统内存中的数据进行加工进而推进程序的运行,而另外一部分指令则通过给GPU发指令进而进行图像处理,GPU处理的数据大多数情况下位于其自身所管理的专用内存中。为了协调这两部分内容进行处理,首先需要解决的问题是怎样将存储在系统内存中的数据传递到GPU专用的内存中;其次需要解决的问题是CPU应该怎样启动GPU进行运算。
为了进行上诉处理,OpenGL将CPU与GPU之间数据的传递分为三个步骤。第一步,首先利用内置的OpenGL函数生成一个ID号码,这个号码类似于Windows系统下的文件标识符概念,主要用于索引一个OpenGL内部管理的内存单元,至于这部分内存单元属于什么类型需要到第二步才知道;这一步主要是通过函数glGenBuffer实现的。该函数返回一个glInt。第二步,则是根据需要对该ID号码进行内存类型的绑定,这一步操作能够覆盖ID号码原有的内存类型,如果ID号码原来没有内存类型则对其进行初始化,这一步主要通过glBindBuffer函数完成。在经过上面两个步骤之后,GPU中用于接收系统内存中数据的“标识符”就准备好了,第三部对这部分内存进行初始化,初始化的内容来自于系统内存中,