Loading services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp +31 −7 Original line number Original line Diff line number Diff line Loading @@ -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" // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- Loading Loading @@ -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); Loading Loading @@ -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 services/surfaceflinger/RenderEngine/GLES11RenderEngine.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +32 −7 Original line number Original line Diff line number Diff line Loading @@ -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> Loading @@ -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" Loading Loading @@ -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(); Loading Loading @@ -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 services/surfaceflinger/RenderEngine/GLES20RenderEngine.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading services/surfaceflinger/RenderEngine/ProgramCache.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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 Loading
services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp +31 −7 Original line number Original line Diff line number Diff line Loading @@ -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" // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- Loading Loading @@ -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); Loading Loading @@ -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
services/surfaceflinger/RenderEngine/GLES11RenderEngine.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading
services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +32 −7 Original line number Original line Diff line number Diff line Loading @@ -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> Loading @@ -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" Loading Loading @@ -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(); Loading Loading @@ -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
services/surfaceflinger/RenderEngine/GLES20RenderEngine.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading
services/surfaceflinger/RenderEngine/ProgramCache.cpp +4 −0 Original line number Original line Diff line number Diff line Loading @@ -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