From c93dbc0696de37f4c449a81f3fa3237171ae280e Mon Sep 17 00:00:00 2001 From: Michael Ragazzon Date: Tue, 26 Mar 2024 18:42:26 +0100 Subject: [PATCH] Fix bad rendering in Emscripten, add sample assets as link dependencies --- Backends/RmlUi_Renderer_GL3.cpp | 8 +++++++- CMakeLists.txt | 15 +++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Backends/RmlUi_Renderer_GL3.cpp b/Backends/RmlUi_Renderer_GL3.cpp index 50967fe8a..9184b0629 100644 --- a/Backends/RmlUi_Renderer_GL3.cpp +++ b/Backends/RmlUi_Renderer_GL3.cpp @@ -1082,7 +1082,13 @@ void RenderInterface_GL3::SetScissor(Rml::Rectanglei region, bool vertically_fli region = VerticallyFlipped(region, viewport_height); if (region.Valid() && region != scissor_state) - glScissor(region.Left(), viewport_height - region.Bottom(), region.Width(), region.Height()); + { + // Some render APIs don't like offscreen positions (WebGL in particular), so clamp them to the viewport. + const int x = Rml::Math::Clamp(region.Left(), 0, viewport_width); + const int y = Rml::Math::Clamp(viewport_height - region.Bottom(), 0, viewport_height); + + glScissor(x, y, region.Width(), region.Height()); + } Gfx::CheckGLError("SetScissorRegion"); scissor_state = region; diff --git a/CMakeLists.txt b/CMakeLists.txt index fde29a27f..9af1e26e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -802,7 +802,7 @@ if(BUILD_SAMPLES OR BUILD_TESTING) if(SAMPLES_BACKEND MATCHES "GL3$") message("-- Adding OpenGL 3 renderer backend.") if(EMSCRIPTEN) - set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} -sMAX_WEBGL_VERSION=2") + set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2") else() find_package(OpenGL REQUIRED) target_include_directories(shell PRIVATE ${OPENGL_INCLUDE_DIR}) @@ -867,10 +867,11 @@ if(BUILD_SAMPLES) # Add assets to emscripten binaries if(EMSCRIPTEN) - message("-- Preloading emscipten sample assets") + message("-- Preloading emscripten sample assets") set(COMMON_ASSET_FOLDER "Samples/assets/") set(EMSCRIPTEN_EXE_FLAGS "${EMSCRIPTEN_EXE_FLAGS} --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/${COMMON_ASSET_FOLDER}@/${COMMON_ASSET_FOLDER}") + file(GLOB COMMON_ASSET_FILES "${COMMON_ASSET_FOLDER}*") foreach(sample ${samples}) set(SAMPLE_DATA_FOLDER "Samples/basic/${sample}/data/") @@ -878,6 +879,8 @@ if(BUILD_SAMPLES) if(EXISTS ${ABS_SAMPLE_DATA_FOLDER}) target_link_libraries(${sample} "--preload-file ${ABS_SAMPLE_DATA_FOLDER}@/${SAMPLE_DATA_FOLDER}") endif() + file(GLOB SAMPLE_DATA_FILES "${SAMPLE_DATA_FOLDER}*") + set_target_properties(${sample} PROPERTIES LINK_DEPENDS "${COMMON_ASSET_FILES};${SAMPLE_DATA_FILES}") endforeach() foreach(tutorial ${tutorials}) @@ -886,10 +889,14 @@ if(BUILD_SAMPLES) if(EXISTS ${ABS_TUTORIAL_DATA_FOLDER}) target_link_libraries("tutorial_${tutorial}" "--preload-file ${ABS_TUTORIAL_DATA_FOLDER}@/${TUTORIAL_DATA_FOLDER}") endif() + file(GLOB TUTORIAL_DATA_FILES "${TUTORIAL_DATA_FOLDER}*") + set_target_properties(${sample} PROPERTIES LINK_DEPENDS "${COMMON_ASSET_FILES};${TUTORIAL_DATA_FILES}") endforeach() - set(INVADER_DATA_FOLDER "Samples/invaders/data/") - target_link_libraries(invaders "-sALLOW_MEMORY_GROWTH --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/${INVADER_DATA_FOLDER}@/${INVADER_DATA_FOLDER}") + set(INVADERS_DATA_FOLDER "Samples/invaders/data/") + target_link_libraries(invaders "-sALLOW_MEMORY_GROWTH --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/${INVADERS_DATA_FOLDER}@/${INVADERS_DATA_FOLDER}") + file(GLOB INVADERS_DATA_FILES "${INVADERS_DATA_FOLDER}*") + set_target_properties(invaders PROPERTIES LINK_DEPENDS "${COMMON_ASSET_FILES};${INVADERS_DATA_FILES}") endif() endif()