http://msdn.microsoft.com/en-us/library/windows/desktop/ee872083(v=vs.85).aspx
wglShareLists
wglShareLists函数能使多个OpenGL渲染上下文共享同一个显示列表空间。
语法
BOOL WINAPI wglShareLists(
HGLRC hglrc1,
HGLRC hglrc2
);
参数
hglrc1
指定一个要共享其显示列表的OpenGL渲染上下文。
hglrc2
指定OpenGL渲染上下文,共享hglrc1中的显示列表。当使用wglShareLists函数时,hglrc2参数不能包含任何存在的显示列表。
注意
当你创建一个OpenGL渲染上下文,它会有一个属于自己的显示列表空间。函数能使一个OpenGL渲染上下文共享显示列表空间给其它的OpenGL渲染上下文。 任意个渲染上下文可以共享各自唯一的显示列表空间。一旦渲染上下文共享了显示列表空间,此渲染上下文使用此显示列表空间,直到此渲染上下文被删除。当最后的共享了显示列表空间的渲染上下文被删除后,显示列表空间被删除。在显示列表空间中定义的显示列表和所有索引被共享。
你只能在同一进程中共享显示列表。然而,不是所有在同一进程中的渲染上下文都可以共享显示列表。只有当它们使用同样的OpenGL函数的实现时,OpenGL渲染上下文才能共享。All client rendering contexts of a given pixel format can always share display lists.
所有共享显示列表的渲染上下文必须使用同样的像素格式。否则结果依赖于OpenGL的具体实现。
wglGetCurrentDC 函数得到了指向设备上下文的句柄,此句柄关联到调用线程的当前OpenGL渲染上下文
语法
HDC WINAPI wglGetCurrentDC(void);
返回值
如果调用线程有当前OpenGL渲染上下文,此函数返回一个句柄。它指向与之相联的渲染上下文。这个渲染上下文可使用wglMakeCurrent函数指定。如果没有,则返回NULL。I
Remarks注意
当调用wglMakeCurrent函数,你就关联了一个OpenGL渲染上下文。你可以使用wglGetCurrentContext得到调用线程的当前的OpenGL渲染上下文句柄。
wglCopyContext函数复制从一个OpenGL渲染上下文中选中的一组渲染状态到另一个渲染上下文中。
语法
BOOL WINAPI wglCopyContext(
HGLRC hglrcSrc,
HGLRC hglrcDst,
UINT mask
);
参数
hglrcSrc
指定一个复制源
hglrcDst
指定一个复制目的地
mask
指定hglrcStrc中要复制的渲染状态组。它包含了bitwise-OR 可传给函数glPushAtrib。你可以使用 GL_ALL_ATTRIB_BITS 来复制所有的渲染上下文状态信息。
Return value返回值
如果此函数成功,返回true。如果函数失败,返回false。I
Remarks
使用wglCopyContext函数,你可以同步两个渲染上下文的渲染状态。你只能在同一进程中复制两个渲染上下文的状态。渲染上下文必须源于同样的OpenGL实现。举个例子,你可以在两个渲染上下文间复制一个渲染状态,但两个渲染上下文要有同样的像素格式,必须在同一进程中。 你可以复制使用glPushAttrib 函数设置的状态,但不能复制如下状态信息:像素包装/解包状态,渲染模式状态,选择状态和反馈状态。
当你调用wglCopyContext时,你要确保hglrcDst不是任何线程的当前渲染渲染上下文。
wglCreateContext函数创建了一个新的OpengGL渲染上下文,此上下文与hdc代表的设备上下文件配套。
此OpenGL渲染上下文与hdc设备上下文有相同的像素格式。
语法
HGLRC WINAPI wglCreateContext(
HDC hdc
);
参数
hdc
Handle to a device context for which the function creates a suitable OpenGL rendering context.
Return value
If the function succeeds, the return value is a valid handle to an OpenGL rendering context.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
注意
一个渲染上下文不能有相同的设备上下文。在创建一个渲染上下文之前,要设置设备上下文的像素格式。更多的设置设备上下文像素格式的信息,参见SetPixelFormat函数。
为了使用OpenGL,你创建了一个渲染上下文,选择它为线程的当前渲染上下文,然后调用OpenGL函数。当你结束渲染上下文时,你可以使用wglDeleteContext函数释放它。
下面代码展示wglCreateContext使用方法。
HDC hdc;
HGLRC hglrc;
// create a rendering context
hglrc = wglCreateContext (hdc);
// make it the calling thread's current rendering context
wglMakeCurrent (hdc, hglrc);
// call OpenGL APIs as desired ...
// when the rendering context is no longer needed ...
// make the rendering context not current
wglMakeCurrent (NULL, NULL) ;
// delete the rendering context
wglDeleteContext (hglrc);
wglMakeCurrent函数使一个OpenGL渲染上下文为调用线程当前渲染上下文。所以随后的在此线程中的OpenGL调用,在hdc上绘制图形。你可以使用wglMakeCurrent函数来改变调用线程当前的渲染上下文。
语法
BOOL WINAPI wglMakeCurrent(
HDC hdc,
HGLRC hglrc
);
参数
hdc
设备上下文的句柄。之后的调用线程中的OpenGL函数,在hdc对应的设备上下文中绘制图形。
hglrc
OpenGL渲染上下文句柄。此函数设置了调用线程的渲染上下文。如果hglrc是NULL,此函数使调用当前线程的前当渲染上下文不再在当前的上下文。并且释放被使OpenGL渲染上下文使用的设备上下文。
注意
The hdc parameter must refer to a drawing surface supported by OpenGL. 它不要求与在此hglrc创建时传给wglCreateContext函数的那个hdc相同的hdc。but it must be on the same device and have the same pixel format. GDI的变换及裁剪不被渲染上下文支持。当前的渲染上下文使用hdc设备上下文直到此渲染上下文不是当前渲染上下文。在切换到一个新的渲染上下文之前,OpenGL冲掉调用线程的任何先前的渲染上下文。
一个线程可以有一个当前渲染上下文。一个进程通过使用多个线程,可以有多个渲染上下文。在调用任何一个OpenGL函数之前,线程必须设置一个当前渲染上下文。
在同一时刻内,一个线程只能设置一个渲染上下文。你不能设置一个渲染上下文为多个线程的当前渲染上下文。一个程序可以多线程绘制图形,使用不同的渲染上下文为不同线程的当前渲染上下文,提供每一个线程它自己的渲染上下文和设备上下文。