1

我试图在 XNA 中将 X 的任意纹理减少 X 到 X 的 2。我尝试运行此代码:

int x;
int y;
float2 minim={1,1};
float2 current;
if(coords.x==0)
{
    for(x=0;x<=range/2;x=x+1)
    {
        coords.x=x;
        current=tex2D(input,coords);
        minim=min(minim,current);       
    }
}
if(coords.x==1)
{
    for(x=range/2;x<=range;x++)
    {
        coords.x=x;
        current=tex2D(input,coords);
        minim=min(minim,current);       
    }
}
return float4(minim,0,1);

我在尝试编译时遇到了各种各样的问题,比如“无法展开循环”和“不能在循环中使用渐变”。

第一个问题:通过尝试在单个着色器通道中计算它,我是否走在正确的道路上,或者我应该通过乒乓球 RenderTargets 之间的日期以更小的步骤减少它?

第二个问题:如果这个想法是正确的,那么我的代码有什么问题?

4

2 回答 2

0

第二个问题:无论你想用那个着色器做什么......编译器说它不能*展开循环*,因为它在编译时不知道“范围”的值。可能您的着色器模型版本需要编译时常量迭代计数,例如。您不允许在“for”条件下使用动态变量。

第一个问题:你当然可以一次完成你用文字提出的问题,但是着色器块太脱离上下文了,我无法回答问题 1...

于 2012-09-04T19:34:35.633 回答
0

您是否探索过使用着色器以外的其他方法来实现这一目标?

在我的头顶上:

1) 在绘制这个纹理时,给源矩形的宽度为 2,高度为 X,因此只用 X 绘制 2 而不是 X 由 X 绘制。

2) 利用 GetData 和 SetData 提取您希望使用的纹理的 2 x X 部分。

于 2012-09-14T22:56:08.123 回答