Skip to content

Commit ebb2cb6

Browse files
authored
Resolve #30: refl code generator (#103)
1 parent 8ea811a commit ebb2cb6

38 files changed

+947
-161
lines changed

.github/workflows/build.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ jobs:
2828
- name: Prepare cmake
2929
uses: lukka/get-cmake@latest
3030

31+
- uses: actions/setup-python@v5
32+
with:
33+
python-version: '3.13'
34+
cache: 'pip' # caching pip dependencies
35+
36+
- name: Pip install requirements
37+
run: |
38+
python -m pip install -r ./engine/engine/refl_code_generator/requirements.txt
39+
3140
- name: Prepare Ubuntu
3241
if: contains(matrix.os, 'ubuntu') && matrix.android == 'none'
3342
run: |

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ local.properties
1212
log/
1313
*.spv
1414
.vscode
15-
nickel_engine_project_path.toml
15+
nickel_engine_project_path.toml
16+
engine/engine/refl_code_generator/output_dir

ReadMe.md

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
11
NickelEngine重写中,老版本备份在[NickelEngine-backup](https://github.com/VisualGMQ/NickelEngine-backup)
22

3+
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/VisualGMQ/NickelEngine)
4+
35
更多信息请参阅[wiki](https://github.com/VisualGMQ/NickelEngine/wiki)
46

57
新NickelEngine的特点:
68

7-
* 重置底层ECS系统
9+
- [ ] 重置底层ECS系统
810
[现在的ECS](https://github.com/VisualGMQ/gecs)是借鉴的EnTT,我希望能够改成Flecs那种基于Archetype的底层
9-
* 重置反射系统
11+
- [x] 重置反射系统
1012
[老的反射系统](https://github.com/VisualGMQ/mirrow)需要一套自动解析头文件的工具,以及更多的特性
11-
* 重置渲染
13+
- [x] 重置渲染
1214
老的渲染层中Vulkan和GL/GLES并存。新版本打算只使用Vulkan
13-
* 更好的工程结构
15+
- [ ] 重置编辑器
16+
编辑器不再使用ImGui,而是使用Qt6制作
17+
- [x] 更好的工程结构
1418
老的第三方库作为submodule,由于网络问题及git submodule问题经常拉不下来/拉一半。新工程中使用小型第三方库,并且将库源码直接放在引擎工程中,这样既避免了额外拉取问题,又可以进行源码调试
15-
* 更好的开发流程
19+
- [x] 更好的开发流程
1620
新版本每次开发功能/修改bug都会关联issue,以方便后续溯源。CI也从最开始就使用,保证main分支一定是可编译通过的
1721

1822
## How To Build
1923

20-
使用CMake进行编译(非安卓平台在`engine`目录下执行:)
24+
反射工具需要`Python3`
25+
26+
先安装`Python3`依赖库:
27+
28+
```bash
29+
pip install -r ./engine/engine/refl_code_generator/requirements.txt
30+
```
31+
32+
然后使用CMake进行编译
2133

2234
```bash
2335
cmake --preset=default
2436
cmake --build cmake-build
2537
```
2638

27-
安卓平台需要将`engine`文件夹拷贝到`android-project/app/jni`下然后开启`Android Studio`进行编译
28-
2939
## How To Run
3040

3141
所有可执行文件均在`engine`目录下运行。

engine/engine/CMakeLists.txt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
add_subdirectory(3rdlibs)
22

3-
43
option(NICKEL_BUILD_SHARED "build shared engine library" OFF)
54
option(NICKEL_BUILD_STATIC "build static engine library" ON)
65

6+
set(NICKEL_REFL_GENERATE_INCLUDE_DIR ${CMAKE_BINARY_DIR}/refl_generate)
7+
set(NICKEL_REFL_GENERATE_DIR ${NICKEL_REFL_GENERATE_INCLUDE_DIR}/nickel/refl_generate/)
8+
file(MAKE_DIRECTORY ${NICKEL_REFL_GENERATE_DIR})
9+
# copy tirvial file
10+
file(COPY_FILE refl_code_generator/mustache/trivial_header.hpp ${NICKEL_REFL_GENERATE_DIR}/refl_generate.hpp ONLY_IF_DIFFERENT)
11+
file(COPY_FILE refl_code_generator/mustache/trivial_impl.cpp ${NICKEL_REFL_GENERATE_DIR}/refl_generate.cpp ONLY_IF_DIFFERENT)
12+
add_subdirectory(refl_code_generator)
13+
714
file(GLOB_RECURSE ENGINE_SRC src/*.cpp)
815
file(GLOB_RECURSE ENGINE_ALL_HEADERS nickel/*.hpp)
916
file(GLOB_RECURSE ENGINE_INTERNAL_HEADERS
@@ -18,15 +25,17 @@ set(ENGINE_EXPORT_HEADERS ${ENGINE_ALL_HEADERS})
1825
list(REMOVE_ITEM ENGINE_EXPORT_HEADERS ${ENGINE_INTERNAL_HEADERS})
1926
file(GLOB_RECURSE ENGINE_SHADER_FILES assets/shaders/*.frag assets/shaders/*.vert)
2027
file(GLOB_RECURSE ENGINE_MODEL_FILES assets/models/*)
28+
file(GLOB_RECURSE ENGINE_REFL_GENERATE_FILES ${NICKEL_REFL_GENERATE_DIR}/*.hpp ${NICKEL_REFL_GENERATE_DIR}/*.cpp)
2129

2230
compile_shader(assets/shaders/shader_pbr.vert assets/shaders/shader_pbr.vert.spv)
2331
compile_shader(assets/shaders/shader_pbr.frag assets/shaders/shader_pbr.frag.spv)
2432
compile_shader(assets/shaders/shader_gridline.vert assets/shaders/shader_gridline.vert.spv)
2533
compile_shader(assets/shaders/shader_gridline.frag assets/shaders/shader_gridline.frag.spv)
2634

2735
macro(attach_common_config_on_engine target_name)
28-
target_sources(${target_name} PRIVATE ${ENGINE_ALL_HEADERS} ${ENGINE_SRC} ${ENGINE_MODEL_FILES} ${ENGINE_SHADER_FILES})
36+
target_sources(${target_name} PRIVATE ${ENGINE_ALL_HEADERS} ${ENGINE_SRC} ${ENGINE_MODEL_FILES} ${ENGINE_SHADER_FILES} ${ENGINE_REFL_GENERATE_FILES})
2937
target_include_directories(${target_name} PUBLIC .)
38+
target_include_directories(${target_name} PRIVATE ${NICKEL_REFL_GENERATE_INCLUDE_DIR})
3039
target_compile_features(${target_name} PUBLIC cxx_std_20)
3140
target_link_libraries(${target_name} PRIVATE SDL3::SDL3 volk::volk stb_image tinygltf tomlplusplus::tomlplusplus
3241
# PhysX
@@ -49,6 +58,7 @@ macro(attach_common_config_on_engine target_name)
4958
NvBlast::ExtStress
5059
)
5160
target_link_libraries(${target_name} PUBLIC spdlog::spdlog imgui implot)
61+
add_dependencies(${target_name} refl_code_generate)
5262

5363
target_precompile_headers(${target_name} PRIVATE nickel/internal/pch.hpp nickel/physics/internal/pch.hpp)
5464
target_compile_definitions(${target_name} PRIVATE _CRT_SECURE_NO_WARNINGS)
@@ -91,3 +101,5 @@ else()
91101
endif()
92102

93103
add_subdirectory(main_entry)
104+
105+
find_package(Python3 COMPONENTS Interpreter REQUIRED)

engine/engine/nickel/common/flags.hpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,50 +7,51 @@ template <typename T>
77
requires std::is_enum_v<T>
88
class Flags {
99
public:
10+
using enum_type = T;
1011
using underlying_type = std::underlying_type_t<T>;
1112

1213
Flags() = default;
1314

14-
Flags(T value) : value_{static_cast<underlying_type>(value)} {}
15+
Flags(T value) : m_value{static_cast<underlying_type>(value)} {}
1516

16-
Flags(std::underlying_type_t<T> value) : value_{value} {}
17+
Flags(std::underlying_type_t<T> value) : m_value{value} {}
1718

1819
Flags(const Flags&) = default;
1920
Flags(Flags&&) = default;
2021

2122
Flags operator|(T o) const {
22-
return Flags{value_ | static_cast<underlying_type>(o)};
23+
return Flags{m_value | static_cast<underlying_type>(o)};
2324
}
2425

2526
Flags operator&(T o) const {
26-
return Flags{value_ & static_cast<underlying_type>(o)};
27+
return Flags{m_value & static_cast<underlying_type>(o)};
2728
}
2829

2930
Flags& operator=(const Flags&) = default;
3031

3132
Flags& operator=(T value) {
32-
value_ = static_cast<underlying_type>(value);
33+
m_value = static_cast<underlying_type>(value);
3334
return *this;
3435
}
3536

3637
Flags& operator|=(T o) {
37-
value_ |= static_cast<underlying_type>(o);
38+
m_value |= static_cast<underlying_type>(o);
3839
return *this;
3940
}
4041

4142
Flags& operator&=(T o) {
42-
value_ &= static_cast<underlying_type>(o);
43+
m_value &= static_cast<underlying_type>(o);
4344
return *this;
4445
}
4546

46-
Flags operator~() const noexcept { return ~value_; }
47+
Flags operator~() const noexcept { return ~m_value; }
4748

48-
operator T() const { return static_cast<T>(value_); }
49+
operator T() const { return static_cast<T>(m_value); }
4950

50-
operator underlying_type() const { return value_; }
51+
operator underlying_type() const { return m_value; }
5152

5253
private:
53-
underlying_type value_{};
54+
underlying_type m_value{};
5455
};
5556

5657
} // namespace tl
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#pragma once
2+
3+
#ifdef _NICKEL_REFLECTION_
4+
#define NICKEL_REFL_ATTR(...) __attribute__((annotate("nickel(" #__VA_ARGS__ ")")))
5+
#else
6+
#define NICKEL_REFL_ATTR(...)
7+
#endif

engine/engine/nickel/context.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "nickel/graphics/debug_draw.hpp"
1919
#include "nickel/graphics/gltf.hpp"
2020
#include "nickel/physics/context.hpp"
21+
#include "nickel/refl/custom/flags_refl.hpp"
2122

2223
union SDL_Event;
2324

0 commit comments

Comments
 (0)