RC与DC的介绍与使用
来源:互联网 发布:从零开始学java知乎 编辑:程序博客网 时间:2024/05/22 15:48
OpenGL的绘图方式与Windows一般的绘图方式是不同的,主要区别如下:
1、Windows采用的是GDI在设备描述表DC上进行绘图。
2、OpenGL采用的是OpenGL相关的函数在渲染描述表RC上进行绘图。
3、OpenGL使用的是特殊的像素格式。
在Windows中使用GDI绘图时必须指定在哪个设备环境DC中绘制,同同样的在使用OpenGL函数时也必须指定一个所谓的渲染环境。正如DC要存储GDI的绘制环境信息如笔,刷和字体等,RC也必须保存OpenGL所需的渲染信息如像素格式等。
渲染环境主要由以下六个wgl函数来管理:
1、HGLRC wglCreateContext( HDC hdc )
该函数用来创建一个OpenGL可用的渲染环境。hdc必须是一个合法的支持至少16位色的屏幕设备描述表DC或内存设备描述表的句柄。该函数在调用前,设备描述表必须设置好适当的像素格式。成功创建渲染描述表之后,hdc可以释放或删除。函数返回NULL值表示失败,否则返回值为渲染上下文的句柄。
2、BOOL wglDeleteContex( HGLRC hglrc )
该函数删除一个RC,一般应用程序在删除RC之前,应使它成为非现行RC,不过,删除一个现行RC也是可以得。此时,OpenGL系统冲掉等待的绘图命令并使之成为非现行RC,后删除之。注意:删除一个属于别的线程的RC时会导致失败。
3、HGLRC wglGetCurrentcontext( void )
该函数返回线程的现行RC,如果线程无现行RC则返回NULL
4、HDC wglGetCurrentDC( void )
该函数返回与线程现行RC关联的DC,如果线程无现行RC则返回NULL。
5、BOOL wglMakeCurrent( HDC hdc, HGLRC hglrc )
该函数把hdc和hglrc关联起来,并使hglrc成为调用线程的现行RC,如果传给hglrc的值为NULL,则函数解除关联,并置线程的现行RC为非现行RC,测试忽略hdc参数。
注意:传给该函数的hdc可以不是调用wglCreateContext时使用的值,但是,他们所关联的设备必须相同并且拥有相同的像素格式。一个RC可以由几个现行RC,这是针对调用线程而言的。一个线程在拥有现行RC进行绘图时,别的现场将无法同时绘图。一个线程一次只能拥有一个现行的RC,但是可以拥有多个RC;一个RC也可以由多个线程共享,但是他每次只能在一个线程中试现行RC。在使用RC时,不应该释放或者删除与之关联的DC。如果应用程序在整个生命期内保持一个现行RC,则应用程序也一直占有一个DC资源。Windows系统只有有限的DC资源。
管理RC与DC两种方法
1、在WM_CREATE消息响应时创建RC,创建后立即释放DC;当WM_PAINT消息到来时,程序再获取DC句柄,并与RC关联起来,绘图完成后,立即解除RC与DC得关联并释放DC;当WM_DESTROY消息到来时,程序只需简单的删除RC。
2、RC在程序开始时创建并使之成为现行RC。它将保持为现行RC直至程序结束。相应的,GETDC在程序开始调用,RELEASEDC在程序结束时才调用。此中方法的好处是在相应WM_PAINT消息时,无需调用十分耗时的wglMakeCurrent函数。一般它要消耗几千个时钟周期。
1、Windows采用的是GDI在设备描述表DC上进行绘图。
2、OpenGL采用的是OpenGL相关的函数在渲染描述表RC上进行绘图。
3、OpenGL使用的是特殊的像素格式。
在Windows中使用GDI绘图时必须指定在哪个设备环境DC中绘制,同同样的在使用OpenGL函数时也必须指定一个所谓的渲染环境。正如DC要存储GDI的绘制环境信息如笔,刷和字体等,RC也必须保存OpenGL所需的渲染信息如像素格式等。
渲染环境主要由以下六个wgl函数来管理:
1、HGLRC wglCreateContext( HDC hdc )
该函数用来创建一个OpenGL可用的渲染环境。hdc必须是一个合法的支持至少16位色的屏幕设备描述表DC或内存设备描述表的句柄。该函数在调用前,设备描述表必须设置好适当的像素格式。成功创建渲染描述表之后,hdc可以释放或删除。函数返回NULL值表示失败,否则返回值为渲染上下文的句柄。
2、BOOL wglDeleteContex( HGLRC hglrc )
该函数删除一个RC,一般应用程序在删除RC之前,应使它成为非现行RC,不过,删除一个现行RC也是可以得。此时,OpenGL系统冲掉等待的绘图命令并使之成为非现行RC,后删除之。注意:删除一个属于别的线程的RC时会导致失败。
3、HGLRC wglGetCurrentcontext( void )
该函数返回线程的现行RC,如果线程无现行RC则返回NULL
4、HDC wglGetCurrentDC( void )
该函数返回与线程现行RC关联的DC,如果线程无现行RC则返回NULL。
5、BOOL wglMakeCurrent( HDC hdc, HGLRC hglrc )
该函数把hdc和hglrc关联起来,并使hglrc成为调用线程的现行RC,如果传给hglrc的值为NULL,则函数解除关联,并置线程的现行RC为非现行RC,测试忽略hdc参数。
注意:传给该函数的hdc可以不是调用wglCreateContext时使用的值,但是,他们所关联的设备必须相同并且拥有相同的像素格式。一个RC可以由几个现行RC,这是针对调用线程而言的。一个线程在拥有现行RC进行绘图时,别的现场将无法同时绘图。一个线程一次只能拥有一个现行的RC,但是可以拥有多个RC;一个RC也可以由多个线程共享,但是他每次只能在一个线程中试现行RC。在使用RC时,不应该释放或者删除与之关联的DC。如果应用程序在整个生命期内保持一个现行RC,则应用程序也一直占有一个DC资源。Windows系统只有有限的DC资源。
管理RC与DC两种方法
1、在WM_CREATE消息响应时创建RC,创建后立即释放DC;当WM_PAINT消息到来时,程序再获取DC句柄,并与RC关联起来,绘图完成后,立即解除RC与DC得关联并释放DC;当WM_DESTROY消息到来时,程序只需简单的删除RC。
2、RC在程序开始时创建并使之成为现行RC。它将保持为现行RC直至程序结束。相应的,GETDC在程序开始调用,RELEASEDC在程序结束时才调用。此中方法的好处是在相应WM_PAINT消息时,无需调用十分耗时的wglMakeCurrent函数。一般它要消耗几千个时钟周期。
- RC与DC的介绍与使用
- RC与DC的介绍与使用
- RC与DC的介绍与使用
- DC 与 RC
- rc与多个dc
- DC和RC的简单介绍
- 内存DC与CBitmap的使用
- 内存DC与CBitmap的使用
- opengl编程中RC和DC的介绍
- LDO与 DC-DC的区别
- /etc/rc.d/rc与/etc/rc.d/init.d的关系介绍
- DC/DC与LDO
- DC与GC的区别
- AD与DC的概念!
- DC与GC的区别
- /etc/rc.d/rc与/etc/rc.d/init.d的关系介绍 linux中chkconfig 启动程序顺序
- 开关电源(DC-DC)与LDO电源的区别---原理
- 开关电源(DC-DC)与LDO电源的区别---效率
- Spring,Struts的DTD验证
- PHP哈希表碰撞攻击原理
- 系统设计思考
- flash挡住了导航栏 DIV 下来菜单
- 出色的基于JQuery的Tab选项卡
- RC与DC的介绍与使用
- 教学-传智播客-项目视频经典之作巴巴运动网106集-27实现Web层的分页功能源代码
- 空指针为什么能调用成员函数?(转载)
- 在ubuntu上下载android源码的最新办法
- java.lang.OutOfMemoryError: PermGen space及其解决方法(转)
- 创新工厂CEO李开复:互联网的九个产品精神
- Binary_search_tree from wikipedia
- FPGA学习网站
- 自动打开浏览器