Browse Source

EmscriptenApplication: add test for multiple applications on one page

This requires all but one of the applications to be compiled with -s MODULARIZE.
pull/480/head
Pablo Escobar 6 years ago
parent
commit
dec75443f3
  1. 16
      src/Magnum/Platform/Test/CMakeLists.txt
  2. 2
      src/Magnum/Platform/Test/EmscriptenApplicationCustomCanvasTest.html
  3. 7
      src/Magnum/Platform/Test/EmscriptenApplicationTest.cpp
  4. 49
      src/Magnum/Platform/Test/MultipleEmscriptenApplicationTest.html

16
src/Magnum/Platform/Test/CMakeLists.txt

@ -55,7 +55,7 @@ if(WITH_EMSCRIPTENAPPLICATION)
add_executable(PlatformEmscriptenApplicationCustomCanvasTest EmscriptenApplicationTest.cpp)
target_link_libraries(PlatformEmscriptenApplicationCustomCanvasTest PRIVATE MagnumEmscriptenApplication MagnumGL)
set_target_properties(PlatformEmscriptenApplicationCustomCanvasTest PROPERTIES FOLDER "Magnum/Platform/Test")
target_compile_definitions(PlatformEmscriptenApplicationCustomCanvasTest PRIVATE CUSTOM_CANVAS_ID)
target_link_libraries(PlatformEmscriptenApplicationCustomCanvasTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0")
add_custom_command(TARGET PlatformEmscriptenApplicationCustomCanvasTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../WebApplication.css
@ -67,6 +67,20 @@ if(WITH_EMSCRIPTENAPPLICATION)
${CMAKE_CURRENT_SOURCE_DIR}/EmscriptenApplicationCustomCanvasTest.html
$<TARGET_FILE_DIR:PlatformEmscriptenApplicationCustomCanvasTest>/PlatformEmscriptenApplicationCustomCanvasTest.html
WORKING_DIRECTORY $<TARGET_FILE_DIR:PlatformEmscriptenApplicationCustomCanvasTest>)
add_executable(PlatformMultipleEmscriptenApplicationTest EmscriptenApplicationTest.cpp)
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE MagnumEmscriptenApplication MagnumGL)
set_target_properties(PlatformMultipleEmscriptenApplicationTest PROPERTIES FOLDER "Magnum/Platform/Test")
target_compile_definitions(PlatformMultipleEmscriptenApplicationTest PRIVATE CUSTOM_CLEAR_COLOR=1,0,1,1)
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s MODULARIZE -s EXPORT_NAME=createModule")
target_link_libraries(PlatformMultipleEmscriptenApplicationTest PRIVATE "-s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1")
add_custom_command(TARGET PlatformMultipleEmscriptenApplicationTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/../EmscriptenApplication.js
$<TARGET_FILE_DIR:PlatformMultipleEmscriptenApplicationTest>
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${CMAKE_CURRENT_SOURCE_DIR}/MultipleEmscriptenApplicationTest.html
$<TARGET_FILE_DIR:PlatformMultipleEmscriptenApplicationTest>/PlatformMultipleEmscriptenApplicationTest.html)
endif()
if(WITH_GLFWAPPLICATION)

2
src/Magnum/Platform/Test/EmscriptenApplicationCustomCanvasTest.html

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="UTF-8" />
<title>Magnum EmscriptenApplication Test</title>
<title>Magnum EmscriptenApplication Custom Canvas Test</title>
<link rel="stylesheet" href="WebApplicationCustomCanvas.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>

7
src/Magnum/Platform/Test/EmscriptenApplicationTest.cpp

@ -31,6 +31,7 @@
#include "Magnum/GL/Renderer.h"
#include "Magnum/GL/DefaultFramebuffer.h"
#include "Magnum/GL/Mesh.h"
#include "Magnum/Math/Color.h"
namespace Magnum { namespace Platform { namespace Test {
@ -40,6 +41,9 @@ struct EmscriptenApplicationTest: Platform::Application {
virtual void drawEvent() override {
Debug() << "draw event";
#ifdef CUSTOM_CLEAR_COLOR
GL::Renderer::setClearColor({ CUSTOM_CLEAR_COLOR });
#endif
GL::defaultFramebuffer.clear(GL::FramebufferClear::Color);
swapBuffers();
@ -155,9 +159,6 @@ EmscriptenApplicationTest::EmscriptenApplicationTest(const Arguments& arguments)
create(Configuration{}
.setWindowFlags(Configuration::WindowFlag::Resizable)
#ifdef CUSTOM_CANVAS_ID
.setCanvasTarget("#canvas2")
#endif
//, GLConfiguration{}.setFlags({})
);

49
src/Magnum/Platform/Test/MultipleEmscriptenApplicationTest.html

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Magnum Multiple EmscriptenApplication Test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<h1>Magnum Multiple EmscriptenApplication Test</h1>
<div id="container" class="">
<div id="sizer"><div id="expander"><div id="listener">
<canvas id="canvas" tabindex="0"></canvas>
<canvas id="canvas2" tabindex="1"></canvas>
<div id="status">Initialization...</div>
<div id="status-description"></div>
<script src="EmscriptenApplication.js"></script>
<script src="PlatformMultipleEmscriptenApplicationTest.js"></script>
<script>
const myModule = Module;
/* Override default canvas set in EmscriptenApplication.js */
myModule.canvas = document.getElementById('canvas2');
myModule.keyboardListeningElement = Module.canvas;
myModule.canvas.addEventListener('mousedown', function(event) {
event.target.focus();
});
/*
This application is compiled with -s MODULARIZE -s EXPORT_NAME=createModule
so it doesn't run until we instantiate it with its own Module object
*/
createModule(myModule);
</script>
<!--
Create a fresh Module. This application is compiled without -s MODULARIZE
so Module is expected to be global and the application is run instantly.
-->
<script src="EmscriptenApplication.js"></script>
<script src="PlatformEmscriptenApplicationTest.js"></script>
<script>
Module.keyboardListeningElement = Module.canvas;
Module.canvas.addEventListener('mousedown', function(event) {
event.target.focus();
});
</script>
</div></div></div>
</div>
</body>
</html>
Loading…
Cancel
Save