如何在另一种颜色的顶点缓冲区中绘制顶点

时间:2013-05-08 18:59:21

标签: c++ directx direct3d vertex-buffer

我正在使用Direct3D 9绘制线条。

我现在使用的顶点格式为D3DFVF_XYZ|D3DFVF_DIFFUSE,并存储在顶点缓冲区中。它们使用DrawPrimitive作为D3DPT_LINELIST绘制。

如何在不锁定顶点缓冲区以修改其内容的情况下更改整个绘制顶点缓冲区甚至特定顶点的绘制颜色?这必须在每一帧完成。

这是否可以使用顶点缓冲区?我更喜欢没有自定义着色器的解决方案(使用默认的direct3d 9管道)。

如果这是不可能的,那么表现明智的下一个最好的事情是什么?我只能想到锁定顶点缓冲区或使用DrawPrimitiveUP。两者都是非常糟糕的表现。


更新了解决方案代码:

m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CONSTANT);
m_pDevice->SetTextureStageState(0, D3DTSS_CONSTANT, D3DCOLOR_ARGB(120,0,255,0));

顶点不再需要FVF_DIFFUSE

1 个答案:

答案 0 :(得分:1)

使用固定功能管道,您可以使用SetTextureStageStatedoc)指定常量颜色,该颜色应与D3DTSS_CONSTANTdoc)一起使用。使用此选项,您可以为整个drawcall设置颜色。