我试图在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日期来缩小它?
第二个问题:如果想法是正确的,那么我的代码会出现什么问题?
答案 0 :(得分:0)
第二个问题:无论你想用该着色器做什么......编译器都说它不能*展开循环*因为它不知道'范围'的值在编译时。可能你的着色器模型版本需要具有编译时常量迭代计数,例如。你不允许在'for'条件下拥有动态变量。
第一个问题:你肯定可以在一次通过中用语言做出来,但着色器块是如此脱离背景,我无法回答问题1 ......
答案 1 :(得分:0)
您是否已经探索过使用着色器以外的其他选项来实现这一目标?
脱离我的头顶:
1)绘制此纹理时,为源矩形指定宽度为2和高度X,因此只用X绘制2而不是用X绘制X.
2)利用GetData和SetData提取你想要使用的纹理的2×X部分。