Советую не использовать условия в шейдерах - они очень медленные.
|
необязательно.
варианта два - компилятор решает какой выбрать:
1. то что в ифе выполняется в любом случае, а потом умножается на маску условия.
2. происходит реальный бранч. в этом случае, надо иметь в виду, что видюха обрабатывает много пикселей параллельно - в квадратных блоках (4х4 пикселя вроде обычно).
если один пиксель в блоке выполняет длинный бранч, а другие не выполняют - другим все равно придётся ждать этот один пиксель, как будто иф сработал на них всех.
если зоны с разными бранчами чётко отделены на экране, а не шумно перемешаны - то будет норм работать.
также, в бранчах не работает tex2D - но работает tex2Dlod/tex2Dgrad.
нормальные бранчи пашут только в sm 3.0 и выше.
компилер выбирает их если внутри нет tex2D и код более менее не однострочный вроде как.
код выше по хорошему должен компильнуться в вариант 1
----
if (Colorka.a > 0.75f)
{
Colorka.r=(1-Colorka.r)/4+Colorka.r;
Colorka.g=(1-Colorka.g)/4+Colorka.g;
Colorka.b=(1-Colorka.b)/4+Colorka.b;
}
if (Colorka.a > 0.90f)
{
Colorka.r=1;
Colorka.g=1;
Colorka.b=1;
}
Colorka.a = Colorka.a;
Colorka.b = Colorka.b*2;
Colorka.g = Colorka.b;
Colorka.rgb=Colorka.rgb/4;
output.color.rgba = Colorka;
|
кстати, нафиг по компонентам так расписывать - ты же можешь с векторами сразу работать:
Colorka.rgb = Colorka.a>0.75? (1-Colorka.rgb)/4+Colorka.rgb : Colorka.rgb;
Colorka.rgb = Colorka.a>0.9? 1 : Colorka.rgb;
Colorka.abg = Colorka.abb;
Colorka.b *= 2;
Colorka.rgb /= 4;