Browse Source

Revert "Platform: Move emscripten port of Sdl2Application to SDL2"

Size of all executables got inflated by *half a megabyte* because of
this. I'm not sure if the change is worth it, so reverting for now.

This reverts commits

    c01961ba6b
    5fb3f435dd
    fada6fba05
pull/220/head
Vladimír Vondruš 9 years ago
parent
commit
6ae21f23b5
  1. 4
      modules/FindMagnum.cmake
  2. 27
      src/Magnum/Platform/Sdl2Application.cpp
  3. 26
      src/Magnum/Platform/Sdl2Application.h

4
modules/FindMagnum.cmake

@ -534,10 +534,6 @@ foreach(_component ${Magnum_FIND_COMPONENTS})
find_package(SDL2) find_package(SDL2)
set_property(TARGET Magnum::${_component} APPEND PROPERTY set_property(TARGET Magnum::${_component} APPEND PROPERTY
INTERFACE_LINK_LIBRARIES SDL2::SDL2) INTERFACE_LINK_LIBRARIES SDL2::SDL2)
if(CORRADE_TARGET_EMSCRIPTEN)
# TODO: give me INTERFACE_LINK_OPTIONS or something, please
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s USE_SDL=2")
endif()
# (Windowless) GLX application dependencies # (Windowless) GLX application dependencies
elseif(_component STREQUAL GlxApplication OR _component STREQUAL WindowlessGlxApplication) elseif(_component STREQUAL GlxApplication OR _component STREQUAL WindowlessGlxApplication)

27
src/Magnum/Platform/Sdl2Application.cpp

