OpenGL着色正文(rendering context)

转自:http://blog.sina.com.cn/s/blog_510a3ce001008y8p.html

OpenGL 着色正文(rendering context) 传送OpengGL命令的端口。每个进行OpenGL调用的线程必须有一个当前着色正文。着色正文联接OpenGL和Windows NT窗口系统。
       当应用程序建立着色正文时要指定一个Windows设备正文(device context)。建好的着色正文可在与指定设备正文相联系的设备上绘图。特别地,着色正文与设备正文有着相同的象素格式(详细请查看着色正文函数)。抛开这些关系着色正文与设备正文是不同的。设备正文包含着与Windows、GDI图形成分相关的信息。而着色正文包含与Open GL相关信息。在作GDI调用时必须明确指定设备正文,而着色正文则须在OpenGL调用时明确指定。应用程序必须在建立着色正文之前设定设备正文的象素格式。
       调用OpenGL的线程必须拥有当前着色正文。若一个应用程序从一个没有当前着色正文的线程中调用OpenGL,什么也不会发生;调用无效。通常应用程序建立一个着色正文,把它设为线程的当前着色正文,然后调用OpenGL函数。当调用完成后,应用程序把着色正文与线程分离,然后删除着色正文。应用程序可用多个着色正文在同一窗口中绘图,但线程只能有一个当前的、活动的着色正文。
        当前着色正文有一个相关设备正文。设备正文不必与建立着色正文时所用的相同,但必须有相同的设备和象素格式。

        一个线程只能拥用一个当前着色正文。一个着色正文只能对一个线程是当前的。 

    五个WGL函数管理着色正文:
    wglCreateContext 建立一个新的着色正文
    wglMakeCurrent 设定一个线程的当前着色正文
    wglGetCurrentContex 获取线程的当前着色正文柄
    wglGetCurrentDC 获取与线程的当前着色正文相联的设备正文柄
    wglDeleteContext 删除一个着色正文
    1)应用程序调用wglCreateContext建立着色正文,wglCreateContext函数以一个设备正文柄为参数并返回一个着色正文柄。
    2)应用程序用wglMakeCurrent给线程以当前着色正文。 wglMakeCurrent以一个着色正文柄和一个设备正文柄为参数。此后线程的OpenGL调用皆通过该着色正文在该设备正文所指设备上绘制。这个参数DC可与建立着色正文时传给wglCreateContext的DC不同,当然两个DC的设备和象素格式要一样。对wglMakeCurrent的调用将把给定的着色正文和设备正文联系起来。应用程序不能释放或处理与当前着色正文相关的设备自文,除非这一着色正文被设为非当前的。
    3)一旦线程有了当前着色正文,就可以通过该着色正文作OpenGL图形调用了。应用程序调用wglGetCurrentContext获取线程的当前着色正文,该函数无参数,返回调用线程的当前着色正文,或NULL(该线程无当前着色正文)。同理可调用wglGetCurrentDC获取与当前着色正文相关的设备正文。应用程序有两种方法打破当前着色正文与线程的关系:
      1、  以NULL参数调wglMakeCurrent
      2、  以另外的着色正文柄调wglMakeCurrent
1、之后作该调用的线程就没有了当前着色正文,着色正文从与线程的连接中被释放,着色正文与设备正文的关联结束。OpenGL刷新所有的绘制命令,可能释放一些资源。2、之后作该调用的线程就有了另一个当前着色正文,原着色正文与线程及与设备正文的关联结束。
     4)应用程序用wglDeleteContext删除着色正文,以待删着色正文柄为参数。待删着色正文必须设为非当前着色正文,并且删除或释放相关联的设备正文 (通过调用DeleteDC, ReleaseDC)。

你可能感兴趣的:(Opengl)