Testsuite outputs graphs using google api.

This commit is contained in:
castano
2010-11-08 19:03:20 +00:00
parent 5f845513ee
commit 1d4a2ea710
8 changed files with 416 additions and 226 deletions

View File

@ -22,6 +22,7 @@ SET(IMAGE_SRCS
NormalMap.cpp
PsdFile.h
TgaFile.h
PixelFormat.h
ColorSpace.h
ColorSpace.cpp)

View File

@ -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