From fdb31f4e87e0056f7330a514f0a8a416d7bab99e Mon Sep 17 00:00:00 2001 From: Ben Vinson Date: Sat, 18 Apr 2020 19:31:00 -0600 Subject: [PATCH] Use wiResource structs instead of texture pointers for deferred mip generation --- Editor/ModelImporter_GLTF.cpp | 6 +++--- WickedEngine/wiRenderer.cpp | 8 ++++---- WickedEngine/wiRenderer.h | 3 ++- WickedEngine/wiResourceManager.cpp | 11 ++++++----- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Editor/ModelImporter_GLTF.cpp b/Editor/ModelImporter_GLTF.cpp index b03fae984..7744b224e 100644 --- a/Editor/ModelImporter_GLTF.cpp +++ b/Editor/ModelImporter_GLTF.cpp @@ -138,8 +138,6 @@ std::shared_ptr RegisterTexture(tinygltf::Image *image, const string if (tex != nullptr) { - wiRenderer::AddDeferredMIPGen(tex, true); - if (image->uri.empty()) { // If the texture was embedded, export it as a file: @@ -154,7 +152,9 @@ std::shared_ptr RegisterTexture(tinygltf::Image *image, const string } // We loaded the texture2d, so register to the resource manager to be retrieved later: - return wiResourceManager::Register(image->uri, tex, wiResource::IMAGE); + auto resource = wiResourceManager::Register(image->uri, tex, wiResource::IMAGE); + wiRenderer::AddDeferredMIPGen(resource, true); + return resource; } } else diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 90917e05b..4c28e2d06 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -167,7 +167,7 @@ std::vector paintrads; XMFLOAT4 waterPlane = XMFLOAT4(0, 1, 0, 0); wiSpinLock deferredMIPGenLock; -std::vector> deferredMIPGens; +std::vector, bool>> deferredMIPGens; wiGPUBVH sceneBVH; @@ -4026,7 +4026,7 @@ void UpdateRenderData(CommandList cmd) { MIPGEN_OPTIONS mipopt; mipopt.preserve_coverage = it.second; - GenerateMipChain(*it.first, MIPGENFILTER_LINEAR, cmd, mipopt); + GenerateMipChain(*it.first->texture, MIPGENFILTER_LINEAR, cmd, mipopt); } deferredMIPGens.clear(); deferredMIPGenLock.unlock(); @@ -11166,10 +11166,10 @@ void DrawPaintRadius(const PaintRadius& paintrad) paintrads.push_back(paintrad); } -void AddDeferredMIPGen(const Texture* tex, bool preserve_coverage) +void AddDeferredMIPGen(std::shared_ptr resource, bool preserve_coverage) { deferredMIPGenLock.lock(); - deferredMIPGens.push_back(std::make_pair(tex, preserve_coverage)); + deferredMIPGens.push_back(std::make_pair(resource, preserve_coverage)); deferredMIPGenLock.unlock(); } diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index dede30f0f..96f4151a4 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -8,6 +8,7 @@ #include struct RAY; +struct wiResource; namespace wiRenderer { @@ -536,7 +537,7 @@ namespace wiRenderer void DrawPaintRadius(const PaintRadius& paintrad); // Add a texture that should be mipmapped whenever it is feasible to do so - void AddDeferredMIPGen(const wiGraphics::Texture* tex, bool preserve_coverage = false); + void AddDeferredMIPGen(std::shared_ptr res, bool preserve_coverage = false); struct CustomShader { diff --git a/WickedEngine/wiResourceManager.cpp b/WickedEngine/wiResourceManager.cpp index 24b1663de..43db11798 100644 --- a/WickedEngine/wiResourceManager.cpp +++ b/WickedEngine/wiResourceManager.cpp @@ -266,11 +266,6 @@ namespace wiResourceManager assert(subresource_index == i); } - if (image != nullptr && image->GetDesc().MipLevels > 1) - { - wiRenderer::AddDeferredMIPGen(image, true); - } - success = image; } @@ -293,6 +288,12 @@ namespace wiResourceManager { resource->data = success; resource->type = type; + + if (type == wiResource::IMAGE && resource->texture->GetDesc().MipLevels > 1) + { + wiRenderer::AddDeferredMIPGen(resource, true); + } + return resource; }