diff options
Diffstat (limited to 'src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp')
-rw-r--r-- | src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp index eb23f3d..b140e85 100644 --- a/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp +++ b/src/runtimerender/resourcemanager/Qt3DSRenderBufferManager.cpp @@ -154,11 +154,13 @@ struct SBufferManager : public IBufferManager return m_StrTable->RegisterStr(m_PathBuilder.c_str()); } - void SetImageHasTransparency(CRegisteredString inImagePath, bool inHasTransparency) override + void SetImageHasTransparency(CRegisteredString inImagePath, bool inHasTransparency, + bool hasOpaque) override { pair<TImageMap::iterator, bool> theImage = m_ImageMap.insert(make_pair(inImagePath, SImageEntry())); theImage.first->second.m_TextureFlags.SetHasTransparency(inHasTransparency); + theImage.first->second.m_TextureFlags.setHasOpaquePixels(hasOpaque); } bool GetImageHasTransparency(CRegisteredString inSourcePath) const override @@ -169,6 +171,14 @@ struct SBufferManager : public IBufferManager return false; } + bool GetImageHasOpaquePixels(CRegisteredString inSourcePath) const override + { + TImageMap::const_iterator theIter = m_ImageMap.find(inSourcePath); + if (theIter != m_ImageMap.end()) + return theIter->second.m_TextureFlags.HasOpaquePixels(); + return false; + } + void SetImageTransparencyToFalseIfNotSet(CRegisteredString inSourcePath) override { pair<TImageMap::iterator, bool> theImage = @@ -512,9 +522,12 @@ struct SBufferManager : public IBufferManager if (theDecompressedImage.data) inLoadedImage.ReleaseDecompressedTexture(theDecompressedImage); } - if (wasInserted == true || inForceScanForTransparency) - theImage.first->second.m_TextureFlags.SetHasTransparency( - inLoadedImage.ScanForTransparency()); + if (wasInserted || inForceScanForTransparency) { + auto &flags = theImage.first->second.m_TextureFlags; + bool alsoOpaquePixels = false; + flags.SetHasTransparency(inLoadedImage.ScanForTransparency(alsoOpaquePixels)); + flags.setHasOpaquePixels(alsoOpaquePixels); + } theImage.first->second.m_Texture = theTexture; return theImage.first->second; } |