/// <summary>Called just after the whole grid has been created.</summary>
		internal void Setup(Scanner scanner){
		
			// Create the search set.
			
			// Get bounds:
			int maxX=scanner.DistanceCacheWidth;
			int maxY=scanner.DistanceCacheHeight;
			
			// How many?
			int count=9;
			
			// Is this square at the max points?
			bool boundsX=(X==0 || X==(maxX-1));
			bool boundsY=(Y==0 || Y==(maxY-1));
			
			if(boundsX && boundsY){
				
				count=4;
				
			}else if(boundsX || boundsY){
				
				count=6;
				
			}
			
			// Create the set:
			SearchSet=new DistanceCacheSquare[count];
			
			int setIndex=0;
			
			// Add each one (in a 3x3 block):
			for(int y=Y-1;y<=(Y+1);y++){
				
				if(y<0 || y==maxY){
					// Out of range.
					continue;
				}
				
				for(int x=X-1;x<=(X+1);x++){
					
					if(x<0 || x==maxX){
						// Out of range.
						continue;
					}
					
					// Get the index:
					int squareIndex=x+(y * scanner.DistanceCacheWidth);
					
					// Get the square:
					SearchSet[setIndex]=scanner.DistanceCache[squareIndex];
					
					setIndex++;
					
				}
				
			}
			
			RecalculateIndex(scanner);
			
		}
		internal void RecalculateIndex(Scanner scanner){
			
			PixelIndexX=X * scanner.BlurSpread;
			PixelIndexY=Y * scanner.BlurSpread;
			
			// Apply x/y:
			XOffset=((float)PixelIndexX) + 0.5f;
			YOffset=((float)PixelIndexY) + 0.5f;
			
		}
//--------------------------------------
		public ScannerScanLine(Scanner scanner){
			
			Scanner=scanner;
			
		}
		/// <summary>Sets up InfiniText. Called automatically when the first font is loaded.</summary>
		public static void Start(){
			
			if(Rasteriser!=null){
				return;
			}
			
			UpdateAliasValues();
			
			// Setup and start the rasteriser:
			Rasteriser=new Scanner();
			Rasteriser.SDFSize=SdfSize;
			Rasteriser.DrawHeight=(int)SdfPixelHeight;
			Rasteriser.Start();
			UpdateAliasValues();
			
		}