The other similar integer/float conversion macros are in macros.h.tags/mesa-7.9-rc1
@@ -42,6 +42,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
#include "main/context.h" | |||
#include "main/enums.h" | |||
#include "main/colormac.h" | |||
#include "main/macros.h" | |||
#include "swrast/swrast.h" | |||
#include "vbo/vbo.h" | |||
#include "tnl/tnl.h" |
@@ -44,6 +44,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
#include "main/texobj.h" | |||
#include "main/imports.h" | |||
#include "main/texobj.h" | |||
#include "main/macros.h" | |||
#include "xmlpool.h" | |||
@@ -37,6 +37,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
#include "sis_lock.h" | |||
#include "main/context.h" | |||
#include "main/macros.h" | |||
#include "swrast/swrast.h" | |||
#include "vbo/vbo.h" | |||
#include "tnl/tnl.h" |
@@ -444,42 +444,6 @@ _mesa_next_pow_two_64(uint64_t x) | |||
} | |||
/*** | |||
*** UNCLAMPED_FLOAT_TO_UBYTE: clamp float to [0,1] and map to ubyte in [0,255] | |||
*** CLAMPED_FLOAT_TO_UBYTE: map float known to be in [0,1] to ubyte in [0,255] | |||
***/ | |||
#if defined(USE_IEEE) && !defined(DEBUG) | |||
#define IEEE_0996 0x3f7f0000 /* 0.996 or so */ | |||
/* This function/macro is sensitive to precision. Test very carefully | |||
* if you change it! | |||
*/ | |||
#define UNCLAMPED_FLOAT_TO_UBYTE(UB, F) \ | |||
do { \ | |||
fi_type __tmp; \ | |||
__tmp.f = (F); \ | |||
if (__tmp.i < 0) \ | |||
UB = (GLubyte) 0; \ | |||
else if (__tmp.i >= IEEE_0996) \ | |||
UB = (GLubyte) 255; \ | |||
else { \ | |||
__tmp.f = __tmp.f * (255.0F/256.0F) + 32768.0F; \ | |||
UB = (GLubyte) __tmp.i; \ | |||
} \ | |||
} while (0) | |||
#define CLAMPED_FLOAT_TO_UBYTE(UB, F) \ | |||
do { \ | |||
fi_type __tmp; \ | |||
__tmp.f = (F) * (255.0F/256.0F) + 32768.0F; \ | |||
UB = (GLubyte) __tmp.i; \ | |||
} while (0) | |||
#else | |||
#define UNCLAMPED_FLOAT_TO_UBYTE(ub, f) \ | |||
ub = ((GLubyte) IROUND(CLAMP((f), 0.0F, 1.0F) * 255.0F)) | |||
#define CLAMPED_FLOAT_TO_UBYTE(ub, f) \ | |||
ub = ((GLubyte) IROUND((f) * 255.0F)) | |||
#endif | |||
/** | |||
* Return 1 if this is a little endian machine, 0 if big endian. | |||
*/ |
@@ -130,6 +130,41 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256]; | |||
#define UNCLAMPED_FLOAT_TO_SHORT(s, f) \ | |||
s = ( (GLshort) IROUND( CLAMP((f), -1.0F, 1.0F) * 32767.0F) ) | |||
/*** | |||
*** UNCLAMPED_FLOAT_TO_UBYTE: clamp float to [0,1] and map to ubyte in [0,255] | |||
*** CLAMPED_FLOAT_TO_UBYTE: map float known to be in [0,1] to ubyte in [0,255] | |||
***/ | |||
#if defined(USE_IEEE) && !defined(DEBUG) | |||
#define IEEE_0996 0x3f7f0000 /* 0.996 or so */ | |||
/* This function/macro is sensitive to precision. Test very carefully | |||
* if you change it! | |||
*/ | |||
#define UNCLAMPED_FLOAT_TO_UBYTE(UB, F) \ | |||
do { \ | |||
fi_type __tmp; \ | |||
__tmp.f = (F); \ | |||
if (__tmp.i < 0) \ | |||
UB = (GLubyte) 0; \ | |||
else if (__tmp.i >= IEEE_0996) \ | |||
UB = (GLubyte) 255; \ | |||
else { \ | |||
__tmp.f = __tmp.f * (255.0F/256.0F) + 32768.0F; \ | |||
UB = (GLubyte) __tmp.i; \ | |||
} \ | |||
} while (0) | |||
#define CLAMPED_FLOAT_TO_UBYTE(UB, F) \ | |||
do { \ | |||
fi_type __tmp; \ | |||
__tmp.f = (F) * (255.0F/256.0F) + 32768.0F; \ | |||
UB = (GLubyte) __tmp.i; \ | |||
} while (0) | |||
#else | |||
#define UNCLAMPED_FLOAT_TO_UBYTE(ub, f) \ | |||
ub = ((GLubyte) IROUND(CLAMP((f), 0.0F, 1.0F) * 255.0F)) | |||
#define CLAMPED_FLOAT_TO_UBYTE(ub, f) \ | |||
ub = ((GLubyte) IROUND((f) * 255.0F)) | |||
#endif | |||
/*@}*/ | |||