Равное сравнение между двумя переменными типа int не работает корректно в OpenGLES. - PullRequest
0 голосов
/ 26 сентября 2018

В моем фрагментном шейдере есть сегмент:enter image description hereЯ просто хочу отбросить все точки, которые на одной стороне линии.Я не могуиспользуйте эти закомментированные коды для реализации эффекта.Но коды используют «! =»сравнить 'sign_to_discard' и 'side_sig' хорошо работают.

Такая ситуация произошла на Qualcomm Snapdragon 820, OpenGL ES 3.2 V@145.0.Я думаю, что два сегмента кода эквивалентны, но почему бы и нет?Вот все содержимое фрагмента шейдера:

#ifdef GL_ES
precision highp float;
#endif

uniform float line_a;
uniform float line_b;
uniform float line_c;
uniform int is_turning_part;
uniform int sign_to_discard;


varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec4 originPos;

int math_sign( float num ){
    if(num == 0.0){ return 0; }
    return num>0.0 ? 1:-1;
}

void main(void){
    vec4 opos = originPos;
    int side_sig = math_sign( line_a*opos.x + line_b*opos.y + line_c );
    if(is_turning_part != 0){
        if( sign_to_discard != side_sig ){
        }else{
            discard;
        }
        // can't use this on Qualcomm Snapdragon 820
        // if( sign_to_discard == side_sig ){
        //     discard;
        // }
    }else{
        if( sign_to_discard != side_sig ){
            discard;
        }
    }

    vec4 tCor = texture2D(CC_Texture0 , v_texCoord);
    gl_FragColor = tCor * v_fragmentColor;    

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...