Opengl es glsl按位运算等价物

时间:2016-04-12 13:56:10

标签: opengl-es bit-manipulation glsl glsles

我正在尝试将一些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);

1 个答案:

答案 0 :(得分:4)

问题是在OpenGL ES 2.0 GLSL中,int可能实际上不是整数;它们可能被实现为浮点数 - 唯一的保证是基于精度可以保持的整数值范围。所以鸿沟可能是一个浮动鸿沟,这意味着你需要在那里坚持floor召唤,如果你想将其四舍五入:

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