diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index adb38bbee..451e1c35f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,6 +20,15 @@ if(EMSCRIPTEN) ADD_SUBDIRECTORY(projectM-emscripten) endif(EMSCRIPTEN) +# sensible OSX defaults +if(APPLE) + SET(INCLUDE-PROJECTM-QT OFF) + SET(INCLUDE-PROJECTM-PULSEAUDIO OFF) + SET(INCLUDE-PROJECTM-LIBVISUAL OFF) + SET(INCLUDE-PROJECTM-TEST OFF) + SET(INCLUDE-NATIVE-PRESETS OFF) +endif(APPLE) + set(PROJECTM_ROOT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory (libprojectM) diff --git a/src/libprojectM/CMakeLists.txt b/src/libprojectM/CMakeLists.txt index aa4524039..ffc6b29ae 100644 --- a/src/libprojectM/CMakeLists.txt +++ b/src/libprojectM/CMakeLists.txt @@ -72,6 +72,12 @@ if (MSVC) SET(projectM_SOURCES ${projectM_SOURCES} dlfcn.c win32-dirent.cpp) endif(MSVC) +if (APPLE) + SET(USE_FTGL OFF) + SET(USE_OPENMP OFF) + SET(BUILD_PROJECTM_STATIC ON) +endif(APPLE) + if (NOT DISABLE_NATIVE_PRESETS) add_subdirectory(NativePresetFactory) SET(PRESET_FACTORY_SOURCES ${PRESET_FACTORY_SOURCES} ${NativePresetFactory_SOURCE_DIR}) diff --git a/src/libprojectM/libprojectM.a b/src/libprojectM/libprojectM.a new file mode 100644 index 000000000..a57b1f7d4 Binary files /dev/null and b/src/libprojectM/libprojectM.a differ diff --git a/src/projectM-emscripten/emprojectM.xcodeproj/project.pbxproj b/src/projectM-emscripten/emprojectM.xcodeproj/project.pbxproj index cc3e6fe26..70da5e473 100644 --- a/src/projectM-emscripten/emprojectM.xcodeproj/project.pbxproj +++ b/src/projectM-emscripten/emprojectM.xcodeproj/project.pbxproj @@ -10,19 +10,18 @@ C3F90686195670EF00C8DF0F /* projectM_SDL_emscripten.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3F90685195670EF00C8DF0F /* projectM_SDL_emscripten.cpp */; }; C3F9068A195676C500C8DF0F /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3F90689195676C500C8DF0F /* OpenGL.framework */; }; C3F9068C195676CC00C8DF0F /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3F9068B195676CC00C8DF0F /* GLUT.framework */; }; - C3F9068E1956780A00C8DF0F /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3F9068D1956780A00C8DF0F /* SDL2.framework */; }; C3F9069019567A4600C8DF0F /* libprojectM.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C3F9068F19567A4600C8DF0F /* libprojectM.a */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ C3F90676195670BC00C8DF0F /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; + buildActionMask = 12; + dstPath = ""; + dstSubfolderSpec = 10; files = ( ); - runOnlyForDeploymentPostprocessing = 1; + runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ @@ -32,7 +31,6 @@ C3F90685195670EF00C8DF0F /* projectM_SDL_emscripten.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = projectM_SDL_emscripten.cpp; sourceTree = SOURCE_ROOT; }; C3F90689195676C500C8DF0F /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; C3F9068B195676CC00C8DF0F /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = System/Library/Frameworks/GLUT.framework; sourceTree = SDKROOT; }; - C3F9068D1956780A00C8DF0F /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../../../../Library/Frameworks/SDL2.framework; sourceTree = ""; }; C3F9068F19567A4600C8DF0F /* libprojectM.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libprojectM.a; path = ../libprojectM/libprojectM.a; sourceTree = ""; }; /* End PBXFileReference section */ @@ -42,7 +40,6 @@ buildActionMask = 2147483647; files = ( C3F9069019567A4600C8DF0F /* libprojectM.a in Frameworks */, - C3F9068E1956780A00C8DF0F /* SDL2.framework in Frameworks */, C3F9068C195676CC00C8DF0F /* GLUT.framework in Frameworks */, C3F9068A195676C500C8DF0F /* OpenGL.framework in Frameworks */, ); @@ -55,7 +52,6 @@ isa = PBXGroup; children = ( C3F9068F19567A4600C8DF0F /* libprojectM.a */, - C3F9068D1956780A00C8DF0F /* SDL2.framework */, C3F9068B195676CC00C8DF0F /* GLUT.framework */, C3F90689195676C500C8DF0F /* OpenGL.framework */, C3F9067A195670BC00C8DF0F /* emprojectM */, @@ -225,10 +221,21 @@ "$(inherited)", "$(USER_LIBRARY_DIR)/Frameworks", ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../libprojectM", + /usr/local/include, + ); + LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", /Users/snooz/dev/projectm/src/libprojectM, ); + OTHER_LDFLAGS = ( + "-lSDL2", + "-L/usr/local/lib", + ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -240,10 +247,21 @@ "$(inherited)", "$(USER_LIBRARY_DIR)/Frameworks", ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, + "$(SRCROOT)/../libprojectM", + /usr/local/include, + ); + LD_RUNPATH_SEARCH_PATHS = "@executable_path/../Frameworks"; LIBRARY_SEARCH_PATHS = ( "$(inherited)", /Users/snooz/dev/projectm/src/libprojectM, ); + OTHER_LDFLAGS = ( + "-lSDL2", + "-L/usr/local/lib", + ); PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/src/projectM-emscripten/projectM_SDL_emscripten.cpp b/src/projectM-emscripten/projectM_SDL_emscripten.cpp index 61718459a..f10bfb8c6 100755 --- a/src/projectM-emscripten/projectM_SDL_emscripten.cpp +++ b/src/projectM-emscripten/projectM_SDL_emscripten.cpp @@ -16,19 +16,25 @@ #include #endif -//#include "emscripten_sdltoprojectM.h" - projectM *globalPM = NULL; -int dumpFrame = 0; -int frameNumber = 0; - -extern void addPCM16(short [2][512]); +bool done = false; void renderFrame() { - int i; short pcm_data[2][512]; + SDL_Event evt; + + SDL_PollEvent(&evt); + switch (evt.type) { + case SDL_KEYDOWN: + // ... + break; + case SDL_QUIT: + done = true; + break; + } + // projectMEvent evt; // projectMKeycode key; @@ -95,18 +101,17 @@ int main( int argc, char *argv[] ) { // w = 512; h = 512; bpp = 16; #if SDL_MAJOR_VERSION==2 - if (! SDL_CreateWindowAndRenderer(width, height, SDL_WINDOW_BORDERLESS, &win, &rend)) { - fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError()); - return PROJECTM_ERROR; - } + win = SDL_CreateWindow("SDL Fun Party Time", 50, 50, width, height, 0); + rend = SDL_CreateRenderer(win, 0, SDL_RENDERER_ACCELERATED); + if (! rend) { + fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError()); + return PROJECTM_ERROR; + } + SDL_SetWindowTitle(win, "SDL Fun Party Time"); #elif SDL_MAJOR_VERSION==1 screen = SDL_SetVideoMode(width, height, 32, SDL_OPENGL | SDL_HWSURFACE) ; #endif - - if (screen == NULL) { - return PROJECTM_ERROR; - } - + #ifdef PANTS if ( fsaa ) { SDL_GL_GetAttribute( SDL_GL_MULTISAMPLEBUFFERS, &value ); @@ -116,7 +121,7 @@ int main( int argc, char *argv[] ) { } #endif - globalPM = (projectM *)malloc( sizeof( projectM ) ); + globalPM = new projectM("/usr/local/share/projectM/config.inp"); // globalPM->renderTarget->texsize = 1024; @@ -131,20 +136,21 @@ int main( int argc, char *argv[] ) { globalPM->projectM_resetGL( width, height ); // mainloop. non-emscripten version here for comparison/testing - #ifdef EMSCRIPTEN +#ifdef EMSCRIPTEN emscripten_set_main_loop(renderFrame, 30, 0); - #else - Uint32 frame_start, frame_time; - const Uint32 frame_length = 1000/60; - while (1) { - frame_start = SDL_GetTicks(); +#else + // standard main loop + const Uint32 frame_delay = 1000/60; + Uint32 last_time = SDL_GetTicks(); + while (! done) { renderFrame(); - frame_time = SDL_GetTicks() - frame_start; - if (frame_length > frame_time) { - SDL_Delay(frame_length - frame_time); - } + Uint32 elapsed = SDL_GetTicks() - last_time; + if (elapsed < frame_delay) + SDL_Delay(frame_delay - elapsed); + SDL_RenderPresent(rend); + last_time = SDL_GetTicks(); } - #endif +#endif return PROJECTM_SUCCESS; }