From fc9968dc4fd58fab37476f48e4405c2743c5349c Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 8 Mar 2021 10:01:20 -0800 Subject: Refactor window library. (#1739) * Refactor window library. * Fix project file * Fix warnings. --- tools/platform/model.h | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 tools/platform/model.h (limited to 'tools/platform/model.h') diff --git a/tools/platform/model.h b/tools/platform/model.h new file mode 100644 index 000000000..412f10a1d --- /dev/null +++ b/tools/platform/model.h @@ -0,0 +1,77 @@ +// model.h +#pragma once + +#include "slang-gfx.h" +#include "vector-math.h" +#include "slang-com-ptr.h" +#include +#include + +namespace gfx { + +struct ModelLoader +{ + struct MaterialData + { + glm::vec3 diffuseColor; + glm::vec3 specularColor; + float specularity; + + ComPtr diffuseMap; + }; + + struct Vertex + { + glm::vec3 position; + glm::vec3 normal; + glm::vec2 uv; + }; + + typedef uint32_t Index; + + struct MeshData + { + int firstIndex; + int indexCount; + + void* material; + }; + + struct ModelData + { + ComPtr vertexBuffer; + ComPtr indexBuffer; + PrimitiveTopology primitiveTopology; + int vertexCount; + int indexCount; + int meshCount; + void* const* meshes; + }; + + struct ICallbacks + { + typedef ModelLoader::MaterialData MaterialData; + typedef ModelLoader::MeshData MeshData; + typedef ModelLoader::ModelData ModelData; + + virtual void* createMaterial(MaterialData const& data) = 0; + virtual void* createMesh(MeshData const& data) = 0; + virtual void* createModel(ModelData const& data) = 0; + }; + + typedef uint32_t LoadFlags; + enum LoadFlag : LoadFlags + { + FlipWinding = 1 << 0, + }; + + ICallbacks* callbacks = nullptr; + Slang::ComPtr renderer; + LoadFlags loadFlags = 0; + float scale = 1.0f; + + Result load(char const* inputPath, void** outModel); +}; + + +} // gfx -- cgit v1.2.3