|
|
我在一个shader中有这么一段代码
int flag = 0; // 开关标志
PS_OUTPUT main(VS_INPUT input)
{
if (0 == flag)
// 图像正常显示
else if(1 == flag)
// 图像半透明显示
else if (2 == flag)
// 图像灰色显示
else
// 图像高亮显示
}
我使用d3dxsprite来显示图片,如果我一帧中有多张已经排好显示顺序的图片,其中有些图片要正常显示,有些要灰色显示等,那我就要来回切换flag的值,但是我发现,如果d3dxsprite不调用flush时,设置shader的值就会以最后一次设置的来显示,实现伪码如下
void render()
{
// 设置shader
g_pSprite->Begin(...);
设置shader中flag的值为1
// 渲染图片
g_pSprite->Draw(...);
// 提交渲染,如果不调用,下次设置的flag值会替换上次设置的flag值,导致显示效果不对
g_pSprite->Flush();
继续设置flag值和显示图片...
}
我想请教高手一下,有没有办法在不用flush就可以改变flag的值而且不影响上一张图片的显示,或者说我的实现有问题,有更好的办法,也希望高手能一并赐教,谢谢 |
|