Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3963a97 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android (Google) Code Review
Browse files

Merge "SurfaceTexture: parameterize the texture target"

parents 61ee4f25 fb1b5a2f
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>

#include <gui/ISurfaceTexture.h>

@@ -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();

@@ -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;
};

// ----------------------------------------------------------------------------
+8 −7
Original line number Diff line number Diff line
@@ -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),
@@ -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());

@@ -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) {
@@ -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;
@@ -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]) {