我有一个表面(OffScreenPlain 或带有 D3DFMT_A8R8G8B8 的 RenderTarget),我将像素 (ARGB) 从第三方函数复制到该表面。在像素复制之前,Bits 由 LockRect 访问。
然后这个表面是 StretchRect 到 Backbuffer,即 (D3DFMT_A8R8G8B8)。Surface 和 Backbuffer 是不同的维度。过滤设置为 D3DTEXF_NONE。
在创建 d3d 设备后,我设置了以下 RenderState 设置
D3DRS_ALPHABLENDENABLE -> TRUE
D3DRS_BLENDOP -> D3DBLENDOP_ADD
D3DRS_SRCBLEND -> D3DBLEND_SRCALPHA
D3DRS_DESTBLEND -> D3DBLEND_INVSRCALPHA
但我没有看到 alpha 混合发生。我已经验证了 alpha 是以像素为单位指定的。
我通过创建一个顶点缓冲区并绘制一个三角形(DrawPrimitive)来完成一个简单的测试,该三角形使用 alpha 混合显示。
在这个测试中,表面首先是 StretchRect,然后是 DrawPrimitive,表面内容显示时不使用 alpha 混合,而三角形显示时使用 alpha 混合。
我在这里想念什么?谢谢