Создание Глобальной статической переменной на CG

Шейдеры и все-все-все.

Создание Глобальной статической переменной на CG

Сообщение Roman777 24 июн 2017, 21:01

Добрый день! Только-только начал изучать Shader Lab. Хочу понять, возможно ли определить такую Глобальную статичную переменную, чтобы она определена была только при вызове для первого пикселя, а в последующих принимала задаваемое в расчете предыдущего пикселя значение? Например в шейдере ниже хочу определить переменную flg при подсчете первого пикселя как true. А дальше она уже должна будет принимать значения в зависимости от условия. Пока каждый новый подсчет, переменная вначале всегда принимает значение true...
Синтаксис:
Используется csharp
Shader "Custom/MyShader" {
        Properties {
           t("t", Float ) = 0//_Time
        }
        SubShader {
            Cull off
                Pass{
                        CGPROGRAM
                    #pragma vertex vert_img
                    #pragma fragment frag
                    #pragma target 2.0
                    //3.0

                    #include "UnityCG.cginc"
                    float4 frag(v2f_img i) : COLOR {
                        float2 mcoord;
                        float4 color;
                        static bool flg=true;
                        mcoord.x = i.uv.x;
                        mcoord.y = i.uv.y;
                        static float n=1;
                        float temp=0.0;
                        if (trunc(fmod(_Time.y*10,20))==10.0){
                           flg=!flg;
                        }
                        if (flg){
                                temp=fmod(_Time.y*10,20);
                       
                        }
                        else {
//                          temp = temp +_Time.y/100;
                                temp=20.0-fmod(_Time.y*10,20);
                        }
                        if (fmod(mcoord.y*100,20)>0.0&&fmod(mcoord.y*100,20)<temp){
                            color= float4(0.0,0.0,1.0,1.0);
                        }
                        else{
                                                color= float4(1.0,1.0,1.0,1.0);
                        }
                        return color;
                    }

                        ENDCG
                }
        }
        FallBack "Diffuse"
}
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Создание Глобальной статической переменной на CG

Сообщение jetyb 24 июн 2017, 21:45

чтобы она определена была только при вызове для первого пикселя, а в последующих принимала задаваемое в расчете предыдущего пикселя значение?

Никак, понятия "первого пикселя" нет, потому что пиксели обрабатываются параллельно на разных процессорных блоках.
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Re: Создание Глобальной статической переменной на CG

Сообщение Roman777 24 июн 2017, 21:50

Да тут смысл даже не косательно "первого" пикселя. Просто обычно static переменная определяется только первый раз, все остальные разы, когда она уже определена "переопределения" не происходит. Что же в контексте CG даёт эта static, я что-то разницы с ней и без неё не понял...?
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Создание Глобальной статической переменной на CG

Сообщение snezhok_13 25 июн 2017, 13:09

В C++ у ключевого слова static до чертиков значений. Одно из которых "локальная в пределах модуля".
В Cg похожее значение, из документации:

static
Only usable on global variables. Marks the variable as ‘private’ to the program, and not visible externally.
Cannot be combined with uniform or varying

Предположу, что в отличие от uniform задать значение нельзя, поэтому применяется видимо только с константами. (popcorn)
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт

Re: Создание Глобальной статической переменной на CG

Сообщение Roman777 25 июн 2017, 17:16

snezock_13, не подскажите, что такое uniform в данном контексте?
Roman777
UNIт
 
Сообщения: 95
Зарегистрирован: 06 мар 2016, 12:09

Re: Создание Глобальной статической переменной на CG

Сообщение snezhok_13 26 июн 2017, 15:43

Roman777 писал(а):snezock_13, не подскажите, что такое uniform в данном контексте?


Uniform-переменная в шейдере - единая для всех вершин/фрагментов. Матрицы преобразований постоянны для всех вершин, Сэмплеры текстур постоянны для всех фрагментов.
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1