diff options
| author | s-ol <s+removethis@s-ol.nu> | 2021-03-27 09:12:40 +0000 |
|---|---|---|
| committer | s-ol <s+removethis@s-ol.nu> | 2021-03-30 14:37:36 +0000 |
| commit | 1b66dcfa8bd1f2deddb3e406653a3553c5549bf5 (patch) | |
| tree | f29514aa4b05bad3a6ab1949549b2831102d28fd /AssetLoader/src/GLTFLoader.cpp | |
| parent | GLTF Loader: fixed default alpha channel value of 3-component textures (diff) | |
| download | DiligentTools-1b66dcfa8bd1f2deddb3e406653a3553c5549bf5.tar.gz DiligentTools-1b66dcfa8bd1f2deddb3e406653a3553c5549bf5.zip | |
C API for GLTFLoader
Diffstat (limited to 'AssetLoader/src/GLTFLoader.cpp')
| -rw-r--r-- | AssetLoader/src/GLTFLoader.cpp | 75 |
1 files changed, 51 insertions, 24 deletions
diff --git a/AssetLoader/src/GLTFLoader.cpp b/AssetLoader/src/GLTFLoader.cpp index b000caa..1c546f7 100644 --- a/AssetLoader/src/GLTFLoader.cpp +++ b/AssetLoader/src/GLTFLoader.cpp @@ -246,9 +246,9 @@ void Node::UpdateTransforms() -Model::Model(IRenderDevice* pDevice, - IDeviceContext* pContext, - const CreateInfo& CI) +Model::Model(IRenderDevice* pDevice, + IDeviceContext* pContext, + const IGLTFModelCreateInfo& CI) { LoadFromFile(pDevice, pContext, CI); } @@ -710,7 +710,7 @@ static float GetTextureAlphaCutoffValue(const tinygltf::Model& gltf_model, int T void Model::LoadTextures(IRenderDevice* pDevice, const tinygltf::Model& gltf_model, const std::string& BaseDir, - TextureCacheType* pTextureCache, + GLTF_TextureCacheType* pTextureCache, ResourceManager* pResourceMgr) { for (const tinygltf::Texture& gltf_tex : gltf_model.textures) @@ -1021,7 +1021,7 @@ void Model::PrepareGPUResources(IRenderDevice* pDevice, IDeviceContext* pCtx) } } - auto UpdateBuffer = [&](BUFFER_ID BuffId) // + auto UpdateBuffer = [&](GLTF_BUFFER_ID BuffId) // { auto& BuffInfo = Buffers[BuffId]; IBuffer* pBuffer = nullptr; @@ -1052,14 +1052,14 @@ void Model::PrepareGPUResources(IRenderDevice* pDevice, IDeviceContext* pCtx) if (Buffers[BuffId].pBuffer != nullptr) { VERIFY_EXPR(Buffers[BuffId].pBuffer == pBuffer); - Barriers.emplace_back(StateTransitionDesc{pBuffer, RESOURCE_STATE_UNKNOWN, BuffId == BUFFER_ID_INDEX ? RESOURCE_STATE_INDEX_BUFFER : RESOURCE_STATE_VERTEX_BUFFER, true}); + Barriers.emplace_back(StateTransitionDesc{pBuffer, RESOURCE_STATE_UNKNOWN, BuffId == GLTF_BUFFER_ID_INDEX ? RESOURCE_STATE_INDEX_BUFFER : RESOURCE_STATE_VERTEX_BUFFER, true}); } } }; - UpdateBuffer(BUFFER_ID_VERTEX_BASIC_ATTRIBS); - UpdateBuffer(BUFFER_ID_VERTEX_SKIN_ATTRIBS); - UpdateBuffer(BUFFER_ID_INDEX); + UpdateBuffer(GLTF_BUFFER_ID_VERTEX_BASIC_ATTRIBS); + UpdateBuffer(GLTF_BUFFER_ID_VERTEX_SKIN_ATTRIBS); + UpdateBuffer(GLTF_BUFFER_ID_INDEX); if (!Barriers.empty()) pCtx->TransitionResourceStates(static_cast<Uint32>(Barriers.size()), Barriers.data()); @@ -1195,11 +1195,11 @@ void Model::LoadMaterials(const tinygltf::Model& gltf_model) const tinygltf::Parameter& param = alpha_mode_it->second; if (param.string_value == "BLEND") { - Mat.Attribs.AlphaMode = Material::ALPHA_MODE_BLEND; + Mat.Attribs.AlphaMode = GLTF_MAT_ALPHA_MODE_BLEND; } if (param.string_value == "MASK") { - Mat.Attribs.AlphaMode = Material::ALPHA_MODE_MASK; + Mat.Attribs.AlphaMode = GLTF_MAT_ALPHA_MODE_MASK; Mat.Attribs.AlphaCutoff = 0.5f; } } @@ -1434,8 +1434,8 @@ namespace struct ImageLoaderData { - Model::TextureCacheType* const pTextureCache; - ResourceManager* const pResourceMgr; + GLTF_TextureCacheType* const pTextureCache; + ResourceManager* const pResourceMgr; std::vector<RefCntAutoPtr<IObject>> TexturesHold; @@ -1699,9 +1699,9 @@ bool ReadWholeFile(std::vector<unsigned char>* out, } // namespace Callbacks -void Model::LoadFromFile(IRenderDevice* pDevice, - IDeviceContext* pContext, - const CreateInfo& CI) +void Model::LoadFromFile(IRenderDevice* pDevice, + IDeviceContext* pContext, + const IGLTFModelCreateInfo& CI) { if (CI.FileName == nullptr || *CI.FileName == 0) LOG_ERROR_AND_THROW("File path must not be empty"); @@ -1799,7 +1799,7 @@ void Model::LoadFromFile(IRenderDevice* pDevice, Extensions = gltf_model.extensionsUsed; - auto CreateBuffer = [&](BUFFER_ID BuffId, const void* pData, size_t Size, BIND_FLAGS BindFlags, const char* Name) // + auto CreateBuffer = [&](GLTF_BUFFER_ID BuffId, const void* pData, size_t Size, BIND_FLAGS BindFlags, const char* Name) // { VERIFY_EXPR(Size > 0); @@ -1809,13 +1809,13 @@ void Model::LoadFromFile(IRenderDevice* pDevice, Uint32 CacheBufferIndex = 0; switch (BuffId) { - case BUFFER_ID_INDEX: + case GLTF_BUFFER_ID_INDEX: CacheBufferIndex = CI.pCacheInfo->IndexBufferIdx; break; - case BUFFER_ID_VERTEX_BASIC_ATTRIBS: + case GLTF_BUFFER_ID_VERTEX_BASIC_ATTRIBS: CacheBufferIndex = CI.pCacheInfo->VertexBuffer0Idx; break; - case BUFFER_ID_VERTEX_SKIN_ATTRIBS: + case GLTF_BUFFER_ID_VERTEX_SKIN_ATTRIBS: CacheBufferIndex = CI.pCacheInfo->VertexBuffer1Idx; break; default: @@ -1840,18 +1840,18 @@ void Model::LoadFromFile(IRenderDevice* pDevice, } }; - CreateBuffer(BUFFER_ID_VERTEX_BASIC_ATTRIBS, VertexBasicData.data(), VertexBasicData.size() * sizeof(VertexBasicData[0]), + CreateBuffer(GLTF_BUFFER_ID_VERTEX_BASIC_ATTRIBS, VertexBasicData.data(), VertexBasicData.size() * sizeof(VertexBasicData[0]), BIND_VERTEX_BUFFER, "GLTF vertex attribs 0 buffer"); if (!VertexSkinData.empty()) { - CreateBuffer(BUFFER_ID_VERTEX_SKIN_ATTRIBS, VertexSkinData.data(), VertexSkinData.size() * sizeof(VertexSkinData[0]), + CreateBuffer(GLTF_BUFFER_ID_VERTEX_SKIN_ATTRIBS, VertexSkinData.data(), VertexSkinData.size() * sizeof(VertexSkinData[0]), BIND_VERTEX_BUFFER, "GLTF vertex attribs 1 buffer"); } if (!IndexData.empty()) { - CreateBuffer(BUFFER_ID_INDEX, IndexData.data(), IndexData.size() * sizeof(IndexData[0]), + CreateBuffer(GLTF_BUFFER_ID_INDEX, IndexData.data(), IndexData.size() * sizeof(IndexData[0]), BIND_INDEX_BUFFER, "GLTF index buffer"); } @@ -1989,8 +1989,9 @@ void Model::UpdateAnimation(Uint32 index, float time) } } -void Model::Transform(const float4x4& Matrix) +void Model::Transform(const float* _Matrix) { + auto Matrix = float4x4::MakeMatrix(_Matrix); for (auto& root_node : Nodes) { root_node->Matrix *= Matrix; @@ -2033,7 +2034,33 @@ Node* Model::NodeFromIndex(uint32_t index) return nodeFound; } +API_QUALIFIER +IGLTFModel* IGLTFModel_Create(IRenderDevice* pDevice, + IDeviceContext* pCtx, + const IGLTFModelCreateInfo* CI) { + return new Model(pDevice, pCtx, *CI); +} + +API_QUALIFIER +void IGLTFModel_Destroy(IGLTFModel* model) { + delete model; +} } // namespace GLTF } // namespace Diligent + +extern "C" +{ + API_QUALIFIER + Diligent::GLTF::IGLTFModel* Diligent_IGLTFModel_Create(Diligent::IRenderDevice* pDevice, + Diligent::IDeviceContext* pCtx, + const Diligent::GLTF::IGLTFModelCreateInfo* CI) { + return Diligent::GLTF::IGLTFModel_Create(pDevice, pCtx, CI); + } + + API_QUALIFIER + void Diligent_IGLTFModel_Destroy(Diligent::GLTF::IGLTFModel* model) { + Diligent::GLTF::IGLTFModel_Destroy(model); + } +} |
