Browse Source

Some code tweaks

Correcting details that pop-up when testing the different platforms
raysan5 8 years ago
parent
commit
f7b706263a
5 changed files with 51 additions and 37 deletions
  1. 6 1
      src/Makefile
  2. 4 8
      src/audio.c
  3. 23 16
      src/audio.h
  4. 7 2
      src/core.c
  5. 11 10
      src/models.c

+ 6 - 1
src/Makefile

@@ -39,7 +39,7 @@ PLATFORM ?= PLATFORM_DESKTOP
 SHARED ?= NO
 
 # define NO to use OpenAL Soft as static library (or shared by default)
-SHARED_OPENAL ?= NO
+SHARED_OPENAL ?= YES
 
 # on PLATFORM_WEB force OpenAL Soft shared library
 ifeq ($(PLATFORM),PLATFORM_WEB)
@@ -188,6 +188,11 @@ else
         # compile raylib static library for desktop platforms.
 		ar rcs $(OUTPUT_PATH)/libraylib.a $(OBJS)
 		@echo "libraylib.a generated (static library)!"
+        ifeq ($(SHARED_OPENAL),NO)
+			@echo "expected OpenAL Soft static library linking"
+        else
+			@echo "expected OpenAL Soft shared library linking"
+        endif
     endif
 endif
 

+ 4 - 8
src/audio.c

@@ -49,8 +49,11 @@
 
 #if defined(AUDIO_STANDALONE)
     #include "audio.h"
+    #include <stdarg.h>         // Required for: va_list, va_start(), vfprintf(), va_end()
 #else
     #include "raylib.h"
+    #include "utils.h"          // Required for: DecompressData()
+                                // NOTE: Includes Android fopen() function map
 #endif
 
 #include "AL/al.h"              // OpenAL basic header
@@ -68,13 +71,6 @@
     #define AL_FORMAT_STEREO_FLOAT32 0x10011
 #endif
 
-#if defined(AUDIO_STANDALONE)
-    #include <stdarg.h>         // Required for: va_list, va_start(), vfprintf(), va_end()
-#else
-    #include "utils.h"          // Required for: DecompressData()
-                                // NOTE: Includes Android fopen() function map
-#endif
-
 //#define STB_VORBIS_HEADER_ONLY
 #include "external/stb_vorbis.h"    // OGG loading functions
 
@@ -122,7 +118,7 @@ typedef struct MusicData {
     bool loop;                          // Repeat music after finish (loop)
     unsigned int totalSamples;          // Total number of samples
     unsigned int samplesLeft;           // Number of samples left to end
-} MusicData, *Music;
+} MusicData;
 
 #if defined(AUDIO_STANDALONE)
 typedef enum { INFO = 0, ERROR, WARNING, DEBUG, OTHER } TraceLogType;

+ 23 - 16
src/audio.h

@@ -62,12 +62,6 @@
     #endif
 #endif
 
