opengl-es - Opengl es glsl 按位运算等效项

标签 opengl-es bit-manipulation glsl glsles

我正在尝试将一些 opengl glsl 转换为 opengl es (2.0) glsl。我将一个字节值传递到片段着色器中,方法是将其转换为代码中的 float ,然后将其转换回着色器中。然后我需要将结果拆分为 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 中,int 实际上可能不是整数;它们可能被实现为 float ——唯一的保证是可以根据精度保存的整数值的范围。因此,除法可能是 float 除法,这意味着如果您想将其向下舍入,则需要在其中插入 floor 调用:

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

关于opengl-es - Opengl es glsl 按位运算等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36575457/

相关文章:

java - 在使用 OpenGL-ES、JNI 和 C++ 的 Android 上,帧似乎乱序了

Java - 屏蔽符号位会导致意外行为

c++ - 如何在现代 OpenGL 中管理模型、 View 和投影矩阵

c++ - OpenGL 翻译错误,C1068 和 C2003

opengl-es - 在 OpenGL ES 中,如何加载具有透明像素的纹理?

android - OpenGL ES 使用 TRIANGLE_FAN 退化三角形?

algorithm - 它如何获得相同的前缀和后缀?

java - glsl 片段着色器矩形不会显示

opengl-es - 用于索引绘图的预排序 3d 文件类型

c++ - 为什么你不能对 C 中的指针进行按位运算,有没有办法解决这个问题?