Возвращает ли функция мода highp float в ядре OpenGL 3.3? - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь понять, почему следующий код генерирует следующую ошибку в геометрическом шейдере:

#version 330 core

layout (points) in;
layout (line_strip, max_vertices = 256) out;

in int gs_timestampLabel[];

...

int numberChar[10];
int number = gs_timestampLabel[0];
numberChar[digit] = mod(number, 10);

...

Я также пробовал:

numberChar[digit] = number - 10 * floor(number/10); // number % 10

Ошибка:

Error compiling shader: shaders/TimestampLabels.geometry_2.glsl
Shader log: ERROR: 0:774: 'assign' :  cannot convert from 'highp float' to 'highp int'

Всегда ли мод возвращает float? Что нужно сделать, чтобы эта операция модуля правильно выполнялась с использованием целых чисел?

1 Ответ

2 голосов
/ 08 мая 2020

Функция mod в GLSL всегда является с плавающей точкой mod. GLSL 3.30 может неявно преобразовывать целые числа в числа с плавающей запятой, но он не будет неявно преобразовывать числа с плавающей точкой в ​​целые числа. Отсюда и ошибка.

Если вам нужен целочисленный мод, сделайте то, что вы сделали бы в C ++: используйте %.

...