|
我最近写了一个使用D3D9绘制2D的程序, 其中2D绘图部分使用了着色器.
问题是每画一个物体之后, 前面的物体居然不见了. 这太奇怪了, 找了很久都没发现问题所在.
在两个物体绘制之间我没有调用任何可能导致清屏的函数, 而且两次绘图调用都是夹在 BeginScene 和 EndScene 之间的
更为奇怪的是, 当我把第二个物体的透明度调成 50% 半透明后, 前面画的东西居然从这个物体的透明处显现出来了, 真怪了
其相关代码如下:
// 顶点着色器
float4 g_ViewportTextureSize : register(c0);
void VSMain(inout float2 TexUV : TEXCOORD,
inout float4 Color : COLOR,
in float2 Pos : POSITION,
out float4 OutPos : POSITION)
{
OutPos = float4(Pos, 0.0f, 1.0f);
OutPos.xy -= 0.5f;
OutPos.xy /= g_ViewportTextureSize.xy;
OutPos.xy *= float2(2.0f, -2.0f);
OutPos.xy -= float2(1.0f, -1.0f);
TexUV /= g_ViewportTextureSize.zw;
}
// 像素着色器
sampler g_TextureSampler : register(s0);
float4 PSMain(in float2 TexUV : TEXCOORD, in float4 Color : COLOR) : COLOR
{
return tex2D(g_TextureSampler, TexUV) * Color;
}


 |
|