Add filesystem override API.
This commit is contained in:
parent
cc816345bf
commit
91e3677762
11
src/raylib.h
11
src/raylib.h
|
|
@ -855,6 +855,14 @@ typedef enum {
|
|||
// Callbacks to be implemented by users
|
||||
typedef void (*TraceLogCallback)(int logType, const char *text, va_list args);
|
||||
|
||||
// Filesystem override implemented by users.
|
||||
typedef struct FilesystemOverride {
|
||||
unsigned char *(*loadFileData)(const char *fileName, unsigned int *bytesRead);
|
||||
void (*saveFileData)(const char *fileName, void *data, unsigned int bytesToWrite);
|
||||
char *(*loadFileText)(const char *fileName);
|
||||
void (*saveFileText)(const char *fileName, char *text);
|
||||
} FilesystemOverride;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" { // Prevents name mangling of functions
|
||||
#endif
|
||||
|
|
@ -953,6 +961,7 @@ RLAPI void TakeScreenshot(const char *fileName); // Takes a scr
|
|||
RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included)
|
||||
|
||||
// Files management functions
|
||||
RLAPI void SetFilesystemOverride(FilesystemOverride override); // Set filesystem functions override.
|
||||
RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read)
|
||||
RLAPI void SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write)
|
||||
RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string
|
||||
|
|
@ -1164,7 +1173,7 @@ RLAPI void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Col
|
|||
RLAPI void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); // Draw circle within an image (Vector version)
|
||||
RLAPI void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); // Draw rectangle within an image
|
||||
RLAPI void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); // Draw rectangle within an image (Vector version)
|
||||
RLAPI void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image
|
||||
RLAPI void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image
|
||||
RLAPI void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image
|
||||
RLAPI void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); // Draw a source image within a destination image (tint applied to source)
|
||||
RLAPI void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) within an image (destination)
|
||||
|
|
|
|||
35
src/utils.c
35
src/utils.c
|
|
@ -63,6 +63,9 @@ static int logTypeLevel = LOG_INFO; // Minimum log type leve
|
|||
static int logTypeExit = LOG_ERROR; // Log type that exits
|
||||
static TraceLogCallback logCallback = NULL; // Log callback function pointer
|
||||
|
||||
// Filesystem function override.
|
||||
static FilesystemOverride fsOverride = { NULL, NULL, NULL, NULL };
|
||||
|
||||
#if defined(PLATFORM_ANDROID)
|
||||
static AAssetManager *assetManager = NULL; // Android assets manager pointer
|
||||
static const char *internalDataPath = NULL; // Android internal data path
|
||||
|
|
@ -164,6 +167,12 @@ void TraceLog(int logType, const char *text, ...)
|
|||
#endif // SUPPORT_TRACELOG
|
||||
}
|
||||
|
||||
// Set filesystem functions override.
|
||||
void SetFilesystemOverride(FilesystemOverride override)
|
||||
{
|
||||
fsOverride = override;
|
||||
}
|
||||
|
||||
// Load data from file into a buffer
|
||||
unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead)
|
||||
{
|
||||
|
|
@ -172,6 +181,13 @@ unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead)
|
|||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
if (fsOverride.loadFileData) {
|
||||
data = fsOverride.loadFileData(fileName, bytesRead);
|
||||
|
||||
if (data)
|
||||
return data;
|
||||
}
|
||||
|
||||
FILE *file = fopen(fileName, "rb");
|
||||
|
||||
if (file != NULL)
|
||||
|
|
@ -209,6 +225,11 @@ void SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite)
|
|||
{
|
||||
if (fileName != NULL)
|
||||
{
|
||||
if (fsOverride.saveFileData) {
|
||||
fsOverride.saveFileData(fileName, data, bytesToWrite);
|
||||
return;
|
||||
}
|
||||
|
||||
FILE *file = fopen(fileName, "wb");
|
||||
|
||||
if (file != NULL)
|
||||
|
|
@ -234,6 +255,13 @@ char *LoadFileText(const char *fileName)
|
|||
|
||||
if (fileName != NULL)
|
||||
{
|
||||
if (fsOverride.loadFileText) {
|
||||
text = fsOverride.loadFileText(fileName);
|
||||
|
||||
if (text)
|
||||
return text;
|
||||
}
|
||||
|
||||
FILE *textFile = fopen(fileName, "rt");
|
||||
|
||||
if (textFile != NULL)
|
||||
|
|
@ -275,6 +303,11 @@ void SaveFileText(const char *fileName, char *text)
|
|||
{
|
||||
if (fileName != NULL)
|
||||
{
|
||||
if (fsOverride.saveFileText) {
|
||||
fsOverride.saveFileText(fileName, text);
|
||||
return;
|
||||
}
|
||||
|
||||
FILE *file = fopen(fileName, "wt");
|
||||
|
||||
if (file != NULL)
|
||||
|
|
@ -318,7 +351,7 @@ FILE *android_fopen(const char *fileName, const char *mode)
|
|||
// NOTE: AAsset provides access to read-only asset
|
||||
AAsset *asset = AAssetManager_open(assetManager, fileName, AASSET_MODE_UNKNOWN);
|
||||
|
||||
if (asset != NULL)
|
||||
if (asset != NULL)
|
||||
{
|
||||
// Return pointer to file in the assets
|
||||
return funopen(asset, android_read, android_write, android_seek, android_close);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user