GLSLで分岐の原因とそうでないものを正確に把握しようとしています。
私はシェーダーでこれをたくさんやっています:
float(a==b)
条件分岐なしでifステートメントをシミュレートするために使用していますが、効果的ですか?現在、プログラムのどこにもif文はなく、ループもありません。
編集:明確にするために、私は私のコードでこのようなことをします:
float isTint = float((renderflags & GK_TINT) > uint(0)); // 1 if true, 0 if false
float isNotTint = 1-isTint;//swaps with the other value
float isDarken = float((renderflags & GK_DARKEN) > uint(0));
float isNotDarken = 1-isDarken;
float isAverage = float((renderflags & GK_AVERAGE) > uint(0));
float isNotAverage = 1-isAverage;
//it is none of those if:
//* More than one of them is true
//* All of them are false
float isNoneofThose = isTint * isDarken * isAverage + isNotTint * isAverage * isDarken + isTint * isNotAverage * isDarken + isTint * isAverage * isNotDarken + isNotTint * isNotAverage * isNotDarken;
float isNotNoneofThose = 1-isNoneofThose;
//Calc finalcolor;
finalcolor = (primary_color + secondary_color) * isTint * isNotNoneofThose + (primary_color - secondary_color) * isDarken * isNotNoneofThose + vec3((primary_color.x + secondary_color.x)/2.0,(primary_color.y + secondary_color.y)/2.0,(primary_color.z + secondary_color.z)/2.0) * isAverage * isNotNoneofThose + primary_color * isNoneofThose;
編集:私は分岐したくない理由を知っています。分岐とは何かを知っています。分岐について子供たちに教えてくれてうれしいですが、ブール演算子については自分自身を知りたいと思います(そしてビット単位の操作ですが、私はそれらがうまくいくと確信しています)