@ -100,6 +100,7 @@ bool Sdl2Application::tryCreateContext(const Configuration& configuration) {
SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, configuration.isSRGBCapable()); SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, configuration.isSRGBCapable());
#endif #endif
/** @todo Remove when Emscripten has proper SDL2 support */
#ifndef CORRADE_TARGET_EMSCRIPTEN #ifndef CORRADE_TARGET_EMSCRIPTEN
/* Set context version, if user-specified */ /* Set context version, if user-specified */
if(configuration.version() != Version::None) { if(configuration.version() != Version::None) {
@ -146,7 +147,6 @@ bool Sdl2Application::tryCreateContext(const Configuration& configuration) {
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
#endif #endif
} }
#endif
/* Create window. Hide it by default so we don't have distracting window /* Create window. Hide it by default so we don't have distracting window
blinking in case we have to destroy it again right away */ blinking in case we have to destroy it again right away */
@ -238,12 +238,23 @@ bool Sdl2Application::tryCreateContext(const Configuration& configuration) {
SDL_GL_GetDrawableSize(_window, &drawableSize.x(), &drawableSize.y()); SDL_GL_GetDrawableSize(_window, &drawableSize.x(), &drawableSize.y());
glViewport(0, 0, drawableSize.x(), drawableSize.y()); glViewport(0, 0, drawableSize.x(), drawableSize.y());
#endif #endif
#else
/* Emscripten-specific initialization */
if(!(_glContext = SDL_SetVideoMode(configuration.size().x(), configuration.size().y(), 24, SDL_OPENGL|SDL_HWSURFACE|SDL_DOUBLEBUF))) {
Error() << "Platform::Sdl2Application::tryCreateContext(): cannot create context:" << SDL_GetError();
return false;
}
#endif
/* Destroy everything also when the Magnum context creation fails */ /* Destroy everything also when the Magnum context creation fails */
if(!_context->tryCreate()) { if(!_context->tryCreate()) {
#ifndef CORRADE_TARGET_EMSCRIPTEN
SDL_GL_DeleteContext(_glContext); SDL_GL_DeleteContext(_glContext);
SDL_DestroyWindow(_window); SDL_DestroyWindow(_window);
_window = nullptr; _window = nullptr;
#else
SDL_FreeSurface(_glContext);
#endif
return false; return false;
} }
@ -258,13 +269,21 @@ bool Sdl2Application::tryCreateContext(const Configuration& configuration) {
} }
Vector2i Sdl2Application::windowSize() { Vector2i Sdl2Application::windowSize() {
#ifndef CORRADE_TARGET_EMSCRIPTEN
Vector2i size; Vector2i size;
SDL_GetWindowSize(_window, &size.x(), &size.y()); SDL_GetWindowSize(_window, &size.x(), &size.y());
return size; return size;
#else
return {_glContext->w, _glContext->h};
#endif
} }
void Sdl2Application::swapBuffers() { void Sdl2Application::swapBuffers() {
#ifndef CORRADE_TARGET_EMSCRIPTEN
SDL_GL_SwapWindow(_window); SDL_GL_SwapWindow(_window);
#else
SDL_Flip(_glContext);
#endif
} }
Int Sdl2Application::swapInterval() const { Int Sdl2Application::swapInterval() const {
@ -291,8 +310,12 @@ bool Sdl2Application::setSwapInterval(const Int interval) {
Sdl2Application::~Sdl2Application() { Sdl2Application::~Sdl2Application() {
_context.reset(); _context.reset();
#ifndef CORRADE_TARGET_EMSCRIPTEN
SDL_GL_DeleteContext(_glContext); SDL_GL_DeleteContext(_glContext);
SDL_DestroyWindow(_window); SDL_DestroyWindow(_window);
#else
SDL_FreeSurface(_glContext);
#endif
SDL_Quit(); SDL_Quit();
} }
@ -503,7 +526,7 @@ void Sdl2Application::textInputEvent(TextInputEvent&) {}
void Sdl2Application::textEditingEvent(TextEditingEvent&) {} void Sdl2Application::textEditingEvent(TextEditingEvent&) {}
Sdl2Application::Configuration::Configuration(): Sdl2Application::Configuration::Configuration():
#ifndef CORRADE_TARGET_IOS #if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_IOS)
_title("Magnum SDL2 Application"), _title("Magnum SDL2 Application"),
#endif #endif
#ifdef CORRADE_TARGET_EMSCRIPTEN #ifdef CORRADE_TARGET_EMSCRIPTEN

26
src/Magnum/Platform/Sdl2Application.h

@ -227,10 +227,6 @@ file contains event listeners which print loading status on the page. The
status displayed in the remaining two `&lt;div&gt;`s, if they are available. status displayed in the remaining two `&lt;div&gt;`s, if they are available.
The CSS file contains rudimentary style to avoid eye bleeding. The CSS file contains rudimentary style to avoid eye bleeding.
The document `&lt;title&gt;` can be overriden by calling
@ref Configuration::setTitle(), but that of course happens only after the app
fully loads.
The application redirects all output (thus also @ref Corrade::Utility::Debug "Debug", The application redirects all output (thus also @ref Corrade::Utility::Debug "Debug",
@ref Corrade::Utility::Warning "Warning" and @ref Corrade::Utility::Error "Error") @ref Corrade::Utility::Warning "Warning" and @ref Corrade::Utility::Error "Error")
to JavaScript console. It's possible to pass command-line arguments to `main()` to JavaScript console. It's possible to pass command-line arguments to `main()`
@ -419,6 +415,7 @@ class Sdl2Application {
*/ */
void mainLoopIteration(); void mainLoopIteration();
#ifndef CORRADE_TARGET_EMSCRIPTEN
/** /**
* @brief Underlying window handle * @brief Underlying window handle
* *
@ -426,6 +423,7 @@ class Sdl2Application {
* @note Not available in @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten". * @note Not available in @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten".
*/ */
SDL_Window* window() { return _window; } SDL_Window* window() { return _window; }
#endif
protected: protected:
/* Nobody will need to have (and delete) Sdl2Application*, thus this is /* Nobody will need to have (and delete) Sdl2Application*, thus this is
@ -728,10 +726,12 @@ class Sdl2Application {
typedef Containers::EnumSet<Flag> Flags; typedef Containers::EnumSet<Flag> Flags;
CORRADE_ENUMSET_FRIEND_OPERATORS(Flags) CORRADE_ENUMSET_FRIEND_OPERATORS(Flags)
#ifndef CORRADE_TARGET_EMSCRIPTEN
SDL_Window* _window; SDL_Window* _window;
SDL_GLContext _glContext; SDL_GLContext _glContext;
#ifndef CORRADE_TARGET_EMSCRIPTEN
UnsignedInt _minimalLoopPeriod; UnsignedInt _minimalLoopPeriod;
#else
SDL_Surface* _glContext;
#endif #endif
std::unique_ptr<Platform::Context> _context; std::unique_ptr<Platform::Context> _context;
@ -830,11 +830,12 @@ class Sdl2Application::Configuration {
/*implicit*/ Configuration(); /*implicit*/ Configuration();
~Configuration(); ~Configuration();
#ifndef CORRADE_TARGET_IOS #if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_IOS)
/** /**
* @brief Window title * @brief Window title
* *
* @note Not available in @ref CORRADE_TARGET_IOS "iOS". * @note Not available in @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten"
* and @ref CORRADE_TARGET_IOS "iOS".
*/ */
std::string title() const { return _title; } std::string title() const { return _title; }
#endif #endif
@ -844,13 +845,12 @@ class Sdl2Application::Configuration {
* @return Reference to self (for method chaining) * @return Reference to self (for method chaining)
* *
* Default is `"Magnum SDL2 Application"`. * Default is `"Magnum SDL2 Application"`.
* @note In @ref CORRADE_TARGET_IOS "iOS" this function does nothing and * @note In @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten" and
* is included only for compatibility. You need to set the title * @ref CORRADE_TARGET_IOS "iOS" this function does nothing and is
* included only for compatibility. You need to set the title
* separately in platform-specific configuration file. * separately in platform-specific configuration file.
* In @ref CORRADE_TARGET_EMSCRIPTEN "Emscripten" this title will
* be used to set `document.title`.
*/ */
#ifndef CORRADE_TARGET_IOS #if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_IOS)
Configuration& setTitle(std::string title) { Configuration& setTitle(std::string title) {
_title = std::move(title); _title = std::move(title);
return *this; return *this;
@ -975,7 +975,7 @@ class Sdl2Application::Configuration {
#endif #endif
private: private:
#ifndef CORRADE_TARGET_IOS #if !defined(CORRADE_TARGET_EMSCRIPTEN) && !defined(CORRADE_TARGET_IOS)
std::string _title; std::string _title;
#endif #endif
Vector2i _size; Vector2i _size;

Loading…
Cancel
Save