Loading include/gui/SurfaceTexture.h +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <EGL/egl.h> #include <EGL/eglext.h> #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> #include <gui/ISurfaceTexture.h> Loading Loading @@ -61,7 +62,8 @@ public: // tex indicates the name OpenGL texture to which images are to be streamed. // This texture name cannot be changed once the SurfaceTexture is created. SurfaceTexture(GLuint tex, bool allowSynchronousMode = true); SurfaceTexture(GLuint tex, bool allowSynchronousMode = true, GLenum texTarget = GL_TEXTURE_EXTERNAL_OES); virtual ~SurfaceTexture(); Loading Loading @@ -458,6 +460,14 @@ private: // member variables are accessed. mutable Mutex mMutex; // mTexTarget is the GL texture target with which the GL texture object is // associated. It is set in the constructor and never changed. It is // almost always GL_TEXTURE_EXTERNAL_OES except for one use case in Android // Browser. In that case it is set to GL_TEXTURE_2D to allow // glCopyTexSubImage to read from the texture. This is a hack to work // around a GL driver limitation on the number of FBO attachments, which the // browser's tile cache exceeds. const GLenum mTexTarget; }; // ---------------------------------------------------------------------------- Loading libs/gui/SurfaceTexture.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -94,7 +94,8 @@ static int32_t createProcessUniqueId() { return android_atomic_inc(&globalCounter); } SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) : SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode, GLenum texTarget) : mDefaultWidth(1), mDefaultHeight(1), mPixelFormat(PIXEL_FORMAT_RGBA_8888), Loading @@ -110,7 +111,8 @@ SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) : mSynchronousMode(false), mAllowSynchronousMode(allowSynchronousMode), mConnectedApi(NO_CONNECTED_API), mAbandoned(false) { mAbandoned(false), mTexTarget(texTarget) { // Choose a name using the PID and a process-unique ID. mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId()); Loading Loading @@ -698,9 +700,8 @@ status_t SurfaceTexture::updateTexImage() { ST_LOGW("updateTexImage: clearing GL error: %#04x", error); } glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName); glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, (GLeglImageOES)image); glBindTexture(mTexTarget, mTexName); glEGLImageTargetTexture2DOES(mTexTarget, (GLeglImageOES)image); bool failed = false; while ((error = glGetError()) != GL_NO_ERROR) { Loading Loading @@ -735,7 +736,7 @@ status_t SurfaceTexture::updateTexImage() { mDequeueCondition.signal(); } else { // We always bind the texture even if we don't update its contents. glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName); glBindTexture(mTexTarget, mTexName); } return OK; Loading @@ -761,7 +762,7 @@ bool SurfaceTexture::isExternalFormat(uint32_t format) } GLenum SurfaceTexture::getCurrentTextureTarget() const { return GL_TEXTURE_EXTERNAL_OES; return mTexTarget; } void SurfaceTexture::getTransformMatrix(float mtx[16]) { Loading Loading
include/gui/SurfaceTexture.h +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <EGL/egl.h> #include <EGL/eglext.h> #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> #include <gui/ISurfaceTexture.h> Loading Loading @@ -61,7 +62,8 @@ public: // tex indicates the name OpenGL texture to which images are to be streamed. // This texture name cannot be changed once the SurfaceTexture is created. SurfaceTexture(GLuint tex, bool allowSynchronousMode = true); SurfaceTexture(GLuint tex, bool allowSynchronousMode = true, GLenum texTarget = GL_TEXTURE_EXTERNAL_OES); virtual ~SurfaceTexture(); Loading Loading @@ -458,6 +460,14 @@ private: // member variables are accessed. mutable Mutex mMutex; // mTexTarget is the GL texture target with which the GL texture object is // associated. It is set in the constructor and never changed. It is // almost always GL_TEXTURE_EXTERNAL_OES except for one use case in Android // Browser. In that case it is set to GL_TEXTURE_2D to allow // glCopyTexSubImage to read from the texture. This is a hack to work // around a GL driver limitation on the number of FBO attachments, which the // browser's tile cache exceeds. const GLenum mTexTarget; }; // ---------------------------------------------------------------------------- Loading
libs/gui/SurfaceTexture.cpp +8 −7 Original line number Diff line number Diff line Loading @@ -94,7 +94,8 @@ static int32_t createProcessUniqueId() { return android_atomic_inc(&globalCounter); } SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) : SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode, GLenum texTarget) : mDefaultWidth(1), mDefaultHeight(1), mPixelFormat(PIXEL_FORMAT_RGBA_8888), Loading @@ -110,7 +111,8 @@ SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode) : mSynchronousMode(false), mAllowSynchronousMode(allowSynchronousMode), mConnectedApi(NO_CONNECTED_API), mAbandoned(false) { mAbandoned(false), mTexTarget(texTarget) { // Choose a name using the PID and a process-unique ID. mName = String8::format("unnamed-%d-%d", getpid(), createProcessUniqueId()); Loading Loading @@ -698,9 +700,8 @@ status_t SurfaceTexture::updateTexImage() { ST_LOGW("updateTexImage: clearing GL error: %#04x", error); } glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName); glEGLImageTargetTexture2DOES(GL_TEXTURE_EXTERNAL_OES, (GLeglImageOES)image); glBindTexture(mTexTarget, mTexName); glEGLImageTargetTexture2DOES(mTexTarget, (GLeglImageOES)image); bool failed = false; while ((error = glGetError()) != GL_NO_ERROR) { Loading Loading @@ -735,7 +736,7 @@ status_t SurfaceTexture::updateTexImage() { mDequeueCondition.signal(); } else { // We always bind the texture even if we don't update its contents. glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTexName); glBindTexture(mTexTarget, mTexName); } return OK; Loading @@ -761,7 +762,7 @@ bool SurfaceTexture::isExternalFormat(uint32_t format) } GLenum SurfaceTexture::getCurrentTextureTarget() const { return GL_TEXTURE_EXTERNAL_OES; return mTexTarget; } void SurfaceTexture::getTransformMatrix(float mtx[16]) { Loading