2012-09-03 69 views
1

我想在XNA中將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); 

我打了各種各樣的問題試圖編譯像「無法展開循環」和「循環與斷裂無法使用漸變」的時候。

第一個問題:我在正確的道路上試圖計算,在單一着色器通過,或者我應該通過ping-ponging RenderTargets之間的日期更小的步驟來減少它?

第二個問題:如果這個想法是正確的,那麼我的代碼有什麼問題?

+1

基本上你非常*不*在正確的軌道上。你能否更詳細地解釋你想達到的目標? (也許問一個新問題?) –

回答

0

第二個問題:無論你想使用該着色器...編譯器說它不能*展開循環* s,因爲它不知道編譯時'range'的值。可能你的着色器模型版本需要編譯時不斷迭代計數,例如。你不允許在'for'條件中有動態變量。

第一個問題:你你在的話問一遍,但着色器區塊是如此斷章取義,我不能回答問題1一定能行......

0

你有沒有探索其他選項比使用着色器來實現這一點?

了我的頭頂部:

1)當繪製該紋理,給源矩形的2和高度X寬度,因此僅通過X.用X代替X繪製2

2)利用GetData和SetData提取你希望使用的紋理的X部分。