From e32935e0f6684440ba18653988ea388ccbfb8b0b Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Wed, 11 Nov 2020 15:11:00 -0400 Subject: [PATCH] Backport Canvas memory stats fix from 12.0. Fixes #1642 --- src/modules/graphics/opengl/Canvas.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/graphics/opengl/Canvas.cpp b/src/modules/graphics/opengl/Canvas.cpp index c6a2ba7c5..9bd14ab51 100644 --- a/src/modules/graphics/opengl/Canvas.cpp +++ b/src/modules/graphics/opengl/Canvas.cpp @@ -287,12 +287,18 @@ bool Canvas::loadVolatile() if (!isReadable() || actualSamples > 0) createRenderbuffer(pixelWidth, pixelHeight, actualSamples, format, renderbuffer); - int64 memsize = getPixelFormatSize(format) * pixelWidth * pixelHeight; - if (getMipmapCount() > 1) - memsize *= 1.33334; + int64 memsize = 0; + + for (int mip = 0; mip < getMipmapCount(); mip++) + { + int w = getPixelWidth(mip); + int h = getPixelHeight(mip); + int slices = getDepth(mip) * layers * (texType == TEXTURE_CUBE ? 6 : 1); + memsize += getPixelFormatSize(format) * w * h * slices; + } if (actualSamples > 1 && isReadable()) - memsize += getPixelFormatSize(format) * pixelWidth * pixelHeight * actualSamples; + memsize += memsize * actualSamples; else if (actualSamples > 1) memsize *= actualSamples;