游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3992|回复: 10

使用shader时渲染效果切换问题

[复制链接]

10

主题

53

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2008-8-16 18:44:00 | 显示全部楼层 |阅读模式
我在一个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的值而且不影响上一张图片的显示,或者说我的实现有问题,有更好的办法,也希望高手能一并赐教,谢谢

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-16 20:50:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

d3dxsprite是固定管线的,不能用shader

10

主题

53

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2008-8-16 21:13:00 | 显示全部楼层

Re: Re:使用shader时渲染效果切换问题

qrli: Re:使用shader时渲染效果切换问题

d3dxsprite是固定管线的,不能用shader

可以用shader的

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-16 22:51:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

那得保留device状态吧。嗯,确实可能。

d3dxsprite是缓冲满或者flush或end时才绘制的,你为什么要不flush呢?

10

主题

53

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2008-8-17 00:31:00 | 显示全部楼层

Re: Re:使用shader时渲染效果切换问题

qrli: Re:使用shader时渲染效果切换问题

那得保留device状态吧。嗯,确实可能。

d3dxsprite是缓冲满或者flush或end时才绘制的,你为什么要不flush呢?

我不知道这样子做好不好,效率高不高,还有也想知道有没有更好的方法

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-17 09:58:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

提交绘制数据(flush)的次数当然是越少越好,但修改任何render state(包括shader参数)都必须在两次绘制之间的。

如果你修改状态很频繁,就得考虑把那个flag存到per vertex的数据里,用shader处理。不过这样d3dxsprite就可能不合适了,除非你能把这个flag编码到颜色或z value里。

10

主题

53

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2008-8-17 12:07:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

还有更好的方法吗,你所说的虽然可行,但总感觉有点那么恶心,明显不沾边的数据都混在一块了

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-8-17 14:50:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

你按flag把sprite排个序,切换次数就少了

10

主题

53

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2008-8-17 19:45:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

图片都是按画家算法排好序的,怎么可以按flag排序呢

2

主题

132

帖子

132

积分

注册会员

Rank: 2

积分
132
发表于 2008-9-4 09:27:00 | 显示全部楼层

Re:使用shader时渲染效果切换问题

那个PixelShader是编译的多少版本的?2.0的ps汇编里面没有if跳转,只有patten方式,这样不怎么好。
你可以设置每个图元设置几个属性,比如透明度、灰度、高亮程度,都是0-1的一个百分比。
然后再ps里面显示要好些,就不用按照flag排序。还有用d3dxsprite+shader确实我没有这样用过,可以直接使用DrawPrimitive这种方式吧,也很方便的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 03:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表