В моем фрагментном шейдере есть сегмент:Я просто хочу отбросить все точки, которые на одной стороне линии.Я не могуиспользуйте эти закомментированные коды для реализации эффекта.Но коды используют «! =»сравнить '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;
}