Я работаю в 2D на полном экране, текстурируя квадрат.
Я делю каждую строку на несколько 5-пиксельных пробелов.Только один пиксель на 5 - белый, остальные - черные.Этот шаблон повторяется по всей линии, в каждой строке.
Итак, если 1 - белый, а 0 - черный:
1-й проход = 10000 10000 10000 и т. Д. На всей строке, и каждыйлинии.
2-й проход = 01000 01000 01000 и т. д.
3-й проход = 00100 00100 00100 и т. д.
4-й проход = 00010 00010 00010 и т. д.
5-й проход = 00001 00001 00001 и т. Д.
6-й проход = 10000 | 10000 | 10000 (как и 1-й проход) и т. Д.
step_x - номер белого пикселя (от 1 до 5), он меняется с каждым проходом.
Другими словами, если step_x == 2, белые пиксели находятся в столбцах 2, 7, 12, 17 и т. д.
Я не могу использоватьРабота по модулю без использования нескольких условий, которые замедляют выполнение.
Мне нужна эффективность в этой части, потому что я часто использую ее в своем коде.
Вот почему я прошу помощи: какчтобы получить тот же результат более эффективно?
Может быть, что-то с функциями fract () или step (), которые я пытался безуспешно (я тонкоk Я не совсем понимаю эти две функции.)
Вот мой код, который работает:
код шейдера:
#version 330 core
out vec4 FragColor;
uniform int step_x;
#define Xmax 5
vec4 white_if_posX_is_Multiple() {
int mod_x = int(mod(gl_FragCoord.x, Xmax));
if (step_x == Xmax && mod_x < 1.0) return vec4(1.0f);
if (mod_x == step_x;) return vec4(1.0f);
return vec4(0.0f);
}
void main()
{
FragColor = white_if_posX_is_Multiple();
}
C ++ Код OpenGL:
glDisable(GL_DEPTH_TEST);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
for (int x = 1; x <= 5; x++) {
glClear(GL_COLOR_BUFFER_BIT);
shader.use();
shader.setInt("step_x", x);
renderQuad();
}