From c2908e60c9b021fb4bb69acff8d49981dd4dade8 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Tue, 23 Feb 2010 17:44:28 -0800 Subject: Support defered generation of mipmaps. With this change we support mipmap generation when the texture is uploaded to GL without requiring RS to retain the full chain. --- libs/rs/rsAllocation.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'libs/rs/rsAllocation.cpp') diff --git a/libs/rs/rsAllocation.cpp b/libs/rs/rsAllocation.cpp index 1ae2317..f1798de 100644 --- a/libs/rs/rsAllocation.cpp +++ b/libs/rs/rsAllocation.cpp @@ -17,6 +17,7 @@ #include "rsContext.h" #include +#include #include using namespace android; @@ -88,12 +89,13 @@ bool Allocation::fixAllocation() return false; } -void Allocation::deferedUploadToTexture(const Context *rsc, uint32_t lodOffset) +void Allocation::deferedUploadToTexture(const Context *rsc, bool genMipmap, uint32_t lodOffset) { rsAssert(lodOffset < mType->getLODCount()); mIsTexture = true; mTextureLOD = lodOffset; mUploadDefered = true; + mTextureGenMipmap = !mType->getDimLOD() && genMipmap; } void Allocation::uploadToTexture(const Context *rsc) @@ -138,6 +140,10 @@ void Allocation::uploadToTexture(const Context *rsc) adapt.getDimX(), adapt.getDimY(), 0, format, type, ptr); } + if (mTextureGenMipmap) { + glGenerateMipmap(GL_TEXTURE_2D); + } + } void Allocation::deferedUploadToBufferObject(const Context *rsc) @@ -316,10 +322,10 @@ RsAllocation rsi_AllocationCreateSized(Context *rsc, RsElement e, size_t count) return rsi_AllocationCreateTyped(rsc, type); } -void rsi_AllocationUploadToTexture(Context *rsc, RsAllocation va, uint32_t baseMipLevel) +void rsi_AllocationUploadToTexture(Context *rsc, RsAllocation va, bool genmip, uint32_t baseMipLevel) { Allocation *alloc = static_cast(va); - alloc->deferedUploadToTexture(rsc, baseMipLevel); + alloc->deferedUploadToTexture(rsc, genmip, baseMipLevel); } void rsi_AllocationUploadToBufferObject(Context *rsc, RsAllocation va) -- cgit v1.1