作者:i_dovelemon
日期:2017-03-12
来源:CSDN
主题:OpenGL, Render Context
引言
才开始学习OpenGL的同学,大部分都是通过使用GLUT来进行学习的。确实,GLUT为我们简化了很多的工作,使得我们能够专心的学习OpenGL相关的知识,而忽略和操作系统相关的操作。但是,当我们需要自己管理操作系统的相关操作的时候,GLUT的限制就出现了,所以今天,我们就来讲讲如何在不使用GLUT的情况下,在Windows上自行管理窗口,使用OpenGL进行绘制。
渲染上下文(Render Context)
OpenGL的所有调用命令都是在一个渲染上下文中进行的,而创建渲染上下文的API并不是由OpenGL标准来定义,而是由具体的操作系统平台来定义的。如果你想要使用OpenGL进行绘图的操作,你就必须要创建一个绘图上下文,然后通过对应操作系统的API将上下文中绘制的东西显示到屏幕上。
像素格式(Pixel Format)
当我们用OpenGL渲染上下文进行渲染的时候,我们需要为显示的像素指定格式,然后询问操作系统,此种格式是否被支持,如果支持就使用该格式,反之则使用与之相近的格式进行设置。
在windows平台,这个描述像素格式的结果为:
PIXELFORMATDESCRIPTOR。
设置像素格式
在Window平台上,绘制图像一般是通过GDI接口中的设备上下文(Device Context, DC)来进行的。所以,如果寻求像素,设置像素格式自然需要通过它来进行。
当我们创建了窗口之后,我们就能够通过
GetDC(HWND)函数来获取相对应的设备上下文。后面我们只要通过如下的函数调用来询问,设置像素格式即可:
g_DC = GetDC(g_Hwnd);
// Set surface pixel format
PIXELFORMATDESCRIPTOR pixel_desc;
pixel_desc.nSize = sizeof(pixel_desc); //WORD nSize;
pixel_desc.nVersion = 1; //WORD nVersion;
pixel_desc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;//DWORD dwFlags;
pixel_desc.iPixelType = PFD_TYPE_RGBA; //BYTE iPixelType;