Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port to web #1263

Merged
merged 69 commits into from
Dec 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
7213c25
build: compile to web
luishfonseca Jun 13, 2024
7aae6fa
fix(io): disable gamepad on emscripten
luishfonseca Jun 13, 2024
638635d
feat(io): target WebGL 2.0 on web
luishfonseca Jun 13, 2024
1b399b9
refactor(gl): remove Texture1D and CubeMapArray
luishfonseca Jun 13, 2024
02597b2
refactor(gl): remove Texture2DArray target type
luishfonseca Jun 13, 2024
7a80773
refactor(gl): remove modes unsupported by GLES 3.0
luishfonseca Jun 13, 2024
d2f805e
refactor(gl): remove texture formats unsupported by GLES 3.0
luishfonseca Jun 13, 2024
7a4965c
fix(gl): disable error callback on web
luishfonseca Jun 13, 2024
8005581
fix(gl): disable image binding on web
luishfonseca Jun 13, 2024
8d83fc4
fix(gl): disable shader storage block on web
luishfonseca Jun 13, 2024
edd40b6
fix(gl): disable geometry shaders on web
luishfonseca Jun 13, 2024
0006782
fix(gl): disable compute shaders on web
luishfonseca Jun 13, 2024
bc83155
fix(gl): add missing fs
luishfonseca Jun 13, 2024
095d99a
refactor(gl): replace glGetTexImage with glReadPixels
luishfonseca Jun 13, 2024
8d10fcb
refactor(gl): replace glMapBuffer with glMapBufferRange
luishfonseca Jun 13, 2024
b54266a
feat(gl): inject version in shader assets
luishfonseca Jun 13, 2024
ccc85c0
docs(gl): add useful documentation at the top of the file
luishfonseca Jun 13, 2024
20c5e1c
fix(gl): use GLsizei for OGLTexture2D dimensions
luishfonseca Jun 13, 2024
4cf05fc
fix(imgui): stop setting raster mode
luishfonseca Jun 13, 2024
671b9e4
feat(samples): port gl.quad core sample to web
luishfonseca Jun 13, 2024
80c9196
feat(ecs): add Cubos move constructor
RiscadoA Jun 14, 2024
ece7d69
fix(telemetry): handle log levels correctly in Emscripten
RiscadoA Jun 14, 2024
ed312f7
feat(ecs): use proper main loop on Cubos::run with Emscripten
RiscadoA Jun 14, 2024
3520653
build: embed assets on web releases
luishfonseca Jun 14, 2024
f03b738
fix(gl): remove shader version declarations
luishfonseca Jun 14, 2024
e454619
refactor(gl): check OpenGL functions for errors
luishfonseca Jun 15, 2024
057c137
feat(gl): add unsigned RenderDevice::clearTargetColor
RiscadoA Jun 15, 2024
ef6efb0
fix(rendering): use unsigned clearTargetColor for render picker
RiscadoA Jun 15, 2024
9d601f6
fix(gl): use RGBA instead of RGB for render targets
RiscadoA Jun 15, 2024
2d12fcc
fix(rendering): add missing padding to some std140 structs
RiscadoA Jun 15, 2024
f61b00c
fix(gl): make PixelPackBuffer and Texture2D::copyTo WebGL compatible
RiscadoA Jun 15, 2024
58485df
fix(gl): use WebGL 2 header instead of GLES header
RiscadoA Jun 15, 2024
424063b
build: do not use cpptrace and glad when compiling for the web
RiscadoA Nov 22, 2024
1b3d9d6
fix(gl): add missing update to quad sample
RiscadoA Nov 22, 2024
a03e9fb
refactor(gl): replace all maps by fills
RiscadoA Nov 22, 2024
3f337fb
fix(gl): disable OGLTimer support in Emscripten
RiscadoA Nov 22, 2024
99541cd
fix(gl): remove anisotropy filter support in Emscripten
RiscadoA Nov 22, 2024
7de1ac4
feat(gl): add framebuffer setTexture2DArrayTarget
RiscadoA Nov 22, 2024
10e4026
fix(gl): add missing cstring include
RiscadoA Nov 22, 2024
49ccc6d
fix(gl): use WebGL include instead of Glad
RiscadoA Nov 22, 2024
df05e12
fix(gl): remove unnecessary call to glDraw/ReadBuffer
RiscadoA Nov 22, 2024
a3eb657
fix(gl): add missing precision specifiers to WebGL2 shader header
RiscadoA Nov 22, 2024
b799226
fix(io): do not use Glad on GLFWWindow on Emcripten
RiscadoA Nov 22, 2024
cb5bb29
fix(tel): do not use cpptrace on Emscripten
RiscadoA Nov 22, 2024
cb5a7b4
fix(rendering): replace old Border AddressMode by Clamp on cascading …
RiscadoA Nov 22, 2024
b090f7f
fix(rendering): make cascading shadows plugin compatible with WebGL 2
RiscadoA Nov 22, 2024
a80d1f5
fix(rendering): make engine shaders compatible with WebGL 2
RiscadoA Nov 22, 2024
1f9e35e
fix(rendering): add missing padding init
RiscadoA Nov 22, 2024
4dd0c9f
build: disable Emscripten STRICT and enable assertions
RiscadoA Nov 22, 2024
ed72565
docs: update CHANGELOG.md
RiscadoA Nov 22, 2024
33bbf7f
feat(ci): add build web action
RiscadoA Nov 22, 2024
79902e4
build(engine): skip assets saving sample on Emscripten
RiscadoA Nov 23, 2024
a8419ec
fix(memory): typo in field names
RiscadoA Nov 23, 2024
cf0e9f3
build(engine): make imgui a system library to avoid compilations erro…
RiscadoA Nov 23, 2024
a70df99
docs(gl): remove global variable from gl.quad sample
RiscadoA Nov 23, 2024
4dc36f4
fix(gl): handle compute shader version headers
RiscadoA Nov 23, 2024
90bec76
docs(gl): replace sync TODO by proper explanation
RiscadoA Nov 23, 2024
3b8438e
build: disable cached SHARED options on Emscripten
RiscadoA Dec 1, 2024
50e3c52
refactor(rendering): avoid geometry shaders in point shadows
RiscadoA Dec 1, 2024
416e883
build: increase Emscripten initial memory and stack size
RiscadoA Dec 1, 2024
a85d3ba
build: turn make_sample into a function
RiscadoA Dec 1, 2024
fb25ecd
fix(ui): add missing padding to UI color rect and text buffers
RiscadoA Dec 1, 2024
338186a
fix(rendering): make shaders WebGL compatible
RiscadoA Dec 1, 2024
0fc7327
fix(ecs): run startup systems after emscripten_set_main_loop
RiscadoA Dec 1, 2024
eed5e43
docs(rendering): remove vSync setting override in samples
RiscadoA Dec 1, 2024
1faa2e9
build: fix msdf-atlas-gen configuration
RiscadoA Dec 1, 2024
1fd5a79
build: only find needed dependencies on Emscripten on cubos-config.cmake
RiscadoA Dec 1, 2024
b2dcf08
build(tesseratos): add Emscripten support to template project
RiscadoA Dec 1, 2024
7f38ef9
chore: update flake with new dependencies
RiscadoA Dec 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions .github/workflows/build-engine-web.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: 🌐 Build Engine Web

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:

