我正在尝试在directX10中渲染位图字体,我希望尽可能高效地执行此操作。由于这个问题,我现在很难开始设计。
那么我应该重用一个VertexBuffer还是制作多个VertexBuffer对象?
目前,我在程序中为每个Quad对象分配一个动态VertexBuffer。这样,如果我的屏幕上没有任何移动,我就不必映射/取消映射VertexBuffer。对于字体,我可以实现一个类似的方法,我在每个文本框中分配一个缓冲区,或类似的东西。
搜索后,我读到了为所有对象重用单个VertexBuffer。顶点缓存也出现了。这有什么优点/缺点,是否比我以前的方法更快?
最后,我还应该考虑在屏幕上渲染许多2d四边形吗?
提前谢谢。
答案 0 :(得分:0)
使用具有DISCARD和NO_OVERWRITE正确组合的单个动态顶点缓冲区是处理此类动态提交的最佳方式。驱动程序将使用DISCARD执行缓冲区重命名,以最大限度地减少GPU停顿。
这是SpriteBatch / SpriteFont和PrimitiveBatch在DirectX Tool Kit中使用的机制。您可以查看该源以获取详细信息,如果确实需要,您可以将其采用到Direct3D 10.x.当然,转向Direct3D 11可能是更好的选择。