aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkWritePixelsRec.h
diff options
context:
space:
mode:
authorGravatar Matt Sarett <msarett@google.com>2017-01-20 16:59:02 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-23 15:23:31 +0000
commit977f64cbfad1ecd7fd4b1231c694c7e828fda1f0 (patch)
treed419cde9e63734448b8f01da25105123086d667c /src/core/SkWritePixelsRec.h
parent6987b00fae08ef0731042bb341b4e002a2da72c2 (diff)
Refactor trimming logic for read/writePixels()
(1) Move trimming logic into Bitmap/Pixmap level for raster. Everything goes through here, so we'll only do the work once. (2) This means it also goes to GPU level. (3) Always use SkReadPixelsRec rather than inlining the logic. (4) Create an SkWritePixelsRec to encapsulate write trimming. (5) Disabled kIndex8 as a dst - always. BUG=skia:6021 Change-Id: I748f50c3b726f7c6de5462e2b1ccb54bc387a510 Reviewed-on: https://skia-review.googlesource.com/7326 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Matt Sarett <msarett@google.com>
Diffstat (limited to 'src/core/SkWritePixelsRec.h')
-rw-r--r--src/core/SkWritePixelsRec.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/SkWritePixelsRec.h b/src/core/SkWritePixelsRec.h
new file mode 100644
index 0000000000..652a13a822
--- /dev/null
+++ b/src/core/SkWritePixelsRec.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkWritePixelsRec_DEFINED
+#define SkWritePixelsRec_DEFINED
+
+#include "SkImageInfo.h"
+
+/**
+ * Helper class to package and trim the parameters passed to writePixels()
+ */
+struct SkWritePixelsRec {
+ SkWritePixelsRec(const SkImageInfo& info, const void* pixels, size_t rowBytes, int x, int y)
+ : fPixels(pixels)
+ , fRowBytes(rowBytes)
+ , fInfo(info)
+ , fX(x)
+ , fY(y)
+ {}
+
+ const void* fPixels;
+ size_t fRowBytes;
+ SkImageInfo fInfo;
+ int fX;
+ int fY;
+
+ /*
+ * On true, may have modified its fields (except fRowBytes) to make it a legal subset
+ * of the specified dst width/height.
+ *
+ * On false, leaves self unchanged, but indicates that it does not overlap dst, or
+ * is not valid (e.g. bad fInfo) for writePixels().
+ */
+ bool trim(int dstWidth, int dstHeight);
+};
+
+#endif