glsl infinity constant

前端 未结 3 465
深忆病人
深忆病人 2021-01-07 22:26

Does GLSL have any pre-defined constants for +/-infinity or NaN? I\'m doing this as a workaround but I wonder if there is a cleaner way:

// GLSL FRAGMENT SHA         


        
相关标签:
3条回答
  • 2021-01-07 23:12

    This might work?

    const float pos_infinity = uintBitsToFloat(0x7F800000);
    const float neg_infinity = uintBitsToFloat(0xFF800000);
    

    "If the encoding of a floating point infinity is passed in parameter x, the resulting floating-point value is the corresponding (positive or negative) floating point infinity"

    0 讨论(0)
  • 2021-01-07 23:19

    Like Nicol mentioned, there are no pre-defined constants.

    However, from OpenGL 4.1 on, your solution is at least guaranteed to work and correctly generate an infinite value.

    See for example in glsl 4.4:

    4.7.1 Range and Precision

    ...

    However, dividing a non-zero by 0 results in the appropriately signed IEEE Inf: If both positive and negative zeros are implemented, the correctly signed Inf will be generated, otherwise positive Inf is generated.

    Be careful when you use an older version of OpenGL though:

    For example in glsl 4.0 it says:

    4.1.4 Floats

    ...

    Similarly, treatment of conditions such as divide by 0 may lead to an unspecified result, but in no case should such a condition lead to the interruption or termination of processing.

    0 讨论(0)
  • 2021-01-07 23:22

    There are no pre-defined constants for it, but there is the isinf function to test if something is infinity.

    While I'm at it, are there constants for other things like FLT_MAX FLT_EPSILON etc the way there are in C?

    No, there are not.

    0 讨论(0)
提交回复
热议问题