在OpenGL 3.3核心中,mod函数是否会返回highp float?

问题描述 投票:0回答:1

我想知道为什么下面的代码会在一个几何着色器中产生下面的错误。

#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操作正确地使用整数来完成?

opengl glsl opengl-3 geometry-shader
1个回答
2
投票

mod 在GLSL中,函数始终是一个浮点函数。mod. GLSL 3.30可以隐式地将整数转换为浮点数,但不能隐式地将浮点数转换为ints。因此出现了错误。

如果你想要一个整数模数,可以像在 C++ 中一样:使用 %.

© www.soinside.com 2019 - 2024. All rights reserved.