首页 > C/C++开发工具专区 > VC技术 > 避免IDirect3DDevice2::DrawPrimitive方法的分批(Ba
2006
07-29

避免IDirect3DDevice2::DrawPrimitive方法的分批(Ba

系统需求:

Windows 9x

Visual C++ 6.0 (或 5.0) 编译器

安装DirectX 6 或 7、8

  在Direct3D中,每当用IDirect3DDevice2接口进行质地感处理的时候,如果在我们的场景中调用IDirect3DDevice2::DrawPrimitive() 或 IDirect3DDevice2::DrawIndexedPrimitive()方法时,就会碰到这个分批问题。

  尽管分批改进了Direct3D的性能,但它也带来一些问题。当这两个方法之一被分批作业时,DirectX将它们缓冲在一起并将它们在一次性地传递到Direct3D设备驱动程序。如果我们在场景中修改表现状态,则这也要被缓冲。缓冲一旦装满或调用IDirect3DDevice2::EndScene()方法时,其内容则被马上传递到驱动程序。如果修改了场景而不改变表现状态,那么在我们的代码结构中会出现运行错误。

例如,如果我们在调用IDirect3DDevice2::DrawPrimitive 或 IDirect3DDevice2::DrawIndexedPrimitive之间修纹理内容之一,则两个原始的将被新的纹理替代。

这个问题可以通过在修改保持呈现状态的场景之前冲刷掉分批缓冲来避免。为了冲刷分批缓冲,用IDirect3DDevice2::SetRenderState()方法并将D3DRENDERSTATE_FLUSHBATCH的枚举值作为第一个参数传递。注意第二个参数必须是0。


留下一个回复