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兼容的代码的唯一选项,但这不是你的情况。