mod function returns highp 在 OpenGL 3.3 内核中浮动吗?

Does mod function returns highp float in OpenGL 3.3 core?

我试图理解为什么以下代码会在几何着色器中生成以下错误:

#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'

mod 总是 return 浮动吗?要使用整数正确完成此 modulus 运算,应该怎么做?

GLSL 中的 mod 函数始终是浮点数 mod。 GLSL 3.30 可以将整数隐式转换为浮点数,但不会将浮点数隐式转换为整数。因此错误。

如果您想要一个整数 mod,请执行您在 C++ 中执行的操作:使用 %.