我想知道为什么下面的代码会在一个几何着色器中产生下面的错误。
#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
错误,mod函数总是返回float吗?
Error compiling shader: shaders/TimestampLabels.geometry_2.glsl
Shader log: ERROR: 0:774: 'assign' : cannot convert from 'highp float' to 'highp int'
mod总是返回float吗?如何让这个modulus操作正确地使用整数来完成?
在 mod
在GLSL中,函数始终是一个浮点函数。mod
. GLSL 3.30可以隐式地将整数转换为浮点数,但不能隐式地将浮点数转换为ints。因此出现了错误。
如果你想要一个整数模数,可以像在 C++ 中一样:使用 %
.