Opengl es glsl 按位运算等价物

Opengl es glsl bitwise operations equivalents

我正在尝试将一些 opengl glsl 转换为 opengl es (2.0) glsl。我将一个字节值传递给片段着色器,方法是在我的代码中将其转换为浮点数,然后将其转换回着色器。然后我需要将结果分成 0-15 之间的两个值。对于 opengl glsl,我正在使用

int x = int(a_otherdata);
int a = (x >> 4) & 0xF;
int b = x & 0xF;

但是,由于opengl es不支持按位运算,我尝试了以下操作,但它不起作用。

int x = int(a_otherdata);
int a = x / 16;
int b = x - (a * 16);

问题是在 OpenGL ES 2.0 GLSL 中,ints 实际上可能不是整数;它们可能被实现为浮点数——唯一的保证是根据精度可以保存的整数值的范围。所以除法可能是一个浮动除法,这意味着如果你想向下舍入,你需要在其中插入一个 floor 调用:

int a = int(floor(a_otherdata / 16));
int b = int(mod(a_otherdata, 16));