Во-первых, цвет вашего фрагмента будет одинаковым независимо от результатов операторов if, поскольку цвет устанавливается в начале.
Во-вторых, использование только операторов if без других if заставляет ваш код работатьв каждом расчете, несмотря ни на что.
Гораздо лучший способ сделать это - иметь:
if ( r > 0.9 ) {
if ( ( mod(gl_FragCoord.x + 1.0, 4.001) + mod(gl_FragCoord.y + 1.0, 4.0) ) > 6.00) {
gl_FragColor = color;
}
}
else if ( r > 0.7 ) {
if ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {
gl_FragColor = color;
}
}
else if ( r > 0.5 ) {
if ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {
gl_FragColor = color;
}
}
else if ( r > 0.3 ) {
if ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {
gl_FragColor = color;
}
}
else if ( r > 0.1 ) {
if ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {
gl_FragColor = color;
}
}
else{
gl_FragColor = color;
}
Конечно, это не поможет вам изменить вывод, так как цвет никогда не меняется(как я уже упоминал ранее).Но это должно заставить вещи работать немного быстрее.
Еще одна вещь, которую необходимо учитывать, - это какие случаи выполняются чаще всего.Я предположил, что случаи с большим r являются более распространенными, отсюда и порядок операторов if.Если малые r более распространены, то имеет смысл изменить порядок и иметь r <0.1, r <0.3, r <0.5, r <0.7, r <0.9. </p>
Весь смысл в том, чтобыкод завершается как можно быстрее (т. е. возвращает один из возвращаемых if).Как только один из if возвращает true, остальные игнорируются, что избавляет вас от расчета всех остальных операций мода.