From 71bb63a487f180a5205d0517cc92485198287815 Mon Sep 17 00:00:00 2001 From: ouczbs Date: Sat, 9 Mar 2024 18:17:53 +0800 Subject: [PATCH] update asset --- engine/3rdparty/glm/test/01bezier.cpp | 13 ---- engine/3rdparty/glm/xmake.lua | 6 -- engine/3rdparty/zasset/include/zasset/asset.h | 14 ++-- .../zasset/include/zasset/asset_manager.h | 23 +++--- .../zasset/src/zasset/asset_manager.cpp | 9 ++- engine/src/engine/object/mesh/actor.cpp | 24 +++++++ engine/src/engine/object/mesh/actor.h | 14 ++++ engine/src/engine/object/mesh/dynamic.cpp | 9 +++ engine/src/engine/object/mesh/dynamic.h | 11 +++ engine/src/engine/object/mesh/static.cpp | 13 ++++ engine/src/engine/object/mesh/static.h | 18 +++++ .../engine/object/property/actor_property.h | 8 +++ .../src/engine/object/property/property.cpp | 5 ++ engine/src/engine/object/property/property.h | 27 +++++++ engine/src/engine/render/asset/asset.cpp | 0 engine/src/engine/render/asset/asset.h | 9 +++ engine/src/engine/render/asset/material.cpp | 0 engine/src/engine/render/asset/material.h | 7 ++ engine/src/engine/render/asset/mesh.cpp | 70 +++++++++++++++++++ engine/src/engine/render/asset/mesh.h | 31 ++++++++ engine/src/engine/render/asset/texture.cpp | 0 engine/src/engine/render/asset/texture.h | 7 ++ .../engine/{renderapi => render}/window.cpp | 2 +- .../src/engine/{renderapi => render}/window.h | 2 +- engine/src/engine/vulkanapi/asset/mesh.cpp | 7 +- engine/src/engine/vulkanapi/backend.cpp | 8 ++- engine/src/engine/vulkanapi/backend.h | 2 +- engine/src/engine/vulkanapi/thread/record.cpp | 19 ----- engine/src/engine/vulkanapi/thread/record.h | 16 ----- engine/src/engine/vulkanapi/window.cpp | 2 +- engine/src/engine/vulkanapi/window.h | 4 +- .../src/engine/vulkanapi/wrapper/device.cpp | 7 +- engine/src/engine/vulkanapi/wrapper/device.h | 2 +- .../vulkanapi/wrapper/device_creator.cpp | 10 +-- .../engine/vulkanapi/wrapper/device_creator.h | 2 +- .../vulkanapi/wrapper/instance_creator.cpp | 2 +- engine/src/engine/vulkanapi/wrapper/queue.cpp | 2 +- engine/src/main.cpp | 9 ++- engine/xmake.lua | 2 +- 39 files changed, 314 insertions(+), 102 deletions(-) delete mode 100644 engine/3rdparty/glm/test/01bezier.cpp delete mode 100644 engine/3rdparty/glm/xmake.lua create mode 100644 engine/src/engine/object/mesh/actor.cpp create mode 100644 engine/src/engine/object/mesh/actor.h create mode 100644 engine/src/engine/object/mesh/dynamic.cpp create mode 100644 engine/src/engine/object/mesh/dynamic.h create mode 100644 engine/src/engine/object/mesh/static.cpp create mode 100644 engine/src/engine/object/mesh/static.h create mode 100644 engine/src/engine/object/property/actor_property.h create mode 100644 engine/src/engine/object/property/property.cpp create mode 100644 engine/src/engine/object/property/property.h create mode 100644 engine/src/engine/render/asset/asset.cpp create mode 100644 engine/src/engine/render/asset/asset.h create mode 100644 engine/src/engine/render/asset/material.cpp create mode 100644 engine/src/engine/render/asset/material.h create mode 100644 engine/src/engine/render/asset/mesh.cpp create mode 100644 engine/src/engine/render/asset/mesh.h create mode 100644 engine/src/engine/render/asset/texture.cpp create mode 100644 engine/src/engine/render/asset/texture.h rename engine/src/engine/{renderapi => render}/window.cpp (99%) rename engine/src/engine/{renderapi => render}/window.h (97%) delete mode 100644 engine/src/engine/vulkanapi/thread/record.cpp delete mode 100644 engine/src/engine/vulkanapi/thread/record.h diff --git a/engine/3rdparty/glm/test/01bezier.cpp b/engine/3rdparty/glm/test/01bezier.cpp deleted file mode 100644 index d525240..0000000 --- a/engine/3rdparty/glm/test/01bezier.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "glm/glm.hpp" -#include "glm/fwd.hpp" -#include - -using namespace std; -int main() { - glm::vec3 v0(1,1,0),n1(0,0,1); - glm::vec3 p0(1, 2, 3), p1(3, 4, 5), p2 = p0; - p2.z += 10; - glm::vec3 up = glm::cross(v0, p1 - p0); - //glm::quat rt{}; - cout << sizeof(v0)<< " " << sizeof(glm::mat3x3) << " "; -} \ No newline at end of file diff --git a/engine/3rdparty/glm/xmake.lua b/engine/3rdparty/glm/xmake.lua deleted file mode 100644 index c9ac4ac..0000000 --- a/engine/3rdparty/glm/xmake.lua +++ /dev/null @@ -1,6 +0,0 @@ - -add_requires("glm") -target("glm_test01_bezier") - set_kind("binary") - add_packages("glm") - add_files("test/01bezier.cpp") diff --git a/engine/3rdparty/zasset/include/zasset/asset.h b/engine/3rdparty/zasset/include/zasset/asset.h index 2bfba99..bc2c32d 100644 --- a/engine/3rdparty/zasset/include/zasset/asset.h +++ b/engine/3rdparty/zasset/include/zasset/asset.h @@ -1,3 +1,4 @@ +#pragma once #include #include namespace engineapi @@ -5,18 +6,17 @@ namespace engineapi class Asset { public: enum { - ASSET_NONE, - ASSET_SHARED_TYPE, - ASSET_COPY_TYPE, - ASSET_ASYNC_TYPE, - ASSET_LOADED_TYPE, - ASSET_NUM, + ASSET_NONE = 0, + ASSET_SHARED_TYPE = 1 << 0, + ASSET_COPY_TYPE = 1 << 1, + ASSET_ASYNC_TYPE = 1 << 2, + ASSET_LOADED_TYPE = 1 << 3, }; protected: uint32_t mFlags; std::string mName; public: - Asset(std::string& name, uint32_t flags):mName(name),mFlags(flags) {}; + Asset(std::string name, uint32_t flags):mName(name),mFlags(flags) {}; virtual void onLoadFinished() { mFlags |= ASSET_LOADED_TYPE; }; virtual void SyncLoad() {}; virtual void AsyncLoad() {}; diff --git a/engine/3rdparty/zasset/include/zasset/asset_manager.h b/engine/3rdparty/zasset/include/zasset/asset_manager.h index b2edaff..21710aa 100644 --- a/engine/3rdparty/zasset/include/zasset/asset_manager.h +++ b/engine/3rdparty/zasset/include/zasset/asset_manager.h @@ -12,33 +12,34 @@ namespace engineapi { public: struct AssetWrap { - Asset& asset; + Asset* asset; uint32_t count; - AssetWrap(Asset& asset): asset(asset),count(0) { + AssetWrap(Asset* asset): asset(asset),count(0) { } }; + private: std::map mAssetMap; public: template - TAsset* LoadAsset(const std::string& asset_url,uint32_t flags) + TAsset* LoadAsset(const std::string& asset_url, uint32_t types, uint32_t flags) { - std::filesystem::path asset_path = getFullPath(asset_url); + std::filesystem::path asset_path = getFullPath(asset_url, types); auto it = mAssetMap.find(asset_path.string()); if (it != mAssetMap.end()) { - if (it->second.asset.IsShared()) { - return &(it->second.asset); + if (it->second.asset->IsShared()) { + return (TAsset*)(it->second.asset); } - if (it->second.asset.IsCopyed()) { + if (it->second.asset->IsCopyed()) { TAsset* asset = new TAsset(asset_path.string(), flags); - *asset = it->second.asset; + *asset = *(TAsset*)(it->second.asset); return asset; } } TAsset* asset = new TAsset(asset_path.string(), flags); if (asset->IsShared() || asset->IsCopyed()) { - mAssetMap.emplace(asset_path.string(), *asset); + mAssetMap.emplace(asset_path.string(), asset); } if (asset->IsAsync()) { asset->AsyncLoad(); @@ -48,6 +49,8 @@ namespace engineapi } return asset; } - std::filesystem::path getFullPath(const std::string& relative_path) const; + std::filesystem::path getFullPath(const std::string& relative_path, uint32_t types) const; + public: + static AssetManager* Instance; }; } diff --git a/engine/3rdparty/zasset/src/zasset/asset_manager.cpp b/engine/3rdparty/zasset/src/zasset/asset_manager.cpp index 3abc629..186b485 100644 --- a/engine/3rdparty/zasset/src/zasset/asset_manager.cpp +++ b/engine/3rdparty/zasset/src/zasset/asset_manager.cpp @@ -1,6 +1,9 @@ #include "zasset/asset_manager.h" -std::filesystem::path engineapi::AssetManager::getFullPath(const std::string& relative_path) const -{ - return std::filesystem::path(relative_path); +namespace engineapi { + AssetManager* AssetManager::Instance = nullptr; + std::filesystem::path AssetManager::getFullPath(const std::string& relative_path, uint32_t types) const + { + return std::filesystem::path(relative_path); + } } diff --git a/engine/src/engine/object/mesh/actor.cpp b/engine/src/engine/object/mesh/actor.cpp new file mode 100644 index 0000000..973588a --- /dev/null +++ b/engine/src/engine/object/mesh/actor.cpp @@ -0,0 +1,24 @@ +#include "actor.h" +#include "zasset/asset_manager.h" +#include "../property/actor_property.h" +namespace engineapi { + ActorMesh::ActorMesh(Mesh& mesh, ActorProperty& property) + :DynamicMesh(mesh) + ,mProperty(property) + { + + } + ActorMesh* ActorMesh::New(ActorProperty& property) + { + Mesh* mesh = AssetManager::Instance->LoadAsset(property.path, property.types, property.flags); + return new ActorMesh(*mesh, property); + } + ActorMesh* ActorMesh::New(uint32_t id) + { + ActorProperty* property = Property::GetProperty(id); + if (property) { + return New(*property); + } + return nullptr; + } +} diff --git a/engine/src/engine/object/mesh/actor.h b/engine/src/engine/object/mesh/actor.h new file mode 100644 index 0000000..7fc1a88 --- /dev/null +++ b/engine/src/engine/object/mesh/actor.h @@ -0,0 +1,14 @@ +#pragma once +#include "dynamic.h" +namespace engineapi { + class ActorProperty; + class ActorMesh : public DynamicMesh { + protected: + ActorProperty& mProperty; + public: + ActorMesh(Mesh& mesh, ActorProperty& property); + public: + static ActorMesh* New(ActorProperty& property); + static ActorMesh* New(uint32_t id); + }; +} \ No newline at end of file diff --git a/engine/src/engine/object/mesh/dynamic.cpp b/engine/src/engine/object/mesh/dynamic.cpp new file mode 100644 index 0000000..733136e --- /dev/null +++ b/engine/src/engine/object/mesh/dynamic.cpp @@ -0,0 +1,9 @@ +#include "dynamic.h" + +namespace engineapi { + DynamicMesh::DynamicMesh(Mesh& mesh) + :StaticMesh(mesh) + { + + } +} diff --git a/engine/src/engine/object/mesh/dynamic.h b/engine/src/engine/object/mesh/dynamic.h new file mode 100644 index 0000000..ead2bab --- /dev/null +++ b/engine/src/engine/object/mesh/dynamic.h @@ -0,0 +1,11 @@ +#pragma once +#include "static.h" +namespace engineapi { + class Mesh; + class DynamicMesh : public StaticMesh{ + protected: + + public: + DynamicMesh(Mesh& mesh); + }; +} \ No newline at end of file diff --git a/engine/src/engine/object/mesh/static.cpp b/engine/src/engine/object/mesh/static.cpp new file mode 100644 index 0000000..964377e --- /dev/null +++ b/engine/src/engine/object/mesh/static.cpp @@ -0,0 +1,13 @@ +#include "static.h" +#include "engine/render/asset/mesh.h" + +namespace engineapi { + StaticMesh::StaticMesh(Mesh& mesh) + :mPtr(mesh) + { + } + void StaticMesh::LoadMesh() + { + + } +} \ No newline at end of file diff --git a/engine/src/engine/object/mesh/static.h b/engine/src/engine/object/mesh/static.h new file mode 100644 index 0000000..c73aeb6 --- /dev/null +++ b/engine/src/engine/object/mesh/static.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include +#include "glm/vec3.hpp" +#include "engine/render/asset/mesh.h" +namespace engineapi { + class StaticMesh { + protected: + Mesh& mPtr; + glm::vec3 mCenter; + float mRadius; + + public: + StaticMesh(Mesh& mesh); + + void LoadMesh(); + }; +} \ No newline at end of file diff --git a/engine/src/engine/object/property/actor_property.h b/engine/src/engine/object/property/actor_property.h new file mode 100644 index 0000000..c2a2ef6 --- /dev/null +++ b/engine/src/engine/object/property/actor_property.h @@ -0,0 +1,8 @@ +#pragma once +#include "property.h" +namespace engineapi { + class ActorProperty :public Property{ + public: + static const uint32_t Type = Property::ActorPropertyType; + }; +} \ No newline at end of file diff --git a/engine/src/engine/object/property/property.cpp b/engine/src/engine/object/property/property.cpp new file mode 100644 index 0000000..c41ba94 --- /dev/null +++ b/engine/src/engine/object/property/property.cpp @@ -0,0 +1,5 @@ +#include "property.h" + +namespace engineapi { + std::map Property::PropertyMap; +} \ No newline at end of file diff --git a/engine/src/engine/object/property/property.h b/engine/src/engine/object/property/property.h new file mode 100644 index 0000000..ca868b4 --- /dev/null +++ b/engine/src/engine/object/property/property.h @@ -0,0 +1,27 @@ +#pragma once +#include +#include +namespace engineapi { + class Property { + public: + enum { + ActorPropertyType = 1, + }; + public: + uint32_t id = 0; + uint32_t types = 0; + uint32_t flags = 0; + std::string path = ""; + public: + static std::map PropertyMap; + + template + static TProperty* GetProperty(uint32_t id) { + auto it = PropertyMap.find(id); + if (it != PropertyMap.end() && it->second.types && TProperty::Type) { + return (TProperty*)(&it->second); + } + return nullptr; + } + }; +} \ No newline at end of file diff --git a/engine/src/engine/render/asset/asset.cpp b/engine/src/engine/render/asset/asset.cpp new file mode 100644 index 0000000..e69de29 diff --git a/engine/src/engine/render/asset/asset.h b/engine/src/engine/render/asset/asset.h new file mode 100644 index 0000000..b08f7d4 --- /dev/null +++ b/engine/src/engine/render/asset/asset.h @@ -0,0 +1,9 @@ +#pragma once +#include "zasset/asset.h" + +namespace engineapi { + class AssetRender : public Asset { + public: + using Asset::Asset; + }; +}; \ No newline at end of file diff --git a/engine/src/engine/render/asset/material.cpp b/engine/src/engine/render/asset/material.cpp new file mode 100644 index 0000000..e69de29 diff --git a/engine/src/engine/render/asset/material.h b/engine/src/engine/render/asset/material.h new file mode 100644 index 0000000..6f707a5 --- /dev/null +++ b/engine/src/engine/render/asset/material.h @@ -0,0 +1,7 @@ +#include "asset.h" + +namespace engineapi { + class Material : public AssetRender { + + }; +}; \ No newline at end of file diff --git a/engine/src/engine/render/asset/mesh.cpp b/engine/src/engine/render/asset/mesh.cpp new file mode 100644 index 0000000..7e19ee1 --- /dev/null +++ b/engine/src/engine/render/asset/mesh.cpp @@ -0,0 +1,70 @@ +#include "mesh.h" +#include "assimp/Importer.hpp" +#include "assimp/scene.h" +#include "assimp/postprocess.h" +#include "zlog.h" +namespace engineapi { + void Mesh::SyncLoad() + { + std::vector vertexPositions = std::vector(); + Assimp::Importer importer; + const aiScene* scene = importer.ReadFile(mName, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_CalcTangentSpace); + // process ASSIMP's root node recursively + aiMesh* mesh = scene->mMeshes[scene->mRootNode->mMeshes[0]]; + for (unsigned int i = 0; i < mesh->mNumVertices; i++) + { + VertexData vertexData; + glm::vec3 vector; + // positions + vector.x = mesh->mVertices[i].x; + vector.y = mesh->mVertices[i].y; + vector.z = mesh->mVertices[i].z; + vertexData.position = vector; + // normals + if (mesh->HasNormals()) + { + vector.x = mesh->mNormals[i].x; + vector.y = mesh->mNormals[i].y; + vector.z = mesh->mNormals[i].z; + vertexData.normal = vector; + } + // texture coordinates + if (mesh->mTextureCoords[0]) // does the mesh contain texture coordinates? + { + glm::vec2 vec; + // a vertex can contain up to 8 different texture coordinates. We thus make the assumption that we won't + // use models where a vertex can have multiple texture coordinates so we always take the first set (0). + vec.x = mesh->mTextureCoords[0][i].x; + vec.y = mesh->mTextureCoords[0][i].y; + vertexData.texCoords = vec; + // tangent + vector.x = mesh->mTangents[i].x; + vector.y = mesh->mTangents[i].y; + vector.z = mesh->mTangents[i].z; + vertexData.tangent = vector; + // bitangent + vector.x = mesh->mBitangents[i].x; + vector.y = mesh->mBitangents[i].y; + vector.z = mesh->mBitangents[i].z; + vertexData.bitangent = vector; + } + else + { + zlog::info("Mesh do not contains uv."); + } + + mVertices.push_back(vertexData); + vertexPositions.emplace_back(vertexData.position); + } + // now wak through each of the mesh's faces (a face is a mesh its triangle) and retrieve the corresponding vertex indices. + for (unsigned int i = 0; i < mesh->mNumFaces; i++) + { + aiFace face = mesh->mFaces[i]; + // retrieve all indices of the face and store them in the indices vector + for (unsigned int j = 0; j < face.mNumIndices; j++) + mIndices.push_back(face.mIndices[j]); + } + importer.FreeScene(); + + } +} diff --git a/engine/src/engine/render/asset/mesh.h b/engine/src/engine/render/asset/mesh.h new file mode 100644 index 0000000..50fd188 --- /dev/null +++ b/engine/src/engine/render/asset/mesh.h @@ -0,0 +1,31 @@ +#pragma once +#include "asset.h" +#include "glm/vec2.hpp" +#include "glm/vec3.hpp" +#include +#include +namespace engineapi { + class Texture; + class Material; + class Mesh : public AssetRender { + public: + struct VertexData + { + glm::vec3 position; + glm::vec2 texCoords; + glm::vec3 normal; + glm::vec3 tangent; + glm::vec3 bitangent; + }; + protected: + Material* mMaterial; + std::map mTextureMap; + + std::vector mVertices; + std::vector mIndices; + + public: + using AssetRender::AssetRender; + void SyncLoad()override; + }; +}; \ No newline at end of file diff --git a/engine/src/engine/render/asset/texture.cpp b/engine/src/engine/render/asset/texture.cpp new file mode 100644 index 0000000..e69de29 diff --git a/engine/src/engine/render/asset/texture.h b/engine/src/engine/render/asset/texture.h new file mode 100644 index 0000000..3b0065b --- /dev/null +++ b/engine/src/engine/render/asset/texture.h @@ -0,0 +1,7 @@ +#include "asset.h" + +namespace engineapi { + class Texture : public AssetRender { + + }; +}; \ No newline at end of file diff --git a/engine/src/engine/renderapi/window.cpp b/engine/src/engine/render/window.cpp similarity index 99% rename from engine/src/engine/renderapi/window.cpp rename to engine/src/engine/render/window.cpp index 15c915c..d0e3bd4 100644 --- a/engine/src/engine/renderapi/window.cpp +++ b/engine/src/engine/render/window.cpp @@ -1,5 +1,5 @@ #include "window.h" -namespace renderapi { +namespace engineapi { Window::WindowClass Window::WindowClass::wndClass; Window::WindowClass::WindowClass() noexcept diff --git a/engine/src/engine/renderapi/window.h b/engine/src/engine/render/window.h similarity index 97% rename from engine/src/engine/renderapi/window.h rename to engine/src/engine/render/window.h index 0ec5609..e4947e1 100644 --- a/engine/src/engine/renderapi/window.h +++ b/engine/src/engine/render/window.h @@ -1,6 +1,6 @@ #pragma once #include -namespace renderapi { +namespace engineapi { class Window { protected: int mWidth; diff --git a/engine/src/engine/vulkanapi/asset/mesh.cpp b/engine/src/engine/vulkanapi/asset/mesh.cpp index d443a7d..bdf23f1 100644 --- a/engine/src/engine/vulkanapi/asset/mesh.cpp +++ b/engine/src/engine/vulkanapi/asset/mesh.cpp @@ -68,10 +68,6 @@ namespace vulkanapi { } importer.FreeScene(); - Backend::TransferWorker->InvokeBuffer([&](CommandBuffer* cmd) { - cmd->CopyBuffer(&stageVertexBuffer, _vertexBuffer); - cmd->CopyBuffer(&stageIndexBuffer, _indexBuffer); - }); } void Mesh::AsyncLoad() { @@ -79,6 +75,7 @@ namespace vulkanapi { } void Mesh::BindCommand(CommandBuffer& cmd) { - + //cmd->CopyBuffer(&stageVertexBuffer, _vertexBuffer); + // cmd->CopyBuffer(&stageIndexBuffer, _indexBuffer); } } diff --git a/engine/src/engine/vulkanapi/backend.cpp b/engine/src/engine/vulkanapi/backend.cpp index 1533dfa..6365e2d 100644 --- a/engine/src/engine/vulkanapi/backend.cpp +++ b/engine/src/engine/vulkanapi/backend.cpp @@ -12,7 +12,9 @@ namespace vulkanapi { auto deviceCreator = DeviceCreator(*mInstance); deviceCreator.AddWindowExtension(); - deviceCreator.desiredPhysicalDeviceFeatures.geometryShader = VK_TRUE; + deviceCreator.desiredPhysicalDeviceFeatures.independentBlend = true; + deviceCreator.desiredPhysicalDeviceFeatures.depthClamp = true; + //deviceCreator.desiredPhysicalDeviceFeatures.geometryShader = VK_TRUE; deviceCreator.AddQueue(Queue::TransferQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0); deviceCreator.AddQueue(Queue::RenderQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0); deviceCreator.AddQueue(Queue::ComputeQueue, VkQueueFlagBits::VK_QUEUE_GRAPHICS_BIT, 1.0); @@ -40,12 +42,12 @@ namespace vulkanapi { auto queue = mDevice->GetQueue(name); if (queue) { auto worker = new CommandWorker(name, *mDevice, *queue, flag); - mWorkerMap.emplace(name, worker); + mWorkerMap.emplace(&name, worker); } } CommandWorker* Backend::GetWorker(const std::string& name) { - auto it = mWorkerMap.find(name); + auto it = mWorkerMap.find(&name); if (it != mWorkerMap.end()) { return it->second; } diff --git a/engine/src/engine/vulkanapi/backend.h b/engine/src/engine/vulkanapi/backend.h index 0c690ce..3246e51 100644 --- a/engine/src/engine/vulkanapi/backend.h +++ b/engine/src/engine/vulkanapi/backend.h @@ -11,7 +11,7 @@ namespace vulkanapi { protected: Instance* mInstance; Device* mDevice; - std::map mWorkerMap; + std::map mWorkerMap; public: static CommandWorker* TransferWorker; public: diff --git a/engine/src/engine/vulkanapi/thread/record.cpp b/engine/src/engine/vulkanapi/thread/record.cpp deleted file mode 100644 index 21f9945..0000000 --- a/engine/src/engine/vulkanapi/thread/record.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "record.h" -#include -#include -namespace vulkanapi { - CommandRecord::CommandRecord() - { - mParts.reserve(64); - } - void CommandRecord::Apply(CommandBuffer* buf) - { - for (auto cmd : mParts) { - cmd(buf); - } - } - void CommandRecord::Record(CommandFn cmd) - { - mParts.push_back(cmd); - } -} diff --git a/engine/src/engine/vulkanapi/thread/record.h b/engine/src/engine/vulkanapi/thread/record.h deleted file mode 100644 index bf52795..0000000 --- a/engine/src/engine/vulkanapi/thread/record.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once -#include -#include -#include "engine/vulkanapi/vulkan.h" -namespace vulkanapi { - class CommandBuffer; - typedef void (*CommandFn)(CommandBuffer* buf); - class CommandRecord { - protected: - std::vector mParts; - public: - CommandRecord(); - void Apply(CommandBuffer* buf); - void Record(CommandFn cmd); - }; -}; \ No newline at end of file diff --git a/engine/src/engine/vulkanapi/window.cpp b/engine/src/engine/vulkanapi/window.cpp index 618ce48..99d9752 100644 --- a/engine/src/engine/vulkanapi/window.cpp +++ b/engine/src/engine/vulkanapi/window.cpp @@ -7,7 +7,7 @@ #include namespace vulkanapi { Window::Window(Backend& backend, int frames, uint32_t width, uint32_t height, const char* title) - :renderapi::Window(width, height , title) + :engineapi::Window(width, height , title) , mSurfaceKHR(nullptr) , mSwapchain(nullptr) { diff --git a/engine/src/engine/vulkanapi/window.h b/engine/src/engine/vulkanapi/window.h index 108fb42..a66ad98 100644 --- a/engine/src/engine/vulkanapi/window.h +++ b/engine/src/engine/vulkanapi/window.h @@ -1,12 +1,12 @@ #pragma once #include #include -#include "engine/renderapi/window.h" +#include "engine/render/window.h" #include "vulkan.h" namespace vulkanapi { class Backend; class Swapchain; - class Window : public renderapi::Window { + class Window : public engineapi::Window { protected: VkSurfaceKHR mSurfaceKHR{NULL}; Swapchain* mSwapchain; diff --git a/engine/src/engine/vulkanapi/wrapper/device.cpp b/engine/src/engine/vulkanapi/wrapper/device.cpp index d202fe2..17406e2 100644 --- a/engine/src/engine/vulkanapi/wrapper/device.cpp +++ b/engine/src/engine/vulkanapi/wrapper/device.cpp @@ -29,14 +29,15 @@ namespace vulkanapi { device_create_info.enabledLayerCount = layers.size(); device_create_info.ppEnabledLayerNames = layers.data(); #endif // _USE_GRAPHIC_DEBUG + system("cls"); VkResult result = vkCreateDevice(mPhysical, &device_create_info, nullptr, &mPtr); if ((result != VK_SUCCESS) || (mPtr == VK_NULL_HANDLE)) { - zlog::error("Could not create logical device."); + zlog::error("Could not create logical device. VkResult {}", result); } for (auto& queue : Creator.desiredQueues) { Queue* gq = new Queue(queue.name, queue.queueFamilyIndex, VK_NULL_HANDLE); vkGetDeviceQueue(mPtr, queue.queueFamilyIndex, 0, &(gq->Ptr())); - mQueueMap.emplace(queue.name, gq); + mQueueMap.emplace(&queue.name, gq); } } Device::~Device() { @@ -47,7 +48,7 @@ namespace vulkanapi { } Queue* Device::GetQueue(const std::string& name) { - auto it = mQueueMap.find(name); + auto it = mQueueMap.find(&name); if (it != mQueueMap.end()) { return it->second; } diff --git a/engine/src/engine/vulkanapi/wrapper/device.h b/engine/src/engine/vulkanapi/wrapper/device.h index e8b6f5a..2fc5d77 100644 --- a/engine/src/engine/vulkanapi/wrapper/device.h +++ b/engine/src/engine/vulkanapi/wrapper/device.h @@ -11,7 +11,7 @@ namespace vulkanapi { protected: VkDevice mPtr{ NULL }; VkPhysicalDevice mPhysical{NULL}; - std::map mQueueMap; + std::map mQueueMap; public: VkDevice& Ptr() { return mPtr; diff --git a/engine/src/engine/vulkanapi/wrapper/device_creator.cpp b/engine/src/engine/vulkanapi/wrapper/device_creator.cpp index 795a59d..f9bd19e 100644 --- a/engine/src/engine/vulkanapi/wrapper/device_creator.cpp +++ b/engine/src/engine/vulkanapi/wrapper/device_creator.cpp @@ -1,7 +1,7 @@ -#pragma once #include "device.h" #include "device_creator.h" #include "instance.h" +#include "queue.h" #include "zlog.h" namespace vulkanapi { DeviceCreator::DeviceCreator(Instance& instance) @@ -18,10 +18,10 @@ namespace vulkanapi { void DeviceCreator::AddWindowExtension() { AddExtension(VK_KHR_SWAPCHAIN_EXTENSION_NAME); - AddQueue("PresentQueue", VK_QUEUE_FLAG_BITS_MAX_ENUM, 1.0f); + //AddQueue(Queue::PresentQueue, VK_QUEUE_FLAG_BITS_MAX_ENUM, 1.0f); #ifdef _USE_GRAPHIC_DEBUG - AddLayer("VK_LAYER_KHRONOS_validation"); - AddLayer("VK_LAYER_RENDERDOC_Capture"); + //AddLayer("VK_LAYER_KHRONOS_validation"); + //AddLayer("VK_LAYER_RENDERDOC_Capture"); #endif } bool DeviceCreator::CheckProperty(const VkPhysicalDevice device) @@ -101,7 +101,7 @@ namespace vulkanapi { } } } - if (index != -1 && queue_create_infos[index].queueCount < queue_families[index].queueCount) { + if (index != -1 && queue_create_infos[index].queueCount < 1) { queue.queueFamilyIndex = index; queue_create_infos[index].queueCount++; queue_prioritie[index].push_back(queue.prioritie); diff --git a/engine/src/engine/vulkanapi/wrapper/device_creator.h b/engine/src/engine/vulkanapi/wrapper/device_creator.h index 439bbc3..8fd9229 100644 --- a/engine/src/engine/vulkanapi/wrapper/device_creator.h +++ b/engine/src/engine/vulkanapi/wrapper/device_creator.h @@ -22,7 +22,7 @@ namespace vulkanapi { public: VkPhysicalDeviceFeatures desiredPhysicalDeviceFeatures; VkPhysicalDeviceType desiredPhysicalDeviceType; - std::vector desiredExtensions; + std::vector desiredExtensions; std::vector desiredQueues; public: Instance& instance; diff --git a/engine/src/engine/vulkanapi/wrapper/instance_creator.cpp b/engine/src/engine/vulkanapi/wrapper/instance_creator.cpp index 11f7feb..9306de6 100644 --- a/engine/src/engine/vulkanapi/wrapper/instance_creator.cpp +++ b/engine/src/engine/vulkanapi/wrapper/instance_creator.cpp @@ -1,4 +1,3 @@ -#pragma once #include "instance.h" #include "instance_creator.h" #include "zlog.h" @@ -36,6 +35,7 @@ namespace vulkanapi { { AddLayer("VK_LAYER_KHRONOS_validation"); AddLayer("VK_LAYER_RENDERDOC_Capture"); + AddLayer("VK_LAYER_LUNARG_api_dump"); AddExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); AddExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME); } diff --git a/engine/src/engine/vulkanapi/wrapper/queue.cpp b/engine/src/engine/vulkanapi/wrapper/queue.cpp index 274b27b..090269a 100644 --- a/engine/src/engine/vulkanapi/wrapper/queue.cpp +++ b/engine/src/engine/vulkanapi/wrapper/queue.cpp @@ -5,7 +5,7 @@ namespace vulkanapi { const std::string Queue::ComputeQueue("ComputeQueue"); const std::string Queue::PresentQueue("PresentQueue"); Queue::Queue(const std::string& name, uint32_t queueFamilyIndex, VkQueue queue) - : mName(name), mQueueFamilyIndex(queueFamilyIndex), mPtr(queue), mMtx() + : mName(name), mQueueFamilyIndex(queueFamilyIndex), mPtr(queue) { } diff --git a/engine/src/main.cpp b/engine/src/main.cpp index 58989bf..245cde4 100644 --- a/engine/src/main.cpp +++ b/engine/src/main.cpp @@ -4,8 +4,10 @@ #include "engine/vulkanapi/window.h" #include "engine/vulkanapi/pass/gbuffer.h" #include "engine/vulkanapi/pass/forwardpass.h" +#include "engine/object/mesh/actor.h" +#include "engine/object/property/actor_property.h" #include "zlog.h" - +using namespace engineapi; int main(int argc, char** argv) { const char* name = "zengine"; @@ -14,8 +16,13 @@ int main(int argc, char** argv) auto wnd = vulkanapi::Window(vulkan, 3, 640, 720, name); auto gbuffer = vulkanapi::GeometryBuffer(vulkan.GetDevice(), 3, 640, 720); auto forwardpass = vulkanapi::ForwardPass(vulkan.GetDevice(), gbuffer); + ActorProperty property; + property.id = 1; + property.path = "assets/models/cube.obj"; + auto actor = ActorMesh::New(property); while (true) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } + delete actor; return 0; } diff --git a/engine/xmake.lua b/engine/xmake.lua index 8f6441c..9aad9bf 100644 --- a/engine/xmake.lua +++ b/engine/xmake.lua @@ -5,7 +5,7 @@ target("zengine") set_kind("binary") set_rundir(".") add_deps("zcoro","zlog","zasset") - add_packages("vulkansdk","tinyobjloader","glm","assimp") + add_packages("vulkansdk","tinyobjloader","assimp") add_includedirs("src") add_syslinks("user32") add_files("src/*.cpp", "src/**.cpp")