查找数组中的最小像素

时间:2012-09-03 14:11:04

标签: xna shader hlsl

我试图在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之间ping日期来缩小它?

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

2 个答案:

答案 0 :(得分:0)

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

第一个问题:你肯定可以在一次通过中用语言做出来,但着色器块是如此脱离背景,我无法回答问题1 ......

答案 1 :(得分:0)

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

脱离我的头顶:

1)绘制此纹理时,为源矩形指定宽度为2和高度X,因此只用X绘制2而不是用X绘制X.

2)利用GetData和SetData提取你想要使用的纹理的2×X部分。

相关问题