am e74ff81e: Merge "Remove concept of layer alpha override" into mnc-dev

* commit 'e74ff81e0575bbe4361960739131a0256167f7c8':
  Remove concept of layer alpha override
This commit is contained in:
Chris Craik
2015-04-29 22:25:59 +00:00
committed by Android Git Automerger
6 changed files with 10 additions and 56 deletions

View File

@@ -638,8 +638,7 @@ void DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
DEFER_LOGD("--flushing"); DEFER_LOGD("--flushing");
renderer.eventMark("Flush"); renderer.eventMark("Flush");
// save and restore (with draw modifiers) so that reordering doesn't affect final state // save and restore so that reordering doesn't affect final state
DrawModifiers restoreDrawModifiers = renderer.getDrawModifiers();
renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); renderer.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
if (CC_LIKELY(mAvoidOverdraw)) { if (CC_LIKELY(mAvoidOverdraw)) {
@@ -654,7 +653,6 @@ void DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) {
replayBatchList(mBatches, renderer, dirty); replayBatchList(mBatches, renderer, dirty);
renderer.restoreToCount(1); renderer.restoreToCount(1);
renderer.setDrawModifiers(restoreDrawModifiers);
DEFER_LOGD("--flush complete, returning %x", status); DEFER_LOGD("--flush complete, returning %x", status);
clear(); clear();

View File

@@ -61,7 +61,6 @@ public:
int mClipSideFlags; // specifies which sides of the bounds are clipped, unclipped if cleared int mClipSideFlags; // specifies which sides of the bounds are clipped, unclipped if cleared
bool mClipped; bool mClipped;
mat4 mMatrix; mat4 mMatrix;
DrawModifiers mDrawModifiers;
float mAlpha; float mAlpha;
const RoundRectClipState* mRoundRectClipState; const RoundRectClipState* mRoundRectClipState;
}; };

View File

@@ -76,9 +76,6 @@ OpenGLRenderer::OpenGLRenderer(RenderState& renderState)
, mLightRadius(FLT_MIN) , mLightRadius(FLT_MIN)
, mAmbientShadowAlpha(0) , mAmbientShadowAlpha(0)
, mSpotShadowAlpha(0) { , mSpotShadowAlpha(0) {
// *set* draw modifiers to be 0
memset(&mDrawModifiers, 0, sizeof(mDrawModifiers));
mDrawModifiers.mOverrideLayerAlpha = 1.0f;
} }
OpenGLRenderer::~OpenGLRenderer() { OpenGLRenderer::~OpenGLRenderer() {
@@ -1188,10 +1185,9 @@ bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDef
state.mClip.set(currentClip); state.mClip.set(currentClip);
} }
// Transform, drawModifiers, and alpha always deferred, since they are used by state operations // Transform and alpha always deferred, since they are used by state operations
// (Note: saveLayer/restore use colorFilter and alpha, so we just save restore everything) // (Note: saveLayer/restore use colorFilter and alpha, so we just save restore everything)
state.mMatrix.load(*currentMatrix); state.mMatrix.load(*currentMatrix);
state.mDrawModifiers = mDrawModifiers;
state.mAlpha = currentSnapshot()->alpha; state.mAlpha = currentSnapshot()->alpha;
// always store/restore, since it's just a pointer // always store/restore, since it's just a pointer
@@ -1202,7 +1198,6 @@ bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDef
void OpenGLRenderer::restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore) { void OpenGLRenderer::restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore) {
setMatrix(state.mMatrix); setMatrix(state.mMatrix);
writableSnapshot()->alpha = state.mAlpha; writableSnapshot()->alpha = state.mAlpha;
mDrawModifiers = state.mDrawModifiers;
writableSnapshot()->roundRectClipState = state.mRoundRectClipState; writableSnapshot()->roundRectClipState = state.mRoundRectClipState;
if (state.mClipValid && !skipClipRestore) { if (state.mClipValid && !skipClipRestore) {
@@ -2541,21 +2536,11 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot
void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha, void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha,
SkXfermode::Mode* mode) const { SkXfermode::Mode* mode) const {
getAlphaAndModeDirect(paint, alpha, mode); getAlphaAndModeDirect(paint, alpha, mode);
if (mDrawModifiers.mOverrideLayerAlpha < 1.0f) {
// if drawing a layer, ignore the paint's alpha
*alpha = mDrawModifiers.mOverrideLayerAlpha * 255;
}
*alpha *= currentSnapshot()->alpha; *alpha *= currentSnapshot()->alpha;
} }
float OpenGLRenderer::getLayerAlpha(const Layer* layer) const { float OpenGLRenderer::getLayerAlpha(const Layer* layer) const {
float alpha; return (layer->getAlpha() / 255.0f) * currentSnapshot()->alpha;
if (mDrawModifiers.mOverrideLayerAlpha < 1.0f) {
alpha = mDrawModifiers.mOverrideLayerAlpha;
} else {
alpha = layer->getAlpha() / 255.0f;
}
return alpha * currentSnapshot()->alpha;
} }
}; // namespace uirenderer }; // namespace uirenderer

View File

