Testsuite outputs graphs using google api.
This commit is contained in:
@ -22,6 +22,7 @@ SET(IMAGE_SRCS
|
||||
NormalMap.cpp
|
||||
PsdFile.h
|
||||
TgaFile.h
|
||||
PixelFormat.h
|
||||
ColorSpace.h
|
||||
ColorSpace.cpp)
|
||||
|
||||
|
@ -30,52 +30,87 @@
|
||||
|
||||
namespace nv
|
||||
{
|
||||
namespace PixelFormat
|
||||
namespace PixelFormat
|
||||
{
|
||||
|
||||
// Convert component @a c having @a inbits to the returned value having @a outbits.
|
||||
inline uint convert(uint c, uint inbits, uint outbits)
|
||||
{
|
||||
if (inbits == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (inbits >= outbits)
|
||||
{
|
||||
// truncate
|
||||
return c >> (inbits - outbits);
|
||||
}
|
||||
else
|
||||
{
|
||||
// bitexpand
|
||||
return (c << (outbits - inbits)) | convert(c, inbits, outbits - inbits);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert component @a c having @a inbits to the returned value having @a outbits.
|
||||
inline uint convert(uint c, uint inbits, uint outbits)
|
||||
{
|
||||
if (inbits == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else if (inbits >= outbits)
|
||||
{
|
||||
// truncate
|
||||
return c >> (inbits - outbits);
|
||||
}
|
||||
else
|
||||
{
|
||||
// bitexpand
|
||||
return (c << (outbits - inbits)) | convert(c, inbits, outbits - inbits);
|
||||
}
|
||||
}
|
||||
// Get pixel component shift and size given its mask.
|
||||
inline void maskShiftAndSize(uint mask, uint * shift, uint * size)
|
||||
{
|
||||
if (!mask)
|
||||
{
|
||||
*shift = 0;
|
||||
*size = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// Get pixel component shift and size given its mask.
|
||||
inline void maskShiftAndSize(uint mask, uint * shift, uint * size)
|
||||
{
|
||||
if (!mask)
|
||||
{
|
||||
*shift = 0;
|
||||
*size = 0;
|
||||
return;
|
||||
}
|
||||
*shift = 0;
|
||||
while((mask & 1) == 0) {
|
||||
++(*shift);
|
||||
mask >>= 1;
|
||||
}
|
||||
|
||||
*shift = 0;
|
||||
while((mask & 1) == 0) {
|
||||
++(*shift);
|
||||
mask >>= 1;
|
||||
}
|
||||
|
||||
*size = 0;
|
||||
while((mask & 1) == 1) {
|
||||
++(*size);
|
||||
mask >>= 1;
|
||||
}
|
||||
}
|
||||
*size = 0;
|
||||
while((mask & 1) == 1) {
|
||||
++(*size);
|
||||
mask >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
} // PixelFormat namespace
|
||||
inline float quantizeCeil(float f, int inbits, int outbits)
|
||||
{
|
||||
nvDebugCheck(f >= 0.0f && f <= 1.0f);
|
||||
//uint i = f * (float(1 << inbits) - 1);
|
||||
//i = convert(i, inbits, outbits);
|
||||
//float result = float(i) / (float(1 << outbits) - 1);
|
||||
//nvCheck(result >= f);
|
||||
float result;
|
||||
int offset = 0;
|
||||
do {
|
||||
uint i = offset + f * (float(1 << inbits) - 1);
|
||||
i = convert(i, inbits, outbits);
|
||||
result = float(i) / (float(1 << outbits) - 1);
|
||||
offset++;
|
||||
} while (result < f);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
inline float quantizeRound(float f, int bits)
|
||||
{
|
||||
nvDebugCheck(f >= 0.0f && f <= 1.0f);
|
||||
float scale = float(1 << bits);
|
||||
return fround(f * scale) / scale;
|
||||
}
|
||||
|
||||
inline float quantizeFloor(float f, int bits)
|
||||
{
|
||||
nvDebugCheck(f >= 0.0f && f <= 1.0f);
|
||||
float scale = float(1 << bits);
|
||||
return floor(f * scale) / scale;
|
||||
}
|
||||
*/
|
||||
|
||||
} // PixelFormat namespace
|
||||
|
||||
} // nv namespace
|
||||
|
||||
|
Reference in New Issue
Block a user