| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -65,9 +65,29 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Log types messages | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int logTypeLevel = LOG_INFO;                     // Minimum log type level | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int logTypeExit = LOG_ERROR;                     // Log type that exits | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static TraceLogCallback logCallback = NULL;             // Log callback function pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int logTypeLevel = LOG_INFO;                 // Minimum log type level | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static TraceLogCallback traceLog = NULL;            // TraceLog callback function pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static MemAllocCallback memAlloc = NULL;            // MemAlloc callback function pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static MemReallocCallback memRealloc = NULL;        // MemRealloc callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static MemFreeCallback memFree = NULL;              // MemFree callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static LoadFileDataCallback loadFileData = NULL;    // LoadFileData callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static SaveFileDataCallback saveFileData = NULL;    // SaveFileText callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static LoadFileTextCallback loadFileText = NULL;    // LoadFileText callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static SaveFileTextCallback saveFileText = NULL;    // SaveFileText callback funtion pointer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//void *MemAllocDefault(unsigned int size) { return RL_MALLOC(size); } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//void MemFreeDefault(void *ptr) { RL_FREE(ptr); } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetTraceLogCallback(TraceLogCallback callback) { traceLog = callback; }              // Set custom trace log | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetMemAllocCallback(MemAllocCallback callback) { memAlloc = callback; }              // Set custom memory allocator | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetMemReallocCallback(MemReallocCallback callback) { memRealloc = callback; }        // Set custom memory reallocator | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetMemFreeCallback(MemFreeCallback callback) { memFree = callback; }                 // Set custom memory free | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetLoadFileDataCallback(LoadFileDataCallback callback) { loadFileData = callback; }  // Set custom file data loader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetSaveFileDataCallback(SaveFileDataCallback callback) { saveFileData = callback; }  // Set custom file data saver | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetLoadFileTextCallback(LoadFileTextCallback callback) { loadFileText = callback; }  // Set custom file text loader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetSaveFileTextCallback(SaveFileTextCallback callback) { saveFileText = callback; }  // Set custom file text saver | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_ANDROID) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static AAssetManager *assetManager = NULL;              // Android assets manager pointer | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -92,16 +112,7 @@ static int android_close(void *cookie); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Set the current threshold (minimum) log level | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetTraceLogLevel(int logType) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    logTypeLevel = logType; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Set a trace log callback to enable custom logging | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetTraceLogCallback(TraceLogCallback callback) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    logCallback = callback; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetTraceLogLevel(int logType) { logTypeLevel = logType; } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Show trace log messages (LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_DEBUG) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void TraceLog(int logType, const char *text, ...) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -113,9 +124,9 @@ void TraceLog(int logType, const char *text, ...) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    va_list args; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    va_start(args, text); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (logCallback) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (traceLog) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        logCallback(logType, text, args); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        traceLog(logType, text, args); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        va_end(args); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        return; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -152,21 +163,37 @@ void TraceLog(int logType, const char *text, ...) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    va_end(args); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (logType >= logTypeExit) exit(1); // If exit message, exit program | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (logType == LOG_ERROR) exit(1);  // If error, exit program | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif  // SUPPORT_TRACELOG | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Internal memory allocator | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Initializes to zero by default | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void *MemAlloc(int size) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return RL_MALLOC(size); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // WARNING: This implementation allows changing memAlloc at any | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // point during program execution, it could be a security risk | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    void *ptr = NULL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (memAlloc) ptr = memAlloc(size); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else ptr = RL_CALLOC(size, 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return ptr; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Internal memory reallocator | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void *MemRealloc(void *ptr, int size) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    void *ret = NULL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (memRealloc) ret = memRealloc(ptr, size); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else ret = RL_REALLOC(ptr, size); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return ret; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Internal memory free | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void MemFree(void *ptr) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    RL_FREE(ptr); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (memFree) memFree(ptr); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else RL_FREE(ptr); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load data from file into a buffer | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -177,6 +204,12 @@ unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (fileName != NULL) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (loadFileData)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            data = loadFileData(fileName, bytesRead); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            return data; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        FILE *file = fopen(fileName, "rb"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (file != NULL) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -222,6 +255,12 @@ bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (fileName != NULL) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (saveFileData)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            saveFileData(fileName, data, bytesToWrite); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            return success; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        FILE *file = fopen(fileName, "wb"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (file != NULL) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |