mod函数在OpenGL 3.3内核中是否返回highp float?

mod函数在OpenGL 3.3内核中是否返回highp float?,opengl,glsl,opengl-3,geometry-shader,Opengl,Glsl,Opengl 3,Geometry Shader,我试图理解为什么以下代码在几何体着色器中生成以下错误: #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); ... 我也尝试过

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

#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总是返回浮点吗?如何使用整数正确完成此模运算?

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


如果您想要一个整数mod,请使用C++中的方法:使用
%

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


如果你想要一个整数mod,那就做你在C++中会做的:使用
%

因为某种原因,我认为你不能使用%.
%
已经在
GLSL 130
(OpenGL 3.0)中引入了
mod()
是与旧的OpenGL 2.x和OpenGL ES 2.0兼容的代码的唯一选项,但这不是你的情况。出于某种原因,我认为你不能使用%。
%
是在
GLSL 130
(OpenGL 3.0)中引入的,因此
mod()
是与旧的OpenGL 2.x和OpenGL ES 2.0兼容的代码的唯一选项,但这不是你的情况。