mirror of
https://github.com/projectM-visualizer/projectm.git
synced 2026-02-11 16:35:50 +00:00
Details: - New options to control building projectM as either static, shared or both libraries. - The reference UIs can now also be linked to the shared library if it is built. - Added an option to disable building the SDL frontend. SDL2 is still required for tests and the Emscripten build. - Initial option for building Doxygen documentation, but the feature is currently not implemented beyond that. - The SDL frontend no longer derives from the projectM class, but uses the C-based API calls instead.
110 lines
3.0 KiB
C++
110 lines
3.0 KiB
C++
/**
|
|
* projectM -- Milkdrop-esque visualisation SDK
|
|
* Copyright (C)2003-2021 projectM Team
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
* See 'LICENSE.txt' included within this release
|
|
*
|
|
* projectM-sdl
|
|
* This is an implementation of projectM using libSDL2
|
|
*
|
|
* main.cpp
|
|
* Authors: Created by Mischa Spiegelmock on 6/3/15.
|
|
*
|
|
*
|
|
* RobertPancoast77@gmail.com :
|
|
* experimental Stereoscopic SBS driver functionality
|
|
* WASAPI looback implementation
|
|
*
|
|
*
|
|
*/
|
|
|
|
#include "pmSDL.hpp"
|
|
|
|
static int mainLoop(void *userData) {
|
|
projectMSDL **appRef = (projectMSDL **)userData;
|
|
auto app = *appRef;
|
|
|
|
#if UNLOCK_FPS
|
|
auto start = startUnlockedFPSCounter();
|
|
#endif
|
|
|
|
// frame rate limiter
|
|
int fps = app->settings()->fps;
|
|
if (fps <= 0)
|
|
fps = 60;
|
|
const Uint32 frame_delay = 1000/fps;
|
|
Uint32 last_time = SDL_GetTicks();
|
|
|
|
// loop
|
|
while (! app->done) {
|
|
// render
|
|
app->renderFrame();
|
|
|
|
if (app->fakeAudio)
|
|
app->addFakePCM();
|
|
processLoopbackFrame(app);
|
|
|
|
#if UNLOCK_FPS
|
|
advanceUnlockedFPSCounterFrame(start);
|
|
#else
|
|
app->pollEvent();
|
|
Uint32 elapsed = SDL_GetTicks() - last_time;
|
|
if (elapsed < frame_delay)
|
|
SDL_Delay(frame_delay - elapsed);
|
|
last_time = SDL_GetTicks();
|
|
#endif
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
projectMSDL *app = setupSDLApp();
|
|
|
|
int status = mainLoop(&app);
|
|
|
|
// SDL_Thread *mainLoopThread;
|
|
// int threadReturnValue;
|
|
//
|
|
// mainLoopThread = SDL_CreateThread(mainLoop, "MainLoop", &app);
|
|
//
|
|
// if (NULL == mainLoopThread) {
|
|
// printf("SDL_CreateThread failed: %s\n", SDL_GetError());
|
|
// return PROJECTM_ERROR;
|
|
// } else {
|
|
// SDL_WaitThread(mainLoopThread, &threadReturnValue);
|
|
// printf("Thread returned value: %d\n", threadReturnValue);
|
|
// }
|
|
|
|
// Write back config with current app settings (if we loaded from a config file to begin with)
|
|
std::string configFilePath = getConfigFilePath(DATADIR_PATH);
|
|
if (!configFilePath.empty()) {
|
|
projectm_write_config(configFilePath.c_str(), app->settings());
|
|
}
|
|
|
|
// cleanup
|
|
SDL_GL_DeleteContext(app->glCtx);
|
|
#if !FAKE_AUDIO
|
|
if (!app->wasapi) // not currently using WASAPI, so we need to endAudioCapture.
|
|
app->endAudioCapture();
|
|
#endif
|
|
delete app;
|
|
|
|
return status;
|
|
}
|
|
|
|
|