Loading libs/surfaceflinger/Layer.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ Layer::Layer(SurfaceFlinger* flinger, DisplayID display, const sp<Client>& c, int32_t i) : LayerBaseClient(flinger, display, c, i), mSecure(false), mNeedsBlending(true) mNeedsBlending(true), mNeedsDithering(false) { // no OpenGL operation is possible here, since we might not be // in the OpenGL thread. Loading Loading @@ -106,10 +107,16 @@ status_t Layer::ditch() status_t Layer::setBuffers( uint32_t w, uint32_t h, PixelFormat format, uint32_t flags) { // this surfaces pixel format PixelFormatInfo info; status_t err = getPixelFormatInfo(format, &info); if (err) return err; // the display's pixel format const DisplayHardware& hw(graphicPlane(0).displayHardware()); PixelFormatInfo displayInfo; getPixelFormatInfo(hw.getFormat(), &displayInfo); uint32_t bufferFlags = 0; if (flags & ISurfaceComposer::eSecure) bufferFlags |= Buffer::SECURE; Loading @@ -119,6 +126,12 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h, mHeight = h; mSecure = (bufferFlags & Buffer::SECURE) ? true : false; mNeedsBlending = (info.h_alpha - info.l_alpha) > 0; // we use the red index int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED); int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED); mNeedsDithering = layerRedsize > displayRedSize; mBufferFlags = bufferFlags; for (size_t i=0 ; i<NUM_BUFFERS ; i++) { mBuffers[i] = new Buffer(); Loading libs/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public: virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); virtual void finishPageFlip(); virtual bool needsBlending() const { return mNeedsBlending; } virtual bool needsDithering() const { return mNeedsDithering; } virtual bool isSecure() const { return mSecure; } virtual sp<Surface> createSurface() const; virtual status_t ditch(); Loading Loading @@ -109,6 +110,7 @@ private: bool mSecure; int32_t mFrontBufferIndex; bool mNeedsBlending; bool mNeedsDithering; Region mPostedDirtyRegion; sp<FreezeLock> mFreezeLock; PixelFormat mFormat; Loading libs/surfaceflinger/LayerBase.cpp +6 −8 Original line number Diff line number Diff line Loading @@ -393,14 +393,6 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const glEnable(GL_TEXTURE_2D); // Dithering... bool fast = !(mFlags & DisplayHardware::SLOW_CONFIG); if (fast || s.flags & ISurfaceComposer::eLayerDither) { glEnable(GL_DITHER); } else { glDisable(GL_DITHER); } if (UNLIKELY(s.alpha < 0xFF)) { // We have an alpha-modulation. We need to modulate all // texture components by alpha because we're always using Loading Loading @@ -516,6 +508,12 @@ void LayerBase::validateTexture(GLint textureName) const glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } if (needsDithering()) { glEnable(GL_DITHER); } else { glDisable(GL_DITHER); } } void LayerBase::loadTexture(Texture* texture, GLint textureName, Loading libs/surfaceflinger/LayerBase.h +5 −0 Original line number Diff line number Diff line Loading @@ -187,6 +187,11 @@ public: */ virtual bool needsBlending() const { return false; } /** * needsDithering - true if this surface needs dithering */ virtual bool needsDithering() const { return false; } /** * transformed -- true is this surface needs a to be transformed */ Loading libs/surfaceflinger/SurfaceFlinger.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -1497,11 +1497,12 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) "+ %s %p\n" " " "z=%9d, pos=(%4d,%4d), size=(%4d,%4d), " "needsBlending=%1d, invalidate=%1d, " "needsBlending=%1d, needsDithering=%1d, invalidate=%1d, " "alpha=0x%02x, flags=0x%08x, tr=[%.2f, %.2f][%.2f, %.2f]\n", layer->getTypeID(), layer.get(), s.z, layer->tx(), layer->ty(), s.w, s.h, layer->needsBlending(), layer->contentDirty, layer->needsBlending(), layer->needsDithering(), layer->contentDirty, s.alpha, s.flags, s.transform[0], s.transform[1], s.transform[2], s.transform[3]); Loading Loading
libs/surfaceflinger/Layer.cpp +14 −1 Original line number Diff line number Diff line Loading @@ -51,7 +51,8 @@ Layer::Layer(SurfaceFlinger* flinger, DisplayID display, const sp<Client>& c, int32_t i) : LayerBaseClient(flinger, display, c, i), mSecure(false), mNeedsBlending(true) mNeedsBlending(true), mNeedsDithering(false) { // no OpenGL operation is possible here, since we might not be // in the OpenGL thread. Loading Loading @@ -106,10 +107,16 @@ status_t Layer::ditch() status_t Layer::setBuffers( uint32_t w, uint32_t h, PixelFormat format, uint32_t flags) { // this surfaces pixel format PixelFormatInfo info; status_t err = getPixelFormatInfo(format, &info); if (err) return err; // the display's pixel format const DisplayHardware& hw(graphicPlane(0).displayHardware()); PixelFormatInfo displayInfo; getPixelFormatInfo(hw.getFormat(), &displayInfo); uint32_t bufferFlags = 0; if (flags & ISurfaceComposer::eSecure) bufferFlags |= Buffer::SECURE; Loading @@ -119,6 +126,12 @@ status_t Layer::setBuffers( uint32_t w, uint32_t h, mHeight = h; mSecure = (bufferFlags & Buffer::SECURE) ? true : false; mNeedsBlending = (info.h_alpha - info.l_alpha) > 0; // we use the red index int displayRedSize = displayInfo.getSize(PixelFormatInfo::INDEX_RED); int layerRedsize = info.getSize(PixelFormatInfo::INDEX_RED); mNeedsDithering = layerRedsize > displayRedSize; mBufferFlags = bufferFlags; for (size_t i=0 ; i<NUM_BUFFERS ; i++) { mBuffers[i] = new Buffer(); Loading
libs/surfaceflinger/Layer.h +2 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,7 @@ public: virtual void unlockPageFlip(const Transform& planeTransform, Region& outDirtyRegion); virtual void finishPageFlip(); virtual bool needsBlending() const { return mNeedsBlending; } virtual bool needsDithering() const { return mNeedsDithering; } virtual bool isSecure() const { return mSecure; } virtual sp<Surface> createSurface() const; virtual status_t ditch(); Loading Loading @@ -109,6 +110,7 @@ private: bool mSecure; int32_t mFrontBufferIndex; bool mNeedsBlending; bool mNeedsDithering; Region mPostedDirtyRegion; sp<FreezeLock> mFreezeLock; PixelFormat mFormat; Loading
libs/surfaceflinger/LayerBase.cpp +6 −8 Original line number Diff line number Diff line Loading @@ -393,14 +393,6 @@ void LayerBase::drawWithOpenGL(const Region& clip, const Texture& texture) const glEnable(GL_TEXTURE_2D); // Dithering... bool fast = !(mFlags & DisplayHardware::SLOW_CONFIG); if (fast || s.flags & ISurfaceComposer::eLayerDither) { glEnable(GL_DITHER); } else { glDisable(GL_DITHER); } if (UNLIKELY(s.alpha < 0xFF)) { // We have an alpha-modulation. We need to modulate all // texture components by alpha because we're always using Loading Loading @@ -516,6 +508,12 @@ void LayerBase::validateTexture(GLint textureName) const glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } if (needsDithering()) { glEnable(GL_DITHER); } else { glDisable(GL_DITHER); } } void LayerBase::loadTexture(Texture* texture, GLint textureName, Loading
libs/surfaceflinger/LayerBase.h +5 −0 Original line number Diff line number Diff line Loading @@ -187,6 +187,11 @@ public: */ virtual bool needsBlending() const { return false; } /** * needsDithering - true if this surface needs dithering */ virtual bool needsDithering() const { return false; } /** * transformed -- true is this surface needs a to be transformed */ Loading
libs/surfaceflinger/SurfaceFlinger.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -1497,11 +1497,12 @@ status_t SurfaceFlinger::dump(int fd, const Vector<String16>& args) "+ %s %p\n" " " "z=%9d, pos=(%4d,%4d), size=(%4d,%4d), " "needsBlending=%1d, invalidate=%1d, " "needsBlending=%1d, needsDithering=%1d, invalidate=%1d, " "alpha=0x%02x, flags=0x%08x, tr=[%.2f, %.2f][%.2f, %.2f]\n", layer->getTypeID(), layer.get(), s.z, layer->tx(), layer->ty(), s.w, s.h, layer->needsBlending(), layer->contentDirty, layer->needsBlending(), layer->needsDithering(), layer->contentDirty, s.alpha, s.flags, s.transform[0], s.transform[1], s.transform[2], s.transform[3]); Loading