游戏开发论坛

 找回密码
 立即注册
搜索
楼主: bamlan

D3DXSPRITE多次begin-end对效率是不是影响很大?

[复制链接]

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2007-1-9 21:55:00 | 显示全部楼层

Re: Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

lights: Re3DXSPRITE多次begin-end对效率是不是影响很大?

FlyMagic有点过分,胡说都和真的一样。
我来告诉你什么叫做:他会尽可能把可以连接的顶点连起来绘制。
因...


第一,SDK文档中这样写道:ID3DXSprite::End
Calls Flush and restores the device state to how it was before Begin was called.
我应该相信你,还是应该相信SDK的帮助文档?我就不翻译了,别告诉我你看不懂英文。

第二,Sprite里面每Draw的顶点都是没有联系的,根本没有“把可以连接的顶点连起来”这一说。而“说到底都是DrawPrimitive”这完全是你个人的猜测,也说明你根本就不知道Sprite是怎么运作的(就是你口中说的本质)。Sprite就是用来面向2D的应用,它对于纹理的操作也是完全独立于SetTexture所设置的纹理,只要是纹理他都可以拿来绘制,根本不是像你说的“一次只能用一副图片”,更不会“在收到end之前,不更换图片绝对不会绘制多次”。那是DrawPrimitive才会那样。

第三,其它的Sprite机制和D3DXSPRITE是不一样的。做法不一样,当然结果就不一样,用起来就不一样。讨论下去毫无意义。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-1-9 22:34:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

迷信d3dxsprite是你的自由,让真正要用的人自己判断吧。如果你觉得d3d上有什么东西可以脱离drawprimitive我也无话好说。

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2007-1-9 23:39:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

莫名其妙,这跟迷信不迷信有什么关系。想必你肯定是一开始就学3D的,对2D的东西一点也不清楚。我自己在引擎中使用过d2dxsprite,所以有体会,所以也不会得出像“一次只能用一副图片,在收到end之前,不更换图片绝对不会绘制多次”等这种荒谬的结论。你这完全是在“想当然”,如果想要别人相信你,就拿出点证据来,即便你证明我是错的,对我来说反而也是一种帮助,让我认清一件事情。如果没有得力的论证,那么就请不要在这里发表这种没有责任的言论。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-1-10 10:19:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

我99年到2000年用d3dxsprite开发了一个游戏项目,也是深有体会。从效率数据上我深信不疑他就是DrawPrimitive,因为我重新写过的版本有着和他几乎一样的优缺点和效率结论。
对于那个荒谬结论,如果你愿意把rendertarget改掉逐步跟踪,是可以证明的。
从最终效率数据上也可以证实,同时证实他内部根本没有排序。
在那之后我才去认真地学习3d,因为这东西根本就是用3d的部分功能实现的一个封装。

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2007-1-10 10:43:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

拜楼上所赐,我特意去查阅了一下sdk。
Calls Flush and restores the device state to how it was before Begin was called.
这个和我说的冲突么?
我前面说他内部根本不做排序是错的,他在begin的标志中其中有一个是D3DXSprite__SORT_TEXTURE
这个就会排序了。
不过你觉得要是他不是drawprimitive,干嘛用贴图排序?
试试交错渲染贴图和排序渲染得效率吧,我测过的,你也测一下会比较有体会。
还有这个D3DXSPRITE_DONOTMODIFY_RENDERSTATE
这个D3DXSPRITE_DONOTSAVESTATE
一个会受外部渲染状态的影响,一个会改变。
从这个字面意思你还不相信他就是用d3d的渲染状态控制的么?

还有一件有趣的事,d3dxsprite是受shader影响的,你觉得不是顶点有可能么?

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2007-1-10 11:19:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

恩,讨论了这么多,就lights的话还靠普,其他人基本是处于搞封建迷信的混沌时代。

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2007-1-10 14:40:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

你说了几点:第一,每Draw一次便改变一次状态,如果是这样的话,Calls Flush and restores the device state to how it was before Begin was called.这句话显然跟你有冲突。

第二、你说的:
我前面说他内部根本不做排序是错的,他在begin的标志中其中有一个是D3DXSprite__SORT_TEXTURE
这个就会排序了。
不过你觉得要是他不是drawprimitive,干嘛用贴图排序?

简直就是自相矛盾。既然你前面认为Sprite是使用“drawprimitive”,但是你前面又认为“内部根本不做排序”,这就说明,在你最初的认识中,drawprimitive和是否排序根本没有关系。但是在现在,你又说这两者是相关的!

第三、什么“从效率数据上我深信不疑”这明显就是你的主观猜测,你知道DirectDraw中的BitBlt吗?你连Sprite的帮助文档都没看过,就来这大谈特谈,看来我真是浪费时间了。

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2007-1-10 15:02:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

奉劝某些小白拿WinDBG和SoftICE等工具,加上windows的symbols跟一下d3dxSprite的draw再来说话,不要把自己YY的东西说得跟真的似的。

20

主题

465

帖子

472

积分

中级会员

Rank: 3Rank: 3

积分
472
QQ
发表于 2007-1-10 17:14:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

贱人,老子现在没空跟你吵,没事滚一边去。

6

主题

20

帖子

24

积分

注册会员

Rank: 2

积分
24
 楼主| 发表于 2007-1-10 20:32:00 | 显示全部楼层

Re:D3DXSPRITE多次begin-end对效率是不是影响很大?

呵呵,非常感谢各位对我提示的回复,看得出来,各位都是很乐意帮助别人的,也乐于发表自己对问题的一些看法与心得,正是有了各位这种无私,才会有后来者的进步,不过,我觉得,心平气和的交流是不是比争吵这种交流方式更合适一些呢.今天看了下aear写的C++基本功和 Design Pattern系列,对千里马肝的回复印象深刻,不从技术上说,回复语言层面,虚怀若谷的心态,就是我的榜样,
好的心态更容易带来好的心情!
再一次感谢各位的帮助与指教,祝各位天天开心!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 06:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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