【发布时间】:2012-04-05 09:56:43
【问题描述】:
我有一个表面(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) 进行了一个简单的测试,该三角形 (DrawPrimitive) 使用 alpha 混合显示。
在此测试中,表面首先是 StretchRect,然后是 DrawPrimitive,表面内容显示时不使用 alpha 混合,而三角形显示时使用 alpha 混合。
我在这里缺少什么?谢谢
【问题讨论】:
标签: direct3d alphablending direct3d9