From 404c23e63dc1803ba5398887a0e1e3877dac56a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 22 Aug 2017 22:41:08 +0200 Subject: [PATCH] Platform: ported magnum-info to Emscripten. --- CMakeLists.txt | 5 ++-- doc/changelog.dox | 1 + package/archlinux/PKGBUILD-emscripten | 2 ++ package/archlinux/PKGBUILD-emscripten-noopt | 2 ++ .../PKGBUILD-emscripten-noopt-webgl2 | 2 ++ package/archlinux/PKGBUILD-emscripten-wasm | 2 ++ .../archlinux/PKGBUILD-emscripten-wasm-webgl2 | 2 ++ package/archlinux/PKGBUILD-emscripten-webgl2 | 2 ++ package/ci/travis-emscripten.sh | 1 + src/Magnum/Platform/CMakeLists.txt | 18 ++++++++++-- src/Magnum/Platform/magnum-info.cpp | 28 +++++++++++++------ src/Magnum/Platform/magnum-info.html | 19 +++++++++++++ 12 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 src/Magnum/Platform/magnum-info.html diff --git a/CMakeLists.txt b/CMakeLists.txt index adaa35c29..817c50944 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,8 +63,9 @@ cmake_dependent_option(TARGET_GLES2 "Build for OpenGL ES 2 / WebGL 1.0" ON "TARG cmake_dependent_option(TARGET_DESKTOP_GLES "Build for OpenGL ES on desktop" OFF "TARGET_GLES" OFF) option(TARGET_HEADLESS "Build command-line utilities for use on a headless machines" OFF) -# Magnum Info (currently only using GLX, CGL or WGL/EGL on Windows) -if(CORRADE_TARGET_UNIX OR CORRADE_TARGET_WINDOWS) +# Magnum Info (currently only using GLX/CGL/EGL on *nix, WGL/EGL on Windows and +# EGL on Emscripten) +if(CORRADE_TARGET_UNIX OR CORRADE_TARGET_WINDOWS OR CORRADE_TARGET_EMSCRIPTEN) option(WITH_MAGNUMINFO "Build magnum-info utility" OFF) endif() diff --git a/doc/changelog.dox b/doc/changelog.dox index c7b8e56da..9d3180459 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -226,6 +226,7 @@ namespace Magnum { - New @ref Platform::WindowlessGlxContext "Platform::Windowless*Context" classes that manage OpenGL context to make threaded context creation possible +- Ported @ref magnum-info "magnum-info" to Emscripten - First-class support for scroll events in @ref Platform::Sdl2Application::MouseScrollEvent - Added @ref Platform::Sdl2Application::MouseEvent::clickCount() diff --git a/package/archlinux/PKGBUILD-emscripten b/package/archlinux/PKGBUILD-emscripten index 54fc18fff..7318a46b1 100644 --- a/package/archlinux/PKGBUILD-emscripten +++ b/package/archlinux/PKGBUILD-emscripten @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DWITH_AUDIO=ON \ -DWITH_SDL2APPLICATION=ON \ -WDITH_WINDOWLESSEGLAPPLICATION=ON \ @@ -36,6 +37,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/archlinux/PKGBUILD-emscripten-noopt b/package/archlinux/PKGBUILD-emscripten-noopt index a7104cf31..ab18c794d 100644 --- a/package/archlinux/PKGBUILD-emscripten-noopt +++ b/package/archlinux/PKGBUILD-emscripten-noopt @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG -O1" \ -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-O1" \ -DWITH_AUDIO=ON \ @@ -38,6 +39,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/archlinux/PKGBUILD-emscripten-noopt-webgl2 b/package/archlinux/PKGBUILD-emscripten-noopt-webgl2 index d5161ca7e..cece9ad96 100644 --- a/package/archlinux/PKGBUILD-emscripten-noopt-webgl2 +++ b/package/archlinux/PKGBUILD-emscripten-noopt-webgl2 @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG -O1" \ -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-O1" \ -DTARGET_GLES2=OFF \ @@ -39,6 +40,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/archlinux/PKGBUILD-emscripten-wasm b/package/archlinux/PKGBUILD-emscripten-wasm index 011d95422..513eb4f2d 100644 --- a/package/archlinux/PKGBUILD-emscripten-wasm +++ b/package/archlinux/PKGBUILD-emscripten-wasm @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DWITH_AUDIO=ON \ -DWITH_SDL2APPLICATION=ON \ -WDITH_WINDOWLESSEGLAPPLICATION=ON \ @@ -36,6 +37,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 b/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 index 3253079cb..0d3674684 100644 --- a/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 +++ b/package/archlinux/PKGBUILD-emscripten-wasm-webgl2 @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DTARGET_GLES2=OFF \ -DWITH_AUDIO=ON \ -DWITH_SDL2APPLICATION=ON \ @@ -37,6 +38,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/archlinux/PKGBUILD-emscripten-webgl2 b/package/archlinux/PKGBUILD-emscripten-webgl2 index 082d7737e..67ee9fd0e 100644 --- a/package/archlinux/PKGBUILD-emscripten-webgl2 +++ b/package/archlinux/PKGBUILD-emscripten-webgl2 @@ -28,6 +28,7 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr/lib/emscripten/system \ + -DMAGNUM_DEPLOY_PREFIX=/srv/http/emscripten \ -DTARGET_GLES2=OFF \ -DWITH_AUDIO=ON \ -DWITH_SDL2APPLICATION=ON \ @@ -37,6 +38,7 @@ build() { -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON ninja } diff --git a/package/ci/travis-emscripten.sh b/package/ci/travis-emscripten.sh index 4b581e7b2..99eb87016 100755 --- a/package/ci/travis-emscripten.sh +++ b/package/ci/travis-emscripten.sh @@ -55,6 +55,7 @@ cmake .. \ -DWITH_TGAIMAGECONVERTER=ON \ -DWITH_TGAIMPORTER=ON \ -DWITH_WAVAUDIOIMPORTER=ON \ + -DWITH_MAGNUMINFO=ON \ -DBUILD_TESTS=ON \ -DTARGET_GLES2=$TARGET_GLES2 # Otherwise the job gets killed (probably because using too much memory) diff --git a/src/Magnum/Platform/CMakeLists.txt b/src/Magnum/Platform/CMakeLists.txt index d01710b2a..9c761696d 100644 --- a/src/Magnum/Platform/CMakeLists.txt +++ b/src/Magnum/Platform/CMakeLists.txt @@ -726,7 +726,7 @@ endif() if(WITH_MAGNUMINFO) add_executable(magnum-info magnum-info.cpp) target_link_libraries(magnum-info Magnum) - if(MAGNUM_TARGET_HEADLESS) + if(MAGNUM_TARGET_HEADLESS OR CORRADE_TARGET_EMSCRIPTEN) target_link_libraries(magnum-info MagnumWindowlessEglApplication) elseif(CORRADE_TARGET_IOS) target_link_libraries(magnum-info MagnumWindowlessIosApplication) @@ -749,12 +749,26 @@ if(WITH_MAGNUMINFO) endif() set_target_properties(magnum-info PROPERTIES FOLDER "Magnum/Platform") - install(TARGETS magnum-info DESTINATION ${MAGNUM_BINARY_INSTALL_DIR}) + if(NOT CORRADE_TARGET_EMSCRIPTEN) + install(TARGETS magnum-info DESTINATION ${MAGNUM_BINARY_INSTALL_DIR}) + endif() + if(CORRADE_TARGET_IOS) set_target_properties(magnum-info PROPERTIES MACOSX_BUNDLE ON MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/MacOSXBundleInfo.plist.in XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES") + elseif(CORRADE_TARGET_EMSCRIPTEN) + install(FILES magnum-info.html DESTINATION ${MAGNUM_DEPLOY_PREFIX}/magnum-info RENAME index.html) + install(TARGETS magnum-info DESTINATION ${MAGNUM_DEPLOY_PREFIX}/magnum-info) + install(FILES + WebApplication.css + WindowlessEmscriptenApplication.js + DESTINATION ${MAGNUM_DEPLOY_PREFIX}/magnum-info) + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/magnum-info.js.mem + ${CMAKE_CURRENT_BINARY_DIR}/magnum-info.wasm + DESTINATION ${MAGNUM_DEPLOY_PREFIX}/magnum-info OPTIONAL) endif() # Magnum info target alias for superprojects diff --git a/src/Magnum/Platform/magnum-info.cpp b/src/Magnum/Platform/magnum-info.cpp index 6e222f2d7..ea9b493b9 100644 --- a/src/Magnum/Platform/magnum-info.cpp +++ b/src/Magnum/Platform/magnum-info.cpp @@ -36,11 +36,13 @@ #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #include "Magnum/CubeMapTextureArray.h" #endif +#ifndef MAGNUM_TARGET_WEBGL #include "Magnum/DebugOutput.h" +#endif #include "Magnum/Extensions.h" #include "Magnum/Framebuffer.h" #include "Magnum/Mesh.h" -#ifndef MAGNUM_TARGET_GLES2 +#if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #include "Magnum/MultisampleTexture.h" #endif #ifndef MAGNUM_TARGET_GLES @@ -54,7 +56,7 @@ #include "Magnum/TransformFeedback.h" #endif -#ifdef MAGNUM_TARGET_HEADLESS +#if defined(MAGNUM_TARGET_HEADLESS) || defined(CORRADE_TARGET_EMSCRIPTEN) #include "Magnum/Platform/WindowlessEglApplication.h" #elif defined(CORRADE_TARGET_IOS) #include "Magnum/Platform/WindowlessIosApplication.h" @@ -251,7 +253,9 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat #ifndef MAGNUM_TARGET_GLES Debug() << "Core profile:" << (c.isCoreProfile() ? "yes" : "no"); #endif + #ifndef MAGNUM_TARGET_WEBGL Debug() << "Context flags:" << c.flags(); + #endif Debug() << "Detected driver:" << c.detectedDriver(); Debug() << "Supported GLSL versions:"; @@ -336,11 +340,13 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat _l(Mesh::maxElementsVertices()) #endif _l(Renderbuffer::maxSize()) + #if !(defined(MAGNUM_TARGET_WEBGL) && defined(MAGNUM_TARGET_GLES2)) _l(Renderbuffer::maxSamples()) + #endif _l(Shader::maxVertexOutputComponents()) _l(Shader::maxFragmentInputComponents()) _l(Shader::maxTextureImageUnits(Shader::Type::Vertex)) - #ifndef MAGNUM_TARGET_GLES2 + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) _l(Shader::maxTextureImageUnits(Shader::Type::TessellationControl)) _l(Shader::maxTextureImageUnits(Shader::Type::TessellationEvaluation)) _l(Shader::maxTextureImageUnits(Shader::Type::Geometry)) @@ -349,7 +355,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat _l(Shader::maxTextureImageUnits(Shader::Type::Fragment)) _l(Shader::maxCombinedTextureImageUnits()) _l(Shader::maxUniformComponents(Shader::Type::Vertex)) - #ifndef MAGNUM_TARGET_GLES2 + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) _l(Shader::maxUniformComponents(Shader::Type::TessellationControl)) _l(Shader::maxUniformComponents(Shader::Type::TessellationEvaluation)) _l(Shader::maxUniformComponents(Shader::Type::Geometry)) @@ -377,7 +383,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat } #endif - #ifndef MAGNUM_TARGET_GLES2 + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #ifndef MAGNUM_TARGET_GLES if(c.isExtensionSupported()) #endif @@ -412,7 +418,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat } #endif - #ifndef MAGNUM_TARGET_GLES2 + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #ifndef MAGNUM_TARGET_GLES if(c.isExtensionSupported()) #endif @@ -483,7 +489,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat } #endif - #ifndef MAGNUM_TARGET_GLES2 + #if !defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) #ifndef MAGNUM_TARGET_GLES if(c.isExtensionSupported()) #endif @@ -520,17 +526,21 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat _l(Buffer::uniformOffsetAlignment()) _l(Buffer::maxUniformBindings()) _l(Shader::maxUniformBlocks(Shader::Type::Vertex)) + #ifndef MAGNUM_TARGET_WEBGL _l(Shader::maxUniformBlocks(Shader::Type::TessellationControl)) _l(Shader::maxUniformBlocks(Shader::Type::TessellationEvaluation)) _l(Shader::maxUniformBlocks(Shader::Type::Geometry)) _l(Shader::maxUniformBlocks(Shader::Type::Compute)) + #endif _l(Shader::maxUniformBlocks(Shader::Type::Fragment)) _l(Shader::maxCombinedUniformBlocks()) _l(Shader::maxCombinedUniformComponents(Shader::Type::Vertex)) + #ifndef MAGNUM_TARGET_WEBGL _l(Shader::maxCombinedUniformComponents(Shader::Type::TessellationControl)) _l(Shader::maxCombinedUniformComponents(Shader::Type::TessellationEvaluation)) _l(Shader::maxCombinedUniformComponents(Shader::Type::Geometry)) _l(Shader::maxCombinedUniformComponents(Shader::Type::Compute)) + #endif _l(Shader::maxCombinedUniformComponents(Shader::Type::Fragment)) _l(AbstractShaderProgram::maxUniformBlockSize()) } @@ -679,6 +689,7 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat _l(Sampler::maxMaxAnisotropy()) } + #ifndef MAGNUM_TARGET_WEBGL if(c.isExtensionSupported()) { _h(KHR::debug) @@ -687,8 +698,9 @@ MagnumInfo::MagnumInfo(const Arguments& arguments): Platform::WindowlessApplicat _l(DebugOutput::maxMessageLength()) _l(DebugGroup::maxStackDepth()) } + #endif - #ifdef MAGNUM_TARGET_GLES2 + #if defined(MAGNUM_TARGET_GLES2) && !defined(MAGNUM_TARGET_WEBGL) if(c.isExtensionSupported()) { _h(OES::texture_3D) diff --git a/src/Magnum/Platform/magnum-info.html b/src/Magnum/Platform/magnum-info.html new file mode 100644 index 000000000..797094d1e --- /dev/null +++ b/src/Magnum/Platform/magnum-info.html @@ -0,0 +1,19 @@ + + + + Magnum Info + + + + +

Magnum Info

+
+ +

+      
Initialization...
+
+ + +
+ +