4d92b89454
This reverts commit 97d957d1db
.
Reason for revert: Looking at perf, desktop GPUs get better, many mobile GPUs get worse.
Original change's description:
> Remove GrDrawAtlasOp
>
> The base device turns drawAtlas into drawVertices, which ends
> up being *faster* (in my tests) than our specialized code.
>
> It's certainly possible to write a custom version that's better,
> but for now, it seems better to just do this.
>
> Bug: skia:
> Change-Id: I247f0c0a24fb21c8206f4e3ea9fecac85679ba73
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/203163
> Reviewed-by: Brian Salomon <bsalomon@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
TBR=bsalomon@google.com,brianosman@google.com,reed@google.com
Change-Id: Idfb3dd7d33a3905644aafdefc99e7814b08d7c7b
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/203053
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
70 lines
1.8 KiB
C
70 lines
1.8 KiB
C
/*
|
|
* Copyright 2015 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef SkRSXform_DEFINED
|
|
#define SkRSXform_DEFINED
|
|
|
|
#include "SkPoint.h"
|
|
#include "SkSize.h"
|
|
|
|
/**
|
|
* A compressed form of a rotation+scale matrix.
|
|
*
|
|
* [ fSCos -fSSin fTx ]
|
|
* [ fSSin fSCos fTy ]
|
|
* [ 0 0 1 ]
|
|
*/
|
|
struct SkRSXform {
|
|
static SkRSXform Make(SkScalar scos, SkScalar ssin, SkScalar tx, SkScalar ty) {
|
|
SkRSXform xform = { scos, ssin, tx, ty };
|
|
return xform;
|
|
}
|
|
|
|
/*
|
|
* Initialize a new xform based on the scale, rotation (in radians), final tx,ty location
|
|
* and anchor-point ax,ay within the src quad.
|
|
*
|
|
* Note: the anchor point is not normalized (e.g. 0...1) but is in pixels of the src image.
|
|
*/
|
|
static SkRSXform MakeFromRadians(SkScalar scale, SkScalar radians, SkScalar tx, SkScalar ty,
|
|
SkScalar ax, SkScalar ay) {
|
|
const SkScalar s = SkScalarSin(radians) * scale;
|
|
const SkScalar c = SkScalarCos(radians) * scale;
|
|
return Make(c, s, tx + -c * ax + s * ay, ty + -s * ax - c * ay);
|
|
}
|
|
|
|
SkScalar fSCos;
|
|
SkScalar fSSin;
|
|
SkScalar fTx;
|
|
SkScalar fTy;
|
|
|
|
bool rectStaysRect() const {
|
|
return 0 == fSCos || 0 == fSSin;
|
|
}
|
|
|
|
void setIdentity() {
|
|
fSCos = 1;
|
|
fSSin = fTx = fTy = 0;
|
|
}
|
|
|
|
void set(SkScalar scos, SkScalar ssin, SkScalar tx, SkScalar ty) {
|
|
fSCos = scos;
|
|
fSSin = ssin;
|
|
fTx = tx;
|
|
fTy = ty;
|
|
}
|
|
|
|
void toQuad(SkScalar width, SkScalar height, SkPoint quad[4]) const;
|
|
void toQuad(const SkSize& size, SkPoint quad[4]) const {
|
|
this->toQuad(size.width(), size.height(), quad);
|
|
}
|
|
void toTriStrip(SkScalar width, SkScalar height, SkPoint strip[4]) const;
|
|
};
|
|
|
|
#endif
|
|
|