-// Sound source type
-typedef struct Sound {
-    unsigned int source;    // Sound audio source id
-    unsigned int buffer;    // Sound audio buffer id
-} Sound;
-
 // Wave type, defines audio wave data
 typedef struct Wave {
     unsigned int sampleCount;   // Number of samples
@@ -77,9 +71,16 @@ typedef struct Wave {
     void *data;                 // Buffer data pointer
 } Wave;
 
+// Sound source type
+typedef struct Sound {
+    unsigned int source;        // OpenAL audio source id
+    unsigned int buffer;        // OpenAL audio buffer id
+    int format;                 // OpenAL audio format specifier
+} Sound;
+
 // Music type (file streaming from memory)
 // NOTE: Anything longer than ~10 seconds should be streamed
-typedef struct Music *Music;
+typedef struct MusicData *Music;
 
 // Audio stream type
 // NOTE: Useful to create custom audio streams not bound to a specific file
@@ -106,13 +107,16 @@ extern "C" {            // Prevents name mangling of functions
 // Module Functions Declaration
 //----------------------------------------------------------------------------------
 void InitAudioDevice(void);                                     // Initialize audio device and context
-void CloseAudioDevice(void);                                    // Close the audio device and context (and music stream)
+void CloseAudioDevice(void);                                    // Close the audio device and context
 bool IsAudioDeviceReady(void);                                  // Check if audio device has been initialized successfully
 
-Sound LoadSound(char *fileName);                                // Load sound to memory
+Wave LoadWave(const char *fileName);                            // Load wave data from file into RAM
+Wave LoadWaveEx(float *data, int sampleCount, int sampleRate, int sampleSize, int channels); // Load wave data from float array data (32bit)
+Sound LoadSound(const char *fileName);                          // Load sound to memory
 Sound LoadSoundFromWave(Wave wave);                             // Load sound to memory from wave data
 Sound LoadSoundFromRES(const char *rresName, int resId);        // Load sound to memory from rRES file (raylib Resource)
 void UpdateSound(Sound sound, void *data, int numSamples);      // 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
 void PauseSound(Sound sound);                                   // Pause a sound
@@ -121,12 +125,15 @@ void StopSound(Sound sound);                                    // Stop playing
 bool IsSoundPlaying(Sound sound);                               // Check if a sound is currently playing
 void SetSoundVolume(Sound sound, float volume);                 // Set volume for a sound (1.0 is max level)
 void SetSoundPitch(Sound sound, float pitch);                   // Set pitch for a sound (1.0 is base level)
-
-Music LoadMusicStream(char *fileName);                          // Load music stream from file
+void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels);  // Convert wave data to desired format
+Wave WaveCopy(Wave wave);                                       // Copy a wave to a new wave
+void WaveCrop(Wave *wave, int initSample, int finalSample);     // Crop a wave to defined samples range
+float *GetWaveData(Wave wave);                                  // Get samples data from wave as a floats array
+Music LoadMusicStream(const char *fileName);                    // Load music stream from file
 void UnloadMusicStream(Music music);                            // Unload music stream
-void PlayMusicStream(Music music);                              // Start music playing (open stream)
+void PlayMusicStream(Music music);                              // Start music playing
 void UpdateMusicStream(Music music);                            // Updates buffers for music streaming
-void StopMusicStream(Music music);                              // Stop music playing (close stream)
+void StopMusicStream(Music music);                              // Stop music playing
 void PauseMusicStream(Music music);                             // Pause music playing
 void ResumeMusicStream(Music music);                            // Resume playing paused music
 bool IsMusicPlaying(Music music);                               // Check if music is playing
@@ -135,9 +142,9 @@ void SetMusicPitch(Music music, float pitch);                   // Set pitch for
 float GetMusicTimeLength(Music music);                          // Get music time length (in seconds)
 float GetMusicTimePlayed(Music music);                          // Get current music time played (in seconds)
 
-AudioStream InitAudioStream(unsigned int sampleRate, 
-                            unsigned int sampleSize, 
-                            unsigned int channels);             // Init audio stream (to stream audio pcm data)
+AudioStream InitAudioStream(unsigned int sampleRate,
+                                  unsigned int sampleSize,
+                                  unsigned int channels);       // Init audio stream (to stream raw audio pcm data)
 void UpdateAudioStream(AudioStream stream, void *data, int numSamples); // 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

+ 7 - 2
src/core.c

@@ -1175,9 +1175,10 @@ bool IsGamepadAvailable(int gamepad)
 bool IsGamepadName(int gamepad, const char *name)
 {
     bool result = false;
-    const char *gamepadName = NULL; 
 
 #if !defined(PLATFORM_ANDROID)
+    const char *gamepadName = NULL; 
+
     if (gamepadReady[gamepad]) gamepadName = GetGamepadName(gamepad);
     if ((name != NULL) && (gamepadName != NULL)) result = (strcmp(name, gamepadName) == 0);
 #endif
@@ -1977,7 +1978,11 @@ static void PollInputEvents(void)
 
     previousMouseWheelY = currentMouseWheelY;
     currentMouseWheelY = 0;
-    
+#endif
+
+// NOTE: GLFW3 joystick functionality not available in web
+// TODO: Support joysticks using emscripten API
+#if defined(PLATFORM_DESKTOP)
     // Check if gamepads are ready
     // NOTE: We do it here in case of disconection
     for (int i = 0; i < MAX_GAMEPADS; i++)

+ 11 - 10
src/models.c

@@ -1817,6 +1817,7 @@ static Material LoadMTL(const char *fileName)
     char buffer[MAX_BUFFER_SIZE];
     Vector3 color = { 1.0f, 1.0f, 1.0f };
     char mapFileName[128];
+    int result = 0;
 
     FILE *mtlFile;
 
@@ -1901,13 +1902,13 @@ static Material LoadMTL(const char *fileName)
                     {
                         if (buffer[5] == 'd')       // map_Kd string    Diffuse color texture map.
                         {
-                            sscanf(buffer, "map_Kd %s", mapFileName);
-                            if (mapFileName != NULL) material.texDiffuse = LoadTexture(mapFileName);
+                            result = sscanf(buffer, "map_Kd %s", mapFileName);
+                            if (result != EOF) material.texDiffuse = LoadTexture(mapFileName);
                         }
                         else if (buffer[5] == 's')  // map_Ks string    Specular color texture map.
                         {
-                            sscanf(buffer, "map_Ks %s", mapFileName);
-                            if (mapFileName != NULL) material.texSpecular = LoadTexture(mapFileName);
+                            result = sscanf(buffer, "map_Ks %s", mapFileName);
+                            if (result != EOF) material.texSpecular = LoadTexture(mapFileName);
                         }
                         else if (buffer[5] == 'a')  // map_Ka string    Ambient color texture map.
                         {
@@ -1916,13 +1917,13 @@ static Material LoadMTL(const char *fileName)
                     } break;
                     case 'B':       // map_Bump string      Bump texture map.
                     {
-                        sscanf(buffer, "map_Bump %s", mapFileName);
-                        if (mapFileName != NULL) material.texNormal = LoadTexture(mapFileName);
+                        result = sscanf(buffer, "map_Bump %s", mapFileName);
+                        if (result != EOF) material.texNormal = LoadTexture(mapFileName);
                     } break;
                     case 'b':       // map_bump string      Bump texture map.
                     {
-                        sscanf(buffer, "map_bump %s", mapFileName);
-                        if (mapFileName != NULL) material.texNormal = LoadTexture(mapFileName);
+                        result = sscanf(buffer, "map_bump %s", mapFileName);
+                        if (result != EOF) material.texNormal = LoadTexture(mapFileName);
                     } break;
                     case 'd':       // map_d string         Opacity texture map.
                     {
@@ -1946,8 +1947,8 @@ static Material LoadMTL(const char *fileName)
             } break;
             case 'b':   // bump string      Bump texture map
             {
-                sscanf(buffer, "bump %s", mapFileName);
-                if (mapFileName != NULL) material.texNormal = LoadTexture(mapFileName);
+                result = sscanf(buffer, "bump %s", mapFileName);
+                if (result != EOF) material.texNormal = LoadTexture(mapFileName);
             } break;
             case 'T':   // Tr float         Transparency Tr (alpha). Tr is inverse of d
             {