@ -4,6 +4,9 @@  
		
	
		
			
			*  
		
	
		
			
			*    CONFIGURATION :  
		
	
		
			
			*  
		
	
		
			
			*    # define  SUPPORT_MODULE_RTEXTURES  
		
	
		
			
			*        rtextures  module  is  included  in  the  build  
		
	
		
			
			*  
		
	
		
			
			*    # define  SUPPORT_FILEFORMAT_BMP  
		
	
		
			
			*    # define  SUPPORT_FILEFORMAT_PNG  
		
	
		
			
			*    # define  SUPPORT_FILEFORMAT_TGA  
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -65,11 +68,13 @@  
		
	
		
			
			    # include  "config.h"         // Defines module configuration flags   
		
	
		
			
			# endif  
		
	
		
			
			
  
		
	
		
			
			# if defined(SUPPORT_MODULE_RTEXTURES)  
		
	
		
			
			
  
		
	
		
			
			# include  "utils.h"              // Required for: TRACELOG() and fopen() Android mapping  
		
	
		
			
			# include  "rlgl.h"               // OpenGL abstraction layer to OpenGL 1.1, 3.3 or ES2  
		
	
		
			
			
  
		
	
		
			
			# include  <stdlib.h>             // Required for: malloc(), free()  
		
	
		
			
			# include  <string.h>             // Required for: strlen() [Used in ImageTextEx()]  
		
	
		
			
			# include  <string.h>             // Required for: strlen() [Used in ImageTextEx()], strcmp() [Used in LoadImageFromMemory()]   
		
	
		
			
			# include  <math.h>               // Required for: fabsf()  
		
	
		
			
			# include  <stdio.h>              // Required for: sprintf() [Used in ExportImageAsCode()]  
		
	
		
			
			
  
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -296,36 +301,33 @@ Image LoadImageAnim(const char *fileName, int *frames)  
		
	
		
			
			}  
		
	
		
			
			
  
		
	
		
			
			/ /  Load  image  from  memory  buffer ,  fileType  refers  to  extension :  i . e .  " .png "  
		
	
		
			
			/ /  WARNING :  File  extension  must  be  provided  in  lower - case  
		
	
		
			
			Image  LoadImageFromMemory ( const  char  * fileType ,  const  unsigned  char  * fileData ,  int  dataSize )  
		
	
		
			
			{  
		
	
		
			
			    Image  image  =  {  0  } ;   
		
	
		
			
			
  
		
	
		
			
			    char  fileExtLower [ 16 ]  =  {  0  } ;   
		
	
		
			
			    strcpy ( fileExtLower ,  TextToLower ( fileType ) ) ;   
		
	
		
			
			
  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_PNG)  
		
	
		
			
			    if  ( ( TextIsEqual ( fileExtLower ,  " .png " ) )   
		
	
		
			
			    if  ( ( strcmp ( fileType ,  " .png " )  = =  0 )   
		
	
		
			
			# else  
		
	
		
			
			    if  ( ( false )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_BMP)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .bmp " ) )   
		
	
		
			
			        | |  ( strcmp ( fileType ,  " .bmp " )= =  0  )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_TGA)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .tga " ) )   
		
	
		
			
			        | |  ( strcmp ( fileType ,  " .tga " )= =  0  )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_JPG)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .jpg " )  | |   
		
	
		
			
			            TextIsEqual ( fileExtLower ,  " .jpeg " ) )   
		
	
		
			
			        | |  ( ( strcmp ( fileType ,  " .jpg " )  = =  0 )  | |  ( strcmp ( fileType ,  " .jpeg " )  = =  0 ) )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_GIF)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .gif " ) )   
		
	
		
			
			        | |  ( strcmp ( fileType ,  " .gif " )= =  0  )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_PIC)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .pic " ) )   
		
	
		
			
			        | |  ( strcmp ( fileType ,  " .pic " )= =  0  )   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_PSD)  
		
	
		
			
			        | |  ( TextIsEqual ( fileExtLower ,  " .psd " ) )   
		
	
		
			
			        | |  ( strcmp ( fileType ,  " .psd " )= =  0  )   
		
	
		
			
			# endif  
		
	
		
			
			       )   
		
	
		
			
			    {   
		
	
	
		
			
				
				
				
				
					
						 
				
				 
			
			@ -350,7 +352,7 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i  
		
	
		
			
			# endif  
		
	
		
			
			    }   
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_HDR)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .hdr " ) )   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .hdr " )= =  0  )   
		
	
		
			
			    {   
		
	
		
			
			# if defined(STBI_REQUIRED)  
		
	
		
			
			        if  ( fileData  ! =  NULL )   
		
	
	
		
			
				
				
				
				
					
						 
				
				 
			
			@ -373,7 +375,7 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i  
		
	
		
			
			    }   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_QOI)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .qoi " ) )    
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .qoi " )= =  0  )    
		
	
		
			
			    {   
		
	
		
			
			        qoi_desc  desc  =  {  0  } ;   
		
	
		
			
			        image . data  =  qoi_decode ( fileData ,  dataSize ,  & desc ,  4 ) ;   
		
	
	
		
			
				
				
				
				
					
						 
				
				 
			
			@ -384,19 +386,19 @@ Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, i  
		
	
		
			
			    }   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_DDS)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .dds " ) )  image  =  LoadDDS ( fileData ,  dataSize ) ;   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .dds " )= =  0  )  image  =  LoadDDS ( fileData ,  dataSize ) ;   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_PKM)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .pkm " ) )  image  =  LoadPKM ( fileData ,  dataSize ) ;   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .pkm " )= =  0  )  image  =  LoadPKM ( fileData ,  dataSize ) ;   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_KTX)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .ktx " ) )  image  =  LoadKTX ( fileData ,  dataSize ) ;   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .ktx " )= =  0  )  image  =  LoadKTX ( fileData ,  dataSize ) ;   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_PVR)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .pvr " ) )  image  =  LoadPVR ( fileData ,  dataSize ) ;   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .pvr " )= =  0  )  image  =  LoadPVR ( fileData ,  dataSize ) ;   
		
	
		
			
			# endif  
		
	
		
			
			# if defined(SUPPORT_FILEFORMAT_ASTC)  
		
	
		
			
			    else  if  ( TextIsEqual ( fileExtLower ,  " .astc " ) )  image  =  LoadASTC ( fileData ,  dataSize ) ;   
		
	
		
			
			    else  if  ( strcmp ( fileType ,  " .astc " )= =  0  )  image  =  LoadASTC ( fileData ,  dataSize ) ;   
		
	
		
			
			# endif  
		
	
		
			
			    else  TRACELOG ( LOG_WARNING ,  " IMAGE: Data format not supported " ) ;   
		
	
		
			
			
  
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -1133,35 +1135,41 @@ void ImageToPOT(Image *image, Color fill)  
		
	
		
			
			/ /  Create  an  image  from  text  ( default  font )  
		
	
		
			
			Image  ImageText ( const  char  * text ,  int  fontSize ,  Color  color )  
		
	
		
			
			{  
		
	
		
			
			    Image  imText  =  {  0  } ;   
		
	
		
			
			# if defined(SUPPORT_MODULE_RTEXT)  
		
	
		
			
			    int  defaultFontSize  =  10 ;    / /  Default  Font  chars  height  in  pixel   
		
	
		
			
			    if  ( fontSize  <  defaultFontSize )  fontSize  =  defaultFontSize ;   
		
	
		
			
			    int  spacing  =  fontSize / defaultFontSize ;   
		
	
		
			
			
  
		
	
		
			
			    Image  imText  =  ImageTextEx ( GetFontDefault ( ) ,  text ,  ( float ) fontSize ,  ( float ) spacing ,  color ) ;   
		
	
		
			
			
  
		
	
		
			
			    imText  =  ImageTextEx ( GetFontDefault ( ) ,  text ,  ( float ) fontSize ,  ( float ) spacing ,  color ) ;    / /  WARNING :  Module  required :  rtext   
		
	
		
			
			# else  
		
	
		
			
			    imText  =  GenImageColor ( 200 ,  60 ,  BLACK ) ;      / /  Generating  placeholder  black  image  rectangle   
		
	
		
			
			    TRACELOG ( LOG_WARNING ,  " IMAGE: ImageTextEx() requires module: rtext " ) ;   
		
	
		
			
			# endif  
		
	
		
			
			    return  imText ;   
		
	
		
			
			}  
		
	
		
			
			
  
		
	
		
			
			/ /  Create  an  image  from  text  ( custom  sprite  font )  
		
	
		
			
			Image  ImageTextEx ( Font  font ,  const  char  * text ,  float  fontSize ,  float  spacing ,  Color  tint )  
		
	
		
			
			{  
		
	
		
			
			    Image  imText  =  {  0  } ;   
		
	
		
			
			# if defined(SUPPORT_MODULE_RTEXT)  
		
	
		
			
			    int  size  =  ( int ) strlen ( text ) ;    / /  Get  size  in  bytes  of  text   
		
	
		
			
			
  
		
	
		
			
			    int  textOffsetX  =  0 ;             / /  Image  drawing  position  X   
		
	
		
			
			    int  textOffsetY  =  0 ;             / /  Offset  between  lines  ( on  line  break  ' \n ' )   
		
	
		
			
			
  
		
	
		
			
			    / /  NOTE :  Text  image  is  generated  at  font  base  size ,  later  scaled  to  desired  font  size   
		
	
		
			
			    Vector2  imSize  =  MeasureTextEx ( font ,  text ,  ( float ) font . baseSize ,  spacing ) ;   
		
	
		
			
			    Vector2  imSize  =  MeasureTextEx ( font ,  text ,  ( float ) font . baseSize ,  spacing ) ;   / /  WARNING :  Module  required :  rtext    
		
	
		
			
			
  
		
	
		
			
			    / /  Create  image  to  store  text   
		
	
		
			
			    Image  =  GenImageColor ( ( int ) imSize . x ,  ( int ) imSize . y ,  BLANK ) ;   
		
	
		
			
			    imText  =  GenImageColor ( ( int ) imSize . x ,  ( int ) imSize . y ,  BLANK ) ;   
		
	
		
			
			
  
		
	
		
			
			    for  ( int  i  =  0 ;  i  <  size ;  i + + )   
		
	
		
			
			    {   
		
	
		
			
			        / /  Get  next  codepoint  from  byte  string  and  glyph  index  in  font   
		
	
		
			
			        int  codepointByteCount  =  0 ;   
		
	
		
			
			        int  codepoint  =  GetCodepoint ( & text [ i ] ,  & codepointByteCount ) ;   
		
	
		
			
			        int  index  =  GetGlyphIndex ( font ,  codepoint ) ;   
		
	
		
			
			        int  codepoint  =  GetCodepoint ( & text [ i ] ,  & codepointByteCount ) ;     / /  WARNING :  Module  required :  rtext    
		
	
		
			
			        int  index  =  GetGlyphIndex ( font ,  codepoint ) ;                      / /  WARNING :  Module  required :  rtext    
		
	
		
			
			
  
		
	
		
			
			        / /  NOTE :  Normally  we  exit  the  decoding  sequence  as  soon  as  a  bad  byte  is  found  ( and  return  0x3f )   
		
	
		
			
			        / /  but  we  need  to  draw  all  of  the  bad  bytes  using  the  ' ? '  symbol  moving  one  byte   
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -1196,10 +1204,14 @@ Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Co  
		
	
		
			
			        TRACELOG ( LOG_INFO ,  " IMAGE: Text scaled by factor: %f " ,  scaleFactor ) ;   
		
	
		
			
			
  
		
	
		
			
			        / /  Using  nearest - neighbor  scaling  algorithm  for  default  font   
		
	
		
			
			        / /  WARNING :  Module  required :  rtext   
		
	
		
			
			        if  ( font . texture . id  = =  GetFontDefault ( ) . texture . id )  ImageResizeNN ( & imText ,  ( int ) ( imSize . x * scaleFactor ) ,  ( int ) ( imSize . y * scaleFactor ) ) ;   
		
	
		
			
			        else  ImageResize ( & imText ,  ( int ) ( imSize . x * scaleFactor ) ,  ( int ) ( imSize . y * scaleFactor ) ) ;   
		
	
		
			
			    }   
		
	
		
			
			
  
		
	
		
			
			# else  
		
	
		
			
			    imText  =  GenImageColor ( 200 ,  60 ,  BLACK ) ;      / /  Generating  placeholder  black  image  rectangle   
		
	
		
			
			    TRACELOG ( LOG_WARNING ,  " IMAGE: ImageTextEx() requires module: rtext " ) ;   
		
	
		
			
			# endif  
		
	
		
			
			    return  imText ;   
		
	
		
			
			}  
		
	
		
			
			
  
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -2809,10 +2821,13 @@ void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color  
		
	
		
			
			/ /  Draw  text  ( default  font )  within  an  image  ( destination )  
		
	
		
			
			void  ImageDrawText ( Image  * dst ,  const  char  * text ,  int  posX ,  int  posY ,  int  fontSize ,  Color  color )  
		
	
		
			
			{  
		
	
		
			
			# if defined(SUPPORT_MODULE_RTEXT)  
		
	
		
			
			    Vector2  position  =  {  ( float ) posX ,  ( float ) posY  } ;   
		
	
		
			
			
  
		
	
		
			
			    / /  NOTE :  For  default  font ,  sapcing  is  set  to  desired  font  size  /  default  font  size  ( 10 )   
		
	
		
			
			    ImageDrawTextEx ( dst ,  GetFontDefault ( ) ,  text ,  position ,  ( float ) fontSize ,  ( float ) fontSize / 10 ,  color ) ;   
		
	
		
			
			    / /  NOTE :  For  default  font ,  spacing  is  set  to  desired  font  size  /  default  font  size  ( 10 )   
		
	
		
			
			    ImageDrawTextEx ( dst ,  GetFontDefault ( ) ,  text ,  position ,  ( float ) fontSize ,  ( float ) fontSize / 10 ,  color ) ;    / /  WARNING :  Module  required :  rtext   
		
	
		
			
			# else  
		
	
		
			
			    TRACELOG ( LOG_WARNING ,  " IMAGE: ImageDrawText() requires module: rtext " ) ;   
		
	
		
			
			# endif  
		
	
		
			
			}  
		
	
		
			
			
  
		
	
		
			
			/ /  Draw  text  ( custom  sprite  font )  within  an  image  ( destination )  
		
	
	
		
			
				
				
					
						 
				
				
					
						 
				
				
				 
			
			@ -4803,3 +4818,5 @@ static Vector4 *LoadImageDataNormalized(Image image)  
		
	
		
			
			
  
		
	
		
			
			    return  pixels ;   
		
	
		
			
			}  
		
	
		
			
			
  
		
	
		
			
			# endif       / /  SUPPORT_MODULE_RTEXTURES