aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2017-04-04 12:17:08 +0200
committerGitHub <noreply@github.com>2017-04-04 12:17:08 +0200
commit407746193d991190fa4dead94649abb2ed27d462 (patch)
treef79f67c3df8ed657a27abba6029a71be359871df /src
parent5338bbf70d3e2c71fcbd0db54e14b6cf2d5616c3 (diff)
parent1f56e8e5d0000e1c46483530331887dbd0f8ce75 (diff)
downloadraylib-407746193d991190fa4dead94649abb2ed27d462.tar.gz
raylib-407746193d991190fa4dead94649abb2ed27d462.zip
Merge pull request #256 from raysan5/develop
Integrate develop branch
Diffstat (limited to 'src')
-rw-r--r--src/Makefile9
-rw-r--r--src/audio.c39
-rw-r--r--src/audio.h7
-rw-r--r--src/core.c29
-rw-r--r--src/models.c4
-rw-r--r--src/raylib.h6
-rw-r--r--src/text.c160
-rw-r--r--src/textures.c46
-rw-r--r--src/utils.c32
-rw-r--r--src/utils.h5
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
diff --git a/src/core.c b/src/core.c
index 5a1ab77f..b9ea9315 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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)
diff --git a/src/text.c b/src/text.c
index 04a860cf..a057e347 100644
--- a/src/text.c
+++ b/src/text.c
@@ -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