【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2561|回复: 6

sprite->Begin() And sprite->End()???

[复制链接]
发表于 2006-5-14 21:54:48 | 显示全部楼层 |阅读模式

有一个问题想问大家:

有2种代码完成同一个任务(下面是伪代码):

一:

sprite->Begin();

for(int i=0;i<1000;i++)

{

sprite->Draw();

}

sprite->End();

二:

for(int i=0;i<1000;i++)

{

sprite->Begin();

sprite->Draw();

sprite->End();

}

这2种方法,我一直很困惑,它们有速度差异吗,有的话,谁更快????

发表于 2006-5-14 22:33:54 | 显示全部楼层

我觉得应该是有的,方法一应该更能节省资源

sprite->Begin();

sprite->End();

应该是在请求显示资源,里面的内容重复出现并不要求重复请求显卡资源,所以第二种方法显然存在这不可知的弊端。

 楼主| 发表于 2006-5-15 07:40:17 | 显示全部楼层
我也这样认为的,因为简单的从代码的执行量来说的话,第二种方法执行的代码要多一些
发表于 2006-5-15 09:29:22 | 显示全部楼层

哈哈桑,那倒是

 楼主| 发表于 2006-5-15 10:53:54 | 显示全部楼层

不过还有一个问题:

我们的真实代码一般都是:

sprite->Begin();

DoSomeCompute();

sprite->Draw();

sprite->End();

关键是这里的"DoSomeCompute()",我们在画一个东西之前肯定要经过很多计算,比如位置,动画帧......

如果"DoSomeCompute()"要花比较长的时间,那么就意味着我们的代码要在Begin()和End()之间停留很长时间,那么这时候其他的sprite就不能画了.

这是否以为着我们要把"DoSomeCompute()"放到Begin()和End()之外???

发表于 2006-5-15 13:53:36 | 显示全部楼层

理论上可以啊

只要这些东西并不是给画面上绘制东西就没有必要放在这里面

不过这里留有一点点空隙释放给系统我觉得还是挺好的,原来不怎么喜欢释放资源给系统,后来发现经常给系统释放资源游戏效率反而会提高

 楼主| 发表于 2006-5-15 18:09:13 | 显示全部楼层
我就是担心,把计算和显示同时放到Begin和End之间,会让一个程序对显卡占用的时间过长,从而影响到其他的程序正常运行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2024-6-3 22:35

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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