@@ -68,17 +68,6 @@ class RenderNode;
class TextDrawFunctor; class TextDrawFunctor;
class VertexBuffer; class VertexBuffer;
struct DrawModifiers {
DrawModifiers()
: mOverrideLayerAlpha(0.0f) {}
void reset() {
mOverrideLayerAlpha = 0.0f;
}
float mOverrideLayerAlpha;
};
enum StateDeferFlags { enum StateDeferFlags {
kStateDeferFlag_Draw = 0x1, kStateDeferFlag_Draw = 0x1,
kStateDeferFlag_Clip = 0x2 kStateDeferFlag_Clip = 0x2
@@ -236,9 +225,6 @@ public:
void setDrawFilter(SkDrawFilter* filter); void setDrawFilter(SkDrawFilter* filter);
// If this value is set to < 1.0, it overrides alpha set on layer (see drawBitmap, drawLayer)
void setOverrideLayerAlpha(float alpha) { mDrawModifiers.mOverrideLayerAlpha = alpha; }
/** /**
* Store the current display state (most importantly, the current clip and transform), and * Store the current display state (most importantly, the current clip and transform), and
* additionally map the state's bounds from local to window coordinates. * additionally map the state's bounds from local to window coordinates.
@@ -249,9 +235,6 @@ public:
void restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore = false); void restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore = false);
void setupMergedMultiDraw(const Rect* clipRect); void setupMergedMultiDraw(const Rect* clipRect);
const DrawModifiers& getDrawModifiers() { return mDrawModifiers; }
void setDrawModifiers(const DrawModifiers& drawModifiers) { mDrawModifiers = drawModifiers; }
bool isCurrentTransformSimple() { bool isCurrentTransformSimple() {
return currentTransform()->isSimple(); return currentTransform()->isSimple();
} }
@@ -523,8 +506,7 @@ protected:
/** /**
* Gets the alpha and xfermode out of a paint object. If the paint is null * Gets the alpha and xfermode out of a paint object. If the paint is null
* alpha will be 255 and the xfermode will be SRC_OVER. Accounts for both * alpha will be 255 and the xfermode will be SRC_OVER. Accounts for snapshot alpha.
* snapshot alpha, and overrideLayerAlpha
* *
* @param paint The paint to extract values from * @param paint The paint to extract values from
* @param alpha Where to store the resulting alpha * @param alpha Where to store the resulting alpha
@@ -533,7 +515,7 @@ protected:
inline void getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const; inline void getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const;
/** /**
* Gets the alpha from a layer, accounting for snapshot alpha and overrideLayerAlpha * Gets the alpha from a layer, accounting for snapshot alpha
* *
* @param layer The layer from which the alpha is extracted * @param layer The layer from which the alpha is extracted
*/ */
@@ -868,10 +850,6 @@ private:
// Default UV mapper // Default UV mapper
const UvMapper mUvMapper; const UvMapper mUvMapper;
// shader, filters, and shadow
DrawModifiers mDrawModifiers;
SkPaint mFilteredPaint;
// List of rectangles to clear after saveLayer() is invoked // List of rectangles to clear after saveLayer() is invoked
std::vector<Rect> mLayers; std::vector<Rect> mLayers;
// List of layers to update at the beginning of a frame // List of layers to update at the beginning of a frame

View File

@@ -389,12 +389,9 @@ void RenderNode::setViewProperties(OpenGLRenderer& renderer, T& handler) {
if (properties().getAlpha() < 1) { if (properties().getAlpha() < 1) {
if (isLayer) { if (isLayer) {
clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer
renderer.setOverrideLayerAlpha(properties().getAlpha());
} else {
LOG_ALWAYS_FATAL_IF(properties().getHasOverlappingRendering());
renderer.scaleAlpha(properties().getAlpha());
} }
LOG_ALWAYS_FATAL_IF(!isLayer && properties().getHasOverlappingRendering());
renderer.scaleAlpha(properties().getAlpha());
} }
if (clipFlags) { if (clipFlags) {
Rect clipRect; Rect clipRect;
@@ -902,7 +899,6 @@ void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) {
DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (level + 1) * 2, "", restoreTo); DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (level + 1) * 2, "", restoreTo);
handler(new (alloc) RestoreToCountOp(restoreTo), handler(new (alloc) RestoreToCountOp(restoreTo),
PROPERTY_SAVECOUNT, properties().getClipToBounds()); PROPERTY_SAVECOUNT, properties().getClipToBounds());
renderer.setOverrideLayerAlpha(1.0f);
DISPLAY_LIST_LOGD("%*sDone (%p, %s)", level * 2, "", this, getName()); DISPLAY_LIST_LOGD("%*sDone (%p, %s)", level * 2, "", this, getName());
handler.endMark(); handler.endMark();

View File

@@ -149,12 +149,10 @@ void RenderProperties::debugOutputProperties(const int level) const {
if (mPrimitiveFields.mAlpha < 1) { if (mPrimitiveFields.mAlpha < 1) {
if (isLayer) { if (isLayer) {
clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer clipFlags &= ~CLIP_TO_BOUNDS; // bounds clipping done by layer
ALOGD("%*sSetOverrideLayerAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
} else {
LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mHasOverlappingRendering);
ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
} }
LOG_ALWAYS_FATAL_IF(!isLayer && mPrimitiveFields.mHasOverlappingRendering);
ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
} }
if (clipFlags) { if (clipFlags) {
Rect clipRect; Rect clipRect;