Unable to use '%' in glsl

I am using webgl2. It seems that implicit conversion doesn't happen in GLSL. So floor( int(2) / int(3) ) is invalid. I am pretty sure (but not positive) that division between integers should result in truncation (and thus flooring). But just to be safe, I decided to go with a type-casting solution.

//:unsigned integers
uint mod_u32( uint u32_bas , uint u32_div ){

    float   flt_res =  mod( float(u32_bas), float(u32_div));
    uint    u32_res = uint( flt_res );
    return( u32_res );
}

//:signed integers
uint mod_i32( uint i32_bas , uint i32_div ){

    float   flt_res =  mod( float(i32_bas), float(i32_div));
    uint    i32_res = uint( flt_res );
    return( i32_res );
}

If you are confident that division between integers results in truncation of the decimal (fractional) portion then:

x - y * (x/y)

Should be all you need, since:

mod returns the value of x modulo y. This is computed as x - y * floor(x/y).

QUOTE_SOURCE: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mod.xhtml


GLSL doesn't support recursive function and while loops, which is needed if I want to create a function that can give me the result of (a % b).

First, neither recursion nor looping is necessary to compute a mod b. That's easily done by a - (b * floor(a/b)).

Which is exactly what the built-in mod function does. If your version of GLSL doesn't support the % operator, then you're probably not able to get real integers either. So just use the mod function on your values.