我正在使用 Direct3D 9 来绘制线条。
我现在使用的顶点具有格式D3DFVF_XYZ|D3DFVF_DIFFUSE
并存储在顶点缓冲区中。它们是用DrawPrimitive
as绘制的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
。