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

Commit e0ec2a95 authored by Mathias Agopian's avatar Mathias Agopian Committed by Android (Google) Code Review
Browse files

Merge "Fix ES2 composition on some devices" into klp-dev

parents 2eaefe19 458197de
Loading
Loading
Loading
Loading
+31 −7
Original line number Original line Diff line number Diff line
@@ -15,12 +15,12 @@
 */
 */


#include <GLES/gl.h>
#include <GLES/gl.h>
#include <GLES/glext.h>


#include <utils/String8.h>
#include <utils/String8.h>
#include <cutils/compiler.h>
#include <cutils/compiler.h>


#include "GLES11RenderEngine.h"
#include "GLES11RenderEngine.h"
#include "GLExtensions.h"
#include "Mesh.h"
#include "Mesh.h"


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
@@ -183,6 +183,31 @@ void GLES11RenderEngine::disableBlending() {
    glDisable(GL_BLEND);
    glDisable(GL_BLEND);
}
}


void GLES11RenderEngine::bindImageAsFramebuffer(EGLImageKHR image,
        uint32_t* texName, uint32_t* fbName, uint32_t* status) {
    GLuint tname, name;
    // turn our EGLImage into a texture
    glGenTextures(1, &tname);
    glBindTexture(GL_TEXTURE_2D, tname);
    glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (GLeglImageOES)image);

    // create a Framebuffer Object to render into
    glGenFramebuffersOES(1, &name);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, name);
    glFramebufferTexture2DOES(GL_FRAMEBUFFER_OES,
            GL_COLOR_ATTACHMENT0_OES, GL_TEXTURE_2D, tname, 0);

    *status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES);
    *texName = tname;
    *fbName = name;
}

void GLES11RenderEngine::unbindFramebuffer(uint32_t texName, uint32_t fbName) {
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, 0);
    glDeleteFramebuffersOES(1, &fbName);
    glDeleteTextures(1, &texName);
}

void GLES11RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float b, float a) {
void GLES11RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float b, float a) {
    glColor4f(r, g, b, a);
    glColor4f(r, g, b, a);
    glDisable(GL_TEXTURE_EXTERNAL_OES);
    glDisable(GL_TEXTURE_EXTERNAL_OES);
@@ -219,14 +244,13 @@ void GLES11RenderEngine::drawMesh(const Mesh& mesh) {
}
}


void GLES11RenderEngine::dump(String8& result) {
void GLES11RenderEngine::dump(String8& result) {
    const GLExtensions& extensions(GLExtensions::getInstance());
    RenderEngine::dump(result);
    result.appendFormat("GLES: %s, %s, %s\n",
            extensions.getVendor(),
            extensions.getRenderer(),
            extensions.getVersion());
    result.appendFormat("%s\n", extensions.getExtension());
}
}


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
}; // namespace android
}; // namespace android
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------

#if defined(__gl2_h_)
#error "don't include gl2/gl2.h in this file"
#endif
+4 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,10 @@ class GLES11RenderEngine : public RenderEngine {
    GLint mMaxViewportDims[2];
    GLint mMaxViewportDims[2];
    GLint mMaxTextureSize;
    GLint mMaxTextureSize;


    virtual void bindImageAsFramebuffer(EGLImageKHR image,
            uint32_t* texName, uint32_t* fbName, uint32_t* status);
    virtual void unbindFramebuffer(uint32_t texName, uint32_t fbName);

public:
public:
    GLES11RenderEngine();
    GLES11RenderEngine();


+32 −7
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
#define ATRACE_TAG ATRACE_TAG_GRAPHICS
#define ATRACE_TAG ATRACE_TAG_GRAPHICS


#include <GLES2/gl2.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>


#include <utils/String8.h>
#include <utils/String8.h>
#include <utils/Trace.h>
#include <utils/Trace.h>
@@ -24,7 +25,6 @@
#include <cutils/compiler.h>
#include <cutils/compiler.h>


#include "GLES20RenderEngine.h"
#include "GLES20RenderEngine.h"
#include "GLExtensions.h"
#include "Program.h"
#include "Program.h"
#include "ProgramCache.h"
#include "ProgramCache.h"
#include "Description.h"
#include "Description.h"
@@ -157,6 +157,32 @@ void GLES20RenderEngine::disableBlending() {
    glDisable(GL_BLEND);
    glDisable(GL_BLEND);
}
}



void GLES20RenderEngine::bindImageAsFramebuffer(EGLImageKHR image,
        uint32_t* texName, uint32_t* fbName, uint32_t* status) {
    GLuint tname, name;
    // turn our EGLImage into a texture
    glGenTextures(1, &tname);
    glBindTexture(GL_TEXTURE_2D, tname);
    glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (GLeglImageOES)image);

    // create a Framebuffer Object to render into
    glGenFramebuffers(1, &name);
    glBindFramebuffer(GL_FRAMEBUFFER, name);
    glFramebufferTexture2D(GL_FRAMEBUFFER,
            GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tname, 0);

    *status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
    *texName = tname;
    *fbName = name;
}

void GLES20RenderEngine::unbindFramebuffer(uint32_t texName, uint32_t fbName) {
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    glDeleteFramebuffers(1, &fbName);
    glDeleteTextures(1, &texName);
}

void GLES20RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float b, float a) {
void GLES20RenderEngine::fillWithColor(const Mesh& mesh, float r, float g, float b, float a) {
    mState.setColor(r, g, b, a);
    mState.setColor(r, g, b, a);
    disableTexturing();
    disableTexturing();
@@ -200,14 +226,13 @@ void GLES20RenderEngine::drawMesh(const Mesh& mesh) {
}
}


void GLES20RenderEngine::dump(String8& result) {
void GLES20RenderEngine::dump(String8& result) {
    const GLExtensions& extensions(GLExtensions::getInstance());
    RenderEngine::dump(result);
    result.appendFormat("GLES: %s, %s, %s\n",
            extensions.getVendor(),
            extensions.getRenderer(),
            extensions.getVersion());
    result.appendFormat("%s\n", extensions.getExtension());
}
}


// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
}; // namespace android
}; // namespace android
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------

#if defined(__gl_h_)
#error "don't include gl/gl.h in this file"
#endif
+4 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,10 @@ class GLES20RenderEngine : public RenderEngine {


    Description mState;
    Description mState;


    virtual void bindImageAsFramebuffer(EGLImageKHR image,
            uint32_t* texName, uint32_t* fbName, uint32_t* status);
    virtual void unbindFramebuffer(uint32_t texName, uint32_t fbName);

public:
public:
    GLES20RenderEngine();
    GLES20RenderEngine();


+4 −0
Original line number Original line Diff line number Diff line
@@ -122,6 +122,10 @@ String8 ProgramCache::generateFragmentShader(const Key& needs) {
    if (needs.getTextureTarget() == Key::TEXTURE_EXT) {
    if (needs.getTextureTarget() == Key::TEXTURE_EXT) {
        fs << "#extension GL_OES_EGL_image_external : require";
        fs << "#extension GL_OES_EGL_image_external : require";
    }
    }

    // default precision is required-ish in fragment shaders
    fs << "precision mediump float;";

    if (needs.getTextureTarget() == Key::TEXTURE_EXT) {
    if (needs.getTextureTarget() == Key::TEXTURE_EXT) {
        fs << "uniform samplerExternalOES sampler;"
        fs << "uniform samplerExternalOES sampler;"
           << "varying vec2 outTexCoords;";
           << "varying vec2 outTexCoords;";
Loading