env:
BUILD_TYPE: Release
CCACHE_BASEDIR: ${{ github.workspace }}
CCACHE_DIR: "${{ github.workspace }}/.ccache"
CCACHE_COMPILERTYPE: emcc

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install ccache

- name: Install emsdk
uses: mymindstorm/setup-emsdk@v14

- name: Get timestamp
shell: bash
id: ccache_vars
run: |
echo "timestamp=$(date +%s)" >> $GITHUB_OUTPUT

- uses: actions/cache@v4
with:
path: ${{ env.CCACHE_DIR }}
key: ccache-${{ env.CCACHE_COMPILERTYPE }}-${{ env.BUILD_TYPE }}-${{ github.ref }}-${{ steps.ccache_vars.outputs.timestamp }}
restore-keys: |
ccache-${{ env.CCACHE_COMPILERTYPE }}-${{ env.BUILD_TYPE }}-${{ github.ref }}-
ccache-${{ env.CCACHE_COMPILERTYPE }}-${{ env.BUILD_TYPE }}-
ccache-${{ env.CCACHE_COMPILERTYPE }}-
ccache-

- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCUBOS_CORE_SAMPLES=ON -DCUBOS_ENGINE_SAMPLES=ON -DCMAKE_TOOLCHAIN_FILE=${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
shell: bash

- name: CCache Prolog
run: |-
ccache -s # Print current cache stats
ccache -z # Zero cache entry

- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target all

- name: CCache Epilog
run: |
ccache -s # Print current cache stats

- name: Copy results
run: |
mkdir -p ${{github.workspace}}/results
cp ${{github.workspace}}/build/*.{js,wasm,html} ${{github.workspace}}/results

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: emscripten
path: ${{github.workspace}}/results
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -403,4 +403,6 @@ imgui.ini
/.envrc
/.direnv

.DS_store
.DS_store

.em_cache
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Audio Plugin (#1004, **@Dageus**, **@diogomsmiranda**).
- Contact caching for collision between box shapes (#1355, **@fallenatlas**).
- Template Cubos project (#1009, **@RiscadoA**).
- Web support, through Emscripten (#465, **@luishfonseca**, **@RiscadoA**).

### Changed

Expand Down
16 changes: 16 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,22 @@ function(cubos_common_target_options target)
set_target_properties(${target} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
endif()
endif()

if(EMSCRIPTEN)
target_link_options(${target} PUBLIC
-sASSERTIONS=1
-pthread
-sPTHREAD_POOL_SIZE=navigator.hardwareConcurrency
-sENVIRONMENT=web,worker
-sMINIFY_HTML=0
-sINITIAL_MEMORY=128MB
-sSTACK_SIZE=1MB
)

target_compile_options(${target} PUBLIC -pthread)

set_target_properties(${target} PROPERTIES SUFFIX ".html")
endif()
endfunction()

# -------------- Fetch dependencies common to multiple libraries --------------
Expand Down
5 changes: 5 additions & 0 deletions api/core/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
option(BUILD_API_CORE_SAMPLES "Build cubos core c api samples" OFF)
option(BUILD_API_CORE_SHARED "Build cubos core c api as shared library?" ON)

if (EMSCRIPTEN AND BUILD_API_CORE_SHARED)
message(WARNING "Cannot build API core as shared library on Emscripten")
set(BUILD_API_CORE_SHARED OFF)
endif()

message("# Building core c api samples: " ${BUILD_API_CORE_SAMPLES})
message("# Building core c api as shared library: " ${BUILD_API_CORE_SHARED})

Expand Down
5 changes: 5 additions & 0 deletions api/engine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ set(CUBOS_API_ENGINE_SOURCE
option(BUILD_API_ENGINE_SAMPLES "Build cubos engine c api samples" OFF)
option(BUILD_API_ENGINE_SHARED "Build cubos engine c api as shared library?" ON)

if (EMSCRIPTEN AND BUILD_API_ENGINE_SHARED)
message(WARNING "Cannot build API engine as shared library on Emscripten")
set(BUILD_API_ENGINE_SHARED OFF)
endif()

message("# Building engine c api samples: " ${BUILD_API_ENGINE_SAMPLES})
message("# Building engine c api as shared library: " ${BUILD_API_ENGINE_SHARED})

Expand Down
403 changes: 403 additions & 0 deletions cmake/Emscripten.cmake

Large diffs are not rendered by default.

21 changes: 14 additions & 7 deletions cmake/cubos-config.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,28 @@ include(CMakeFindDependencyMacro)

if(NOT @CUBOS_CORE_SHARED@)
find_dependency(Threads)
find_dependency(cpptrace REQUIRED)

if(@CUBOS_CORE_OPENGL@)
find_dependency(glad REQUIRED)
endif()

if(@CUBOS_CORE_GLFW@)
find_dependency(glfw3 REQUIRED)
if(NOT EMSCRIPTEN)
find_dependency(cpptrace REQUIRED)

if(@CUBOS_CORE_OPENGL@)
find_dependency(glad REQUIRED)
endif()

if(@CUBOS_CORE_GLFW@)
find_dependency(glfw3 REQUIRED)
endif()
endif()
endif()

find_dependency(stduuid REQUIRED)
find_dependency(nlohmann_json REQUIRED)
find_dependency(glm REQUIRED)

if(NOT @CUBOS_ENGINE_SHARED@)
find_dependency(msdf-atlas-gen REQUIRED)
endif()

set(CUBOS_ENGINE_ASSETS_PATH "${CMAKE_CURRENT_LIST_DIR}/@CUBOS_ENGINE_ASSETS_INSTALL_RELPATH@")

if(NOT TARGET cubos::core)
Expand Down
110 changes: 66 additions & 44 deletions core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ message("# Building cubos::core samples: " ${CUBOS_CORE_SAMPLES})
message("# Building cubos::core tests: " ${CUBOS_CORE_TESTS})
message("# Building cubos::core as shared library: " ${CUBOS_CORE_SHARED})

if (EMSCRIPTEN AND CUBOS_CORE_SHARED)
message(WARNING "Cannot build core as shared library on Emscripten")
set(CUBOS_CORE_SHARED OFF CACHE BOOL "Build cubos::core as shared library?" FORCE)
endif()

# --------------------- Define core library source files ----------------------

set(CUBOS_CORE_SOURCE
Expand Down Expand Up @@ -178,67 +183,84 @@ endif()
target_compile_options(cubos-core PRIVATE -DCUBOS_CORE_METRIC_MAX_ENTRIES=${CUBOS_CORE_METRIC_MAX_ENTRIES})

# Link small libraries
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(cubos-core PUBLIC ${CMAKE_DL_LIBS})
target_link_libraries(cubos-core PRIVATE Threads::Threads)
set(THREADS_PREFER_PTHREAD_FLAG ON)
if(NOT EMSCRIPTEN)
find_package(Threads REQUIRED)
target_link_libraries(cubos-core PRIVATE Threads::Threads)
endif()

# ------------- Fetch and link core private library dependencies --------------

include(FetchContent)

# Fetch and link cpptrace
FetchContent_Declare(
cpptrace
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
GIT_TAG v0.7.1
SYSTEM
FIND_PACKAGE_ARGS
)
FetchContent_MakeAvailable(cpptrace)
target_link_libraries(cubos-core PRIVATE cpptrace::cpptrace)

# If OpenGL support is enabled, fetch and link glad
if(CUBOS_CORE_OPENGL)
if(NOT EMSCRIPTEN)
# Fetch and link cpptrace - only available (and needed) on non-Emscripten platforms
FetchContent_Declare(
glad
GIT_REPOSITORY https://github.com/GameDevTecnico/cubos-glad.git
GIT_TAG 496c56587442591557a89551d90906b1c53f639f
cpptrace
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
GIT_TAG v0.7.1
SYSTEM
FIND_PACKAGE_ARGS
)
if(CUBOS_CORE_SHARED)
set(GLAD_INSTALL OFF CACHE BOOL "Don't install glad" FORCE)
FetchContent_MakeAvailable(cpptrace)
target_link_libraries(cubos-core PRIVATE cpptrace::cpptrace)
endif()

# If OpenGL support is enabled, fetch and link glad
if(CUBOS_CORE_OPENGL)
if(EMSCRIPTEN)
# Unless we're on Emscripten, which statically links to OpenGL for us, and is thus more efficient
# than using glad
target_link_libraries(cubos-core PRIVATE GL)
target_link_options(cubos-core PUBLIC -sMIN_WEBGL_VERSION=2 -sMAX_WEBGL_VERSION=2)
else()
set(GLAD_INSTALL ${CUBOS_ENABLE_INSTALL} CACHE BOOL "Install glad" FORCE)
endif()
FetchContent_MakeAvailable(glad)
if(CUBOS_CORE_SHARED)
set_target_properties(glad PROPERTIES POSITION_INDEPENDENT_CODE ON)
FetchContent_Declare(
glad
GIT_REPOSITORY https://github.com/GameDevTecnico/cubos-glad.git
GIT_TAG bdf4d66072830f9822512f8f7dc3ca3fd72d9f69
SYSTEM
)
if(CUBOS_CORE_SHARED)
set(GLAD_INSTALL OFF CACHE BOOL "Don't install glad" FORCE)
else()
set(GLAD_INSTALL ${CUBOS_ENABLE_INSTALL} CACHE BOOL "Install glad" FORCE)
endif()
FetchContent_MakeAvailable(glad)
if(CUBOS_CORE_SHARED)
set_target_properties(glad PROPERTIES POSITION_INDEPENDENT_CODE ON)
endif()
target_link_libraries(cubos-core PRIVATE glad)
target_compile_definitions(cubos-core PRIVATE GLAD_GLAPI_EXPORT GLAD_GLAPI_EXPORT_BUILD)
endif()
target_link_libraries(cubos-core PRIVATE glad)
target_compile_definitions(cubos-core PRIVATE CUBOS_CORE_OPENGL GLAD_GLAPI_EXPORT GLAD_GLAPI_EXPORT_BUILD)
target_compile_definitions(cubos-core PRIVATE CUBOS_CORE_OPENGL)
endif()

# If GLFW support is enabled, fetch and link it
if(CUBOS_CORE_GLFW)
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.3.8
SYSTEM
FIND_PACKAGE_ARGS NAMES glfw3
)

set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Don't build GLFW examples" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "Don't build GLFW tests" FORCE)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "Don't build GLFW documentation" FORCE)
if(CUBOS_CORE_SHARED)
set(GLFW_INSTALL OFF CACHE BOOL "Don't install GLFW" FORCE)
if(EMSCRIPTEN)
# Emscripten ships its own GLFW
target_link_options(cubos-core PUBLIC -sUSE_GLFW=3)
else()
set(GLFW_INSTALL ${CUBOS_ENABLE_INSTALL} CACHE BOOL "Don't install GLFW" FORCE)
FetchContent_Declare(
glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.3.8
SYSTEM
FIND_PACKAGE_ARGS NAMES glfw3
)

set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Don't build GLFW examples" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "Don't build GLFW tests" FORCE)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "Don't build GLFW documentation" FORCE)
if(CUBOS_CORE_SHARED)
set(GLFW_INSTALL OFF CACHE BOOL "Don't install GLFW" FORCE)
else()
set(GLFW_INSTALL ${CUBOS_ENABLE_INSTALL} CACHE BOOL "Don't install GLFW" FORCE)
endif()
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build GLFW as a static library" FORCE)
FetchContent_MakeAvailable(glfw)
endif()
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build GLFW as a static library" FORCE)
FetchContent_MakeAvailable(glfw)

target_link_libraries(cubos-core PRIVATE glfw)
target_compile_definitions(cubos-core PRIVATE CUBOS_CORE_GLFW)
Expand Down
16 changes: 10 additions & 6 deletions core/include/cubos/core/ecs/cubos.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ namespace cubos::core::ecs
/// @param argv Argument array.
Cubos(int argc, char** argv);

/// @brief Move constructs.
/// @param other Other application.
Cubos(Cubos&& other) noexcept;

/// @name Forbid copying.
/// @{
Cubos(const Cubos&) = delete;
Expand Down Expand Up @@ -324,7 +328,7 @@ namespace cubos::core::ecs
/// @param plugin Plugin.
void uninstall(Plugin plugin);

World mWorld;
World* mWorld;
SystemRegistry mSystemRegistry;
State* mState{nullptr};

Expand Down Expand Up @@ -397,7 +401,7 @@ namespace cubos::core::ecs
TagBuilder& runIf(auto func)
{
auto conditionId = mCubos.mSystemRegistry.add(mName + "#condition",
System<bool>::make(mCubos.mWorld, std::move(func), {}));
System<bool>::make(*mCubos.mWorld, std::move(func), {}));
mPlanner.onlyIf(mTagId, conditionId);
return *this;
}
Expand All @@ -408,7 +412,7 @@ namespace cubos::core::ecs
TagBuilder& repeatWhile(auto func)
{
auto conditionId =
mCubos.mSystemRegistry.add(mName, System<bool>::make(mCubos.mWorld, std::move(func), {}));
mCubos.mSystemRegistry.add(mName, System<bool>::make(*mCubos.mWorld, std::move(func), {}));
CUBOS_ASSERT(mPlanner.repeatWhile(mTagId, conditionId), "Tag was already set to repeating");
return *this;
}
Expand Down Expand Up @@ -544,15 +548,15 @@ namespace cubos::core::ecs
SystemBuilder&& onlyIf(auto function) &&
{
CUBOS_ASSERT(!mCondition.contains(), "Only one condition can be set per system");
mCondition.replace(System<bool>::make(mCubos.mWorld, std::move(function), {}));
mCondition.replace(System<bool>::make(*mCubos.mWorld, std::move(function), {}));
return std::move(*this);
}

/// @brief Finishes building the system with the given function.
/// @param function System function.
void call(auto function) &&
{
this->finish(System<void>::make(mCubos.mWorld, std::move(function), mOptions));
this->finish(System<void>::make(*mCubos.mWorld, std::move(function), mOptions));
}

private:
Expand Down Expand Up @@ -687,7 +691,7 @@ namespace cubos::core::ecs
/// @param function System function.
void call(auto function) &&
{
this->finish(System<void>::make(mCubos.mWorld, std::move(function), mOptions));
this->finish(System<void>::make(*mCubos.mWorld, std::move(function), mOptions));
}

private:
Expand Down
3 changes: 3 additions & 0 deletions core/include/cubos/core/ecs/system/registry.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@
/// @brief Constructs.
SystemRegistry() = default;

/// @brief Move constructs.
SystemRegistry(SystemRegistry&&) = default;

Check warning on line 49 in core/include/cubos/core/ecs/system/registry.hpp

View check run for this annotation

Codecov / codecov/patch

core/include/cubos/core/ecs/system/registry.hpp#L49

Added line #L49 was not covered by tests

/// @brief Forbid copying.
SystemRegistry(const SystemRegistry&) = delete;

Expand Down
Loading
Loading