cg輸入輸出匹配規則

2021-08-01 11:29:47 字數 918 閱讀 3166

最近論壇看到有人提出這樣的問題:

shader "unlit/testinout"

else

}void frag(inout float4 col:color) //輸出的並不是col的顏色?????

endcg}}

}

這個問題其實是語義繫結的規則,上面的片段著色器其實輸出的是pos這個變數,並不是col。

注意:語義繫結是頂點和片段之間的橋梁,是一對一的關係,是根據型別進行匹配的,不是根據名稱去匹配的。

正確的寫法有如下幾種

方法一:增加輸入引數

shader "a958832776/testinout"

else

}void frag(in float4 pos:position,inout float4 co:color) //注意需要帶上頂點輸出的position語義

endcg}}

}

方法二:直接返回值

shader "a958832776/testinout"

else

return col;

}void frag(inout float4 co:color)

endcg}}

}

方法三:定義結構體

shader "a958832776/testinout"

;out_data vert(float2 objpos:position)

else

return data;

}float4 frag(out_data d):color

endcg}}

}

推薦使用方法三,這樣結構更清晰明了,也不會出錯。

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...

檔案輸入 輸出

13.1 和檔案進行通訊 文字檢視和二進位制檢視 在文字檢視中,程式看到的內容和二進位制的內容可能不同,例如ms dos文字檔案用回車符和換行符的組合 r n來表示行尾,macintosh用乙個回車符 r來表示行尾。c程式使用乙個 n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms dos文字檔...