Make workaround for std::unique_ptr<const T[]> bug in old libstdc++ work.

BUG=skia:

Change-Id: I58a07d4ce35bdd03e7edcf50e88d9982b3885546
Reviewed-on: https://skia-review.googlesource.com/8101
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This commit is contained in:
Brian Salomon 2017-02-06 15:30:06 -05:00
parent 604c9890cc
commit 3a97054456
2 changed files with 21 additions and 15 deletions

View File

@ -104,10 +104,12 @@ protected:
// std::unique_ptr<const T[]>. Hence the release() calls below.
fVertices = SkVertices::MakeIndexed(
SkCanvas::kTriangleFan_VertexMode,
std::unique_ptr<const SkPoint[]>(points.release()),
std::unique_ptr<const SkColor[]>(colors.release()),
std::unique_ptr<const SkPoint[]>(texs.release()), kMeshVertexCnt,
std::unique_ptr<const uint16_t[]>(indices.release()), kMeshIndexCnt);
std::unique_ptr<const SkPoint[]>((const SkPoint*)points.release()),
std::unique_ptr<const SkColor[]>((const SkColor*)colors.release()),
std::unique_ptr<const SkPoint[]>((const SkPoint*)texs.release()),
kMeshVertexCnt,
std::unique_ptr<const uint16_t[]>((const uint16_t*)indices.release()),
kMeshIndexCnt);
}
}
@ -237,10 +239,12 @@ static void draw_batching(SkCanvas* canvas, bool useObject) {
// Older libstdc++ does not allow moving a std::unique_ptr<T[]> into a
// std::unique_ptr<const T[]>. Hence the release() calls below.
vertices = SkVertices::MakeIndexed(
SkCanvas::kTriangles_VertexMode, std::unique_ptr<const SkPoint[]>(pts.release()),
std::unique_ptr<const SkColor[]>(colors.release()),
std::unique_ptr<const SkPoint[]>(texs.release()), kMeshVertexCnt,
std::unique_ptr<const uint16_t[]>(indices.release()), 3 * kNumTris);
SkCanvas::kTriangles_VertexMode,
std::unique_ptr<const SkPoint[]>((const SkPoint*)pts.release()),
std::unique_ptr<const SkColor[]>((const SkColor*)colors.release()),
std::unique_ptr<const SkPoint[]>((const SkPoint*)texs.release()), kMeshVertexCnt,
std::unique_ptr<const uint16_t[]>((const uint16_t*)indices.release()),
3 * kNumTris);
}
canvas->save();
canvas->translate(10, 10);

View File

@ -44,14 +44,16 @@ std::unique_ptr<GrDrawOp> GrDrawVerticesOp::Make(
if (indices) {
vertices = SkVertices::MakeIndexed(
kIgnoredMode, std::unique_ptr<const SkPoint[]>((const SkPoint*)pos.release()),
std::unique_ptr<const SkColor[]>(col.release()),
std::unique_ptr<const SkPoint[]>(lc.release()), vertexCount,
std::unique_ptr<const uint16_t[]>(idx.release()), indexCount, bounds);
std::unique_ptr<const SkColor[]>((const SkColor*)col.release()),
std::unique_ptr<const SkPoint[]>((const SkPoint*)lc.release()), vertexCount,
std::unique_ptr<const uint16_t[]>((const uint16_t*)idx.release()), indexCount,
bounds);
} else {
vertices = SkVertices::Make(kIgnoredMode, std::unique_ptr<const SkPoint[]>(pos.release()),
std::unique_ptr<const SkColor[]>(col.release()),
std::unique_ptr<const SkPoint[]>(lc.release()), vertexCount,
bounds);
vertices = SkVertices::Make(kIgnoredMode,
std::unique_ptr<const SkPoint[]>((const SkPoint*)pos.release()),
std::unique_ptr<const SkColor[]>((const SkColor*)col.release()),
std::unique_ptr<const SkPoint[]>((const SkPoint*)lc.release()),
vertexCount, bounds);
}
if (!vertices) {
return nullptr;