mirror of
				https://github.com/raysan5/raylib.git
				synced 2025-10-26 12:27:01 +00:00 
			
		
		
		
	NOTE: This feature is still under consideration and not complete.
This commit is contained in:
		
							
								
								
									
										20
									
								
								src/raylib.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/raylib.h
									
									
									
									
									
								
							| @@ -876,10 +876,13 @@ typedef enum { | ||||
| // Callbacks to be implemented by users | ||||
| typedef void (*TraceLogCallback)(int logType, const char *text, va_list args); | ||||
| typedef void *(*MemAllocCallback)(int size); | ||||
| typedef void *(*MemReallocCallback)(int size); | ||||
| typedef void *(*MemReallocCallback)(void *ptr, int size); | ||||
| typedef void (*MemFreeCallback)(void *ptr); | ||||
| typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead);       // Load file data as byte array (read) | ||||
| typedef char* (*LoadFileTextCallback)(const char* fileName);                                        // Load text data from file (read), returns a '\0' terminated string | ||||
| typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead); | ||||
| typedef void (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); | ||||
| typedef char *(*LoadFileTextCallback)(const char* fileName); | ||||
| typedef void (*SaveFileTextCallback)(const char *fileName, char *text); | ||||
|  | ||||
|  | ||||
| #if defined(__cplusplus) | ||||
| extern "C" {            // Prevents name mangling of functions | ||||
| @@ -979,15 +982,18 @@ RLAPI void SetConfigFlags(unsigned int flags);                    // Setup init | ||||
| RLAPI void TraceLog(int logType, const char *text, ...);          // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR) | ||||
| RLAPI void SetTraceLogLevel(int logType);                         // Set the current threshold (minimum) log level | ||||
| RLAPI void *MemAlloc(int size);                                   // Internal memory allocator | ||||
| RLAPI void *MemRealloc(void *ptr, int size);                      // Internal memory reallocator | ||||
| RLAPI void MemFree(void *ptr);                                    // Internal memory free | ||||
|  | ||||
| // Set system callbacks | ||||
| RLAPI void SetTraceLogCallback(TraceLogCallback callback);        // Set a trace log callback to enable custom logging | ||||
| // Set custom system callbacks | ||||
| RLAPI void SetTraceLogCallback(TraceLogCallback callback);        // Set custom trace log | ||||
| RLAPI void SetMemAllocCallback(MemAllocCallback callback);        // Set custom memory allocator | ||||
| RLAPI void SetMemReallocCallback(MemReallocCallback callback);    // Set custom memory reallocator | ||||
| RLAPI void SetMemFreeCallback(MemFreeCallback callback);          // Set custom memory free | ||||
| RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback);  // override default file access functions | ||||
| RLAPI void SetLoadFileTextCallback(LoadFileDataCallback callback);  // override default file access functions | ||||
| RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback);  // Set custom file data loader | ||||
| RLAPI void SetSaveFileDataCallback(SaveFileDataCallback callback);  // Set custom file data saver | ||||
| RLAPI void SetLoadFileTextCallback(LoadFileTextCallback callback);  // Set custom file text loader | ||||
| RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback);  // Set custom file text saver | ||||
|  | ||||
| // Files management functions | ||||
| RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead);     // Load file data as byte array (read) | ||||
|   | ||||
							
								
								
									
										73
									
								
								src/utils.c
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								src/utils.c
									
									
									
									
									
								
							| @@ -66,8 +66,28 @@ | ||||
|  | ||||
| // 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 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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ray
					Ray