游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3743|回复: 8

关于DIRECTXSDK版本问题

[复制链接]

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2008-5-8 23:26:00 | 显示全部楼层 |阅读模式
我以前是用9.0C August 2006写的
现在改成9.0C之后的某版本后(忘记下的是哪版的了)
D3DXCreateEffectFromFile( Device, "***", NULL, NULL, 0, NULL, &teffect, NULL );
这样的函数总返回FAILED,本来没问题的
到底是SHADER编写上的问题还是,D3DXCreateEffectFromFile函数的问题啊。。。。
PS:貌似是SHADER编写上的问题 用别人的FX没问题,难道版本更新了 HLSL兼容变差了。。。

这是其中一个EFFECT
//
// 简单的顶点着色
//

//变换矩
float4x4 matW: WORLD;
float4x4 matV: VIEW;
float4x4 matP: PROJECTION;

float4 s;

// 纹理
texture        tex0;
texture        tex1;
texture        tex2;
texture        tex3;
texture        tex4;
texture        tex5;

// 输入顶点格式
struct VS_INPUT
{
        float3 pos  : POSITION;
        float4 diff : COLOR;
        float2 tex  : TEXCOORD0;
        float2 tex1 : TEXCOORD1;
};

// 输出顶点格式
struct VS_OUTPUT
{
        float4 pos  : POSITION;
        float4 diff : COLOR;
        float2 tex  : TEXCOORD0;
        float2 tex1 : TEXCOORD1;
        float2 tex2 : TEXCOORD2;
};

// 声明名为VS的顶点着色器
VS_OUTPUT VS( VS_INPUT In )
{
        VS_OUTPUT Out = (VS_OUTPUT)0;
        float4x4 WorldView = mul(matW, matV);
        float3 P = mul(float4(In.pos, 1), (float4x3)WorldView);
        Out.pos  = mul(float4(P, 1), matP);
        Out.tex.x = In.tex.x;
        Out.tex.y = In.tex.y;
        Out.tex1.x = In.tex1.x;
        Out.tex1.y = In.tex1.y;
        Out.diff=In.diff;

        float3 aa={1,1,1};
        float2 tt=mul(aa,(float2x2)matW);

        float4 p2=mul(float4(In.pos,1),matW);
        Out.tex2.x=p2.x;
        Out.tex2.y=p2.z;
        return Out;
}

// 纹理采样状态
sampler s0 = sampler_state{Texture=(tex0);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s1 = sampler_state{Texture=(tex1);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s2 = sampler_state{Texture=(tex2);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s3 = sampler_state{Texture=(tex3);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s4 = sampler_state{Texture=(tex4);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};
sampler s5 = sampler_state{Texture=(tex5);MipFilter=LINEAR;MinFilter=LINEAR;MagFilter=LINEAR;};


float4 PS(
        float4 diff  : COLOR,
        float2 Tex0  : TEXCOORD0,
        float2 Tex1  : TEXCOORD1,
        float2 Tex2  : TEXCOORD2
        ) : COLOR
{
        float4 vfade =tex2D(s3, Tex1);
        float4 d1=tex2D(s0,Tex0);
        float4 d2=tex2D(s1,Tex0);
        float4 d3=tex2D(s2,Tex0);
        float4 shadow=tex2D(s4,Tex1);
        float4 outf=shadow*(vfade.r*lerp(0,d1,1)+vfade.g*lerp(0,d2,1)+vfade.b*lerp(0,d3,1));
        return outf;
}
float4 PS_shadow(
        float4 diff  : COLOR,
        float2 Tex0  : TEXCOORD0,
        float2 Tex1  : TEXCOORD1,
        float2 Tex2  : TEXCOORD2
        ) : COLOR
{
        float4 vfade =tex2D(s3, Tex1);
        float4 d1=tex2D(s0,Tex0);
        float4 d2=tex2D(s1,Tex0);
        float4 d3=tex2D(s2,Tex0);
        float4 shadow=tex2D(s4,Tex1);
        float shadow2=1.0f;
        if(Tex2.x<s.x+2&&Tex2.y<s.z+2&&Tex2.x>s.x-2&&Tex2.y>s.z-2)
        {
                float2 texx={0,0};
                texx.x=(Tex2.x-s.x+2)/4;
                texx.y=1-(Tex2.y-s.z+2)/4;
                shadow2=tex2D(s5,texx);
        }
        float4 outf=shadow2*shadow*(vfade.r*lerp(0,d1,1)+vfade.g*lerp(0,d2,1)+vfade.b*lerp(0,d3,1));
        return outf;
}
float4 PSline(
        float2 Tex0  : TEXCOORD0,
        float2 Tex1  : TEXCOORD1,
        float4 diff  : COLOR
        ) : COLOR
{
        return ((float4)0);
}
// MyShader技巧声明
technique MyShader
{
    pass P0        // 最初的0号pass
    {
       
        // shaders
        VertexShader = compile vs_2_0 VS();
        PixelShader  = compile ps_2_0 PS();
    }
}
technique MyShadow
{
    pass P0        // 最初的0号pass
    {
       
        // shaders
        VertexShader = compile vs_1_0 VS();
        PixelShader  = compile ps_2_0 PS_shadow();
    }

}
technique MyShader2
{
    pass P0        // 最初的0号pass
    {
       
        // shaders
        VertexShader = compile vs_1_0 VS();
        PixelShader  = compile ps_1_0 PSline();
    }
}

52

主题

155

帖子

160

积分

注册会员

Rank: 2

积分
160
发表于 2008-5-9 11:25:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

同样,我在sdk 2007 feb 版本下编好的,到了sdk 2008 march 就D3DXCreateEffectFromFile 失败,不知怎么调试,期待楼主找出答案贴出来

2

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2008-5-9 12:13:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

貌似你给的参数有问题,去看看文档。

22

主题

309

帖子

353

积分

中级会员

Rank: 3Rank: 3

积分
353
QQ
发表于 2008-5-9 13:56:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

07年and以后的版本只能编译1.4以上版本的hlsl
08以后的不清楚,估计必须2.0以上了

so..把最后2句
compile vs_1_0 VS();
compile ps_1_0 PSline();

改成vs_2_0和ps_2_0估计就可以了

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2008-5-9 15:14:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

顶,对的,高版本的dx 不支持低版本的shader了

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2008-5-9 20:16:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

原来如此。。。 用了新版本发现速度快了很多嘛。。。。

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2008-5-9 20:50:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

问一下谁用过 March 2008
DX9兼容性如何

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2008-5-9 22:57:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

用了 March 2008
没什么区别。。。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-5-11 02:53:00 | 显示全部楼层

Re:关于DIRECTXSDK版本问题

march 2008包含了dx10.1的正式版本,不过你需要安装vista sp1
而且不再包含dx8以前的库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 13:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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