|
|
|
|
|
|
|
|
|
|
// Draw a signed integer |
|
|
|
// Can't display more than 16 digit |
|
|
|
// The two following parameter are for float representation |
|
|
|
void DrawInteger(int intValue, float3 fontColor, uint2 currentUnormCoord, inout uint2 fixedUnormCoord, bool flipY, inout float3 color, uint leading0) |
|
|
|
// forceNegativeSign is used to force to display a negative sign as -0 is not recognize |
|
|
|
void DrawInteger(int intValue, float3 fontColor, uint2 currentUnormCoord, inout uint2 fixedUnormCoord, bool flipY, inout float3 color, int leading0, bool forceNegativeSign) |
|
|
|
{ |
|
|
|
const uint maxStringSize = 16; |
|
|
|
|
|
|
|
|
|
|
int numEntries = min((intValue == 0 ? 0 : log10(absIntValue)) + (intValue < 0 ? 1 : 0) + leading0, maxStringSize); |
|
|
|
int numEntries = min((intValue == 0 ? 0 : log10(absIntValue)) + ((intValue < 0 || forceNegativeSign) ? 1 : 0) + leading0, maxStringSize); |
|
|
|
// 3. Display leading 0 |
|
|
|
if (leading0 > 0) // Avoid warning |
|
|
|
{ |
|
|
|
for (uint i = 0; i < leading0; ++i) |
|
|
|
{ |
|
|
|
DrawCharacter('0', fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, -1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 4. Display the number |
|
|
|
// 3. Display the number |
|
|
|
for (uint j = 0; j < maxStringSize; ++j) |
|
|
|
{ |
|
|
|
// Numeric value incurrent font start on the second row at 0 |
|
|
|
|
|
|
absIntValue /= 10; |
|
|
|
} |
|
|
|
|
|
|
|
// 4. Display leading 0 |
|
|
|
for (int i = 0; i < leading0; ++i) |
|
|
|
{ |
|
|
|
DrawCharacter('0', fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, -1); |
|
|
|
} |
|
|
|
|
|
|
|
if (intValue < 0) |
|
|
|
if (intValue < 0 || forceNegativeSign) |
|
|
|
{ |
|
|
|
DrawCharacter('-', fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, -1); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
void DrawInteger(int intValue, float3 fontColor, uint2 currentUnormCoord, inout uint2 fixedUnormCoord, bool flipY, inout float3 color) |
|
|
|
{ |
|
|
|
DrawInteger(intValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, 0); |
|
|
|
DrawInteger(intValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, 0, false); |
|
|
|
} |
|
|
|
|
|
|
|
void DrawFloat(float floatValue, float3 fontColor, uint2 currentUnormCoord, inout uint2 fixedUnormCoord, bool flipY, inout float3 color) |
|
|
|
|
|
|
else |
|
|
|
{ |
|
|
|
int intValue = int(floatValue); |
|
|
|
DrawInteger(intValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color); |
|
|
|
bool forceNegativeSign = floatValue >= 0.0f ? false : true; |
|
|
|
DrawInteger(intValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, 0, forceNegativeSign); |
|
|
|
int fracValue = int(frac(floatValue) * 1e6); // 6 digit |
|
|
|
uint leading0 = max(6 - (log10(fracValue) + 1), 0); // Counting leading0 to add in front of the float |
|
|
|
DrawInteger(fracValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, leading0); |
|
|
|
int fracValue = int(frac(abs(floatValue)) * 1e6); // 6 digit |
|
|
|
int leading0 = 6 - (int(log10(fracValue)) + 1); // Counting leading0 to add in front of the float |
|
|
|
DrawInteger(fracValue, fontColor, currentUnormCoord, fixedUnormCoord, flipY, color, leading0, false); |
|
|
|
} |
|
|
|
} |
|
|
|
|