convert map to table

This commit is contained in:
ouczbs 2024-05-12 23:44:11 +08:00
parent 5172310fd8
commit bce38fe13e
28 changed files with 128 additions and 74 deletions

View File

@ -1,9 +1,10 @@
#pragma once
#include "any.h"
#include <map>
#include <unordered_map>
namespace refl {
using ConvertFunc = bool (*)(Any&, const Any&);
using ConvertMap = std::map<const UClass*, ConvertFunc>;
using ConvertMap = std::unordered_map<const UClass*, ConvertFunc>;
class Convert {
protected:
static ConvertMap BuildClassMap();

View File

@ -31,7 +31,6 @@ namespace refl {
uint32_t size;
uint32_t flag{0};
const UClass* parent;
Meta* meta{nullptr};
vtable_uclass vtable{};
public:
constexpr UClass(std::string_view name, uint32_t size, const UClass* parent = nullptr)

View File

@ -0,0 +1,6 @@
#pragma once
#include <unordered_map>
namespace zstd {
template<typename T1, typename T2, typename Hasher = std::hash<T1>>
using table = std::unordered_map<T1, T2, Hasher>;
}

View File

@ -1,3 +1 @@
#include "vertex.h"
#include "vkmeta_vertex_gen.inl"
#include "dxmeta_vertex_gen.inl"

View File

@ -1,7 +1,5 @@
#pragma once
#include "singleton.h"
class AssetManager :public Singleton<AssetManager> {
class AssetManager :public ISingleton<AssetManager> {
};
template<>
AssetManager* Singleton<AssetManager>::ms_Singleton = nullptr;

View File

@ -1,9 +1,37 @@
#pragma once
class ISystem {
public:
virtual void Init() = 0;
virtual void LateInit() {};
virtual void EarlyShutdown() {};
virtual void Shutdown() = 0;
virtual ~ISystem() = default;
};
template <typename T>
class ISingleton : public ISystem{
protected:
inline static T* ms_Singleton = nullptr;
public:
explicit ISingleton() {
ms_Singleton = static_cast<T*>(this);
}
~ISingleton() {
ms_Singleton = nullptr;
}
static constexpr T& GetSingleton(void) {
return *ms_Singleton;
}
static constexpr T* GetSingletonPtr(void) {
return ms_Singleton;
}
public:
void Init() override = 0;
void Shutdown()override = 0;
};
template <typename T>
class Singleton{
protected:
static T* ms_Singleton;
inline static T* ms_Singleton = nullptr;
public:
explicit Singleton() {
ms_Singleton = static_cast<T*>(this);

View File

@ -9,21 +9,33 @@ namespace engineapi {
App::App(const string& path)
{
const char* name = "zengine";
new AssetManager();
_RenderAPI = RenderAPI::MakeInstance();
_Window = Window::MakeInstance(3, 640, 720, name);
_RenderAPI->OnInit();
auto scene_manager = new SceneManager();
scene_manager->LoadScene(path);
SystemList.push_back(new AssetManager());
SystemList.push_back(RenderAPI::MakeInstance());
SystemList.push_back(Window::MakeInstance(3, 640, 720, name));
}
App::~App()
{
delete _Window;
delete _RenderAPI;
for (auto system : SystemList) {
delete system;
}
SystemList.clear();
}
void App::Init()
{
for (auto system : SystemList) {
system->Init();
}
}
void App::Shutdown()
{
for (auto system : SystemList) {
system->Shutdown();
}
}
void App::Launch()
{
while (true) {
Init();
while (Loop) {
Update();
Render();
}

View File

@ -1,19 +1,22 @@
#pragma once
#include <string>
#include <vector>
#include "singleton.h"
using std::vector;
using std::string;
namespace engineapi
{
class RenderAPI;
class Window;
class App {
public:
RenderAPI* _RenderAPI{nullptr};
Window* _Window{ nullptr };
bool Loop{true};
vector<ISystem*> SystemList;
public:
App(const string& path);
~App();
void Launch();
public:
void Init();
void Shutdown();
void Launch();
void Update();
void Render();
};

View File

@ -3,11 +3,15 @@
#include <string>
#include <vector>
#include <map>
#include "zstd/table.h"
#include "UTemplate/Type.hpp"
namespace engineapi
{
using std::string;
using std::vector;
using std::map;
using zstd::table;
using Ubpa::Name;
class Asset {
public:
friend class AssetManager;

View File

@ -2,6 +2,12 @@
#include "zlog.h"
using namespace std;
namespace engineapi {
void AssetManager::Init()
{
}
void AssetManager::Shutdown()
{
}
void AssetManager::ClearAsset(Asset* asset)
{
auto it = mAssetMap.find(asset->mName);

View File

@ -9,7 +9,7 @@
using json = nlohmann::json;
namespace engineapi
{
class AssetManager : public Singleton<AssetManager>
class AssetManager : public ISingleton<AssetManager>
{
public:
struct AssetWrap {
@ -22,6 +22,9 @@ namespace engineapi
private:
map<const string, AssetWrap> mAssetMap;
public:
void Init() override;
void Shutdown() override;
public:
void ClearAsset(Asset* asset);
template<typename TAsset>
@ -55,5 +58,3 @@ namespace engineapi
static json LoadJsonFile(const string& path);
};
}
template<>
engineapi::AssetManager* Singleton<engineapi::AssetManager>::ms_Singleton = nullptr;

View File

@ -1,5 +1,5 @@
#include "property.h"
namespace engineapi {
map<uint32_t, Property> Property::PropertyMap;
}

View File

@ -1,11 +1,11 @@
#pragma once
#include <string>
#include <vector>
#include <map>
#include "zstd/table.h"
namespace engineapi {
using std::string;
using std::vector;
using std::map;
using zstd::table;
class Property {
public:
enum {
@ -17,7 +17,7 @@ namespace engineapi {
uint32_t flags = 0;
string path = "";
public:
static map<uint32_t, Property> PropertyMap;
inline static table<uint32_t, Property> PropertyMap;
template<typename TProperty>
static TProperty* GetProperty(uint32_t id) {

View File

@ -1,7 +1,7 @@
#include "scene_manager.h"
#include "zlog.h"
namespace engineapi {
Scene* SceneManager::GetScene(const string& name)
Scene* SceneManager::GetScene(const Name& name)
{
auto sceneInfo = GetSceneInfo(name);
if (sceneInfo == nullptr)
@ -14,7 +14,7 @@ namespace engineapi {
}
}
void SceneManager::LoadScene(const string& path, bool switchNow)
void SceneManager::LoadScene(const Name& path, bool switchNow)
{
curScene = new SceneInfo{
path,
@ -22,14 +22,14 @@ namespace engineapi {
};
}
void SceneManager::SwitchScene(const string& name)
void SceneManager::SwitchScene(const Name& name)
{
}
void SceneManager::DeleteScene(const string& name)
void SceneManager::DeleteScene(const Name& name)
{
map<string, SceneInfo*>::iterator iter = scenes.find(name);
auto iter = scenes.find(name);
if (iter != scenes.end())
{
delete iter->second->scene;
@ -73,9 +73,9 @@ namespace engineapi {
return curScene->scene;
}
SceneInfo* SceneManager::GetSceneInfo(const string& name)
SceneInfo* SceneManager::GetSceneInfo(const Name& name)
{
map<string, SceneInfo*>::iterator iter = scenes.find(name);
auto iter = scenes.find(name);
if (iter != scenes.end())
return iter->second;
else

View File

@ -5,25 +5,23 @@
namespace engineapi {
struct SceneInfo
{
string path;
Name name;
Scene* scene = nullptr;
};
class SceneManager :public Singleton<SceneManager> {
class SceneManager :public ISingleton<SceneManager> {
protected:
SceneInfo* curScene = nullptr;
map<string, SceneInfo*> scenes;
table<Name, SceneInfo*> scenes;
public:
Scene* GetScene(const string& name);
void LoadScene(const string& path, bool switchNow = true);
void SwitchScene(const string& name);
void DeleteScene(const string& name);
Scene* GetScene(const Name& name);
void LoadScene(const Name& path, bool switchNow = true);
void SwitchScene(const Name& name);
void DeleteScene(const Name& name);
void DeleteAllScene();
void ReloadScene();
void Render();
void Update();
Scene* GetCurScene();
SceneInfo* GetSceneInfo(const string& name);
SceneInfo* GetSceneInfo(const Name& name);
};
}
template<>
engineapi::SceneManager* Singleton<engineapi::SceneManager>::ms_Singleton = nullptr;

View File

@ -9,8 +9,7 @@ namespace engineapi {
struct Vertex {
};
struct PosVertex {
struct PosVertex : public Vertex {
using MyMetas = class PosVertex_MultyMeta;
UPROPERTY_vk({}, VertexMeta{ VK_FORMAT_R32G32B32_SFLOAT })
Vector3 Position = {};

View File

@ -44,7 +44,7 @@ namespace engineapi {
//RenderAPI::GetInstance()->Draw(skyBox->VAO);
}
void RenderNodeForwardRendering::RenderBatches(const map<uint32_t, vector<MeshRenderer*>>& batchs)
void RenderNodeForwardRendering::RenderBatches(const table<uint32_t, vector<MeshRenderer*>>& batchs)
{
}

View File

@ -16,6 +16,6 @@ namespace engineapi {
Model* mSky;
void RenderSkyBox(Camera& camera);
void RenderBatches(const map<uint32_t, vector<MeshRenderer*>>& batchs);
void RenderBatches(const table<uint32_t, vector<MeshRenderer*>>& batchs);
};
}

View File

@ -9,7 +9,7 @@ namespace engineapi {
{
}
void RenderAPI::OnInit()
void RenderAPI::Init()
{
InitRenderNode();
InitRenderPass();

View File

@ -7,7 +7,7 @@ namespace engineapi
class Shader;
class Camera;
class RenderNode;
class RenderAPI : public Singleton<RenderAPI>
class RenderAPI : public ISingleton<RenderAPI>
{
protected:
uint32_t mFrame;
@ -19,11 +19,13 @@ namespace engineapi
RenderAPI();
virtual ~RenderAPI() {};
public:
virtual RenderContext* GetContext() = 0;
public:
virtual void OnInit();
void Init() override;
void Shutdown() override {};
virtual void InitRenderNode();
virtual void InitRenderPass() = 0;
public:
virtual RenderContext* GetContext() = 0;
public:
virtual void SetViewPort(uint32_t width, uint32_t height, uint32_t xOffset = 0, uint32_t yOffset = 0) = 0;
virtual void BeginFrame() = 0;
@ -40,5 +42,3 @@ namespace engineapi
static RenderAPI* MakeInstance();
};
}
template<>
engineapi::RenderAPI* Singleton<engineapi::RenderAPI>::ms_Singleton = nullptr;

View File

@ -3,7 +3,7 @@
#include <cstdint>
#include "singleton.h"
namespace engineapi {
class Window : public Singleton<Window> {
class Window : public ISingleton<Window> {
protected:
int mWidth;
int mHeight;
@ -29,6 +29,9 @@ namespace engineapi {
static LRESULT CALLBACK HandleMsgSetup(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
static LRESULT CALLBACK HandleMsgThunk(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
LRESULT HandleMsg(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) noexcept;
public:
void Init() override {};
void Shutdown() override {};
public:
Window(int width, int height, const char* title);
HWND Ptr() {
@ -43,5 +46,3 @@ namespace engineapi {
static Window* MakeInstance(int frames, uint32_t width, uint32_t height, const char* title);
};
};
template<>
engineapi::Window* Singleton<engineapi::Window>::ms_Singleton = nullptr;

View File

@ -11,7 +11,7 @@ namespace vulkanapi {
Instance* mInstance;
Device* mDevice;
DescriptorPool* mPool;
map<const string*, CommandWorker*> mWorkerMap;
table<const string*, CommandWorker*> mWorkerMap;
public:
Instance& GetInstance() {
return *mInstance;

View File

@ -5,7 +5,7 @@
#include "volk.h"
#include <string>
#include <vector>
#include <map>
#include "zstd/table.h"
namespace vulkanapi {
#define Z_USE_GRAPHIC_DEBUG
class CommandBuffer;
@ -13,7 +13,7 @@ using std::array;
using std::string;
using std::to_string;
using std::vector;
using std::map;
using zstd::table;
using std::make_pair;
using voidFn = std::function<void()>;
using commandFn = std::function<void(CommandBuffer& cmd)>;

View File

@ -8,7 +8,7 @@ using engineapi::Matrix4;
using engineapi::FrameBufferType;
using engineapi::ClearInfo;
using engineapi::CommandType;
#define ShaderModuleSet map<VkShaderStageFlagBits, VkShaderModule>
#define ShaderModuleSet table<VkShaderStageFlagBits, VkShaderModule>
namespace vulkanapi
{

View File

@ -9,7 +9,7 @@ namespace vulkanapi {
protected:
VkDevice mPtr{ NULL };
VkPhysicalDevice mPhysical{NULL};
map<const string*, Queue*> mQueueMap;
table<const string*, Queue*> mQueueMap;
public:
VkDevice& Ptr() {
return mPtr;

View File

@ -15,7 +15,7 @@ function cmd_compile(genfile, sourcefile, template, macro, define)
table.insert(argv, define)
end
print("cmd_meta_compile", genfile)
os.runv(meta.program, argv)
os.execv(meta.program, argv)
return argv
end