遇到些蛋疼无聊的问题,share下
1, NDEBUG preprocessor:
怪了,以为debug下ok就全ok,release下不就是开个优化么。
结果无穷多的无语的问题困扰了很久,遇到如下这些:
Direct3D9: (ERROR) :Need to call BeginScene before rendering.(我当然是call了BeginScene)
DrawIndexedPrimitive也会fail
DrawIndexedPrimitive内部会有long memory exception...
实在无语,不知道怎么回事,只好和debug版一项项比较,最后发现是preprocessor NDEBUG的问题。
换成RELEASE就好了.
进一步尽到dxsdk的include下面也找不到NDEBUG相关定义的东西。
就不再花时间了。
2, d3d render state cache
本来在console上面因为driver给的灵活性很大(也就是给实现的东西很少),对rendertstate这种东西做cache进而避免掉重复设置是很有效的优化。
(之前这里认识不足,sorry,幸亏楼下有人指出,thx)
pc上create device的时候可以指定是否来做cache等管理的,如果选择puredevice就可以不作任何这种管理,就可以自己来弄了。
我想可能要根据pix截出来的东西来看最准了。
有种情况pc上是有可能自动cache的,也就是内部就不用自己去做和driver一样的cache了。
可以自己开d3d debug模式下,输出所有log会有这种东西:
Direct3D9: (WARN) :Ignoring redundant SetRenderState - 7