diff options
| author | Ray <raysan5@gmail.com> | 2017-04-04 12:17:08 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-04-04 12:17:08 +0200 |
| commit | 407746193d991190fa4dead94649abb2ed27d462 (patch) | |
| tree | f79f67c3df8ed657a27abba6029a71be359871df /src | |
| parent | 5338bbf70d3e2c71fcbd0db54e14b6cf2d5616c3 (diff) | |
| parent | 1f56e8e5d0000e1c46483530331887dbd0f8ce75 (diff) | |
| download | raylib-407746193d991190fa4dead94649abb2ed27d462.tar.gz raylib-407746193d991190fa4dead94649abb2ed27d462.zip | |
Merge pull request #256 from raysan5/develop
Integrate develop branch
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 9 | ||||
| -rw-r--r-- | src/audio.c | 39 | ||||
| -rw-r--r-- | src/audio.h | 7 | ||||
| -rw-r--r-- | src/core.c | 29 | ||||
| -rw-r--r-- | src/models.c | 4 | ||||
| -rw-r--r-- | src/raylib.h | 6 | ||||
| -rw-r--r-- | src/text.c | 160 | ||||
| -rw-r--r-- | src/textures.c | 46 | ||||
| -rw-r--r-- | src/utils.c | 32 | ||||
| -rw-r--r-- | src/utils.h | 5 |
10 files changed, 105 insertions, 232 deletions
diff --git a/src/Makefile b/src/Makefile index 598a9be4..4259a66b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -172,9 +172,12 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) endif endif ifeq ($(PLATFORM),PLATFORM_WEB) - CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ASSERTIONS=1 --preload-file resources - #-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing - #-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) + CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ASSERTIONS=1 --profiling --preload-file resources + # -O2 # if used, also set --memory-init-file 0 + # --memory-init-file 0 # to avoid an external memory initialization code file (.mem) + # -s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing + # -s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) + # -s USE_PTHREADS=1 # multithreading support endif ifeq ($(PLATFORM),PLATFORM_RPI) CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces diff --git a/src/audio.c b/src/audio.c index 5edabf41..34be4789 100644 --- a/src/audio.c +++ b/src/audio.c @@ -24,7 +24,6 @@ * Selected desired fileformats to be supported for loading. Some of those formats are * supported by default, to remove support, just comment unrequired #define in this module * -* * LIMITATIONS: * Only up to two channels supported: MONO and STEREO (for additional channels, use AL_EXT_MCFORMATS) * Only the following sample sizes supported: 8bit PCM, 16bit PCM, 32-bit float PCM (using AL_EXT_FLOAT32) @@ -65,8 +64,6 @@ * **********************************************************************************************/ -//#define AUDIO_STANDALONE // NOTE: To use the audio module as standalone lib, just uncomment this line - // Default configuration flags (supported features) //------------------------------------------------- #define SUPPORT_FILEFORMAT_WAV @@ -194,8 +191,8 @@ static Wave LoadFLAC(const char *fileName); // Load FLAC file #endif #if defined(AUDIO_STANDALONE) -const char *GetExtension(const char *fileName); // Get the extension for a filename -void TraceLog(int msgType, const char *text, ...); // Outputs a trace log message (INFO, ERROR, WARNING) +bool IsFileExtension(const char *fileName, const char *ext); // Check file extension +void TraceLog(int msgType, const char *text, ...); // Outputs trace log message (INFO, ERROR, WARNING) #endif //---------------------------------------------------------------------------------- @@ -285,15 +282,15 @@ Wave LoadWave(const char *fileName) { Wave wave = { 0 }; - if (strcmp(GetExtension(fileName), "wav") == 0) wave = LoadWAV(fileName); + if (IsFileExtension(fileName, ".wav")) wave = LoadWAV(fileName); #if defined(SUPPORT_FILEFORMAT_OGG) - else if (strcmp(GetExtension(fileName), "ogg") == 0) wave = LoadOGG(fileName); + else if (IsFileExtension(fileName, ".ogg")) wave = LoadOGG(fileName); #endif #if defined(SUPPORT_FILEFORMAT_FLAC) - else if (strcmp(GetExtension(fileName), "flac") == 0) wave = LoadFLAC(fileName); + else if (IsFileExtension(fileName, ".flac")) wave = LoadFLAC(fileName); #endif #if !defined(AUDIO_STANDALONE) - else if (strcmp(GetExtension(fileName),"rres") == 0) + else if (IsFileExtension(fileName, ".rres")) { RRES rres = LoadResource(fileName, 0); @@ -672,7 +669,7 @@ Music LoadMusicStream(const char *fileName) { Music music = (MusicData *)malloc(sizeof(MusicData)); - if (strcmp(GetExtension(fileName), "ogg") == 0) + if (IsFileExtension(fileName, ".ogg")) { // Open ogg audio stream music->ctxOgg = stb_vorbis_open_filename(fileName, NULL, NULL); @@ -696,7 +693,7 @@ Music LoadMusicStream(const char *fileName) } } #if defined(SUPPORT_FILEFORMAT_FLAC) - else if (strcmp(GetExtension(fileName), "flac") == 0) + else if (IsFileExtension(fileName, ".flac")) { music->ctxFlac = drflac_open_file(fileName); @@ -717,7 +714,7 @@ Music LoadMusicStream(const char *fileName) } #endif #if defined(SUPPORT_FILEFORMAT_XM) - else if (strcmp(GetExtension(fileName), "xm") == 0) + else if (IsFileExtension(fileName, ".xm")) { int result = jar_xm_create_context_from_file(&music->ctxXm, 48000, fileName); @@ -739,7 +736,7 @@ Music LoadMusicStream(const char *fileName) } #endif #if defined(SUPPORT_FILEFORMAT_MOD) - else if (strcmp(GetExtension(fileName), "mod") == 0) + else if (IsFileExtension(fileName, ".mod")) { jar_mod_init(&music->ctxMod); @@ -1310,12 +1307,18 @@ static Wave LoadFLAC(const char *fileName) // Some required functions for audio standalone module version #if defined(AUDIO_STANDALONE) -// Get the extension for a filename -const char *GetExtension(const char *fileName) +// Check file extension +bool IsFileExtension(const char *fileName, const char *ext) { - const char *dot = strrchr(fileName, '.'); - if (!dot || dot == fileName) return ""; - return (dot + 1); + bool result = false; + const char *fileExt; + + if ((fileExt = strrchr(fileName, '.')) != NULL) + { + if (strcmp(fileExt, ext) == 0) result = true; + } + + return result; } // Outputs a trace log message (INFO, ERROR, WARNING) diff --git a/src/audio.h b/src/audio.h index 51f858da..48ef7403 100644 --- a/src/audio.h +++ b/src/audio.h @@ -123,7 +123,7 @@ Wave LoadWave(const char *fileName); // Load wave dat Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, int sampleSize, int channels); // Load wave data from raw array data Sound LoadSound(const char *fileName); // Load sound from file Sound LoadSoundFromWave(Wave wave); // Load sound from wave data -void UpdateSound(Sound sound, const void *data, int samplesCount); // Update sound buffer with new data +void UpdateSound(Sound sound, const void *data, int samplesCount);// Update sound buffer with new data void UnloadWave(Wave wave); // Unload wave data void UnloadSound(Sound sound); // Unload sound void PlaySound(Sound sound); // Play a sound @@ -151,9 +151,10 @@ void SetMusicLoopCount(Music music, float count); // Set music loo float GetMusicTimeLength(Music music); // Get music time length (in seconds) float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) +// Raw audio stream functions AudioStream InitAudioStream(unsigned int sampleRate, - unsigned int sampleSize, - unsigned int channels); // Init audio stream (to stream raw audio pcm data) + unsigned int sampleSize, + unsigned int channels); // Init audio stream (to stream raw audio pcm data) void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount); // Update audio stream buffers with data void CloseAudioStream(AudioStream stream); // Close audio stream and free memory bool IsAudioBufferProcessed(AudioStream stream); // Check if any audio stream buffers requires refill @@ -102,7 +102,7 @@ #include <stdint.h> // Required for: typedef unsigned long long int uint64_t, used by hi-res timer #include <time.h> // Required for: time() - Android/RPI hi-res timer (NOTE: Linux only!) #include <math.h> // Required for: tan() [Used in Begin3dMode() to set perspective] -#include <string.h> // Required for: strcmp() +#include <string.h> // Required for: strrchr(), strcmp() //#include <errno.h> // Macros for reporting and retrieving error conditions through error codes #if defined __linux__ || defined(PLATFORM_WEB) @@ -978,6 +978,12 @@ Color Fade(Color color, float alpha) return (Color){color.r, color.g, color.b, (unsigned char)colorAlpha}; } +// Activates raylib logo at startup +void ShowLogo(void) +{ + showLogo = true; +} + // Enable some window/system configurations void SetConfigFlags(char flags) { @@ -987,10 +993,18 @@ void SetConfigFlags(char flags) if (configFlags & FLAG_FULLSCREEN_MODE) fullscreen = true; } -// Activates raylib logo at startup -void ShowLogo(void) +// Check file extension +bool IsFileExtension(const char *fileName, const char *ext) { - showLogo = true; + bool result = false; + const char *fileExt; + + if ((fileExt = strrchr(fileName, '.')) != NULL) + { + if (strcmp(fileExt, ext) == 0) result = true; + } + + return result; } #if defined(PLATFORM_DESKTOP) @@ -2024,9 +2038,12 @@ static double GetTime(void) } // Wait for some milliseconds (stop program execution) +// NOTE: Sleep() granularity could be around 10 ms, it means, Sleep() could +// take longer than expected... for that reason we use the busy wait loop +// http://stackoverflow.com/questions/43057578/c-programming-win32-games-sleep-taking-longer-than-expected static void Wait(float ms) { -//#define SUPPORT_BUSY_WAIT_LOOP +#define SUPPORT_BUSY_WAIT_LOOP #if defined(SUPPORT_BUSY_WAIT_LOOP) double prevTime = GetTime(); double nextTime = 0.0; @@ -2035,7 +2052,7 @@ static void Wait(float ms) while ((nextTime - prevTime) < ms/1000.0f) nextTime = GetTime(); #else #if defined _WIN32 - Sleep(ms); + Sleep((unsigned int)ms); #elif defined __linux__ || defined(PLATFORM_WEB) struct timespec req = { 0 }; time_t sec = (int)(ms/1000.0f); diff --git a/src/models.c b/src/models.c index 6aff59c4..47220af8 100644 --- a/src/models.c +++ b/src/models.c @@ -593,7 +593,7 @@ Mesh LoadMesh(const char *fileName) Mesh mesh = { 0 }; #if defined(SUPPORT_FILEFORMAT_OBJ) - if (strcmp(GetExtension(fileName), "obj") == 0) mesh = LoadOBJ(fileName); + if (IsFileExtension(fileName, ".obj")) mesh = LoadOBJ(fileName); #else TraceLog(WARNING, "[%s] Mesh fileformat not supported, it can't be loaded", fileName); #endif @@ -706,7 +706,7 @@ Material LoadMaterial(const char *fileName) Material material = { 0 }; #if defined(SUPPORT_FILEFORMAT_MTL) - if (strcmp(GetExtension(fileName), "mtl") == 0) material = LoadMTL(fileName); + if (IsFileExtension(fileName, ".mtl")) material = LoadMTL(fileName); #else TraceLog(WARNING, "[%s] Material fileformat not supported, it can't be loaded", fileName); #endif diff --git a/src/raylib.h b/src/raylib.h index 24d6e1fd..e8f301ec 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -687,9 +687,10 @@ RLAPI float *MatrixToFloat(Matrix mat); // Converts Ma RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included) RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f -RLAPI void SetConfigFlags(char flags); // Setup some window configuration flags RLAPI void ShowLogo(void); // Activates raylib logo at startup (can be done with flags) -//RLAPI void TraceLog(int logType, const char *text, ...); // Trace log messages showing (INFO, WARNING, ERROR, DEBUG) +RLAPI void SetConfigFlags(char flags); // Setup some window configuration flags +//RLAPI void TraceLog(int logType, const char *text, ...); // Show trace log messages (INFO, WARNING, ERROR, DEBUG) +RLAPI bool IsFileExtension(const char *fileName, const char *ext);// Check file extension RLAPI bool IsFileDropped(void); // Check if a file have been dropped into window RLAPI char **GetDroppedFiles(int *count); // Retrieve dropped files into window @@ -891,7 +892,6 @@ RLAPI void UnloadMesh(Mesh *mesh); RLAPI void UnloadModel(Model model); // Unload model from memory (RAM and/or VRAM) RLAPI Material LoadMaterial(const char *fileName); // Load material from file -RLAPI Material LoadMaterialEx(Shader shader, Texture2D diffuse, Color color); // Load material from basic shading data RLAPI Material LoadDefaultMaterial(void); // Load default material (uses default models shader) RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) @@ -39,6 +39,8 @@ // Default supported features //------------------------------------- #define SUPPORT_DEFAULT_FONT +#define SUPPORT_FILEFORMAT_FNT +#define SUPPORT_FILEFORMAT_TTF //------------------------------------- #include "raylib.h" @@ -48,7 +50,7 @@ #include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end() #include <stdio.h> // Required for: FILE, fopen(), fclose(), fscanf(), feof(), rewind(), fgets() -#include "utils.h" // Required for: GetExtension() +#include "utils.h" // Required for: IsFileExtension() #if defined(SUPPORT_FILEFORMAT_TTF) // Following libs are used on LoadTTF() @@ -91,7 +93,6 @@ static SpriteFont defaultFont; // Default font provided by raylib static int GetCharIndex(SpriteFont font, int letter); static SpriteFont LoadImageFont(Image image, Color key, int firstChar); // Load a Image font file (XNA style) -static SpriteFont LoadRBMF(const char *fileName); // Load a rBMF font file (raylib BitMap Font) #if defined(SUPPORT_FILEFORMAT_FNT) static SpriteFont LoadBMFont(const char *fileName); // Load a BMFont file (AngelCode font file) #endif @@ -288,14 +289,7 @@ SpriteFont LoadSpriteFont(const char *fileName) SpriteFont spriteFont = { 0 }; // Check file extension - if (strcmp(GetExtension(fileName),"rbmf") == 0) spriteFont = LoadRBMF(fileName); // TODO: DELETE... SOON... -#if defined(SUPPORT_FILEFORMAT_TTF) - else if (strcmp(GetExtension(fileName),"ttf") == 0) spriteFont = LoadSpriteFontTTF(fileName, DEFAULT_TTF_FONTSIZE, 0, NULL); -#endif -#if defined(SUPPORT_FILEFORMAT_FNT) - else if (strcmp(GetExtension(fileName),"fnt") == 0) spriteFont = LoadBMFont(fileName); -#endif - else if (strcmp(GetExtension(fileName),"rres") == 0) + if (IsFileExtension(fileName, ".rres")) { // TODO: Read multiple resource blocks from file (RRES_FONT_IMAGE, RRES_FONT_CHARDATA) RRES rres = LoadResource(fileName, 0); @@ -321,6 +315,12 @@ SpriteFont LoadSpriteFont(const char *fileName) // TODO: Do not free rres.data memory (chars info data!) //UnloadResource(rres[0]); } +#if defined(SUPPORT_FILEFORMAT_TTF) + else if (IsFileExtension(fileName, ".ttf")) spriteFont = LoadSpriteFontTTF(fileName, DEFAULT_TTF_FONTSIZE, 0, NULL); +#endif +#if defined(SUPPORT_FILEFORMAT_FNT) + else if (IsFileExtension(fileName, ".fnt")) spriteFont = LoadBMFont(fileName); +#endif else { Image image = LoadImage(fileName); @@ -346,7 +346,7 @@ SpriteFont LoadSpriteFontTTF(const char *fileName, int fontSize, int charsCount, SpriteFont spriteFont = { 0 }; #if defined(SUPPORT_FILEFORMAT_TTF) - if (strcmp(GetExtension(fileName),"ttf") == 0) + if (IsFileExtension(fileName, ".ttf")) { if ((fontChars == NULL) || (charsCount == 0)) { @@ -718,144 +718,6 @@ static SpriteFont LoadImageFont(Image image, Color key, int firstChar) return spriteFont; } -// Load a rBMF font file (raylib BitMap Font) -static SpriteFont LoadRBMF(const char *fileName) -{ - // rBMF Info Header (16 bytes) - typedef struct { - char id[4]; // rBMF file identifier - char version; // rBMF file version - // 4 MSB --> main version - // 4 LSB --> subversion - char firstChar; // First character in the font - // NOTE: Depending on charDataType, it could be useless - short imgWidth; // Image width - always POT (power-of-two) - short imgHeight; // Image height - always POT (power-of-two) - short numChars; // Number of characters contained - short charHeight; // Characters height - the same for all characters - char compType; // Compression type: - // 4 MSB --> image data compression - // 4 LSB --> chars data compression - char charsDataType; // Char data type provided - } rbmfInfoHeader; - - SpriteFont spriteFont = { 0 }; - - // REMOVE SOON!!! -/* - rbmfInfoHeader rbmfHeader; - unsigned int *rbmfFileData = NULL; - unsigned char *rbmfCharWidthData = NULL; - - int charsDivisor = 1; // Every char is separated from the consecutive by a 1 pixel divisor, horizontally and vertically - - FILE *rbmfFile = fopen(fileName, "rb"); // Define a pointer to bitmap file and open it in read-binary mode - - if (rbmfFile == NULL) - { - TraceLog(WARNING, "[%s] rBMF font file could not be opened, using default font", fileName); - - spriteFont = GetDefaultFont(); - } - else - { - fread(&rbmfHeader, sizeof(rbmfInfoHeader), 1, rbmfFile); - - TraceLog(DEBUG, "[%s] Loading rBMF file, size: %ix%i, numChars: %i, charHeight: %i", fileName, rbmfHeader.imgWidth, rbmfHeader.imgHeight, rbmfHeader.numChars, rbmfHeader.charHeight); - - spriteFont.numChars = (int)rbmfHeader.numChars; - - int numPixelBits = rbmfHeader.imgWidth*rbmfHeader.imgHeight/32; - - rbmfFileData = (unsigned int *)malloc(numPixelBits*sizeof(unsigned int)); - - for (int i = 0; i < numPixelBits; i++) fread(&rbmfFileData[i], sizeof(unsigned int), 1, rbmfFile); - - rbmfCharWidthData = (unsigned char *)malloc(spriteFont.numChars*sizeof(unsigned char)); - - for (int i = 0; i < spriteFont.numChars; i++) fread(&rbmfCharWidthData[i], sizeof(unsigned char), 1, rbmfFile); - - // Re-construct image from rbmfFileData - //----------------------------------------- - Color *imagePixels = (Color *)malloc(rbmfHeader.imgWidth*rbmfHeader.imgHeight*sizeof(Color)); - - for (int i = 0; i < rbmfHeader.imgWidth*rbmfHeader.imgHeight; i++) imagePixels[i] = BLANK; // Initialize array - - int counter = 0; // Font data elements counter - - // Fill image data (convert from bit to pixel!) - for (int i = 0; i < rbmfHeader.imgWidth*rbmfHeader.imgHeight; i += 32) - { - for (int j = 31; j >= 0; j--) - { - if (BIT_CHECK(rbmfFileData[counter], j)) imagePixels[i+j] = WHITE; - } - - counter++; - } - - Image image = LoadImageEx(imagePixels, rbmfHeader.imgWidth, rbmfHeader.imgHeight); - ImageFormat(&image, UNCOMPRESSED_GRAY_ALPHA); - - free(imagePixels); - - TraceLog(DEBUG, "[%s] Image reconstructed correctly, now converting it to texture", fileName); - - // Create spritefont with all data read from rbmf file - spriteFont.texture = LoadTextureFromImage(image); - UnloadImage(image); // Unload image data - - //TraceLog(INFO, "[%s] Starting chars set reconstruction", fileName); - - // Get characters data using rbmfCharWidthData, rbmfHeader.charHeight, charsDivisor, rbmfHeader.numChars - spriteFont.chars = (CharInfo *)malloc(spriteFont.charsCount*sizeof(CharInfo)); - - int currentLine = 0; - int currentPosX = charsDivisor; - int testPosX = charsDivisor; - - for (int i = 0; i < spriteFont.charsCount; i++) - { - spriteFont.chars[i].value = (int)rbmfHeader.firstChar + i; - - spriteFont.chars[i].rec.x = currentPosX; - spriteFont.chars[i].rec.y = charsDivisor + currentLine*((int)rbmfHeader.charHeight + charsDivisor); - spriteFont.chars[i].rec.width = (int)rbmfCharWidthData[i]; - spriteFont.chars[i].rec.height = (int)rbmfHeader.charHeight; - - // NOTE: On image based fonts (XNA style), character offsets and xAdvance are not required (set to 0) - spriteFont.chars[i].offsetX = 0; - spriteFont.chars[i].offsetY = 0; - spriteFont.chars[i].advanceX = 0; - - testPosX += (spriteFont.chars[i].rec.width + charsDivisor); - - if (testPosX > spriteFont.texture.width) - { - currentLine++; - currentPosX = 2*charsDivisor + (int)rbmfCharWidthData[i]; - testPosX = currentPosX; - - spriteFont.chars[i].rec.x = charsDivisor; - spriteFont.chars[i].rec.y = charsDivisor + currentLine*(rbmfHeader.charHeight + charsDivisor); - } - else currentPosX = testPosX; - } - - spriteFont.baseSize = spriteFont.charRecs[0].height; - - TraceLog(INFO, "[%s] rBMF file loaded correctly as SpriteFont", fileName); - } - - fclose(rbmfFile); - - free(rbmfFileData); // Now we can free loaded data from RAM memory - free(rbmfCharWidthData); -*/ - - return spriteFont; -} - #if defined(SUPPORT_FILEFORMAT_FNT) // Load a BMFont file (AngelCode font file) static SpriteFont LoadBMFont(const char *fileName) diff --git a/src/textures.c b/src/textures.c index 6fff8e75..fff0e4e9 100644 --- a/src/textures.c +++ b/src/textures.c @@ -163,21 +163,32 @@ Image LoadImage(const char *fileName) image.mipmaps = 0; image.format = 0; - if ((strcmp(GetExtension(fileName),"png") == 0) + if (IsFileExtension(fileName, ".rres")) + { + RRES rres = LoadResource(fileName, 0); + + // NOTE: Parameters for RRES_TYPE_IMAGE are: width, height, format, mipmaps + + if (rres[0].type == RRES_TYPE_IMAGE) image = LoadImagePro(rres[0].data, rres[0].param1, rres[0].param2, rres[0].param3); + else TraceLog(WARNING, "[%s] Resource file does not contain image data", fileName); + + UnloadResource(rres); + } + else if ((IsFileExtension(fileName, ".png")) #if defined(SUPPORT_FILEFORMAT_BMP) - || (strcmp(GetExtension(fileName),"bmp") == 0) + || (IsFileExtension(fileName, ".bmp")) #endif #if defined(SUPPORT_FILEFORMAT_TGA) - || (strcmp(GetExtension(fileName),"tga") == 0) + || (IsFileExtension(fileName, ".tga")) #endif #if defined(SUPPORT_FILEFORMAT_JPG) - || (strcmp(GetExtension(fileName),"jpg") == 0) + || (IsFileExtension(fileName, ".jpg")) #endif #if defined(SUPPORT_FILEFORMAT_DDS) - || (strcmp(GetExtension(fileName),"gif") == 0) + || (IsFileExtension(fileName, ".gif")) #endif #if defined(SUPPORT_FILEFORMAT_PSD) - || (strcmp(GetExtension(fileName),"psd") == 0) + || (IsFileExtension(fileName, ".psd")) #endif ) { @@ -198,32 +209,21 @@ Image LoadImage(const char *fileName) else if (imgBpp == 4) image.format = UNCOMPRESSED_R8G8B8A8; } #if defined(SUPPORT_FILEFORMAT_DDS) - else if (strcmp(GetExtension(fileName),"dds") == 0) image = LoadDDS(fileName); + else if (IsFileExtension(fileName, ".dds")) image = LoadDDS(fileName); #endif #if defined(SUPPORT_FILEFORMAT_PKM) - else if (strcmp(GetExtension(fileName),"pkm") == 0) image = LoadPKM(fileName); + else if (IsFileExtension(fileName, ".pkm")) image = LoadPKM(fileName); #endif #if defined(SUPPORT_FILEFORMAT_KTX) - else if (strcmp(GetExtension(fileName),"ktx") == 0) image = LoadKTX(fileName); + else if (IsFileExtension(fileName, ".ktx")) image = LoadKTX(fileName); #endif #if defined(SUPPORT_FILEFORMAT_PVR) - else if (strcmp(GetExtension(fileName),"pvr") == 0) image = LoadPVR(fileName); + else if (IsFileExtension(fileName, ".pvr")) image = LoadPVR(fileName); #endif #if defined(SUPPORT_FILEFORMAT_ASTC) - else if (strcmp(GetExtension(fileName),"astc") == 0) image = LoadASTC(fileName); + else if (IsFileExtension(fileName, ".astc")) image = LoadASTC(fileName); #endif - else if (strcmp(GetExtension(fileName),"rres") == 0) - { - RRES rres = LoadResource(fileName, 0); - - // NOTE: Parameters for RRES_TYPE_IMAGE are: width, height, format, mipmaps - - if (rres[0].type == RRES_TYPE_IMAGE) image = LoadImagePro(rres[0].data, rres[0].param1, rres[0].param2, rres[0].param3); - else TraceLog(WARNING, "[%s] Resource file does not contain image data", fileName); - - UnloadResource(rres); - } - else TraceLog("[%s] Image fileformat not supported", fileName); + else TraceLog(WARNING, "[%s] Image fileformat not supported", fileName); if (image.data != NULL) TraceLog(INFO, "[%s] Image loaded successfully (%ix%i)", fileName, image.width, image.height); else TraceLog(WARNING, "[%s] Image could not be loaded", fileName); diff --git a/src/utils.c b/src/utils.c index 6a07f301..c86c9c82 100644 --- a/src/utils.c +++ b/src/utils.c @@ -44,6 +44,9 @@ * **********************************************************************************************/ +#define SUPPORT_TRACELOG // Output tracelog messages +//#define SUPPORT_TRACELOG_DEBUG // Avoid DEBUG messages tracing + #include "utils.h" #if defined(PLATFORM_ANDROID) @@ -65,9 +68,6 @@ #define RRES_IMPLEMENTATION #include "rres.h" -//#define NO_TRACELOG // Avoid TraceLog() output (any type) -#define DO_NOT_TRACE_DEBUG_MSGS // Avoid DEBUG messages tracing - //---------------------------------------------------------------------------------- // Global Variables Definition //---------------------------------------------------------------------------------- @@ -88,15 +88,16 @@ static int android_close(void *cookie); //---------------------------------------------------------------------------------- // Module Functions Definition - Utilities //---------------------------------------------------------------------------------- -// Outputs a trace log message + +// Output trace log messages void TraceLog(int msgType, const char *text, ...) { -#if !defined(NO_TRACELOG) +#if defined(SUPPORT_TRACELOG) static char buffer[128]; - int traceDebugMsgs = 1; + int traceDebugMsgs = 0; -#ifdef DO_NOT_TRACE_DEBUG_MSGS - traceDebugMsgs = 0; +#if defined(SUPPORT_TRACELOG_DEBUG) + traceDebugMsgs = 1; #endif switch(msgType) @@ -131,7 +132,7 @@ void TraceLog(int msgType, const char *text, ...) if (msgType == ERROR) exit(1); // If ERROR message, exit program -#endif // NO_TRACELOG +#endif // SUPPORT_TRACELOG } #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) @@ -163,19 +164,6 @@ void RecordMalloc(int mallocType, int mallocSize, const char *msg) } */ -bool IsFileExtension(const char *fileName, const char *ext) -{ - return (strcmp(GetExtension(fileName), ext) == 0); -} - -// Get the extension for a filename -const char *GetExtension(const char *fileName) -{ - const char *dot = strrchr(fileName, '.'); - if (!dot || dot == fileName) return ""; - return (dot + 1); -} - #if defined(PLATFORM_ANDROID) // Initialize asset manager from android app void InitAssetManager(AAssetManager *manager) diff --git a/src/utils.h b/src/utils.h index 45ffcf81..2b4d838b 100644 --- a/src/utils.h +++ b/src/utils.h @@ -60,8 +60,7 @@ extern "C" { // Prevents name mangling of functions //---------------------------------------------------------------------------------- // Module Functions Declaration //---------------------------------------------------------------------------------- -void TraceLog(int msgType, const char *text, ...); // Outputs a trace log message -const char *GetExtension(const char *fileName); // Returns extension of a filename +void TraceLog(int msgType, const char *text, ...); // Outputs a trace log message #if defined(PLATFORM_DESKTOP) || defined(PLATFORM_RPI) #if defined(SUPPORT_SAVE_BMP) @@ -74,7 +73,7 @@ void SavePNG(const char *fileName, unsigned char *imgData, int width, int height #if defined(PLATFORM_ANDROID) void InitAssetManager(AAssetManager *manager); // Initialize asset manager from android app -FILE *android_fopen(const char *fileName, const char *mode); // Replacement for fopen() +FILE *android_fopen(const char *fileName, const char *mode); // Replacement for fopen() #endif #ifdef __cplusplus |
