如何使用GLSL和OpenGL ES 2.0从整数中获取一点

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

我有一个整数值,并希望得到位于特殊位置的位。我正在使用GLSL for OpenGL ES 2.0

像这样的东西:

GetBitOnLocation(int value, int location)
{
  bit myBit = value[location];
  if (myBit == 0)
    return 0;
  if (myBit == 1)
    return 1;
}
opengl-es glsl
3个回答
1
投票

根据之前的评论,不要这样做。

ES 2硬件本身不需要支持整数;允许将它们模拟为浮点。为此,未定义直接位测试。

如果你绝对绝望,请使用modstep。例如。测试整数value的第三位:

float bit = step(0.5, mod(float(value) / 8.0, 1.0));
// bit is now 1.0 if the lowest bit was set, 0.0 otherwise

逻辑是要将你要测试的位洗牌到0.5位置然后用mod切断它上面的所有位。那么只有当你想要的位被设置时,你所拥有的值才能大于或等于0.5


0
投票

这是一个使用整数数学的解决方案(注意:不支持负整数)

// 2^x
int pow2(int x){
    int res = 1;
    for (int i=0;i<=31;i++){
        if (i<x){
            res *= 2;
        }
    }
    return res;
}

// a % n
int imod(int a, int n){
    return a - (n * (a/n));
}

// return true if the bit at index bit is set
bool bitInt(int value, int bit){
    int bitShifts = pow2(bit);
    int bitShiftetValue = value / bitShifts;
    return imod(bitShiftetValue, 2) > 0;
}

-2
投票
int GetBitOnLocation(int value, int location)
{
    int myBit = value & (1 << location);
    if (myBit == 0)
        return 0;
    else
        return 1;
}
© www.soinside.com 2019 - 2024. All rights reserved.