游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4095|回复: 4

这个pixel shader怎么错了,GetConstantByName死活找不到常量

[复制链接]

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2009-11-23 07:07:00 | 显示全部楼层 |阅读模式
vs部分可以找到常量。ps部分GetConstantByName返回bad pointer,然后SetTexture就出错。固定管线可以显示出纹理,表明纹理加载了,ps部分编译也没错。哪里不对呢?



struct PS_INPUT
{
    float2 texCoord0  : TEXCOORD0;
    float2 texCoord1  : TEXCOORD1;
    float2 texCoord2  : TEXCOORD2;
};

struct PS_OUTPUT
{
    float4 color : COLOR0;
};


sampler tex0;
sampler tex1;
sampler tex2;

PS_OUTPUT Main(PS_INPUT input)
{
   
    PS_OUTPUT output = (PS_OUTPUT)0;

    float4 c1 = tex2D(tex0, input.texCoord0);
    float4 c2 = tex2D(tex1, input.texCoord1);
    float4 c3 = tex2D(tex2, input.texCoord2);   

    //output.color=(1-c3.b)*c1+c3.b*c2;
    output.color=float4(1.0f,0.0f,0.0f,1.0f);
   return output;
} [em21]

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2009-11-23 13:07:00 | 显示全部楼层

Re:这个pixel shader怎么错了,GetConstantByName死活找不到常量

最终结果没有用到
sampler tex0;
sampler tex1;
sampler tex2;
所以编译shader 的时候就没有这3个变量了。有个编译选项可以保留。我忘了是哪个了。
最后的color要用到(间接用到)那3个变量。
你打开你注释的那行,再注释掉常量的那行试试

63

主题

181

帖子

181

积分

注册会员

Rank: 2

积分
181
发表于 2009-11-23 15:02:00 | 显示全部楼层

Re:这个pixel shader怎么错了,GetConstantByName死活找不到常量

恩,对的,google到了答案。没有用到的会被compile out,然后会导致找不到常量,不知道这么设定到底是聪明还是蠢。

42

主题

140

帖子

158

积分

注册会员

Rank: 2

积分
158
发表于 2009-11-23 20:28:00 | 显示全部楼层

Re:这个pixel shader怎么错了,GetConstantByName死活找不到常量

这是编译器的优化措施,你可以关闭优化。

4

主题

76

帖子

226

积分

中级会员

Rank: 3Rank: 3

积分
226
发表于 2017-10-9 09:38:45 | 显示全部楼层
上面的朋友说得对。就是因为那样才导致的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-24 18:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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