diff options
author | Jason Sams <rjsams@android.com> | 2011-01-13 17:21:02 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-01-13 17:21:02 -0800 |
commit | e9d3da1374a4ce06610675f1f9b578b62fc23449 (patch) | |
tree | 870fe662019adfc0ae1b2e4d30781d6aba1eb942 /libs | |
parent | 7f5690bb1089980a73ad5d6dea2177cb74e8c9e7 (diff) | |
parent | 9333e64f79f5876584ed992c7e2c2dffacab8df0 (diff) | |
download | frameworks_base-e9d3da1374a4ce06610675f1f9b578b62fc23449.zip frameworks_base-e9d3da1374a4ce06610675f1f9b578b62fc23449.tar.gz frameworks_base-e9d3da1374a4ce06610675f1f9b578b62fc23449.tar.bz2 |
Merge "Re-implement img npot support in HC." into honeycomb
Diffstat (limited to 'libs')
-rw-r--r-- | libs/rs/rsContext.cpp | 1 | ||||
-rw-r--r-- | libs/rs/rsContext.h | 2 | ||||
-rw-r--r-- | libs/rs/rsSampler.cpp | 16 |
3 files changed, 17 insertions, 2 deletions
diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index bb38825..2e0c491 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -236,6 +236,7 @@ bool Context::initGLThread() { glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_VECTORS, &mGL.mMaxFragmentUniformVectors); mGL.OES_texture_npot = NULL != strstr((const char *)mGL.mExtensions, "GL_OES_texture_npot"); + mGL.GL_IMG_texture_npot = NULL != strstr((const char *)mGL.mExtensions, "GL_IMG_texture_npot"); mGL.GL_NV_texture_npot_2D_mipmap = NULL != strstr((const char *)mGL.mExtensions, "GL_NV_texture_npot_2D_mipmap"); mGL.EXT_texture_max_aniso = 1.0f; bool hasAniso = NULL != strstr((const char *)mGL.mExtensions, "GL_EXT_texture_filter_anisotropic"); diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index df275bc..9f94f26 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -205,6 +205,7 @@ public: mutable const ObjectBase * mObjHead; bool ext_OES_texture_npot() const {return mGL.OES_texture_npot;} + bool ext_GL_IMG_texture_npot() const {return mGL.GL_IMG_texture_npot;} bool ext_GL_NV_texture_npot_2D_mipmap() const {return mGL.GL_NV_texture_npot_2D_mipmap;} float ext_texture_max_aniso() const {return mGL.EXT_texture_max_aniso; } uint32_t getMaxFragmentTextures() const {return mGL.mMaxFragmentTextureImageUnits;} @@ -249,6 +250,7 @@ protected: int32_t mMaxVertexTextureUnits; bool OES_texture_npot; + bool GL_IMG_texture_npot; bool GL_NV_texture_npot_2D_mipmap; float EXT_texture_max_aniso; } mGL; diff --git a/libs/rs/rsSampler.cpp b/libs/rs/rsSampler.cpp index e2757df..c80aecc 100644 --- a/libs/rs/rsSampler.cpp +++ b/libs/rs/rsSampler.cpp @@ -77,8 +77,20 @@ void Sampler::setupGL(const Context *rsc, const Allocation *tex) { GLenum target = (GLenum)tex->getGLTarget(); if (!rsc->ext_OES_texture_npot() && tex->getType()->getIsNp2()) { - if (tex->getHasGraphicsMipmaps() && rsc->ext_GL_NV_texture_npot_2D_mipmap()) { - glTexParameteri(target, GL_TEXTURE_MIN_FILTER, trans[mMinFilter]); + if (tex->getHasGraphicsMipmaps() && + (rsc->ext_GL_NV_texture_npot_2D_mipmap() || rsc->ext_GL_IMG_texture_npot())) { + if (rsc->ext_GL_NV_texture_npot_2D_mipmap()) { + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, trans[mMinFilter]); + } else { + switch (trans[mMinFilter]) { + case GL_LINEAR_MIPMAP_LINEAR: + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); + break; + default: + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, trans[mMinFilter]); + break; + } + } } else { glTexParameteri(target, GL_TEXTURE_MIN_FILTER, transNP[mMinFilter]); } |