diff options
Diffstat (limited to 'services/surfaceflinger/LayerScreenshot.cpp')
-rw-r--r-- | services/surfaceflinger/LayerScreenshot.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/services/surfaceflinger/LayerScreenshot.cpp b/services/surfaceflinger/LayerScreenshot.cpp index b42353c..799ecdc 100644 --- a/services/surfaceflinger/LayerScreenshot.cpp +++ b/services/surfaceflinger/LayerScreenshot.cpp @@ -18,6 +18,9 @@ #include <stdint.h> #include <sys/types.h> +#include <GLES/gl.h> +#include <GLES/glext.h> + #include <utils/Errors.h> #include <utils/Log.h> @@ -25,7 +28,7 @@ #include "LayerScreenshot.h" #include "SurfaceFlinger.h" -#include "DisplayHardware/DisplayHardware.h" +#include "DisplayDevice.h" namespace android { @@ -41,8 +44,7 @@ LayerScreenshot::LayerScreenshot(SurfaceFlinger* flinger, DisplayID display, LayerScreenshot::~LayerScreenshot() { if (mTextureName) { - mFlinger->postMessageAsync( - new SurfaceFlinger::MessageDestroyGLTexture(mTextureName) ); + mFlinger->deleteTextureAsync(mTextureName); } } @@ -78,25 +80,25 @@ void LayerScreenshot::initTexture(GLfloat u, GLfloat v) { void LayerScreenshot::initStates(uint32_t w, uint32_t h, uint32_t flags) { LayerBaseClient::initStates(w, h, flags); - if (!(flags & ISurfaceComposer::eHidden)) { + if (!(flags & ISurfaceComposerClient::eHidden)) { capture(); } } uint32_t LayerScreenshot::doTransaction(uint32_t flags) { - const Layer::State& draw(drawingState()); - const Layer::State& curr(currentState()); + const LayerBase::State& draw(drawingState()); + const LayerBase::State& curr(currentState()); - if (draw.flags & ISurfaceComposer::eLayerHidden) { - if (!(curr.flags & ISurfaceComposer::eLayerHidden)) { + if (draw.flags & layer_state_t::eLayerHidden) { + if (!(curr.flags & layer_state_t::eLayerHidden)) { // we're going from hidden to visible status_t err = captureLocked(); if (err != NO_ERROR) { ALOGW("createScreenshotSurface failed (%s)", strerror(-err)); } } - } else if (curr.flags & ISurfaceComposer::eLayerHidden) { + } else if (curr.flags & layer_state_t::eLayerHidden) { // we're going from visible to hidden if (mTextureName) { glDeleteTextures(1, &mTextureName); @@ -106,13 +108,12 @@ uint32_t LayerScreenshot::doTransaction(uint32_t flags) return LayerBaseClient::doTransaction(flags); } -void LayerScreenshot::onDraw(const Region& clip) const +void LayerScreenshot::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const { const State& s(drawingState()); if (s.alpha>0) { - const DisplayHardware& hw(graphicPlane(0).displayHardware()); const GLfloat alpha = s.alpha/255.0f; - const uint32_t fbHeight = hw.getHeight(); + const uint32_t fbHeight = hw->getHeight(); if (s.alpha == 0xFF) { glDisable(GL_BLEND); @@ -121,6 +122,9 @@ void LayerScreenshot::onDraw(const Region& clip) const glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } + LayerMesh mesh; + computeGeometry(hw, &mesh); + glColor4f(0, 0, 0, alpha); glDisable(GL_TEXTURE_EXTERNAL_OES); @@ -134,8 +138,8 @@ void LayerScreenshot::onDraw(const Region& clip) const glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, mTexCoords); - glVertexPointer(2, GL_FLOAT, 0, mVertices); - glDrawArrays(GL_TRIANGLE_FAN, 0, mNumVertices); + glVertexPointer(2, GL_FLOAT, 0, mesh.getVertices()); + glDrawArrays(GL_TRIANGLE_FAN, 0, mesh.getVertexCount()); glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); |