From 20f62433f9f786e65f3fbe46cd28fa65b328de7e Mon Sep 17 00:00:00 2001 From: light7734 Date: Tue, 20 Jan 2026 09:58:35 +0330 Subject: [PATCH] feat: add preliminary --- modules/CMakeLists.txt | 59 ++- modules/app/application.cppm | 19 +- modules/app/system.cppm | 23 +- modules/asset_baker/bakers.cppm | 4 +- modules/asset_baker/bakers.test.cpp | 0 modules/asset_baker/entrypoint.cpp | 4 +- modules/assets/metadata.cppm | 17 +- modules/assets/shader.cppm | 14 +- modules/assets/shader.test.cpp | 10 +- modules/bitwise/operations.cppm | 6 +- modules/camera/components.cppm | 14 +- modules/debug/instrumentor.cppm | 6 +- modules/ecs/entity.cppm | 8 +- modules/ecs/registry.cppm | 23 +- modules/ecs/registry.test.cpp | 20 +- modules/ecs/sparse_set.cppm | 28 +- modules/ecs/sparse_set.test.cpp | 16 +- modules/env/constants.cppm | 13 +- modules/input/components.cppm | 17 +- modules/input/system.test.cpp | 3 +- modules/input_codes/input_codes.cppm | 15 +- modules/logger/logger.cppm | 8 +- modules/math/components.cppm | 1 + modules/math/mat4.cppm | 18 +- modules/math/trig.cppm | 11 +- modules/math/vec2.cppm | 12 +- modules/math/vec3.cppm | 10 +- modules/math/vec4.cppm | 17 +- modules/memory/null_on_move.cppm | 6 +- modules/memory/reference.cppm | 2 +- modules/memory/scope.cppm | 2 +- modules/mirror/entrypoint.cpp | 6 +- modules/mirror/layers/editor_layer.cppm | 227 ----------- modules/mirror/layers/editor_layer.test.cpp | 0 modules/mirror/panels/asset_browser.cppm | 200 --------- modules/mirror/panels/asset_browser.test.cpp | 0 modules/mirror/panels/panel.cppm | 13 - modules/mirror/panels/properties.cppm | 345 ---------------- modules/mirror/panels/properties.test.cpp | 0 modules/mirror/panels/scene_hierarchy.cpp | 124 ------ .../mirror/panels/scene_hierarchy.test.cpp | 0 modules/mirror/system.cppm | 21 +- modules/mirror/system.test.cpp | 0 modules/preliminary/fundumental_types.cppm | 22 + modules/preliminary/module.cppm | 4 + modules/renderer/_tests/buffer.cpp | 13 +- modules/renderer/_tests/debugger.cpp | 17 +- modules/renderer/_tests/device.cpp | 2 +- modules/renderer/_tests/pass.cpp | 10 +- modules/renderer/_tests/surface.cpp | 12 +- modules/renderer/_tests/system.cpp | 146 +++---- modules/renderer/_tests/utils.cppm | 27 +- modules/renderer/components.cppm | 17 +- modules/renderer/data.cppm | 5 +- modules/renderer/factory.cppm | 7 +- modules/renderer/frontends.cppm | 25 +- modules/renderer/system.cppm | 17 +- modules/renderer/vk/api_wrapper.cppm | 374 +++++++++-------- modules/renderer/vk/buffer.cppm | 32 +- modules/renderer/vk/debugger.cppm | 7 +- modules/renderer/vk/descriptors.cppm | 9 - modules/renderer/vk/device.cppm | 17 +- modules/renderer/vk/gpu.cppm | 80 +--- modules/renderer/vk/instance.cppm | 61 +-- modules/renderer/vk/pass.cppm | 43 +- modules/renderer/vk/renderer.cppm | 45 +- modules/renderer/vk/surface.cppm | 6 +- modules/renderer/vk/swapchain.cppm | 26 +- modules/sandbox/sandbox.cpp | 14 +- modules/surface/components.cppm | 9 +- modules/surface/events.cppm | 19 +- modules/surface/requests.cppm | 3 +- modules/surface/system.cppm | 206 ++++------ modules/surface/system.fuzz.cpp | 155 ------- modules/surface/system.test.cpp | 384 +++++++++--------- modules/test/entrypoint.cpp | 6 +- modules/test/expects.cppm | 3 +- modules/test/registry.cppm | 39 +- modules/test/test.cppm | 8 +- modules/test/test.test.cpp | 5 +- modules/time/timer.cppm | 9 +- modules/time/timer.test.cpp | 6 +- 82 files changed, 985 insertions(+), 2247 deletions(-) delete mode 100644 modules/asset_baker/bakers.test.cpp delete mode 100644 modules/mirror/layers/editor_layer.cppm delete mode 100644 modules/mirror/layers/editor_layer.test.cpp delete mode 100644 modules/mirror/panels/asset_browser.cppm delete mode 100644 modules/mirror/panels/asset_browser.test.cpp delete mode 100644 modules/mirror/panels/panel.cppm delete mode 100644 modules/mirror/panels/properties.cppm delete mode 100644 modules/mirror/panels/properties.test.cpp delete mode 100644 modules/mirror/panels/scene_hierarchy.cpp delete mode 100644 modules/mirror/panels/scene_hierarchy.test.cpp delete mode 100644 modules/mirror/system.test.cpp create mode 100644 modules/preliminary/fundumental_types.cppm create mode 100644 modules/preliminary/module.cppm delete mode 100644 modules/renderer/vk/descriptors.cppm delete mode 100644 modules/surface/system.fuzz.cpp diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 70399c7..ae51b8f 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -1,12 +1,14 @@ -add_module(NAME logger INTERFACES logger.cppm TESTS logger.test.cpp) -add_module(NAME bitwise INTERFACES operations.cppm) -add_module(NAME env INTERFACES constants.cppm) -add_module(NAME memory INTERFACES null_on_move.cppm reference.cppm scope.cppm +add_module(NAME preliminary INTERFACES module.cppm fundumental_types.cppm) +add_module(NAME logger INTERFACES logger.cppm TESTS logger.test.cpp DEPENDENCIES preliminary) +add_module(NAME bitwise INTERFACES operations.cppm DEPENDENCIES preliminary) +add_module(NAME env INTERFACES constants.cppm DEPENDENCIES preliminary) +add_module(NAME memory INTERFACES null_on_move.cppm reference.cppm scope.cppm DEPENDENCIES + preliminary logger ) -add_module(NAME time INTERFACES timer.cppm TESTS timer.test.cpp) +add_module(NAME time INTERFACES timer.cppm TESTS timer.test.cpp DEPENDENCIES preliminary) add_module( NAME @@ -18,6 +20,7 @@ add_module( SOURCES entrypoint.cpp DEPENDENCIES + preliminary logger TESTS test.test.cpp @@ -32,6 +35,7 @@ add_module( instrumentor.cppm assertions.cppm DEPENDENCIES + preliminary logger ) @@ -40,13 +44,14 @@ add_module( math INTERFACES algebra.cppm - mat4.cppm trig.cppm vec2.cppm vec3.cppm vec4.cppm + mat4.cppm components.cppm DEPENDENCIES + preliminary lt_debug ) @@ -57,6 +62,7 @@ add_module( shader.cppm metadata.cppm DEPENDENCIES + preliminary logger lt_debug TESTS @@ -73,17 +79,16 @@ add_module( ENTRYPOINT entrypoint.cpp DEPENDENCIES + preliminary assets logger lt_debug - TESTS - bakers.test.cpp ) # add_executable(asset_baker entrypoint.cpp) target_link_libraries(asset_baker # PRIVATE libasset_baker) -add_module(NAME camera INTERFACES components.cppm DEPENDENCIES math) +add_module(NAME camera INTERFACES components.cppm DEPENDENCIES preliminary math) add_module( NAME @@ -92,6 +97,7 @@ add_module( application.cppm system.cppm DEPENDENCIES + preliminary memory PRIVATE_DEPENDENCIES lt_debug @@ -113,7 +119,7 @@ add_module( sparse_set.test.cpp ) -add_module(NAME input_codes INTERFACES input_codes.cppm) +add_module(NAME input_codes INTERFACES input_codes.cppm DEPENDENCIES preliminary) if(WIN32) add_module( @@ -126,6 +132,7 @@ if(WIN32) events.cppm components.cppm DEPENDENCIES + preliminary ecs app math @@ -150,6 +157,7 @@ elseif(UNIX) events.cppm components.cppm DEPENDENCIES + preliminary ecs app math @@ -190,6 +198,7 @@ add_module( components.cppm events.cppm DEPENDENCIES + preliminary input_codes surface math @@ -220,6 +229,7 @@ add_module( vk/renderer.cppm vk/debugger.cppm DEPENDENCIES + preliminary app ecs memory @@ -232,12 +242,12 @@ add_module( PRIVATE_DEPENDENCIES surface TESTS - # _tests/buffer.cpp - # _tests/debugger.cpp - # _tests/device.cpp - # _tests/pass.cpp - # _tests/renderer.cpp - # _tests/surface.cpp + _tests/buffer.cpp + _tests/debugger.cpp + _tests/device.cpp + _tests/pass.cpp + _tests/renderer.cpp + _tests/surface.cpp _tests/system.cpp TEST_INTERFACES _tests/utils.cppm @@ -258,25 +268,8 @@ add_module( surface renderer camera - # TESTS system.test.cpp ) -add_executable(exectest ${CMAKE_CURRENT_SOURCE_DIR}/mirror/entrypoint.cpp) - -target_link_libraries( - exectest - PRIVATE mirror - app - time - input - surface - renderer - camera -) - -# add_executable_module(mirror entrypoint/mirror.cpp) -# target_link_libraries(mirror PRIVATE libmirror input) - if(ENABLE_SANDBOX) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sandbox/) endif() diff --git a/modules/app/application.cppm b/modules/app/application.cppm index 5c3cfaa..dba21ce 100644 --- a/modules/app/application.cppm +++ b/modules/app/application.cppm @@ -1,16 +1,17 @@ export module app; + +import preliminary; import app.system; import memory.reference; import memory.scope; -import std; -namespace lt::app { +export namespace lt::app { /** The main application class. * Think of this like an aggregate of systems, you register systems through this interface. * Then they'll tick every "application frame". */ -export class Application +class Application { public: Application(const Application &) = delete; @@ -54,11 +55,13 @@ void Application::game_loop() const auto &last_tick = system->get_last_tick_result(); const auto now = std::chrono::steady_clock::now(); - system->tick(TickInfo { - .delta_time = now - last_tick.end_time, - .budget = std::chrono::milliseconds { 10 }, - .start_time = now, - }); + system->tick( + TickInfo { + .delta_time = now - last_tick.end_time, + .budget = std::chrono::milliseconds { 10 }, + .start_time = now, + } + ); } for (auto &system : m_systems_to_be_registered) diff --git a/modules/app/system.cppm b/modules/app/system.cppm index f0a731e..7c87670 100644 --- a/modules/app/system.cppm +++ b/modules/app/system.cppm @@ -1,17 +1,18 @@ export module app.system; -import logger; -import std; -namespace lt::app { +import preliminary; +import logger; + +export namespace lt::app { /** Information required to tick a system. * @note May be used across an entire application-frame (consisting of multiple systems ticking) */ -export struct TickInfo +struct TickInfo { using Timepoint_T = std::chrono::time_point; - using Duration_T = std::chrono::duration; + using Duration_T = std::chrono::duration; /** Duration since previous tick's end_time to current tick's start_time. */ Duration_T delta_time {}; @@ -30,11 +31,11 @@ export struct TickInfo }; /** Information about how a system's tick performed */ -export struct TickResult +struct TickResult { using Timepoint_T = std::chrono::time_point; - using Duration_T = std::chrono::duration; + using Duration_T = std::chrono::duration; /** The info supplied to the system for ticking. */ TickInfo info; @@ -46,9 +47,9 @@ export struct TickResult Timepoint_T end_time; }; -export struct SystemDiagnosis +struct SystemDiagnosis { - enum class Severity : std::uint8_t + enum class Severity : u8 { verbose, info, @@ -64,7 +65,7 @@ export struct SystemDiagnosis Severity severity; }; -export class SystemStats +class SystemStats { public: void push_diagnosis(SystemDiagnosis &&diagnosis) @@ -83,7 +84,7 @@ private: std::vector m_diagnosis; }; -export class ISystem +class ISystem { public: ISystem() = default; diff --git a/modules/asset_baker/bakers.cppm b/modules/asset_baker/bakers.cppm index e6912b5..3e82c73 100644 --- a/modules/asset_baker/bakers.cppm +++ b/modules/asset_baker/bakers.cppm @@ -1,10 +1,10 @@ export module bakers; +import preliminary; import debug.assertions; import assets.metadata; import assets.shader; import logger; -import std; export void bake_shader( const std::filesystem::path &in_path, @@ -47,7 +47,7 @@ export void bake_shader( stream.seekg(0, std::ios::end); const auto size = stream.tellg(); - auto bytes = std::vector(size); + auto bytes = std::vector(size); stream.seekg(0, std::ios::beg); stream.read((char *)bytes.data(), size); // NOLINT stream.close(); diff --git a/modules/asset_baker/bakers.test.cpp b/modules/asset_baker/bakers.test.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/modules/asset_baker/entrypoint.cpp b/modules/asset_baker/entrypoint.cpp index 19c68a8..72c91bb 100644 --- a/modules/asset_baker/entrypoint.cpp +++ b/modules/asset_baker/entrypoint.cpp @@ -1,9 +1,9 @@ +import preliminary; import assets.shader; import logger; import bakers; -import std; -auto main(int argc, char *argv[]) -> std::int32_t +auto main(i32 argc, char *argv[]) -> i32 try { if (argc != 2) diff --git a/modules/assets/metadata.cppm b/modules/assets/metadata.cppm index 1c9eece..ef73383 100644 --- a/modules/assets/metadata.cppm +++ b/modules/assets/metadata.cppm @@ -1,19 +1,20 @@ export module assets.metadata; -import std; + +import preliminary; export namespace lt::assets { using Type_T = std::array; -using Tag_T = std::uint8_t; +using Tag_T = u8; -using Version = std::uint8_t; +using Version = u8; -using Blob = std::vector; +using Blob = std::vector; constexpr auto current_version = Version { 1u }; -enum class CompressionType : std::uint8_t +enum class CompressionType : u8 { none, lz4, @@ -31,13 +32,13 @@ struct BlobMetadata { Tag_T tag; - std::size_t offset; + size_t offset; CompressionType compression_type; - std::size_t compressed_size; + size_t compressed_size; - std::size_t uncompressed_size; + size_t uncompressed_size; }; } // namespace lt::assets diff --git a/modules/assets/shader.cppm b/modules/assets/shader.cppm index 3a16fb4..f769098 100644 --- a/modules/assets/shader.cppm +++ b/modules/assets/shader.cppm @@ -1,10 +1,10 @@ export module assets.shader; + +import preliminary; import assets.metadata; import logger; import debug.assertions; -import std; - export namespace lt::assets { class ShaderAsset @@ -17,7 +17,7 @@ public: code, }; - enum class Type : std::uint8_t + enum class Type : u8 { vertex, fragment, @@ -39,7 +39,7 @@ public: ShaderAsset(const std::filesystem::path &path); - void unpack_to(BlobTag tag, std::span destination) const; + void unpack_to(BlobTag tag, std::span destination) const; [[nodiscard]] auto unpack(BlobTag tag) const -> Blob; @@ -98,7 +98,7 @@ ShaderAsset::ShaderAsset(const std::filesystem::path &path) }; m_stream.seekg(0, std::ifstream::end); - const auto file_size = static_cast(m_stream.tellg()); + const auto file_size = static_cast(m_stream.tellg()); debug::ensure( file_size > total_metadata_size, "Failed to open shader asset at: {}, file smaller than metadata: {} < {}", @@ -193,7 +193,7 @@ ShaderAsset::ShaderAsset(const std::filesystem::path &path) stream.write(std::bit_cast(code_blob.data()), static_cast(code_blob.size())); } -void ShaderAsset::unpack_to(BlobTag tag, std::span destination) const +void ShaderAsset::unpack_to(BlobTag tag, std::span destination) const { debug::ensure( tag == BlobTag::code, @@ -206,7 +206,7 @@ void ShaderAsset::unpack_to(BlobTag tag, std::span destination) const "Failed to unpack shader blob {} to destination ({}) of size {} since it's smaller " "than the blobl's uncompressed size: {}", std::to_underlying(tag), - std::bit_cast(destination.data()), + std::bit_cast(destination.data()), destination.size(), m_code_blob_metadata.uncompressed_size ); diff --git a/modules/assets/shader.test.cpp b/modules/assets/shader.test.cpp index d66bbf7..f9e1299 100644 --- a/modules/assets/shader.test.cpp +++ b/modules/assets/shader.test.cpp @@ -1,10 +1,10 @@ +import preliminary; import assets.metadata; import assets.shader; import logger; import logger; import test.test; import test.expects; -import std; using ::lt::assets::AssetMetadata; using ::lt::assets::BlobMetadata; @@ -30,7 +30,7 @@ Suite raii = "shader_raii"_suite = [] { Case { "many won't freeze/throw" } = [] { for (auto idx : std::views::iota(0u, 1'000u)) { - std::ignore = idx; + ignore = idx; auto shader_asset = ShaderAsset { "triangle.frag.asset" }; } }; @@ -58,7 +58,7 @@ Suite packing = "shader_pack"_suite = [] { auto dummy_blob = lt::assets::Blob {}; for (auto idx : std::views::iota(0u, 255u)) { - dummy_blob.emplace_back(static_cast(idx)); + dummy_blob.emplace_back(static_cast(idx)); } const auto expected_size = // @@ -91,7 +91,7 @@ Suite packing = "shader_pack"_suite = [] { expect_true(stream.is_open()); stream.seekg(0u, std::ios::end); - const auto file_size = static_cast(stream.tellg()); + const auto file_size = static_cast(stream.tellg()); expect_eq(file_size, expected_size); stream.close(); @@ -109,7 +109,7 @@ Suite packing = "shader_pack"_suite = [] { for (auto idx : std::views::iota(0u, 255u)) { - expect_eq(blob[idx], static_cast(idx)); + expect_eq(blob[idx], static_cast(idx)); } }; }; diff --git a/modules/bitwise/operations.cppm b/modules/bitwise/operations.cppm index dd66a76..b1225fd 100644 --- a/modules/bitwise/operations.cppm +++ b/modules/bitwise/operations.cppm @@ -1,12 +1,12 @@ export module bitwise; -import std; +import preliminary; namespace lt::bitwise { /* bit-wise */ -export constexpr auto bit(std::uint32_t x) -> std::uint32_t +export constexpr auto bit(u32 x) -> u32 { - return 1u << x; + return u32 { 1u } << x; } } // namespace lt::bitwise diff --git a/modules/camera/components.cppm b/modules/camera/components.cppm index 883813b..2385e30 100644 --- a/modules/camera/components.cppm +++ b/modules/camera/components.cppm @@ -1,17 +1,19 @@ export module camera.components; + +import preliminary; import math.vec4; -namespace lt::camera::components { +export namespace lt::camera::components { -export struct PerspectiveCamera +struct PerspectiveCamera { - float vertical_fov {}; + f32 vertical_fov {}; - float near_plane {}; + f32 near_plane {}; - float far_plane {}; + f32 far_plane {}; - float aspect_ratio {}; + f32 aspect_ratio {}; math::vec4 background_color; diff --git a/modules/debug/instrumentor.cppm b/modules/debug/instrumentor.cppm index 8978a58..72425d6 100644 --- a/modules/debug/instrumentor.cppm +++ b/modules/debug/instrumentor.cppm @@ -1,6 +1,6 @@ export module debug.instrumentor; -import std; +import preliminary; import logger; namespace lt::debug { @@ -8,8 +8,8 @@ namespace lt::debug { struct ScopeProfileResult { std::string name; - long long start, duration; - std::uint32_t threadID; + u64 start, duration; + u32 threadID; }; class Instrumentor diff --git a/modules/ecs/entity.cppm b/modules/ecs/entity.cppm index 7d85808..970d644 100644 --- a/modules/ecs/entity.cppm +++ b/modules/ecs/entity.cppm @@ -1,13 +1,14 @@ export module ecs.entity; + +import preliminary; import debug.assertions; import memory.reference; import ecs.registry; -import std; -namespace lt::ecs { +export namespace lt::ecs { /** High-level entity convenience wrapper */ -export class Entity +class Entity { public: Entity(memory::Ref registry, EntityId identifier) @@ -51,5 +52,4 @@ private: EntityId m_identifier; }; - } // namespace lt::ecs diff --git a/modules/ecs/registry.cppm b/modules/ecs/registry.cppm index 6b47bf0..93707b1 100644 --- a/modules/ecs/registry.cppm +++ b/modules/ecs/registry.cppm @@ -1,14 +1,15 @@ export module ecs.registry; + +import preliminary; import debug.assertions; import ecs.sparse_set; import memory.scope; -import std; -namespace lt::ecs { +export namespace lt::ecs { -export using EntityId = std::uint32_t; +using EntityId = u32; -export constexpr auto null_entity = std::numeric_limits::max(); +constexpr auto null_entity = std::numeric_limits::max(); /** A registry of components, the heart of an ECS architecture. * @@ -23,7 +24,7 @@ export constexpr auto null_entity = std::numeric_limits::max(); * @ref https://github.com/skypjack/entt * @ref https://github.com/SanderMertens/flecs */ -export class Registry +class Registry { public: using UnderlyingSparseSet_T = TypeErasedSparseSet; @@ -190,25 +191,25 @@ public: } }; - [[nodiscard]] auto get_entity_count() const -> std::size_t + [[nodiscard]] auto get_entity_count() const -> size_t { - return static_cast(m_entity_count); + return static_cast(m_entity_count); } private: - using TypeId = std::size_t; + using TypeId = size_t; static consteval auto hash_cstr(const char *str) -> TypeId { - constexpr auto fnv_offset_basis = std::size_t { 14695981039346656037ull }; - constexpr auto fnv_prime = std::size_t { 1099511628211ull }; + constexpr auto fnv_offset_basis = size_t { 14695981039346656037ull }; + constexpr auto fnv_prime = size_t { 1099511628211ull }; auto hash = fnv_offset_basis; for (const auto &ch : std::string_view { str }) { hash *= fnv_prime; - hash ^= static_cast(ch); + hash ^= static_cast(ch); } return hash; diff --git a/modules/ecs/registry.test.cpp b/modules/ecs/registry.test.cpp index f71f02c..9c59437 100644 --- a/modules/ecs/registry.test.cpp +++ b/modules/ecs/registry.test.cpp @@ -1,7 +1,7 @@ +import preliminary; import ecs.registry; import test.test; import test.expects; -import std; using ::lt::ecs::EntityId; using ::lt::ecs::Registry; @@ -15,7 +15,7 @@ using ::lt::test::operator""_suite; struct Component { - int m_int {}; + i32 m_int {}; std::string m_string; [[nodiscard]] friend auto operator==(const Component &lhs, const Component &rhs) -> bool @@ -39,7 +39,7 @@ struct std::formatter struct Component_B { - float m_float {}; + f32 m_float {}; [[nodiscard]] friend auto operator==(const Component_B lhs, const Component_B &rhs) -> bool { @@ -62,14 +62,14 @@ struct std::formatter Suite raii = "raii"_suite = [] { Case { "happy path won't throw" } = [] { - std::ignore = Registry {}; + ignore = Registry {}; }; Case { "many won't freeze/throw" } = [] { for (auto idx : std::views::iota(0, 100'000)) { - std::ignore = idx; - std::ignore = Registry {}; + ignore = idx; + ignore = Registry {}; } }; @@ -169,7 +169,7 @@ Suite callbacks = "callbacks"_suite = [] { for (auto idx : std::views::iota(0, 100'000)) { - std::ignore = idx; + ignore = idx; registry.add(registry.create_entity(), {}); } }; @@ -191,7 +191,7 @@ Suite callbacks = "callbacks"_suite = [] { expect_true(on_destruct_called.empty()); for (auto idx : std::views::iota(0, 100'000)) { - std::ignore = idx; + ignore = idx; auto entity = all_entities.emplace_back(registry.create_entity()); registry.add(entity, {}); @@ -242,7 +242,7 @@ Suite each = "each"_suite = [] { } auto &component = registry.add( entity, - { .m_float = static_cast(idx) / 2.0f } + { .m_float = static_cast(idx) / 2.0f } ); component_map_b[entity] = component; @@ -313,7 +313,7 @@ Suite views = "views"_suite = [] { } auto &component = registry.add( entity, - { .m_float = static_cast(idx) / 2.0f } + { .m_float = static_cast(idx) / 2.0f } ); component_map_b[entity] = component; diff --git a/modules/ecs/sparse_set.cppm b/modules/ecs/sparse_set.cppm index 6e69b2f..e8abc25 100644 --- a/modules/ecs/sparse_set.cppm +++ b/modules/ecs/sparse_set.cppm @@ -1,13 +1,14 @@ export module ecs.sparse_set; -import debug.assertions; -import std; -namespace lt::ecs { +import preliminary; +import debug.assertions; + +export namespace lt::ecs { /** * @ref https://programmingpraxis.com/2012/03/09/sparse-sets/ */ -export template +template class TypeErasedSparseSet { public: @@ -26,17 +27,17 @@ public: virtual void remove(Identifier_T identifier) = 0; }; -export template +template class SparseSet: public TypeErasedSparseSet { public: using Dense_T = std::pair; - static constexpr auto max_capacity = std::size_t { 1'000'000 }; + static constexpr auto max_capacity = size_t { 1'000'000 }; static constexpr auto null_identifier = std::numeric_limits().max(); - explicit SparseSet(std::size_t initial_capacity = 1) + explicit SparseSet(size_t initial_capacity = 1) { debug::ensure( initial_capacity <= max_capacity, @@ -53,10 +54,7 @@ public: { if (m_sparse.size() < identifier + 1) { - auto new_capacity = std::max( - static_cast(identifier + 1), - m_sparse.size() * 2 - ); + auto new_capacity = std::max(static_cast(identifier + 1), m_sparse.size() * 2); new_capacity = std::min(new_capacity, max_capacity); m_sparse.resize(new_capacity, null_identifier); @@ -144,12 +142,12 @@ public: return std::forward(self).m_dense[std::forward(self).m_sparse[identifier]]; } - [[nodiscard]] auto get_size() const noexcept -> std::size_t + [[nodiscard]] auto get_size() const noexcept -> size_t { return m_alive_count; } - [[nodiscard]] auto get_capacity() const noexcept -> std::size_t + [[nodiscard]] auto get_capacity() const noexcept -> size_t { return m_sparse.capacity(); } @@ -164,9 +162,9 @@ private: std::vector m_sparse; - std::size_t m_alive_count {}; + size_t m_alive_count {}; - std::size_t m_dead_count {}; + size_t m_dead_count {}; }; } // namespace lt::ecs diff --git a/modules/ecs/sparse_set.test.cpp b/modules/ecs/sparse_set.test.cpp index e1b2659..8338d75 100644 --- a/modules/ecs/sparse_set.test.cpp +++ b/modules/ecs/sparse_set.test.cpp @@ -1,7 +1,7 @@ +import preliminary; import ecs.sparse_set; import test.test; import test.expects; -import std; using ::lt::test::Case; using ::lt::test::expect_eq; @@ -12,18 +12,18 @@ using ::lt::test::expect_true; using ::lt::test::Suite; using ::lt::test::operator""_suite; -using Value_T = int; +using Value_T = i32; using Set = lt::ecs::SparseSet; constexpr auto capacity = 100; Suite raii = "raii"_suite = [] { Case { "happy path won't throw" } = [] { - std::ignore = Set {}; - std::ignore = Set { Set::max_capacity }; + ignore = Set {}; + ignore = Set { Set::max_capacity }; }; Case { "unhappy path throws" } = [] { - expect_throw([] { std::ignore = Set { Set::max_capacity + 1 }; }); + expect_throw([] { ignore = Set { Set::max_capacity + 1 }; }); }; Case { "post construct has correct state" } = [&] { @@ -78,7 +78,7 @@ Suite element_raii = "element_raii"_suite = [] { expect_eq(set.get_size(), 10'000 - (idx + 1)); expect_false(set.contains(idx)); - expect_throw([&] { std::ignore = set.at(idx); }); + expect_throw([&] { ignore = set.at(idx); }); } }; @@ -141,12 +141,12 @@ Suite getters = "getters"_suite = [] { { expect_throw([&] { set.insert(idx, {}); - std::ignore = set.at(50); + ignore = set.at(50); }); } set.insert(50, {}); - std::ignore = set.at(50); // should not throw + ignore = set.at(50); // should not throw }; }; diff --git a/modules/env/constants.cppm b/modules/env/constants.cppm index 8c1b40f..4ee674a 100644 --- a/modules/env/constants.cppm +++ b/modules/env/constants.cppm @@ -1,10 +1,10 @@ export module env; -import std; +import preliminary; -namespace lt { +export namespace lt { -enum class Platform : std::uint8_t +enum class Platform : u8 { /** The GNU/Linux platform. * Tested on the following distros: arch-x86_64 @@ -26,7 +26,7 @@ enum class Platform : std::uint8_t }; /** The compiler that was used for compiling the project. */ -enum class Compiler : std::uint8_t +enum class Compiler : u8 { clang, gcc, @@ -57,12 +57,13 @@ constexpr auto platform_name = "mac"; #endif +/** @TODO(Light): Handle other compilers... */ #ifdef __clang__ constexpr auto compiler = Compiler::clang; constexpr auto compiler_name = "clang"; -/** @todo(Light): insert the full identifier, including version information and such */ -constexpr auto full_compiler_identifier = "clang"; +/** @TODO(Light): insert the full identifier, including version information and such */ +constexpr auto compiler_identifier = "clang"; #endif } // namespace constants diff --git a/modules/input/components.cppm b/modules/input/components.cppm index edd069c..c8af6ed 100644 --- a/modules/input/components.cppm +++ b/modules/input/components.cppm @@ -1,17 +1,18 @@ export module input.system:components; + +import preliminary; import input.codes; -import std; -namespace lt::input { +export namespace lt::input { -export struct Trigger +struct Trigger { Key mapped_keycode; }; -export struct InputAction +struct InputAction { - enum class State : std::uint8_t + enum class State : u8 { inactive, active, @@ -26,18 +27,18 @@ export struct InputAction Trigger trigger; }; -export class InputComponent +class InputComponent { public: InputComponent() = default; - auto add_action(InputAction action) -> std::size_t + auto add_action(InputAction action) -> size_t { m_actions.emplace_back(std::move(action)); return m_actions.size() - 1; } - auto get_action(std::size_t idx) -> const InputAction & + auto get_action(size_t idx) -> const InputAction & { return m_actions[idx]; } diff --git a/modules/input/system.test.cpp b/modules/input/system.test.cpp index f6d28ad..6e4d8eb 100644 --- a/modules/input/system.test.cpp +++ b/modules/input/system.test.cpp @@ -17,7 +17,6 @@ import surface.system; using namespace lt; using input::InputComponent; using input::System; -using std::ignore; using test::Case; using test::expect_eq; using test::expect_false; @@ -79,7 +78,7 @@ Suite raii = "raii"_suite = "raii"_suite = [] { auto fixture = Fixture {}; for (auto idx : std::views::iota(0, 10'000)) { - std::ignore = idx; + ignore = idx; ignore = System { fixture.registry() }; } }; diff --git a/modules/input_codes/input_codes.cppm b/modules/input_codes/input_codes.cppm index 6e1dc7e..945e119 100644 --- a/modules/input_codes/input_codes.cppm +++ b/modules/input_codes/input_codes.cppm @@ -1,7 +1,17 @@ +/** + * @note: The reason this is a separate module, rather than being in the `Input` module is that + * the input is received from the hardware through the `Surface` module, and it is further parsed + * inside the `Input` module, USING the `Surface` module's events. + * + * Hence, both `Surface` and `Input` needs to agree to the same input codes, while `Input` depends + * on `Surface`. The simplest solution is to keep the codes in a 3rd module and make both depend on + * it. + */ export module input.codes; -import std; -export enum class Key: std::uint16_t { +import preliminary; + +export enum class Key: u16 { none = 0, left_button, @@ -153,6 +163,7 @@ export enum class Key: std::uint16_t { f11, f12, + /** Input was received but was none of the above. */ unknown, }; diff --git a/modules/logger/logger.cppm b/modules/logger/logger.cppm index 7e6aaa5..95860da 100644 --- a/modules/logger/logger.cppm +++ b/modules/logger/logger.cppm @@ -1,11 +1,11 @@ export module logger; -import std; +import preliminary; namespace lt::log { /** Severity of a log message. */ -enum class Level : std::uint8_t +enum class Level : u8 { /** Lowest and most vebose log level, for tracing execution paths and events */ trace = 0, @@ -31,9 +31,9 @@ enum class Level : std::uint8_t namespace details { -inline auto thread_hash_id() noexcept -> std::uint64_t +inline auto thread_hash_id() noexcept -> u64 { - return static_cast(std::hash {}(std::this_thread::get_id())); + return static_cast(std::hash {}(std::this_thread::get_id())); } } // namespace details diff --git a/modules/math/components.cppm b/modules/math/components.cppm index a87a4d1..ed482d1 100644 --- a/modules/math/components.cppm +++ b/modules/math/components.cppm @@ -1,5 +1,6 @@ export module math.components; +import preliminary; import math.vec3; namespace lt::math::components { diff --git a/modules/math/mat4.cppm b/modules/math/mat4.cppm index 9c67dea..f2f5d9c 100644 --- a/modules/math/mat4.cppm +++ b/modules/math/mat4.cppm @@ -1,11 +1,13 @@ export module math.mat4; + +import preliminary; +import math.vec2; import math.vec3; import math.vec4; -import std; namespace lt::math { -export template +export template struct mat4_impl { using Column_T = vec4_impl; @@ -54,12 +56,12 @@ struct mat4_impl }; } - [[nodiscard]] constexpr auto operator[](std::size_t idx) -> Column_T & + [[nodiscard]] constexpr auto operator[](size_t idx) -> Column_T & { return values[idx]; } - [[nodiscard]] constexpr auto operator[](std::size_t idx) const -> const Column_T & + [[nodiscard]] constexpr auto operator[](size_t idx) const -> const Column_T & { return values[idx]; } @@ -84,7 +86,7 @@ export template } export template -[[nodiscard]] auto rotate(float value, const vec3_impl &xyz) -> mat4_impl +[[nodiscard]] auto rotate(f32 value, const vec3_impl &xyz) -> mat4_impl { return mat4_impl {}; } @@ -101,10 +103,10 @@ export template return mat4_impl {}; } -export using mat4 = mat4_impl; +export using mat4 = mat4_impl; -export using imat4 = mat4_impl; +export using imat4 = mat4_impl; -export using umat4 = mat4_impl; +export using umat4 = mat4_impl; } // namespace lt::math diff --git a/modules/math/trig.cppm b/modules/math/trig.cppm index acea076..33571b1 100644 --- a/modules/math/trig.cppm +++ b/modules/math/trig.cppm @@ -1,26 +1,27 @@ export module math.trig; +import preliminary; + export namespace lt::math { -[[nodiscard]] constexpr auto radians(float degrees) -> float +[[nodiscard]] constexpr auto radians(f32 degrees) -> f32 { return degrees * 0.01745329251994329576923690768489f; } -[[nodiscard]] constexpr auto radians(double degrees) -> double +[[nodiscard]] constexpr auto radians(f64 degrees) -> f64 { return degrees * 0.01745329251994329576923690768489; } -[[nodiscard]] constexpr auto degrees(float radians) -> float +[[nodiscard]] constexpr auto degrees(f32 radians) -> f32 { return radians * 57.295779513082320876798154814105f; } -[[nodiscard]] constexpr auto degrees(double radians) -> double +[[nodiscard]] constexpr auto degrees(f64 radians) -> f64 { return radians * 57.295779513082320876798154814105; } - } // namespace lt::math diff --git a/modules/math/vec2.cppm b/modules/math/vec2.cppm index f59a45b..125874d 100644 --- a/modules/math/vec2.cppm +++ b/modules/math/vec2.cppm @@ -1,10 +1,10 @@ export module math.vec2; -import std; +import preliminary; namespace lt::math { -export template +export template struct vec2_impl { constexpr vec2_impl(): x(), y() @@ -45,7 +45,7 @@ struct vec2_impl }; } - [[nodiscard]] auto operator*(float scalar) const -> vec2_impl + [[nodiscard]] auto operator*(f32 scalar) const -> vec2_impl { return { x * scalar, @@ -59,11 +59,11 @@ struct vec2_impl }; -export using vec2 = vec2_impl; +export using vec2 = vec2_impl; -export using ivec2 = vec2_impl; +export using ivec2 = vec2_impl; -export using uvec2 = vec2_impl; +export using uvec2 = vec2_impl; } // namespace lt::math diff --git a/modules/math/vec3.cppm b/modules/math/vec3.cppm index 9ee5036..0b13a90 100644 --- a/modules/math/vec3.cppm +++ b/modules/math/vec3.cppm @@ -1,11 +1,11 @@ export module math.vec3; +import preliminary; import math.vec2; -import std; namespace lt::math { -export template +export template struct vec3_impl { constexpr vec3_impl(): x(), y(), z() @@ -61,11 +61,11 @@ struct vec3_impl T z; // NOLINT }; -export using vec3 = vec3_impl; +export using vec3 = vec3_impl; -export using ivec3 = vec3_impl; +export using ivec3 = vec3_impl; -export using uvec3 = vec3_impl; +export using uvec3 = vec3_impl; } // namespace lt::math diff --git a/modules/math/vec4.cppm b/modules/math/vec4.cppm index d9f4150..94a9ce9 100644 --- a/modules/math/vec4.cppm +++ b/modules/math/vec4.cppm @@ -1,12 +1,13 @@ export module math.vec4; + +import preliminary; import math.vec2; -import debug.assertions; import math.vec3; -import std; +import debug.assertions; namespace lt::math { -export template +export template struct vec4_impl { static constexpr auto num_elements = 4u; @@ -43,14 +44,14 @@ struct vec4_impl }; } - [[nodiscard]] constexpr auto operator[](std::uint8_t idx) -> T & + [[nodiscard]] constexpr auto operator[](u8 idx) -> T & { // TODO(Light): Use contract debug::ensure(idx <= num_elements, "vec4 out of bound: {}", idx); return ((T *)this)[idx]; } - [[nodiscard]] constexpr auto operator[](std::uint8_t idx) const -> const T & + [[nodiscard]] constexpr auto operator[](u8 idx) const -> const T & { // TODO(Light): Use contract debug::ensure(idx < num_elements, "vec4 out of bound: {}", idx); @@ -72,11 +73,11 @@ struct vec4_impl T w; }; -export using vec4 = vec4_impl; +export using vec4 = vec4_impl; -export using ivec4 = vec4_impl; +export using ivec4 = vec4_impl; -export using uvec4 = vec4_impl; +export using uvec4 = vec4_impl; } // namespace lt::math diff --git a/modules/memory/null_on_move.cppm b/modules/memory/null_on_move.cppm index e016f38..a57b33e 100644 --- a/modules/memory/null_on_move.cppm +++ b/modules/memory/null_on_move.cppm @@ -2,7 +2,7 @@ export module memory.null_on_move; import logger; -import std; +import preliminary; namespace lt::memory { @@ -81,9 +81,9 @@ public: return m_value; } - operator std::uint64_t() const + operator u64() const { - return (std::uint64_t)m_value; + return (u64)m_value; } [[nodiscard]] auto get() -> Underlying_T & diff --git a/modules/memory/reference.cppm b/modules/memory/reference.cppm index 2b41e70..12014bf 100644 --- a/modules/memory/reference.cppm +++ b/modules/memory/reference.cppm @@ -1,6 +1,6 @@ export module memory.reference; -import std; +import preliminary; namespace lt::memory { diff --git a/modules/memory/scope.cppm b/modules/memory/scope.cppm index 2a22635..5d13197 100644 --- a/modules/memory/scope.cppm +++ b/modules/memory/scope.cppm @@ -1,6 +1,6 @@ export module memory.scope; -import std; +import preliminary; namespace lt::memory { diff --git a/modules/mirror/entrypoint.cpp b/modules/mirror/entrypoint.cpp index 1af5567..ef2ecb0 100644 --- a/modules/mirror/entrypoint.cpp +++ b/modules/mirror/entrypoint.cpp @@ -7,12 +7,12 @@ import mirror.system; import renderer.factory; /** The ultimate entrypoint. */ -auto main(int argc, char *argv[]) -> std::int32_t +auto main(i32 argc, char *argv[]) -> i32 { try { - std::ignore = argc; - std::ignore = argv; + ignore = argc; + ignore = argv; auto application = lt::memory::create_scope(); if (!application) diff --git a/modules/mirror/layers/editor_layer.cppm b/modules/mirror/layers/editor_layer.cppm deleted file mode 100644 index 77badfe..0000000 --- a/modules/mirror/layers/editor_layer.cppm +++ /dev/null @@ -1,227 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace lt { - -class Scene; - -class EditorLayer: public Layer -{ -public: - EditorLayer(const std::string &name); - - ~EditorLayer() override; - - EditorLayer(EditorLayer &&) = delete; - - EditorLayer(const EditorLayer &) = delete; - - auto operator=(EditorLayer &&) const -> EditorLayer & = delete; - - auto operator=(const EditorLayer &) const -> EditorLayer & = delete; - - void on_update(float delta_time) override; - - void on_render() override; - - void on_user_interface_update() override; - -private: - std::string m_scene_dir; - - math::vec2 m_direction; - - float m_speed = 1000.0f; - - memory::Ref m_scene; - - memory::Ref m_sceneHierarchyPanel; - - memory::Ref m_properties_panel; - - memory::Ref m_content_browser_panel; - - memory::Ref m_framebuffer; - - Entity m_camera_entity; - - ImVec2 m_available_content_region_prev; -}; - -} // namespace lt - - -#include -#include -#include -#include -#include -#include -#include