Explorar el Código

Fix Sound on Linux - now using PortAudio with ALSA, Jack and OSS.

Also fix bug with PAAudioInterface using uninitialized mixerMutex.
Joachim Meyer hace 10 años
padre
commit
b4859d9151

+ 10 - 6
build/linux/Makefile

@@ -25,10 +25,14 @@ CFLAGSSTUDIO=$(CFLAGS) -DUSE_POLYCODEUI_FILE_DIALOGS -DUSE_POLYCODEUI_MENUBAR
 
 LIBDIR=../../lib/linux
 
+OPTFLAGS=-O2
 DEBUGFLAGS=-g -DDEBUG
 
-LDFLAGSTEMPLATE=-L$(LIBDIR) -lPolycore -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lz -lSDL -lGLEW -lGL
-LDFLAGSSTUDIO=-L$(LIBDIR) -lPolycore -lPolycodeUI -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lz -lSDL -lGLEW -lGL
+LDFLAGSTEMPLATE=-L$(LIBDIR) $(OPTFLAGS) -pthread -lrt -lPolycore -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lportaudio -lasound -ljack -lz -lSDL -lGLEW -lGL
+DLDFLAGSTEMPLATE=-L$(LIBDIR) -pthread -lrt -lPolycored -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lportaudio -lasound -ljack -lz -lSDL -lGLEW -lGL
+
+LDFLAGSSTUDIO=-L$(LIBDIR) $(OPTFLAGS) -pthread -lrt -lPolycore -lPolycodeUI -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lportaudio -lasound -ljack -lz -lSDL -lGLEW -lGL
+DLDFLAGSSTUDIO=-L$(LIBDIR) -pthread -lrt -lPolycored -lPolycodeUId -lfreetype -lpng -lphysfs -lvorbisfile -lvorbis -logg -lportaudio -lasound -ljack -lz -lSDL -lGLEW -lGL
 
 default: setup core
 
@@ -42,7 +46,7 @@ setup:
 
 .cpp.o:
 	@echo "\033[1;32mBuilding \033[0m[\033[1;33m$<\033[0m]"
-	@$(CC) $(CFLAGS) -c $< -o $@
+	@$(CC) $(CFLAGS) $(OPTFLAGS) -c $< -o $@
 
 .cpp.do:
 	@echo "\033[1;32mBuilding Debug \033[0m[\033[1;33m$<\033[0m]"
@@ -50,7 +54,7 @@ setup:
 
 .cpp.io:
 	@echo "\033[1;32mBuilding \033[0m[\033[1;33m$<\033[0m]"
-	@$(CC) $(CFLAGSSTUDIO) -c $< -o $@
+	@$(CC) $(CFLAGSSTUDIO) $(OPTFLAGS) -c $< -o $@
 
 .cpp.dio:
 	@echo "\033[1;32mBuilding Debug \033[0m[\033[1;33m$<\033[0m]"
@@ -74,7 +78,7 @@ ui_debug: $(DOBJUI)
 	
 template: core $(OBJTEMPLATE)
 	@echo "\033[1;32mLinking \033[0m[\033[1;33mTemplateApp/PolycodeTemplate\033[0m]"
-	@$(CC) -o TemplateApp/PolycodeTemplate $(OBJTEMPLATE) $(LDFLAGSTEMPLATE)
+	@$(CC) -o TemplateApp/PolycodeTemplate $(OBJTEMPLATE) $(LDFLAGSTEMPLATE) $(OPTFLAGS)
 	@echo "\033[1;32mCopy Assets to: \033[0m[\033[1;33mTemplateApp\033[0m]"
 	@cp $(ASSETDIR)/default/default.pak TemplateApp
 
@@ -86,7 +90,7 @@ template_debug: core_debug $(DOBJTEMPLATE)
 
 studio: core ui $(OBJSTUDIO)
 	@echo "\033[1;32mLinking \033[0m[\033[1;33mStudio/Polycode\033[0m]"
-	@$(CC) -o Studio/Polycode $(OBJSTUDIO) $(LDFLAGSSTUDIO) $(CFLAGSSTUDIO)
+	@$(CC) -o Studio/Polycode $(OBJSTUDIO) $(LDFLAGSSTUDIO) $(CFLAGSSTUDIO) $(OPTFLAGS)
 	@echo "\033[1;32mCopy Assets to: \033[0m[\033[1;33mStudio\033[0m]"
 	@cp -r $(ASSETDIR)/ide/* Studio
 	@cp $(ASSETDIR)/default/default.pak Studio

+ 2 - 0
include/polycode/core/PolySDLCore.h

@@ -27,6 +27,8 @@
 #include <vector>
 // #include <SDL2/SDL.h>
 
+#include "polycode/core/PolyPAAudioInterface.h"
+
 #define POLYCODE_CORE SDLCore
 
 struct SDL_mutex;

+ 1 - 1
lib

@@ -1 +1 @@
-Subproject commit 707e0798059365c8fc1bfc1f9d2b2e5e656fa1c0
+Subproject commit cd3071039dfb928ec0d4e2bf3534e228a147c06d

+ 2 - 2
src/core/PolyPAAudioInterface.cpp

@@ -27,7 +27,7 @@
 using namespace Polycode;
 
 PAAudioInterface::PAAudioInterface() {
-    
+    mixer = NULL;
     
     PaError error = Pa_Initialize();
     if(error != paNoError) {
@@ -77,7 +77,7 @@ int PAAudioInterface::paCallback(const void *inputBuffer, void *outputBuffer,
                       PaStreamCallbackFlags statusFlags,
                                  void *userData) {
     PAAudioInterface *audioInterface = (PAAudioInterface*) userData;
-    if(outputBuffer) {
+    if(outputBuffer && audioInterface->getMixer()) {
         int16_t *out = (int16_t*)outputBuffer;
         audioInterface->getMixer()->mixIntoBuffer(out, framesPerBuffer);
     }

+ 9 - 2
src/core/PolySDLCore.cpp

@@ -119,7 +119,12 @@ SDLCore::SDLCore(PolycodeView *view, int _xRes, int _yRes, bool fullScreen, bool
 	if(sdlerror < 0) {
 	  Logger::log("SDL_Init failed! Code: %d, %s\n", sdlerror, SDL_GetError());
 	}
-	  
+	
+	SDL_Surface* icon = SDL_LoadBMP("icon.bmp");
+	if(icon){
+		SDL_WM_SetIcon(icon, NULL);
+	}
+	
 	eventMutex = createMutex();
 	
 	renderer = new Renderer();
@@ -128,7 +133,7 @@ SDLCore::SDLCore(PolycodeView *view, int _xRes, int _yRes, bool fullScreen, bool
 	renderer->setGraphicsInterface(this, renderInterface);
 	services->setRenderer(renderer);
 	setVideoMode(xRes, yRes, fullScreen, vSync, aaLevel, anisotropyLevel, retinaSupport);
-
+	
 	SDL_WM_SetCaption(windowTitle->c_str(), windowTitle->c_str());
 	
 	SDL_EnableUNICODE(1);
@@ -143,6 +148,8 @@ SDLCore::SDLCore(PolycodeView *view, int _xRes, int _yRes, bool fullScreen, bool
 		input->addJoystick(i);
 	}
 	
+	services->getSoundManager()->setAudioInterface(new PAAudioInterface());
+	
 	lastMouseX = 0;
 	lastMouseY = 0;