float3 ShowFloat(float2 uv, float val, int digits){

	
	int a[210] =
	{
		1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   0,0,0,1,1,1,   0,0,0,0,0,0,
		1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1,   0,0,0,1,0,0,   0,1,0,0,0,0,
		1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,   0,0,0,1,1,1,   1,1,1,1,1,1,
		1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,   0,0,0,1,0,0,   0,1,0,0,0,0,
		1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,   1,0,0,1,1,1,   0,0,0,0,0,0
	};

	//0123456789.E+-
	
	// arranged values to show

	val *= 1.000001;
	bool signVal = val >= 0.0;

	float logged = log(abs(val))/log(10.0);
	int powInt = int(floor(logged));
	bool signPow = logged >= 0.0; 

	float floatRaw = abs(val) / pow(10.0, 0.0+powInt);

	// pixel idx & pixel size in a quad
	
	uint resX = 4 * (digits + 2) + 1; // sign, point
	uint resY = 13;

	uint myPixX =  uint(uv.x * resX);
	uint myPixY =  uint(uv.y * resY);


	int letter = -1;
	uint2 idxLetter = uint2(myPixX/4, myPixY/6);
	uint2 uvInLetter = uint2(myPixX%4, myPixY%6);

	// find what letter to show from "idx Letter"

	if(idxLetter.y == 0){
		if(idxLetter.x == 0){
			letter = 11;
		}
		else if(idxLetter.x == 1){
			letter = signPow ? 12 : 13;
		}
		else if(idxLetter.x == 2){
			letter = abs(powInt)/10;
		}
		else if(idxLetter.x == 3){
			letter = abs(powInt)%10;
		}


	}
	else if(idxLetter.y == 1){
		if(idxLetter.x == 0){
			letter = signVal ? 12 : 13;
		}
		if(idxLetter.x == 1){
			letter = int(floatRaw);
		}
		if(idxLetter.x == 2){
			letter = 10;
		}
		if(idxLetter.x >= 3){
			letter = uint(floatRaw*pow(10.0,idxLetter.x-2.0))%10;
		}
	}


	// decide black or white from "letter" and "uvInLetter"
	
	float3 col = 0.0;

	if(uvInLetter.y >=1 && uvInLetter.x>=1 && letter>=0){
		uint yFromUp = 5-uvInLetter.y;
		uint xFromLeft = letter * 3 + (uvInLetter.x-1);
		if(a[yFromUp*42 + xFromLeft] == 1){
			col = 1.0;
		}
	}

	return col;
}



float3 ShowInt(float2 uv, int val, int digits){

	
	int a[210] =
	{
		1, 1, 1,   0, 0, 1,   1, 1, 1,   1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,   0,0,0,1,1,1,   0,0,0,0,0,0,
		1, 0, 1,   0, 0, 1,   0, 0, 1,   0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1,   0,0,0,1,0,0,   0,1,0,0,0,0,
		1, 0, 1,   0, 0, 1,   1, 1, 1,   1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,   0,0,0,1,1,1,   1,1,1,1,1,1,
		1, 0, 1,   0, 0, 1,   1, 0, 0,   0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,   0,0,0,1,0,0,   0,1,0,0,0,0,
		1, 1, 1,   0, 0, 1,   1, 1, 1,   1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1,   1,0,0,1,1,1,   0,0,0,0,0,0
	};						  

	//0123456789.E+-
	
	// arranged values to show

	bool signVal = val >= 0;
	uint absVal = abs(val);

	// pixel idx & pixel size in a quad
	
	uint resX = 4 * (digits + 1) + 1; // sign, point
	uint resY = 13;

	uint myPixX =  uint(uv.x * resX);
	uint myPixY =  uint(uv.y * resY);


	int letter = -1;
	uint2 idxLetter = uint2(myPixX/4, myPixY/6);
	uint2 uvInLetter = uint2(myPixX%4, myPixY%6);

	// find what letter to show from "idx Letter"
	absVal *= 10;
	if(idxLetter.y == 0){
		if(idxLetter.x == 0){
			letter = signVal ? 12 : 13;
		}
		if(idxLetter.x >= 1){
			for(uint i=0; i<digits - (idxLetter.x-1); i++){
				absVal /= 10;
			}
			letter = absVal %10;
		}
	}



	// decide black or white from "letter" and "uvInLetter"
	
	float3 col = 0.0;

	if(uvInLetter.y >=1 && uvInLetter.x>=1 && letter>=0){
		uint yFromUp = 5-uvInLetter.y;
		uint xFromLeft = letter * 3 + (uvInLetter.x-1);
		if(a[yFromUp*42 + xFromLeft] == 1){
			col = 1.0;
		}
	}

	return col;
}




float3 ShowPercentage(float2 uv, float val, int digits){

	
	int a[180] =
	{
		1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,0,0, 1,1,1,
		1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0,0,0, 1,0,1,
		1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,0,0, 1,1,1,
		1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0,0,0, 1,0,0,
		1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,0,0, 1,0,0
	};

	//0123456789.E+-
	
	// arranged values to show

	val *= 1.000001;

	// pixel idx & pixel size in a quad
	
	uint resX = 4 * (digits + 2) + 1; // sign, point
	uint resY = 13;

	uint myPixX =  uint(uv.x * resX);
	uint myPixY =  uint(uv.y * resY);


	int letter = -1;
	uint2 idxLetter = uint2(myPixX/4, myPixY/6);
	uint2 uvInLetter = uint2(myPixX%4, myPixY%6);

	// find what letter to show from "idx Letter"

	if(idxLetter.y == 0){
		if(idxLetter.x == 0){
			letter = uint(val * pow(10.0,0.0))%10;
			if(letter==0) letter = -1;
		}
		else if(idxLetter.x == 1){
			letter = uint(val * pow(10.0,1.0))%10;
		}
		else if(idxLetter.x == 2){
			letter = uint(val * pow(10.0,2.0))%10;
		}
		else if(idxLetter.x == 3){
			letter = 10;
		}
		else if(idxLetter.x == digits+1){
			letter = 11;
		}
		else{
			letter = uint(val * pow(10.0,idxLetter.x-1))%10;;
		}
	}

	// decide black or white from "letter" and "uvInLetter"
	
	float3 col = 0.0;

	if(uvInLetter.y >=1 && uvInLetter.x>=1 && letter>=0){
		uint yFromUp = 5-uvInLetter.y;
		uint xFromLeft = letter * 3 + (uvInLetter.x-1);
		if(a[yFromUp*36 + xFromLeft] == 1){
			col = 1.0;
		}
	}

	return col;
}