游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2670|回复: 3

使用HLSL模糊一张图片时遇到的问题 请高手指点

[复制链接]

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2008-10-13 15:44:00 | 显示全部楼层 |阅读模式
今天我用HLSL写了一个shader用于模糊一张图片:

//Desc: 像素渲染器代码**************************
sampler s_2D = sampler_state
{
  minfilter = LINEAR;
  maxfilter = LINEAR;
};


//--------------------------------------------------------------
// 输入、输出结构
//--------------------------------------------------------------
struct PS_INPUT
{
    float2 tex : TEXCOORD0;
};

struct PS_OUTPUT
{
    float4 Color:COLOR;
};

PS_OUTPUT PS(PS_INPUT psInput)
{
       
        PS_OUTPUT Out_ps = (PS_OUTPUT) 0;
        float2 Temptex;
        float4 TempColor[20];
        for(int i=0;i<15;i++)
        {
                Temptex.x=psInput.tex.x+i/512.0;
                Temptex.y=psInput.tex.y;

                TempColor = tex2D(s_2D,Temptex);
                Out_ps.Color+=TempColor/15.0;
        }
    return Out_ps;
}
//***********************************************************
以上代码何以实现图片模糊,但那是我觉得模糊的还不够就把“PS_OUTPUT PS(PS_INPUT psInput)”中的“for”循环的“i<15”改成了“i<16”,小于15时可以正常运行(运行结果如附图)但是改成小于16时(或更大的值)这个shader就就编译错误。因为我用的是VS2008不能调试HLSL代码,PIX目前还不会用,只是知道在主程序中的D3DXCompileShaderFromFile()函数返回为错误。

所以我想请教高手们,这个问题如何才能解决?

谢谢!
sf_20081013154424.jpg

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-10-13 20:03:00 | 显示全部楼层

Re:使用HLSL模糊一张图片时遇到的问题 请高手指点

你的ps用的什么版本?注意ps20是不支持分支/循环的,所有的循环都是直接做代码展开的,如果循环次数太多,超过ps的最大指令slot限制就会编译出错,解决这个问题的话你可以擐用ps3或者ps2x试试
另外CompileShader不是有参数来存储编译错误信息么?这个直接输出就可以了,你连编译都没通过还调适啥啊...-_-||

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2008-10-13 20:19:00 | 显示全部楼层

Re:使用HLSL模糊一张图片时遇到的问题 请高手指点

谢谢 改成ps_3_0后就可以了

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-10-13 23:31:00 | 显示全部楼层

Re:使用HLSL模糊一张图片时遇到的问题 请高手指点

把图片缩小,然后再做模糊,然后再拉伸,这样可以大大减少循环的次数,减少带宽占用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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