diff --git a/indra/llrender/llcubemaparray.cpp b/indra/llrender/llcubemaparray.cpp index 7d3a92237b4a0fd69e9746f625835a674b1cb06d..0d8aae6e3000e019abfeba66bdccb1bb52739e7c 100644 --- a/indra/llrender/llcubemaparray.cpp +++ b/indra/llrender/llcubemaparray.cpp @@ -42,6 +42,9 @@ //#pragma optimize("", off) +// tex mem tracking +extern void alloc_tex_image(U32 width, U32 height, U32 pixformat, U32 count); + // MUST match order of OpenGL face-layers GLenum LLCubeMapArray::sTargets[6] = { @@ -139,6 +142,8 @@ void LLCubeMapArray::allocate(U32 resolution, U32 components, U32 count, BOOL us ++mip; } + alloc_tex_image(resolution, resolution, format, count * 6); + mImage->setAddressMode(LLTexUnit::TAM_CLAMP); if (use_mips) diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index fa54d4de26b31963c4f5664c04dcbf4a51bfd8fb..c7cbe9b62c0c621a59f2c569d84553e3d1c06d07 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -63,11 +63,12 @@ static U64 sTextureBytes = 0; // track a texture alloc on the currently bound texture. // asserts that no currently tracked alloc exists -static void alloc_tex_image(U32 width, U32 height, U32 pixformat) +void alloc_tex_image(U32 width, U32 height, U32 pixformat, U32 count) { U32 texUnit = gGL.getCurrentTexUnitIndex(); U32 texName = gGL.getTexUnit(texUnit)->getCurrTexture(); U64 size = LLImageGL::dataFormatBytes(pixformat, width, height); + size *= count; llassert(size >= 0); @@ -285,7 +286,10 @@ S32 LLImageGL::dataFormatBits(S32 dataformat) case GL_RGB: return 24; case GL_SRGB: return 24; case GL_RGB8: return 24; + case GL_RGB16F: return 48; case GL_RGBA: return 32; + case GL_RGBA8: return 32; + case GL_RGBA16F: return 64; case GL_SRGB_ALPHA: return 32; case GL_BGRA: return 32; // Used for QuickTime media textures on the Mac case GL_DEPTH_COMPONENT: return 24; @@ -1532,7 +1536,7 @@ void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 widt sub_image_lines(target, miplevel, 0, 0, width, height, pixformat, pixtype, src, width); } } - alloc_tex_image(width, height, pixformat); + alloc_tex_image(width, height, pixformat, 1); } stop_glerror(); }