网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月04日漏签0天
c++吧 关注:631,540贴子:2,114,004
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 1 2 下一页 尾页
  • 112回复贴,共2页
  • ,跳到 页  
<<返回c++吧
>0< 加载中...

求救,双缓存时间超长!!!

  • 只看楼主
  • 收藏

  • 回复
  • O子弹O_O
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用GDI+做的界面双缓存,问题如下:
双缓存之前绘图的帧率稳定在500上下,而双缓存我是这么做的:
创建窗口等大位图:Bitmap* backbuf = new Bitmap(cxClient, cyClient);
获取位图绘图对象:Graphics* bufGraphics = new Graphics(backbuf);
②对了,每次绘图前都要把位图填充为白**ufGraphics->FillRectangle(&backbrush, 0, 0, cxClient, cyClient);
③绘制完成后将位图绘制到窗口缓冲区:graphics->DrawImage(backbuf, 0, 0);
①而且因为HDC在每次截取WM_PAINT的时候都不一样,所以每次都会实例化graphics = new Graphics(hdc);
很奇怪,这样做了以后帧率突然降到40上下,搞得我不敢往下做了,再做下去帧率降到几,那可真over了
在WM_PAINT消息处理中一共就三步,上面已标记,求做过的兄弟姐妹叔叔阿姨哥哥姐姐帮帮忙,到底是哪一步占用了太多的时间片?


  • itianda
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
CachedBitmap


2025-09-04 06:44:15
广告
不感兴趣
开通SVIP免广告
  • O子弹O_O
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
而且我试过了,如果将窗口的hbrBackground设置为默认颜色(HBRUSH)(COLOR_WINDOW+1)帧率是700上下,不停闪烁,如果把这个属性设置为NULL,则帧率为1000以上,不会刷新内容,只会堆积……


  • zealot_sean
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
释放没?


  • O子弹O_O
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不对呀,为什么我才绘制两次,速度会下降这么多?


  • itianda
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

类似这样,这是以前写的东西的部分代码。你可以用GetTickCount统计一下,基本上执行时间都是0。


  • itianda
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
实际上wm_paint最耗时的地方不是图像运算而是贴图,使用cachedbitmap只更新paintstruct指定的区域就好。为了防闪一般都不设置背景画刷,只在wm_paint处绘图,不响应背景清除消息。


  • 贴吧用户_0aX3aA7128
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
XP后的系统,窗口样式WS_EX_COMPOSITED就是使用系统提供的双缓冲。


2025-09-04 06:38:15
广告
不感兴趣
开通SVIP免广告
  • 御坂美琴みさか
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • O子弹O_O
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
http://www.cthbg.com/zuoyouxi/27.html


  • 御坂美琴みさか
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你的那篇游戏帧的时间控制讲的太粗略了


  • 御坂美琴みさか
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
http://blog.misakamm.org/p/289


  • 贴吧用户_0JNJWtE684
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果是普通的在WM_PAINT里画图,就要在WM_PAINT里计算点的坐标、填色。这样在WM_ERASEBKGND之后、画完之前就有一大堆的计算量,增加了窗口为空白的时间。而双缓冲就是平时画在内存里,需要的时候对拷到屏幕上,不需要再计算。只是降低闪烁的时间以至于察觉不到而已。


  • 萧の十三郎
  • *
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是来围观的


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 112回复贴,共2页
  • ,跳到 页  
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示