Browse Source

Platform: ported magnum-info to Emscripten.

pull/217/head
Vladimír Vondruš 9 years ago
parent
commit
404c23e63d
  1. 5
      CMakeLists.txt
  2. 1
      doc/changelog.dox
  3. 2
      package/archlinux/PKGBUILD-emscripten
  4. 2
      package/archlinux/PKGBUILD-emscripten-noopt
  5. 2
      package/archlinux/PKGBUILD-emscripten-noopt-webgl2
  6. 2
      package/archlinux/PKGBUILD-emscripten-wasm
  7. 2
      package/archlinux/PKGBUILD-emscripten-wasm-webgl2
  8. 2
      package/archlinux/PKGBUILD-emscripten-webgl2
  9. 1
      package/ci/travis-emscripten.sh
  10. 18
      src/Magnum/Platform/CMakeLists.txt
  11. 28
      src/Magnum/Platform/magnum-info.cpp
  12. 19
      src/Magnum/Platform/magnum-info.html

5
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()

1
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()

2
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
}

2
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
}

2
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
}

2
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
}

2
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
}

2
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
}

1
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)

18
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

28
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<Extensions::GL::ARB::compute_shader>())
#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<Extensions::GL::ARB::shader_atomic_counters>())
#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<Extensions::GL::ARB::texture_multisample>())
#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<Extensions::GL::KHR::debug>()) {
_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<Extensions::GL::OES::texture_3D>()) {
_h(OES::texture_3D)

19
src/Magnum/Platform/magnum-info.html

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Magnum Info</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="WebApplication.css" />
</head>
<body>
<h1>Magnum Info</h1>
<div id="listener">
<canvas id="module" class="hidden"></canvas>
<pre id="log"></pre>
<div id="status">Initialization...</div>
<div id="statusDescription"></div>
<script src="WindowlessEmscriptenApplication.js"></script>
<script async="async" src="magnum-info.js"></script>
</div>
</body>
</html>
Loading…
Cancel
Save