OpenGL绘图窗口 能用BitBlt函数拷贝内容吗
1个回答
展开全部
1、远程连接时,无法使用硬件加速。此时Direct3D的程序往往无法运行,而OpenGL的程序只能用OpenGL 1.1,也就是微软在很早的年代发布的一个OpenGL版本,采用软件实现,没有利用显卡的硬件加速功能。微软的这个OpenGL实现,分为两种情况:如果设置为双缓冲,那就只能OpenGL绘图;如果设置为单缓冲,那就可以OpenGL和GDI函数混合使用(例如可以DrawText之类的)。
如果不是远程连接,此时一般都是启用硬件加速,采用显卡厂商自己提供的OpenGL,并不支持与GDI混合使用。
2、不用GDI,在OpenGL应该如何做,1楼已经答复了。我整理一下。
方法一、先用glReadPixels把像素都读取到内存,然后用glDrawPixels,把内存中的像素绘制到另一个窗口去。这个方法需要把像素数据从显卡发送到内存,然后再从内存发送到显卡,因此效率低。
方法二、采用纹理,先用glCopyTexImage2D或者glCopyTexSubImage2D,把像素拷贝到纹理中,然后再使用这个纹理,绘制到另外的窗口去。这种做法效率较高。
方法三、采用p_buffer,或者buffer object。其实原理跟方法二类似,效率也类似。不过,p_buffer需要WGL_ARB_pbuffer扩展,一般只能在Windows使用,不方便移植;而buffer object需要OpenGL 1.5加扩展,或者需要OpenGL 2.0,如果你是远程登陆,那就不行了。
如果不是远程连接,此时一般都是启用硬件加速,采用显卡厂商自己提供的OpenGL,并不支持与GDI混合使用。
2、不用GDI,在OpenGL应该如何做,1楼已经答复了。我整理一下。
方法一、先用glReadPixels把像素都读取到内存,然后用glDrawPixels,把内存中的像素绘制到另一个窗口去。这个方法需要把像素数据从显卡发送到内存,然后再从内存发送到显卡,因此效率低。
方法二、采用纹理,先用glCopyTexImage2D或者glCopyTexSubImage2D,把像素拷贝到纹理中,然后再使用这个纹理,绘制到另外的窗口去。这种做法效率较高。
方法三、采用p_buffer,或者buffer object。其实原理跟方法二类似,效率也类似。不过,p_buffer需要WGL_ARB_pbuffer扩展,一般只能在Windows使用,不方便移植;而buffer object需要OpenGL 1.5加扩展,或者需要OpenGL 2.0,如果你是远程登陆,那就不行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询