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 | // Callbacks to be implemented by users | ||||||
| typedef void (*TraceLogCallback)(int logType, const char *text, va_list args); | typedef void (*TraceLogCallback)(int logType, const char *text, va_list args); | ||||||
| typedef void *(*MemAllocCallback)(int size); | typedef void *(*MemAllocCallback)(int size); | ||||||
| typedef void *(*MemReallocCallback)(int size); | typedef void *(*MemReallocCallback)(void *ptr, int size); | ||||||
| typedef void (*MemFreeCallback)(void *ptr); | typedef void (*MemFreeCallback)(void *ptr); | ||||||
| typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead);       // Load file data as byte array (read) | typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead); | ||||||
| typedef char* (*LoadFileTextCallback)(const char* fileName);                                        // Load text data from file (read), returns a '\0' terminated string | 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) | #if defined(__cplusplus) | ||||||
| extern "C" {            // Prevents name mangling of functions | 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 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 SetTraceLogLevel(int logType);                         // Set the current threshold (minimum) log level | ||||||
| RLAPI void *MemAlloc(int size);                                   // Internal memory allocator | 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 | RLAPI void MemFree(void *ptr);                                    // Internal memory free | ||||||
|  |  | ||||||
| // Set system callbacks | // Set custom system callbacks | ||||||
| RLAPI void SetTraceLogCallback(TraceLogCallback callback);        // Set a trace log callback to enable custom logging | RLAPI void SetTraceLogCallback(TraceLogCallback callback);        // Set custom trace log | ||||||
| RLAPI void SetMemAllocCallback(MemAllocCallback callback);        // Set custom memory allocator | RLAPI void SetMemAllocCallback(MemAllocCallback callback);        // Set custom memory allocator | ||||||
| RLAPI void SetMemReallocCallback(MemReallocCallback callback);    // Set custom memory reallocator | RLAPI void SetMemReallocCallback(MemReallocCallback callback);    // Set custom memory reallocator | ||||||
| RLAPI void SetMemFreeCallback(MemFreeCallback callback);          // Set custom memory free | RLAPI void SetMemFreeCallback(MemFreeCallback callback);          // Set custom memory free | ||||||
| RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback);  // override default file access functions | RLAPI void SetLoadFileDataCallback(LoadFileDataCallback callback);  // Set custom file data loader | ||||||
| RLAPI void SetLoadFileTextCallback(LoadFileDataCallback callback);  // override default file access functions | 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 | // Files management functions | ||||||
| RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead);     // Load file data as byte array (read) | 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 | // Log types messages | ||||||
| static int logTypeLevel = LOG_INFO;                 // Minimum log type level | 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) | #if defined(PLATFORM_ANDROID) | ||||||
| static AAssetManager *assetManager = NULL;              // Android assets manager pointer | 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 | // Set the current threshold (minimum) log level | ||||||
| void SetTraceLogLevel(int logType) | void SetTraceLogLevel(int logType) { logTypeLevel = logType; } | ||||||
| { |  | ||||||
|     logTypeLevel = logType; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Set a trace log callback to enable custom logging |  | ||||||
| void SetTraceLogCallback(TraceLogCallback callback) |  | ||||||
| { |  | ||||||
|     logCallback = callback; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Show trace log messages (LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_DEBUG) | // Show trace log messages (LOG_INFO, LOG_WARNING, LOG_ERROR, LOG_DEBUG) | ||||||
| void TraceLog(int logType, const char *text, ...) | void TraceLog(int logType, const char *text, ...) | ||||||
| @@ -113,9 +124,9 @@ void TraceLog(int logType, const char *text, ...) | |||||||
|     va_list args; |     va_list args; | ||||||
|     va_start(args, text); |     va_start(args, text); | ||||||
|  |  | ||||||
|     if (logCallback) |     if (traceLog) | ||||||
|     { |     { | ||||||
|         logCallback(logType, text, args); |         traceLog(logType, text, args); | ||||||
|         va_end(args); |         va_end(args); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| @@ -152,21 +163,37 @@ void TraceLog(int logType, const char *text, ...) | |||||||
|  |  | ||||||
|     va_end(args); |     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 | #endif  // SUPPORT_TRACELOG | ||||||
| } | } | ||||||
|  |  | ||||||
| // Internal memory allocator | // Internal memory allocator | ||||||
|  | // NOTE: Initializes to zero by default | ||||||
| void *MemAlloc(int size) | 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 | // Internal memory free | ||||||
| void MemFree(void *ptr) | void MemFree(void *ptr) | ||||||
| { | { | ||||||
|     RL_FREE(ptr); |     if (memFree) memFree(ptr); | ||||||
|  |     else RL_FREE(ptr); | ||||||
| } | } | ||||||
|  |  | ||||||
| // Load data from file into a buffer | // Load data from file into a buffer | ||||||
| @@ -177,6 +204,12 @@ unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead) | |||||||
|  |  | ||||||
|     if (fileName != NULL) |     if (fileName != NULL) | ||||||
|     { |     { | ||||||
|  |         if (loadFileData)  | ||||||
|  |         { | ||||||
|  |             data = loadFileData(fileName, bytesRead); | ||||||
|  |             return data; | ||||||
|  |         } | ||||||
|  |          | ||||||
|         FILE *file = fopen(fileName, "rb"); |         FILE *file = fopen(fileName, "rb"); | ||||||
|  |  | ||||||
|         if (file != NULL) |         if (file != NULL) | ||||||
| @@ -222,6 +255,12 @@ bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite) | |||||||
|  |  | ||||||
|     if (fileName != NULL) |     if (fileName != NULL) | ||||||
|     { |     { | ||||||
|  |         if (saveFileData)  | ||||||
|  |         { | ||||||
|  |             saveFileData(fileName, data, bytesToWrite); | ||||||
|  |             return success; | ||||||
|  |         } | ||||||
|  |                 | ||||||
|         FILE *file = fopen(fileName, "wb"); |         FILE *file = fopen(fileName, "wb"); | ||||||
|  |  | ||||||
|         if (file != NULL) |         if (file != NULL) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ray
					Ray