游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2408|回复: 1

关于D3D的SetRenderState切换影响效率的问题!!!

[复制链接]

5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2008-3-1 21:44:00 | 显示全部楼层 |阅读模式
现在我的D3D程序的效率还不够好,在看了D3D优化的部分资料后,好多地方提到尽量减少渲染状态的切换(调用SetRenderState),但是我有一个疑问,假设有如下的程序段:

{
  SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
  DrawA(...);
}

...// 这中间没有调用SetRenderState(D3DRS_DESTBLEND,...)了;

{
  SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
  DrawB(...);
}

这样的情况到底D3D内部是否是算渲染状态的切换,或者它在SetRenderState的函数内部仅仅是做了一个if的判断,然后就返回了。假如不是这样的话那需要我自己去写一层判断是否设置的状态和当前状态相等的包装。虽然做起来比较简单但是还是想知道D3D内部是否是这样做的,当然相似还有SetTexture等。

望各位大侠高手帮忙解答,多谢了!

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-3-2 03:56:00 | 显示全部楼层

Re:关于D3D的SetRenderState切换影响效率的问题!!!

D3D内部是对SetRenderState做了一定优化的,但究竟优化到什么程度,我也不太清楚
你说的这种情况,DX应该会做判断优化的
如果你用shader,可以通过实现ID3DEffectStateManager来自己进行判断
但是这样做实际也往往并不能会来多大的性能提升,建议你还是通过测试来决定那种适合

上面那种情况只是小问题,关键是不要出现这种情况:
SetRenderState(a)
SetRenderState(b)
SetRenderState(a)
SetRenderState(b)
这是无论你手动判断,还是dx都无法优化的

要减少state change,好的sort算法才是关键

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

本版积分规则

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

GMT+8, 2025-12-20 07:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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