Oh hmm, I did not know there actually was some logic implemented behind SDL_Quit - I always though it was ignored, but apparently is not.
2014-04-08 8:48 GMT+03:00 <[email protected]>: > Also, I'm curious if anyone has found a way to make C++ infinite main > loops asynchronous that work across all even driven platforms? (eg. > Emscripten, Flash, pNaCl, iOS, Android) > Sure, it should not be very hard, but it will naturally look different on each platform, since the platform provides a platform-specific way to hook into a render loop. A decent way to entrypoint into your own code is to make your own tick() function that runs a single iteration of the update+render loop. Then use whatever platform-specific way there is to connect that tick() function to the system main loop. On Emscripten that is emscripten_set_main_loop. On Flash it would be calling tick() from Stage3D Context ENTER_FRAME event, something like stageContext->addEventListener(flash::events::Event::ENTER_FRAME, Function::_new(enterFrameHandler, NULL)); On iOS, you'll create a CADisplayLink object and call tick() from its update function, see listing 4-1 "Creating and starting a display link" in http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html On Android, if you're using NDK, you can create your own main thread that spins the render loop (see e.g. the native_app_glue example in NDK) and periodically calls tick(). In my setup, I do something slightly more complex, but effectively the same. I further break down the tick() function: void tick() { float deltaTime = tick() - lastStoredTick; update(deltaTime); render(); } and the basic functions that the application implements are those two: update() advances the app simulation by the given amount of time, and render() renders the current state of the simulation. The decoupling of these two is because occasionally they don't go in lockstep. For example, if the application is minimized and the screen is not visible, I may want to update() but never render(), and on some platforms, I might want to render() multiple times between a single update(), e.g. on Windows when you have a windowed mode screen and drag from the corner of a window, you might want to pause simulation for that duration and only repaint so that window dragging is responsive and updates smoothly. Ymmv for these though. Jukka -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
