5050#include " DdmConnection.h"
5151#include " Layer.h"
5252#include " LayerDim.h"
53- #include " LayerScreenshot.h"
5453#include " SurfaceFlinger.h"
5554
5655#include " DisplayHardware/DisplayHardware.h"
@@ -1352,9 +1351,6 @@ sp<ISurface> SurfaceFlinger::createSurface(
13521351 case eFXSurfaceDim:
13531352 layer = createDimSurface (client, d, w, h, flags);
13541353 break ;
1355- case eFXSurfaceScreenshot:
1356- layer = createScreenshotSurface (client, d, w, h, flags);
1357- break ;
13581354 }
13591355
13601356 if (layer != 0 ) {
@@ -1417,19 +1413,7 @@ sp<LayerDim> SurfaceFlinger::createDimSurface(
14171413 uint32_t w, uint32_t h, uint32_t flags)
14181414{
14191415 sp<LayerDim> layer = new LayerDim (this , display, client);
1420- return layer;
1421- }
1422-
1423- sp<LayerScreenshot> SurfaceFlinger::createScreenshotSurface (
1424- const sp<Client>& client, DisplayID display,
1425- uint32_t w, uint32_t h, uint32_t flags)
1426- {
1427- sp<LayerScreenshot> layer = new LayerScreenshot (this , display, client);
1428- status_t err = layer->capture ();
1429- if (err != NO_ERROR ) {
1430- layer.clear ();
1431- LOGW (" createScreenshotSurface failed (%s)" , strerror (-err));
1432- }
1416+ layer->initStates (w, h, flags);
14331417 return layer;
14341418}
14351419
@@ -1792,13 +1776,6 @@ void SurfaceFlinger::repaintEverything() {
17921776
17931777// ---------------------------------------------------------------------------
17941778
1795- status_t SurfaceFlinger::renderScreenToTexture (DisplayID dpy,
1796- GLuint* textureName, GLfloat* uOut, GLfloat* vOut)
1797- {
1798- Mutex::Autolock _l (mStateLock );
1799- return renderScreenToTextureLocked (dpy, textureName, uOut, vOut);
1800- }
1801-
18021779status_t SurfaceFlinger::renderScreenToTextureLocked (DisplayID dpy,
18031780 GLuint* textureName, GLfloat* uOut, GLfloat* vOut)
18041781{
@@ -1862,6 +1839,11 @@ status_t SurfaceFlinger::renderScreenToTextureLocked(DisplayID dpy,
18621839
18631840status_t SurfaceFlinger::electronBeamOffAnimationImplLocked ()
18641841{
1842+ status_t result = PERMISSION_DENIED ;
1843+
1844+ if (!GLExtensions::getInstance ().haveFramebufferObject ())
1845+ return INVALID_OPERATION ;
1846+
18651847 // get screen geometry
18661848 const DisplayHardware& hw (graphicPlane (0 ).displayHardware ());
18671849 const uint32_t hw_w = hw.getWidth ();
@@ -1870,7 +1852,7 @@ status_t SurfaceFlinger::electronBeamOffAnimationImplLocked()
18701852
18711853 GLfloat u, v;
18721854 GLuint tname;
1873- status_t result = renderScreenToTextureLocked (0 , &tname, &u, &v);
1855+ result = renderScreenToTextureLocked (0 , &tname, &u, &v);
18741856 if (result != NO_ERROR ) {
18751857 return result;
18761858 }
@@ -2046,6 +2028,10 @@ status_t SurfaceFlinger::electronBeamOnAnimationImplLocked()
20462028 return result;
20472029 }
20482030
2031+ // back to main framebuffer
2032+ glBindFramebufferOES (GL_FRAMEBUFFER_OES , 0 );
2033+ glDisable (GL_SCISSOR_TEST );
2034+
20492035 GLfloat vtx[8 ];
20502036 const GLfloat texCoords[4 ][2 ] = { {0 ,v}, {0 ,0 }, {u,0 }, {u,v} };
20512037 glBindTexture (GL_TEXTURE_2D , tname);
0 commit comments