经过前面4课,我们已经可以完成以下几个工作:
1)创建OpenGL环境
2)创建与OpenGL绑定的窗口
3)处理窗口消息
4)产生空间点
5)发送空间点给GPU
6)创建着色器,对着色器进行一些参数设置
7)设置一些OpenGL状态机属性
8)绘制、渲染图形
这其实就是OpenGL工作的基本框架,其它如着色器的千变万化,如图元的旋转,纹理贴图都不会改变这个基本框架。
属于1),2),3)的代码其实就是glut库完成的主要工作,下面我们来尝试对自己的代码,如2.4节中的示例代码进行一些封装,使得代码看起来更干净。
换句话说,这一章的目的就是完成对1),2)两部分代码的封装。
封装之后,入口函数的代码看起来是这个样子的:
////////////////////////////////////////////////////////////////////
// 入口函数
int _stdcall WinMain(HINSTANCE hInst,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nShowCmd)
{
//创建窗口
HWND hWnd = CreateDefaultOGLWindow(hInst,WndProc);
//显示窗口
ShowOGLWindow(hWnd);
//初始化顶点数据
InitVertex();
//发送顶点数组给GPU
SendToGPU();
//创建着色器
CreateShader();
//绘制图形到窗口
DrawToWindow();
//进入主循环
EnterMainLoop();
return 0;
}
这样入口函数就显得很干净了,而且在后续章节中,我们仍然使用这个代码框架,为了实践不同的内容,我们只需要对InitVertex、SendToGPU、CreateShader、DrawToWindow中的相应内容进行修改就可以了。
这个封装就是对3.3中的示例程序进行的,所以代码基本是一样的,只是将某些代码封装到oglwindow库中去了,运行结果是一样的。
本章代码可以下载: