add zasset
This commit is contained in:
parent
e48d175b76
commit
f6e3b52dca
5
engine/.vscode/settings.json
vendored
Normal file
5
engine/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"vector": "cpp"
|
||||||
|
}
|
||||||
|
}
|
||||||
98
engine/3rdparty/assimp/xmake.lua
vendored
Normal file
98
engine/3rdparty/assimp/xmake.lua
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
package("assimp")
|
||||||
|
|
||||||
|
set_homepage("https://assimp.org")
|
||||||
|
set_description("Portable Open-Source library to import various well-known 3D model formats in a uniform manner")
|
||||||
|
set_license("BSD-3-Clause")
|
||||||
|
|
||||||
|
set_urls("https://github.com/assimp/assimp/archive/$(version).zip",
|
||||||
|
"https://github.com/assimp/assimp.git")
|
||||||
|
add_versions("v5.2.5", "5384877d53be7b5bbf50c26ab3f054bec91b3df8614372dcd7240f44f61c509b")
|
||||||
|
|
||||||
|
if not is_host("windows") then
|
||||||
|
add_extsources("pkgconfig::assimp")
|
||||||
|
end
|
||||||
|
|
||||||
|
if is_plat("mingw") and is_subhost("msys") then
|
||||||
|
add_extsources("pacman::assimp")
|
||||||
|
elseif is_plat("linux") then
|
||||||
|
add_extsources("pacman::assimp", "apt::libassimp-dev")
|
||||||
|
elseif is_plat("macosx") then
|
||||||
|
add_extsources("brew::assimp")
|
||||||
|
end
|
||||||
|
|
||||||
|
add_configs("build_tools", {description = "Build the supplementary tools for Assimp.", default = false, type = "boolean"})
|
||||||
|
add_configs("double_precision", {description = "Enable double precision processing.", default = false, type = "boolean"})
|
||||||
|
add_configs("no_export", {description = "Disable Assimp's export functionality (reduces library size).", default = false, type = "boolean"})
|
||||||
|
add_configs("android_jniiosysystem", {description = "Enable Android JNI IOSystem support.", default = false, type = "boolean"})
|
||||||
|
add_configs("asan", {description = "Enable AddressSanitizer.", default = false, type = "boolean"})
|
||||||
|
add_configs("ubsan", {description = "Enable Undefined Behavior sanitizer.", default = false, type = "boolean"})
|
||||||
|
|
||||||
|
add_deps("cmake", "zlib")
|
||||||
|
|
||||||
|
if is_plat("windows") then
|
||||||
|
add_syslinks("advapi32")
|
||||||
|
end
|
||||||
|
|
||||||
|
on_load(function (package)
|
||||||
|
if not package:gitref() and package:version():le("5.1.0") then
|
||||||
|
package:add("deps", "irrxml")
|
||||||
|
end
|
||||||
|
if package:is_plat("linux", "macosx") and package:config("shared") then
|
||||||
|
package:add("links", "assimp" .. (package:is_debug() and "d" or ""))
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
on_install(function (package)
|
||||||
|
local configs = {"-DASSIMP_BUILD_SAMPLES=OFF",
|
||||||
|
"-DASSIMP_BUILD_TESTS=OFF",
|
||||||
|
"-DASSIMP_BUILD_DOCS=OFF",
|
||||||
|
"-DASSIMP_BUILD_FRAMEWORK=OFF",
|
||||||
|
"-DASSIMP_INSTALL_PDB=ON",
|
||||||
|
"-DASSIMP_INJECT_DEBUG_POSTFIX=ON",
|
||||||
|
"-DASSIMP_BUILD_ZLIB=OFF",
|
||||||
|
"-DSYSTEM_IRRXML=ON",
|
||||||
|
"-DASSIMP_WARNINGS_AS_ERRORS=OFF"}
|
||||||
|
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
|
||||||
|
|
||||||
|
local function add_config_arg(config_name, cmake_name)
|
||||||
|
table.insert(configs, "-D" .. cmake_name .. "=" .. (package:config(config_name) and "ON" or "OFF"))
|
||||||
|
end
|
||||||
|
add_config_arg("shared", "BUILD_SHARED_LIBS")
|
||||||
|
add_config_arg("double_precision", "ASSIMP_DOUBLE_PRECISION")
|
||||||
|
add_config_arg("no_export", "ASSIMP_NO_EXPORT")
|
||||||
|
add_config_arg("asan", "ASSIMP_ASAN")
|
||||||
|
add_config_arg("ubsan", "ASSIMP_UBSAN")
|
||||||
|
|
||||||
|
if package:is_plat("android") then
|
||||||
|
add_config_arg("android_jniiosysystem", "ASSIMP_ANDROID_JNIIOSYSTEM")
|
||||||
|
end
|
||||||
|
if package:is_plat("windows", "linux", "macosx", "mingw") then
|
||||||
|
add_config_arg("build_tools", "ASSIMP_BUILD_ASSIMP_TOOLS")
|
||||||
|
else
|
||||||
|
table.insert(configs, "-DASSIMP_BUILD_ASSIMP_TOOLS=OFF")
|
||||||
|
end
|
||||||
|
|
||||||
|
if not package:gitref() and package:version():lt("v5.2.4") then
|
||||||
|
-- ASSIMP_WARNINGS_AS_ERRORS is not supported before v5.2.4
|
||||||
|
if package:is_plat("windows") then
|
||||||
|
io.replace("code/CMakeLists.txt", "TARGET_COMPILE_OPTIONS(assimp PRIVATE /W4 /WX)", "", {plain = true})
|
||||||
|
else
|
||||||
|
io.replace("code/CMakeLists.txt", "TARGET_COMPILE_OPTIONS(assimp PRIVATE -Werror)", "", {plain = true})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if package:is_plat("mingw") and package:version():lt("v5.1.5") then
|
||||||
|
-- CMAKE_COMPILER_IS_MINGW has been removed: https://github.com/assimp/assimp/pull/4311
|
||||||
|
io.replace("CMakeLists.txt", "CMAKE_COMPILER_IS_MINGW", "MINGW", {plain = true})
|
||||||
|
end
|
||||||
|
|
||||||
|
import("package.tools.cmake").install(package, configs)
|
||||||
|
|
||||||
|
-- copy pdb
|
||||||
|
if package:is_plat("windows") then
|
||||||
|
if package:config("shared") then
|
||||||
|
os.trycp(path.join(package:buildir(), "bin", "**.pdb"), package:installdir("bin"))
|
||||||
|
else
|
||||||
|
os.trycp(path.join(package:buildir(), "lib", "**.pdb"), package:installdir("lib"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
33
engine/3rdparty/zasset/include/asset.h
vendored
Normal file
33
engine/3rdparty/zasset/include/asset.h
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
namespace engineapi
|
||||||
|
{
|
||||||
|
class Asset {
|
||||||
|
public:
|
||||||
|
enum {
|
||||||
|
ASSET_NONE,
|
||||||
|
ASSET_SHARED_TYPE,
|
||||||
|
ASSET_COPY_TYPE,
|
||||||
|
ASSET_ASYNC_TYPE,
|
||||||
|
ASSET_LOADED_TYPE,
|
||||||
|
ASSET_NUM,
|
||||||
|
};
|
||||||
|
protected:
|
||||||
|
uint32_t mFlags;
|
||||||
|
std::string mName;
|
||||||
|
public:
|
||||||
|
Asset(std::string& name, uint32_t flags):mName(name),mFlags(flags) {};
|
||||||
|
virtual void onLoadFinished() { mFlags |= ASSET_LOADED_TYPE; };
|
||||||
|
virtual void SyncLoad() {};
|
||||||
|
public:
|
||||||
|
inline bool IsShared() {
|
||||||
|
return mFlags & ASSET_SHARED_TYPE;
|
||||||
|
}
|
||||||
|
inline bool IsCopyed() {
|
||||||
|
return mFlags & ASSET_COPY_TYPE;
|
||||||
|
}
|
||||||
|
inline bool IsAsync() {
|
||||||
|
return mFlags & ASSET_ASYNC_TYPE;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
54
engine/3rdparty/zasset/include/asset_manager.h
vendored
Normal file
54
engine/3rdparty/zasset/include/asset_manager.h
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
|
#include <functional>
|
||||||
|
#include <sstream>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include "asset.h"
|
||||||
|
namespace engineapi
|
||||||
|
{
|
||||||
|
class AssetManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct AssetWrap {
|
||||||
|
Asset& asset;
|
||||||
|
uint32_t count;
|
||||||
|
AssetWrap(Asset& asset): asset(asset),count(0) {
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
private:
|
||||||
|
std::map<const std::string, AssetWrap> mAssetMap;
|
||||||
|
public:
|
||||||
|
template<typename TAsset>
|
||||||
|
TAsset* LoadAsset(const std::string& asset_url,uint32_t flags)
|
||||||
|
{
|
||||||
|
std::filesystem::path asset_path = getFullPath(asset_url);
|
||||||
|
auto it = mAssetMap.find(asset_path.string());
|
||||||
|
if (it != mAssetMap.end()) {
|
||||||
|
if (it->second.asset.IsShared()) {
|
||||||
|
return &(it->second.asset);
|
||||||
|
}
|
||||||
|
if (it->second.asset.IsCopyed()) {
|
||||||
|
TAsset* asset = new TAsset(asset_path.string(), flags);
|
||||||
|
*asset = it->second.asset;
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TAsset* asset = new TAsset(asset_path.string(), flags);
|
||||||
|
if (asset->IsShared() || asset->IsCopyed()) {
|
||||||
|
mAssetMap.emplace(asset_path.string(), *asset);
|
||||||
|
}
|
||||||
|
if (asset->IsAsync()) {
|
||||||
|
//todo: AsyncLoad
|
||||||
|
asset->SyncLoad();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
asset->SyncLoad();
|
||||||
|
}
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
std::filesystem::path getFullPath(const std::string& relative_path) const;
|
||||||
|
};
|
||||||
|
}
|
||||||
5
engine/3rdparty/zasset/src/asset.cpp
vendored
Normal file
5
engine/3rdparty/zasset/src/asset.cpp
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#include "asset.h"
|
||||||
|
namespace engineapi
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
6
engine/3rdparty/zasset/src/asset_manager.cpp
vendored
Normal file
6
engine/3rdparty/zasset/src/asset_manager.cpp
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include "asset_manager.h"
|
||||||
|
|
||||||
|
std::filesystem::path engineapi::AssetManager::getFullPath(const std::string& relative_path) const
|
||||||
|
{
|
||||||
|
return std::filesystem::path(relative_path);
|
||||||
|
}
|
||||||
7
engine/3rdparty/zasset/xmake.lua
vendored
Normal file
7
engine/3rdparty/zasset/xmake.lua
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
set_languages("cxx20")
|
||||||
|
target("zasset")
|
||||||
|
set_kind("static")
|
||||||
|
add_includedirs("include", {public = true})
|
||||||
|
add_deps("zlog",{public = true})
|
||||||
|
add_files("src/*.cpp")
|
||||||
|
add_headerfiles("include/*.h")
|
||||||
12
engine/src/engine/vulkanapi/asset/mesh.cpp
Normal file
12
engine/src/engine/vulkanapi/asset/mesh.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#include "mesh.h"
|
||||||
|
#include "assimp/Importer.hpp"
|
||||||
|
#include "assimp/scene.h"
|
||||||
|
#include "assimp/postprocess.h"
|
||||||
|
namespace vulkanapi {
|
||||||
|
void Mesh::SyncLoad()
|
||||||
|
{
|
||||||
|
Assimp::Importer importer;
|
||||||
|
const aiScene* scene = importer.ReadFile(mName, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_CalcTangentSpace);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
10
engine/src/engine/vulkanapi/asset/mesh.h
Normal file
10
engine/src/engine/vulkanapi/asset/mesh.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "asset.h"
|
||||||
|
#include "../vulkan.h"
|
||||||
|
|
||||||
|
namespace vulkanapi {
|
||||||
|
class Mesh : public engineapi::Asset{
|
||||||
|
public:
|
||||||
|
void SyncLoad()override;
|
||||||
|
};
|
||||||
|
};
|
||||||
0
engine/src/engine/vulkanapi/asset/shader.cpp
Normal file
0
engine/src/engine/vulkanapi/asset/shader.cpp
Normal file
0
engine/src/engine/vulkanapi/asset/shader.h
Normal file
0
engine/src/engine/vulkanapi/asset/shader.h
Normal file
0
engine/src/engine/vulkanapi/asset/texture2d.cpp
Normal file
0
engine/src/engine/vulkanapi/asset/texture2d.cpp
Normal file
0
engine/src/engine/vulkanapi/asset/texture2d.h
Normal file
0
engine/src/engine/vulkanapi/asset/texture2d.h
Normal file
@ -13,7 +13,7 @@ int main(int argc, char** argv)
|
|||||||
auto vulkan = vulkanapi::Backend(name);
|
auto vulkan = vulkanapi::Backend(name);
|
||||||
auto wnd = vulkanapi::Window(vulkan, 3, 640, 720, name);
|
auto wnd = vulkanapi::Window(vulkan, 3, 640, 720, name);
|
||||||
auto gbuffer = vulkanapi::GeometryBuffer(vulkan.GetDevice(), 3, 640, 720);
|
auto gbuffer = vulkanapi::GeometryBuffer(vulkan.GetDevice(), 3, 640, 720);
|
||||||
auto forardpass = vulkanapi::ForwardPass(vulkan.GetDevice(), gbuffer);
|
auto forwardpass = vulkanapi::ForwardPass(vulkan.GetDevice(), gbuffer);
|
||||||
while (true) {
|
while (true) {
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
includes("3rdparty/xmake.lua")
|
includes("3rdparty/xmake.lua")
|
||||||
--includes("test/**xmake.lua")
|
--includes("test/**xmake.lua")
|
||||||
|
add_requires("assimp")
|
||||||
target("zengine")
|
target("zengine")
|
||||||
set_kind("binary")
|
set_kind("binary")
|
||||||
set_rundir(".")
|
set_rundir(".")
|
||||||
add_deps("zcoro","zlog")
|
add_deps("zcoro","zlog","zasset")
|
||||||
add_packages("vulkansdk","tinyobjloader","glm")
|
add_packages("vulkansdk","tinyobjloader","glm","assimp")
|
||||||
add_includedirs("src")
|
add_includedirs("src")
|
||||||
add_syslinks("user32")
|
add_syslinks("user32")
|
||||||
add_files("src/*.cpp", "src/**.cpp")
|
add_files("src/*.cpp", "src/**.cpp")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user