@@ -275,15 +275,25 @@ status_t SurfaceFlinger::readyToRun()
275275
276276 const uint16_t g0 = pack565 (0x0F ,0x1F ,0x0F );
277277 const uint16_t g1 = pack565 (0x17 ,0x2f ,0x17 );
278- const uint16_t textureData [4 ] = { g0, g1, g1, g0 };
278+ const uint16_t wormholeTexData [4 ] = { g0, g1, g1, g0 };
279279 glGenTextures (1 , &mWormholeTexName );
280280 glBindTexture (GL_TEXTURE_2D, mWormholeTexName );
281281 glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
282282 glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
283283 glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
284284 glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
285285 glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGB, 2 , 2 , 0 ,
286- GL_RGB, GL_UNSIGNED_SHORT_5_6_5, textureData);
286+ GL_RGB, GL_UNSIGNED_SHORT_5_6_5, wormholeTexData);
287+
288+ const uint16_t protTexData[] = { pack565 (0x03 , 0x03 , 0x03 ) };
289+ glGenTextures (1 , &mProtectedTexName );
290+ glBindTexture (GL_TEXTURE_2D, mProtectedTexName );
291+ glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
292+ glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
293+ glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
294+ glTexParameterx (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
295+ glTexImage2D (GL_TEXTURE_2D, 0 , GL_RGB, 1 , 1 , 0 ,
296+ GL_RGB, GL_UNSIGNED_SHORT_5_6_5, protTexData);
287297
288298 glViewport (0 , 0 , w, h);
289299 glMatrixMode (GL_PROJECTION);
@@ -2255,22 +2265,6 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
22552265 if (UNLIKELY (uint32_t (dpy) >= DISPLAY_COUNT))
22562266 return BAD_VALUE;
22572267
2258- // make sure none of the layers are protected
2259- const LayerVector& layers (mDrawingState .layersSortedByZ );
2260- const size_t count = layers.size ();
2261- for (size_t i=0 ; i<count ; ++i) {
2262- const sp<LayerBase>& layer (layers[i]);
2263- const uint32_t flags = layer->drawingState ().flags ;
2264- if (!(flags & ISurfaceComposer::eLayerHidden)) {
2265- const uint32_t z = layer->drawingState ().z ;
2266- if (z >= minLayerZ && z <= maxLayerZ) {
2267- if (layer->isProtected ()) {
2268- return INVALID_OPERATION;
2269- }
2270- }
2271- }
2272- }
2273-
22742268 if (!GLExtensions::getInstance ().haveFramebufferObject ())
22752269 return INVALID_OPERATION;
22762270
@@ -2320,6 +2314,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(DisplayID dpy,
23202314 glClearColor (0 ,0 ,0 ,1 );
23212315 glClear (GL_COLOR_BUFFER_BIT);
23222316
2317+ const LayerVector& layers (mDrawingState .layersSortedByZ );
2318+ const size_t count = layers.size ();
23232319 for (size_t i=0 ; i<count ; ++i) {
23242320 const sp<LayerBase>& layer (layers[i]);
23252321 const uint32_t flags = layer->drawingState ().flags ;
0 commit comments