diff --git a/configure.ac b/configure.ac index 18e574b5..268a08fa 100644 --- a/configure.ac +++ b/configure.ac @@ -309,6 +309,10 @@ AC_LANG_POP(C++) AM_CONDITIONAL(USE_NACL, test "${ac_cv_my_have_nacl}" != "no") +dnl Use Emscripten? +AC_CHECK_HEADERS(emscripten.h) + + dnl Use Android? FIXME: super hacks! ac_cv_my_have_android="no" AC_CHECK_LIB(log, __android_log_vprint, diff --git a/src/application/application.cpp b/src/application/application.cpp index 63e2c677..7dc904a6 100644 --- a/src/application/application.cpp +++ b/src/application/application.cpp @@ -8,26 +8,30 @@ // http://www.wtfpl.net/ for more details. // -#if defined HAVE_CONFIG_H +#if HAVE_CONFIG_H # include "config.h" #endif +#if HAVE_EMSCRIPTEN_H +# include +#endif + #include "core.h" #include "lolgl.h" -#if defined __CELLOS_LV2__ +#if __CELLOS_LV2__ # include "platform/ps3/ps3app.h" -#elif defined _XBOX +#elif _XBOX # include "platform/xbox/xboxapp.h" -#elif defined __native_client__ +#elif __native_client__ # include "platform/nacl/nacl-app.h" -#elif defined __ANDROID__ +#elif __ANDROID__ # include "platform/android/androidapp.h" -#elif defined USE_SDL +#elif USE_SDL # include "platform/sdl/sdlapp.h" # include "platform/sdl/sdlinput.h" -#elif defined HAVE_GLES_2X +#elif HAVE_GLES_2X # include "eglapp.h" #endif @@ -44,17 +48,17 @@ class ApplicationData : app(name, resolution, framerate) { } -#if defined __CELLOS_LV2__ +#if __CELLOS_LV2__ Ps3App app; -#elif defined _XBOX +#elif _XBOX XboxApp app; -#elif defined __native_client__ +#elif __native_client__ NaClApp app; -#elif defined __ANDROID__ +#elif __ANDROID__ AndroidApp app; -#elif defined USE_SDL +#elif USE_SDL SdlApp app; -#elif defined HAVE_GLES_2X +#elif HAVE_GLES_2X /* FIXME: this macro is only deactivated if we include "lolgl.h" */ EglApp app; #else @@ -62,6 +66,15 @@ class ApplicationData #endif }; +#if EMSCRIPTEN +static Application *g_app; + +static void AppCallback() +{ + g_app->Tick(); +} +#endif + /* * Public Application class */ @@ -83,6 +96,16 @@ void Application::Tick() data->app.Tick(); } +void Application::Run() +{ +#if EMSCRIPTEN + emscripten_set_main_loop(AppCallback, 0, 1); +#else + while (MustTick()) + Tick(); +#endif +} + void Application::ShowPointer(bool show) { data->app.ShowPointer(show); diff --git a/src/application/application.h b/src/application/application.h index 428efb3c..583d3181 100644 --- a/src/application/application.h +++ b/src/application/application.h @@ -29,8 +29,7 @@ public: bool MustTick(); void Tick(); - - void Run() { while(MustTick()) Tick(); } + void Run(); void ShowPointer(bool show); diff --git a/tutorial/01_triangle.lolfx b/tutorial/01_triangle.lolfx index 881f936c..5f59871b 100644 --- a/tutorial/01_triangle.lolfx +++ b/tutorial/01_triangle.lolfx @@ -24,6 +24,10 @@ void main(void) [frag.glsl] #version 120 +#if defined GL_ES +precision highp float; +#endif + void main(void) { gl_FragColor = vec4(0.7, 0.2, 0.5, 1.0); diff --git a/tutorial/04_texture.lolfx b/tutorial/04_texture.lolfx index 48987db0..6ee4804d 100644 --- a/tutorial/04_texture.lolfx +++ b/tutorial/04_texture.lolfx @@ -16,6 +16,10 @@ void main(void) #version 120 +#if defined GL_ES +precision highp float; +#endif + uniform sampler2D u_Texture; varying vec4 pass_Position; diff --git a/tutorial/11_fractal.lolfx b/tutorial/11_fractal.lolfx index f028eeea..803e8021 100644 --- a/tutorial/11_fractal.lolfx +++ b/tutorial/11_fractal.lolfx @@ -2,10 +2,6 @@ #version 120 -#if defined GL_ES -precision highp float; -#endif - uniform mat4 u_ZoomSettings; uniform vec4 u_TexelSize; uniform vec4 u_ScreenSize;