QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1102|回复: 10

令人费解的画线效率问题?

[复制链接]
发表于 2004-4-22 00:01:17 | 显示全部楼层 |阅读模式
我做了两个试验,都是在半径为512象素的圆上画半径(有点像雷达扫描)
  第一个试验:用sdl画。每根线用SDL_UpdateRects()画。Rects是512个矩形(每个矩形就是一个象素,因为SDL只有按Rect的方式update,所以只能样)
  第二个试验:用qt种的drawLine(),只要给出线段的起始点和终点,就能自动画线段(经过证实该函数调用了xlib的XDrawLine()函数).
  试验结果:SDl 2秒一圈。
           qt  一秒15圈。

效率相差之大令我惊讶!因为从对内存和显存的操作次数来看,由于SDL采用double frame buffer技术,所以也不会相差这么大亚,(SDL应该是qt的两倍吧)。
   注:SDL画线的坐标我事先已经做好了表,不许画线是做sin cos之类的算。
哪位大侠解释一下。

   另外,如果我想在qt中画斜线,但是线上的象素点互不一样,有什么快速的画法?(frame buffer不要再用了,对于画线效率低!XDrawLine(),只能画所有象素颜色一样的线)

   谢谢!
发表于 2004-4-22 14:45:24 | 显示全部楼层
在SDL中不要对每一个象素点进行UpdataRect,等全部的点画完之后,一次地将线段所在的区域刷新。
回复

使用道具 举报

 楼主| 发表于 2004-4-22 17:27:40 | 显示全部楼层

如何一次地将线段所在的区域刷新?

SDL update只能以矩形方式更新亚,如何
更新斜线呢?
  大虾能说具体点吗?
  小弟快要 faint to death 了!
   谢谢!
回复

使用道具 举报

发表于 2004-4-22 21:20:03 | 显示全部楼层
我的印象中好象有一种操作(记不太清了...):
可以对一个surface先进行lock,然后对其直接进行操作,然后再unlock……也许这样能有解决的办法?
回复

使用道具 举报

发表于 2004-4-22 23:53:42 | 显示全部楼层
线段的两个端点就可以确定其所在的矩形了呀,另外最好能正确地使用双缓冲。
回复

使用道具 举报

 楼主| 发表于 2004-4-23 08:44:07 | 显示全部楼层

你没有理解我的意思

我要求更新一条线,你要更新一个包含线的矩形。
  你见过雷达的扫描吗?线是均匀分布的半径。怎么能updateRect()
   我倒是用updateRects试试过(Rects是某个半径上所有点构成的矩形数组。)速度也不快。
回复

使用道具 举报

 楼主| 发表于 2004-4-23 08:45:02 | 显示全部楼层

你没有理解我的意思

我要求更新一条线,你要更新一个包含线的矩形。
  你见过雷达的扫描吗?线是均匀分布的半径。怎么能updateRect()
   我倒是用updateRects试试过(Rects是某个半径上所有点构成的矩形数组。)速度也不快。
回复

使用道具 举报

 楼主| 发表于 2004-4-23 08:45:18 | 显示全部楼层

你没有理解我的意思

我要求更新一条线,你要更新一个包含线的矩形。
  你见过雷达的扫描吗?线是均匀分布的半径。怎么能updateRect()
   我倒是用updateRects试试过(Rects是某个半径上所有点构成的矩形数组。)速度也不快。
回复

使用道具 举报

 楼主| 发表于 2004-4-23 08:45:38 | 显示全部楼层

你没有理解我的意思

我要求更新一条线,你要更新一个包含线的矩形。
  你见过雷达的扫描吗?线是均匀分布的半径。怎么能updateRect()
   我倒是用updateRects试试过(Rects是某个半径上所有点构成的矩形数组。)速度也不快。
回复

使用道具 举报

 楼主| 发表于 2004-4-23 08:49:20 | 显示全部楼层

你没有理解我的意思

我要求更新一条线,你要更新一个包含线的矩形。
  你见过雷达的扫描吗?线是均匀分布的半径。怎么能updateRect()
   我倒是用updateRects试试过(Rects是某个半径上所有点构成的矩形数组。)速度也不快。
   我不是说过了吗,framebuffer要写后台内存,前台内存共两次,所以我说是两倍关系。怎么会效率那么低!
回复

使用道具 举报

 楼主| 发表于 2004-4-23 23:36:53 | 显示全部楼层

faint,我不是在灌水

斑竹,我点了发送,网页传来发送不成功,我就多点了几下,怎么都是成功的。
faint to death!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 10:55 , Processed in 0.061786 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表