diff options
| author | 2014-04-03 17:14:53 +0000 | |
|---|---|---|
| committer | 2014-04-03 17:14:53 +0000 | |
| commit | ef4c0c9fd5db395b2eea0a246b93bce9cc9e859a (patch) | |
| tree | f469797c7f5bbb4ae24d49ca730a30f9e279b8f8 /libs/hwui | |
| parent | 537be409f281d4a872cbcebb6ac3a4d767ded4da (diff) | |
| parent | 49e6c73913e9bee58ea5e3984be151ee8e033163 (diff) | |
Merge "Move most TransformationInfo properties to RenderNode"
Diffstat (limited to 'libs/hwui')
| -rw-r--r-- | libs/hwui/RenderNode.cpp | 8 | ||||
| -rw-r--r-- | libs/hwui/RenderProperties.cpp | 59 | ||||
| -rw-r--r-- | libs/hwui/RenderProperties.h | 29 |
3 files changed, 48 insertions, 48 deletions
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 34d98a105f33..663b67ef053c 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -61,8 +61,12 @@ RenderNode::~RenderNode() { void RenderNode::destroyDisplayListDeferred(RenderNode* displayList) { if (displayList) { - DISPLAY_LIST_LOGD("Deferring display list destruction"); - Caches::getInstance().deleteDisplayListDeferred(displayList); + if (Caches::hasInstance()) { + DISPLAY_LIST_LOGD("Deferring display list destruction"); + Caches::getInstance().deleteDisplayListDeferred(displayList); + } else { + delete displayList; + } } } diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp index 3975a766a8e5..e7e7768ffe91 100644 --- a/libs/hwui/RenderProperties.cpp +++ b/libs/hwui/RenderProperties.cpp @@ -45,28 +45,24 @@ RenderProperties::PrimitiveFields::PrimitiveFields() , mPrevWidth(-1), mPrevHeight(-1) , mPivotExplicitlySet(false) , mMatrixDirty(false) - , mMatrixIsIdentity(true) , mMatrixFlags(0) , mCaching(false) { } RenderProperties::ComputedFields::ComputedFields() : mTransformMatrix(NULL) - , mTransformCamera(NULL) , mTransformMatrix3D(NULL) , mClipPath(NULL) { } RenderProperties::ComputedFields::~ComputedFields() { delete mTransformMatrix; - delete mTransformCamera; delete mTransformMatrix3D; delete mClipPath; } RenderProperties::RenderProperties() - : mCameraDistance(0) - , mStaticMatrix(NULL) + : mStaticMatrix(NULL) , mAnimationMatrix(NULL) { } @@ -82,9 +78,12 @@ RenderProperties& RenderProperties::operator=(const RenderProperties& other) { setAnimationMatrix(other.getAnimationMatrix()); setCameraDistance(other.getCameraDistance()); - // Update the computed fields - updateMatrix(); + // Update the computed clip path updateClipPath(); + + // Force recalculation of the matrix, since other's dirty bit may be clear + mPrimitiveFields.mMatrixDirty = true; + updateMatrix(); } return *this; } @@ -106,8 +105,8 @@ void RenderProperties::debugOutputProperties(const int level) const { ALOGD("%*sTranslate %.2f, %.2f, %.2f", level * 2, "", mPrimitiveFields.mTranslationX, mPrimitiveFields.mTranslationY, mPrimitiveFields.mTranslationZ); } else { - ALOGD("%*sConcatMatrix %p: " MATRIX_4_STRING, - level * 2, "", mComputedFields.mTransformMatrix, MATRIX_4_ARGS(mComputedFields.mTransformMatrix)); + ALOGD("%*sConcatMatrix %p: " SK_MATRIX_STRING, + level * 2, "", mComputedFields.mTransformMatrix, SK_MATRIX_ARGS(mComputedFields.mTransformMatrix)); } } @@ -141,7 +140,7 @@ void RenderProperties::updateMatrix() { if (mPrimitiveFields.mMatrixFlags && mPrimitiveFields.mMatrixFlags != TRANSLATION) { if (!mComputedFields.mTransformMatrix) { // only allocate a mPrimitiveFields.matrix if we have a complex transform - mComputedFields.mTransformMatrix = new Matrix4(); + mComputedFields.mTransformMatrix = new SkMatrix(); } if (!mPrimitiveFields.mPivotExplicitlySet) { if (mPrimitiveFields.mWidth != mPrimitiveFields.mPrevWidth || mPrimitiveFields.mHeight != mPrimitiveFields.mPrevHeight) { @@ -153,33 +152,31 @@ void RenderProperties::updateMatrix() { } if ((mPrimitiveFields.mMatrixFlags & ROTATION_3D) == 0) { - mComputedFields.mTransformMatrix->loadTranslate( - mPrimitiveFields.mPivotX + mPrimitiveFields.mTranslationX, - mPrimitiveFields.mPivotY + mPrimitiveFields.mTranslationY, - 0); - mComputedFields.mTransformMatrix->rotate(mPrimitiveFields.mRotation, 0, 0, 1); - mComputedFields.mTransformMatrix->scale(mPrimitiveFields.mScaleX, mPrimitiveFields.mScaleY, 1); - mComputedFields.mTransformMatrix->translate(-mPrimitiveFields.mPivotX, -mPrimitiveFields.mPivotY); + mComputedFields.mTransformMatrix->setTranslate( + mPrimitiveFields.mTranslationX, mPrimitiveFields.mTranslationY); + mComputedFields.mTransformMatrix->preRotate(mPrimitiveFields.mRotation, + mPrimitiveFields.mPivotX, mPrimitiveFields.mPivotY); + mComputedFields.mTransformMatrix->preScale( + mPrimitiveFields.mScaleX, mPrimitiveFields.mScaleY, + mPrimitiveFields.mPivotX, mPrimitiveFields.mPivotY); } else { - if (!mComputedFields.mTransformCamera) { - mComputedFields.mTransformCamera = new Sk3DView(); + if (!mComputedFields.mTransformMatrix3D) { mComputedFields.mTransformMatrix3D = new SkMatrix(); } - SkMatrix transformMatrix; - transformMatrix.reset(); - mComputedFields.mTransformCamera->save(); - transformMatrix.preScale(mPrimitiveFields.mScaleX, mPrimitiveFields.mScaleY, mPrimitiveFields.mPivotX, mPrimitiveFields.mPivotY); - mComputedFields.mTransformCamera->rotateX(mPrimitiveFields.mRotationX); - mComputedFields.mTransformCamera->rotateY(mPrimitiveFields.mRotationY); - mComputedFields.mTransformCamera->rotateZ(-mPrimitiveFields.mRotation); - mComputedFields.mTransformCamera->getMatrix(mComputedFields.mTransformMatrix3D); + mComputedFields.mTransformMatrix->reset(); + mComputedFields.mTransformCamera.save(); + mComputedFields.mTransformMatrix->preScale( + mPrimitiveFields.mScaleX, mPrimitiveFields.mScaleY, + mPrimitiveFields.mPivotX, mPrimitiveFields.mPivotY); + mComputedFields.mTransformCamera.rotateX(mPrimitiveFields.mRotationX); + mComputedFields.mTransformCamera.rotateY(mPrimitiveFields.mRotationY); + mComputedFields.mTransformCamera.rotateZ(-mPrimitiveFields.mRotation); + mComputedFields.mTransformCamera.getMatrix(mComputedFields.mTransformMatrix3D); mComputedFields.mTransformMatrix3D->preTranslate(-mPrimitiveFields.mPivotX, -mPrimitiveFields.mPivotY); mComputedFields.mTransformMatrix3D->postTranslate(mPrimitiveFields.mPivotX + mPrimitiveFields.mTranslationX, mPrimitiveFields.mPivotY + mPrimitiveFields.mTranslationY); - transformMatrix.postConcat(*mComputedFields.mTransformMatrix3D); - mComputedFields.mTransformCamera->restore(); - - mComputedFields.mTransformMatrix->load(transformMatrix); + mComputedFields.mTransformMatrix->postConcat(*mComputedFields.mTransformMatrix3D); + mComputedFields.mTransformCamera.restore(); } } mPrimitiveFields.mMatrixDirty = false; diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h index 061e469abe3b..dd6821059490 100644 --- a/libs/hwui/RenderProperties.h +++ b/libs/hwui/RenderProperties.h @@ -258,20 +258,20 @@ public: return mPrimitiveFields.mPivotY; } + bool isPivotExplicitlySet() const { + return mPrimitiveFields.mPivotExplicitlySet; + } + void setCameraDistance(float distance) { - if (distance != mCameraDistance) { - mCameraDistance = distance; + if (distance != getCameraDistance()) { mPrimitiveFields.mMatrixDirty = true; - if (!mComputedFields.mTransformCamera) { - mComputedFields.mTransformCamera = new Sk3DView(); - mComputedFields.mTransformMatrix3D = new SkMatrix(); - } - mComputedFields.mTransformCamera->setCameraLocation(0, 0, distance); + mComputedFields.mTransformCamera.setCameraLocation(0, 0, distance); } } float getCameraDistance() const { - return mCameraDistance; + // TODO: update getCameraLocationZ() to be const + return const_cast<Sk3DView*>(&mComputedFields.mTransformCamera)->getCameraLocationZ(); } void setLeft(int left) { @@ -396,7 +396,7 @@ public: return mPrimitiveFields.mMatrixFlags; } - const Matrix4* getTransformMatrix() const { + const SkMatrix* getTransformMatrix() const { return mComputedFields.mTransformMatrix; } @@ -481,13 +481,11 @@ private: int mPrevWidth, mPrevHeight; bool mPivotExplicitlySet; bool mMatrixDirty; - bool mMatrixIsIdentity; uint32_t mMatrixFlags; bool mCaching; } mPrimitiveFields; // mCameraDistance isn't in mPrimitiveFields as it has a complex setter - float mCameraDistance; SkMatrix* mStaticMatrix; SkMatrix* mAnimationMatrix; @@ -502,11 +500,12 @@ private: * Stores the total transformation of the DisplayList based upon its scalar * translate/rotate/scale properties. * - * In the common translation-only case, the matrix isn't allocated and the mTranslation - * properties are used directly. + * In the common translation-only case, the matrix isn't necessarily allocated, + * and the mTranslation properties are used directly. */ - Matrix4* mTransformMatrix; - Sk3DView* mTransformCamera; + SkMatrix* mTransformMatrix; + + Sk3DView mTransformCamera; SkMatrix* mTransformMatrix3D; SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping SkRegion::Op mClipPathOp; |