CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  游戏开发

openGL 双缓冲问题

楼主kmzwm(狂战士)2005-04-02 13:48:10 在 专题开发/技术/项目 / 游戏开发 提问

OpenGL与window GDI接合编程一般方式是:  
   
   1   调用SetPixelFomart,   指定像素格式为双缓冲  
   2   用DC创建RC   hRC=wglCreateContext(hDC);  
      3   指定当前的DC、RC  
      4   调用OpenGL接口画图  
      5   画完之后,调用SwapBuffer(hdc)   将内容刷新到屏幕上.  
      6   释放DC,   RC  
   
    我现在问题是:  
   1   在第四步中,能否调用GDI的接口,还是必须调用OpenGL接口  
   2   根据这些步来看,DC与RC进行了关联,这个DC显示范围是针对window窗口还是只针窗口客户区,或者还是整个屏幕.  
   3   在window中,存在多个窗口相互overlap的问题,如果被盖窗口调用了swapbuffer函数,显示又是怎么样的?  
    因为我对OpenGL一点都不清楚,盼DX解答! 问题点数:50、回复次数:3Top

1 楼Diab1o(菠萝)回复于 2005-04-02 21:37:09 得分 50

1.   必须用OpenGL的接口,因为无法得到后台帧缓存的句柄,直接用GDI接口修改DC的话会闪烁。  
  2.   dc的显示范围自然是创建它的窗体客户区。  
  3.   swapbuffer操作只改变设备环境关联的那个窗体,前端的窗口不受影响。  
  这种问题不如自己试一试。Top

2 楼kmzwm(狂战士)回复于 2005-04-03 21:58:14 得分 0

 
  如果在WM_PAINT消息中调用OpenGL绘图函数,有一个问题是WM_PAINT消息中,Window只会将需要刷新的区域更新那屏幕上,而没有脏的区域不会更新!  
  这样,如果调用OpenGL函数,有可能已经需要刷新的区域而window窗口管理系统不知道而得不到刷新!这样显示内容不全!  
   另外,假设这个缓冲区显示范围是整个窗口客户区,如果客户区被别的窗口盖了一部分,如果调用SwapBuffer()函数是将整个后背缓冲区内容刷新到屏幕上,这样会将前面的那个窗口内容搞乱!这些情况,window和OpenGL是怎么样处理?Top

3 楼Diab1o(菠萝)回复于 2005-04-04 14:18:55 得分 0

你所说的情况是你亲眼所见还是猜测的?至少我没碰到过。如果OpenGL窗口的内容不完全是被动更新(只更新脏区域)的话,就不应该在WM_PAINT消息中调用OpenGL绘图函数,而应该另开线程或者在窗体空闲时不停的更新。如果完全是被动更新则不存在需要更新而系统不知道的情况。  
      关于SwapBuffer我已经说过了,不会影响前台的窗口。  
  Top

相关问题

  • OpenGL双缓冲!急!!!
  • 关于OpenGL双缓冲!急!!!马上给分
  • 双缓冲问题
  • 双缓冲绘图问题!!!
  • 双缓冲绘图问题?
  • 关于HDC及双缓冲的问题?
  • 请教:双缓冲的问题
  • 关于双缓冲的问题
  • 在DOS 下如何实现双缓冲技术.(C/C++)
  • _____高分求教,有关于双缓冲的问题______

关键词

  • opengl
  • 函数
  • 接口
  • 屏幕
  • 区域
  • dc
  • 客户
  • 内容
  • 消息
  • 调用

得分解答快速导航

  • 帖主:kmzwm
  • Diab1o

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo