Add serialization support for drawShadowRec
Change-Id: Ic7f76681a037d8f53a6fdc25061c39559f5c3e30 Reviewed-on: https://skia-review.googlesource.com/17457 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Jim Van Verth <jvanverth@google.com>
This commit is contained in:
parent
ee26363aaa
commit
4123d0ff86
@ -15,6 +15,7 @@
|
|||||||
#include "SkMatrix.h"
|
#include "SkMatrix.h"
|
||||||
#include "SkPath.h"
|
#include "SkPath.h"
|
||||||
#include "SkPoint.h"
|
#include "SkPoint.h"
|
||||||
|
#include "SkPoint3.h"
|
||||||
#include "SkRRect.h"
|
#include "SkRRect.h"
|
||||||
#include "SkRect.h"
|
#include "SkRect.h"
|
||||||
#include "SkRegion.h"
|
#include "SkRegion.h"
|
||||||
@ -118,6 +119,10 @@ public:
|
|||||||
*(SkPoint*)this->reserve(sizeof(pt)) = pt;
|
*(SkPoint*)this->reserve(sizeof(pt)) = pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void writePoint3(const SkPoint3& pt) {
|
||||||
|
*(SkPoint3*)this->reserve(sizeof(pt)) = pt;
|
||||||
|
}
|
||||||
|
|
||||||
void writeRect(const SkRect& rect) {
|
void writeRect(const SkRect& rect) {
|
||||||
*(SkRect*)this->reserve(sizeof(rect)) = rect;
|
*(SkRect*)this->reserve(sizeof(rect)) = rect;
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ struct SkDrawShadowRec {
|
|||||||
SkPoint3 fZPlaneParams;
|
SkPoint3 fZPlaneParams;
|
||||||
SkPoint3 fLightPos;
|
SkPoint3 fLightPos;
|
||||||
SkScalar fLightRadius;
|
SkScalar fLightRadius;
|
||||||
float fAmbientAlpha;
|
SkScalar fAmbientAlpha;
|
||||||
float fSpotAlpha;
|
SkScalar fSpotAlpha;
|
||||||
SkColor fColor;
|
SkColor fColor;
|
||||||
uint32_t fFlags;
|
uint32_t fFlags;
|
||||||
};
|
};
|
||||||
|
@ -89,7 +89,7 @@ enum DrawType {
|
|||||||
|
|
||||||
TRANSLATE_Z, // deprecated (M60)
|
TRANSLATE_Z, // deprecated (M60)
|
||||||
|
|
||||||
DRAW_SHADOWED_PICTURE_LIGHTS, // deprecated (M60)
|
DRAW_SHADOW_REC,
|
||||||
DRAW_IMAGE_LATTICE,
|
DRAW_IMAGE_LATTICE,
|
||||||
DRAW_ARC,
|
DRAW_ARC,
|
||||||
DRAW_REGION,
|
DRAW_REGION,
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SkCanvas.h"
|
#include "SkCanvas.h"
|
||||||
|
#include "SkDrawShadowRec.h"
|
||||||
#include "SkPatchUtils.h"
|
#include "SkPatchUtils.h"
|
||||||
#include "SkPictureData.h"
|
#include "SkPictureData.h"
|
||||||
#include "SkPicturePlayback.h"
|
#include "SkPicturePlayback.h"
|
||||||
@ -570,6 +571,20 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader,
|
|||||||
canvas->drawRRect(rrect, *paint);
|
canvas->drawRRect(rrect, *paint);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case DRAW_SHADOW_REC: {
|
||||||
|
const auto& path = fPictureData->getPath(reader);
|
||||||
|
SkDrawShadowRec rec;
|
||||||
|
reader->readPoint3(&rec.fZPlaneParams);
|
||||||
|
reader->readPoint3(&rec.fLightPos);
|
||||||
|
rec.fLightRadius = reader->readScalar();
|
||||||
|
rec.fAmbientAlpha = reader->readScalar();
|
||||||
|
rec.fSpotAlpha = reader->readScalar();
|
||||||
|
rec.fColor = reader->read32();
|
||||||
|
rec.fFlags = reader->read32();
|
||||||
|
BREAK_ON_READ_ERROR(reader);
|
||||||
|
|
||||||
|
canvas->private_draw_shadow_rec(path, rec);
|
||||||
|
} break;
|
||||||
case DRAW_SPRITE: {
|
case DRAW_SPRITE: {
|
||||||
/* const SkPaint* paint = */ fPictureData->getPaint(reader);
|
/* const SkPaint* paint = */ fPictureData->getPaint(reader);
|
||||||
/* const SkImage* image = */ fPictureData->getBitmapAsImage(reader);
|
/* const SkImage* image = */ fPictureData->getBitmapAsImage(reader);
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "SkPictureRecord.h"
|
#include "SkPictureRecord.h"
|
||||||
|
#include "SkDrawShadowRec.h"
|
||||||
#include "SkImage_Base.h"
|
#include "SkImage_Base.h"
|
||||||
#include "SkPatchUtils.h"
|
#include "SkPatchUtils.h"
|
||||||
#include "SkPixelRef.h"
|
#include "SkPixelRef.h"
|
||||||
@ -786,6 +787,24 @@ void SkPictureRecord::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[],
|
|||||||
this->validate(initialOffset, size);
|
this->validate(initialOffset, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SkPictureRecord::onDrawShadowRec(const SkPath& path, const SkDrawShadowRec& rec) {
|
||||||
|
// op + path index + zParams + lightPos + lightRadius + spot/ambient alphas + color + flags
|
||||||
|
size_t size = 2 * kUInt32Size + 2 * sizeof(SkPoint3) + 3 * sizeof(SkScalar) + 2 * kUInt32Size;
|
||||||
|
size_t initialOffset = this->addDraw(DRAW_SHADOW_REC, &size);
|
||||||
|
|
||||||
|
this->addPath(path);
|
||||||
|
|
||||||
|
fWriter.writePoint3(rec.fZPlaneParams);
|
||||||
|
fWriter.writePoint3(rec.fLightPos);
|
||||||
|
fWriter.writeScalar(rec.fLightRadius);
|
||||||
|
fWriter.writeScalar(rec.fAmbientAlpha);
|
||||||
|
fWriter.writeScalar(rec.fSpotAlpha);
|
||||||
|
fWriter.write32(rec.fColor);
|
||||||
|
fWriter.write32(rec.fFlags);
|
||||||
|
|
||||||
|
this->validate(initialOffset, size);
|
||||||
|
}
|
||||||
|
|
||||||
void SkPictureRecord::onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) {
|
void SkPictureRecord::onDrawAnnotation(const SkRect& rect, const char key[], SkData* value) {
|
||||||
size_t keyLen = fWriter.WriteStringSize(key);
|
size_t keyLen = fWriter.WriteStringSize(key);
|
||||||
size_t valueLen = fWriter.WriteDataSize(value);
|
size_t valueLen = fWriter.WriteDataSize(value);
|
||||||
|
@ -197,6 +197,7 @@ protected:
|
|||||||
const SkPaint*) override;
|
const SkPaint*) override;
|
||||||
void onDrawImageLattice(const SkImage*, const SkCanvas::Lattice& lattice, const SkRect& dst,
|
void onDrawImageLattice(const SkImage*, const SkCanvas::Lattice& lattice, const SkRect& dst,
|
||||||
const SkPaint*) override;
|
const SkPaint*) override;
|
||||||
|
void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override;
|
||||||
void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
|
void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
|
||||||
|
|
||||||
void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
|
void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override;
|
||||||
|
@ -151,6 +151,12 @@ void SkReadBuffer::readPoint(SkPoint* point) {
|
|||||||
point->fY = fReader.readScalar();
|
point->fY = fReader.readScalar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SkReadBuffer::readPoint3(SkPoint3* point) {
|
||||||
|
point->fX = fReader.readScalar();
|
||||||
|
point->fY = fReader.readScalar();
|
||||||
|
point->fZ = fReader.readScalar();
|
||||||
|
}
|
||||||
|
|
||||||
void SkReadBuffer::readMatrix(SkMatrix* matrix) {
|
void SkReadBuffer::readMatrix(SkMatrix* matrix) {
|
||||||
fReader.readMatrix(matrix);
|
fReader.readMatrix(matrix);
|
||||||
}
|
}
|
||||||
|
@ -130,6 +130,7 @@ public:
|
|||||||
virtual void readColor4f(SkColor4f* color);
|
virtual void readColor4f(SkColor4f* color);
|
||||||
virtual void readPoint(SkPoint* point);
|
virtual void readPoint(SkPoint* point);
|
||||||
SkPoint readPoint() { SkPoint p; this->readPoint(&p); return p; }
|
SkPoint readPoint() { SkPoint p; this->readPoint(&p); return p; }
|
||||||
|
virtual void readPoint3(SkPoint3* point);
|
||||||
virtual void readMatrix(SkMatrix* matrix);
|
virtual void readMatrix(SkMatrix* matrix);
|
||||||
virtual void readIRect(SkIRect* rect);
|
virtual void readIRect(SkIRect* rect);
|
||||||
virtual void readRect(SkRect* rect);
|
virtual void readRect(SkRect* rect);
|
||||||
|
@ -124,6 +124,12 @@ void SkValidatingReadBuffer::readPoint(SkPoint* point) {
|
|||||||
point->fY = this->readScalar();
|
point->fY = this->readScalar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SkValidatingReadBuffer::readPoint3(SkPoint3* point) {
|
||||||
|
point->fX = this->readScalar();
|
||||||
|
point->fY = this->readScalar();
|
||||||
|
point->fZ = this->readScalar();
|
||||||
|
}
|
||||||
|
|
||||||
void SkValidatingReadBuffer::readMatrix(SkMatrix* matrix) {
|
void SkValidatingReadBuffer::readMatrix(SkMatrix* matrix) {
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
if (!fError) {
|
if (!fError) {
|
||||||
|
@ -46,6 +46,7 @@ public:
|
|||||||
SkFlattenable* readFlattenable(SkFlattenable::Type type) override;
|
SkFlattenable* readFlattenable(SkFlattenable::Type type) override;
|
||||||
void readColor4f(SkColor4f* color) override;
|
void readColor4f(SkColor4f* color) override;
|
||||||
void readPoint(SkPoint* point) override;
|
void readPoint(SkPoint* point) override;
|
||||||
|
void readPoint3(SkPoint3* point) override;
|
||||||
void readMatrix(SkMatrix* matrix) override;
|
void readMatrix(SkMatrix* matrix) override;
|
||||||
void readIRect(SkIRect* rect) override;
|
void readIRect(SkIRect* rect) override;
|
||||||
void readRect(SkRect* rect) override;
|
void readRect(SkRect* rect) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user