Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkWriteBuffer.h
Go to the documentation of this file.
1/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkWriteBuffer_DEFINED
9#define SkWriteBuffer_DEFINED
10
12#include "include/core/SkData.h"
17#include "src/core/SkTHash.h"
18#include "src/core/SkWriter32.h"
19
20#include <cstddef>
21#include <cstdint>
22#include <string_view>
23
24class SkFactorySet;
25class SkFlattenable;
26class SkImage;
27class SkM44;
28class SkMatrix;
29class SkPaint;
30class SkPath;
31class SkRefCntSet;
32class SkRegion;
33class SkStream;
34class SkTypeface;
35class SkWStream;
36struct SkIRect;
37struct SkPoint3;
38struct SkPoint;
39struct SkRect;
40
42public:
44 virtual ~SkWriteBuffer() {}
45
46 virtual void writePad32(const void* buffer, size_t bytes) = 0;
47
48 virtual void writeByteArray(const void* data, size_t size) = 0;
49 void writeDataAsByteArray(const SkData* data) {
50 if (!data) {
51 this->write32(0);
52 } else {
53 this->writeByteArray(data->data(), data->size());
54 }
55 }
56
57 virtual void writeBool(bool value) = 0;
58 virtual void writeScalar(SkScalar value) = 0;
59 virtual void writeScalarArray(const SkScalar* value, uint32_t count) = 0;
60 virtual void writeInt(int32_t value) = 0;
61 virtual void writeIntArray(const int32_t* value, uint32_t count) = 0;
62 virtual void writeUInt(uint32_t value) = 0;
63 void write32(int32_t value) {
64 this->writeInt(value);
65 }
66 virtual void writeString(std::string_view value) = 0;
67
68 virtual void writeFlattenable(const SkFlattenable* flattenable) = 0;
69 virtual void writeColor(SkColor color) = 0;
70 virtual void writeColorArray(const SkColor* color, uint32_t count) = 0;
71 virtual void writeColor4f(const SkColor4f& color) = 0;
72 virtual void writeColor4fArray(const SkColor4f* color, uint32_t count) = 0;
73 virtual void writePoint(const SkPoint& point) = 0;
74 virtual void writePointArray(const SkPoint* point, uint32_t count) = 0;
75 virtual void writePoint3(const SkPoint3& point) = 0;
76 virtual void write(const SkM44&) = 0;
77 virtual void writeMatrix(const SkMatrix& matrix) = 0;
78 virtual void writeIRect(const SkIRect& rect) = 0;
79 virtual void writeRect(const SkRect& rect) = 0;
80 virtual void writeRegion(const SkRegion& region) = 0;
81 virtual void writeSampling(const SkSamplingOptions&) = 0;
82 virtual void writePath(const SkPath& path) = 0;
83 virtual size_t writeStream(SkStream* stream, size_t length) = 0;
84 virtual void writeImage(const SkImage*) = 0;
85 virtual void writeTypeface(SkTypeface* typeface) = 0;
86 virtual void writePaint(const SkPaint& paint) = 0;
87
88 const SkSerialProcs& serialProcs() const { return fProcs; }
89
90protected:
92};
93
94/**
95 * Concrete implementation that serializes to a flat binary blob.
96 */
98public:
100 SkBinaryWriteBuffer(void* initialStorage, size_t storageSize, const SkSerialProcs&);
101 ~SkBinaryWriteBuffer() override;
102
103 void write(const void* buffer, size_t bytes) {
104 fWriter.write(buffer, bytes);
105 }
106 void writePad32(const void* buffer, size_t bytes) override {
107 fWriter.writePad(buffer, bytes);
108 }
109
110 void reset(void* storage = nullptr, size_t storageSize = 0) {
111 fWriter.reset(storage, storageSize);
112 }
113
114 size_t bytesWritten() const { return fWriter.bytesWritten(); }
115
116 // Returns true iff all of the bytes written so far are stored in the initial storage
117 // buffer provided in the constructor or the most recent call to reset.
118 bool usingInitialStorage() const;
119
120 void writeByteArray(const void* data, size_t size) override;
121 void writeBool(bool value) override;
122 void writeScalar(SkScalar value) override;
123 void writeScalarArray(const SkScalar* value, uint32_t count) override;
124 void writeInt(int32_t value) override;
125 void writeIntArray(const int32_t* value, uint32_t count) override;
126 void writeUInt(uint32_t value) override;
127 void writeString(std::string_view value) override;
128
129 void writeFlattenable(const SkFlattenable* flattenable) override;
130 void writeColor(SkColor color) override;
131 void writeColorArray(const SkColor* color, uint32_t count) override;
132 void writeColor4f(const SkColor4f& color) override;
133 void writeColor4fArray(const SkColor4f* color, uint32_t count) override;
134 void writePoint(const SkPoint& point) override;
135 void writePointArray(const SkPoint* point, uint32_t count) override;
136 void writePoint3(const SkPoint3& point) override;
137 void write(const SkM44&) override;
138 void writeMatrix(const SkMatrix& matrix) override;
139 void writeIRect(const SkIRect& rect) override;
140 void writeRect(const SkRect& rect) override;
141 void writeRegion(const SkRegion& region) override;
142 void writeSampling(const SkSamplingOptions&) override;
143 void writePath(const SkPath& path) override;
144 size_t writeStream(SkStream* stream, size_t length) override;
145 void writeImage(const SkImage*) override;
146 void writeTypeface(SkTypeface* typeface) override;
147 void writePaint(const SkPaint& paint) override;
148
149 bool writeToStream(SkWStream*) const;
150 void writeToMemory(void* dst) const { fWriter.flatten(dst); }
151 sk_sp<SkData> snapshotAsData() const { return fWriter.snapshotAsData(); }
152
155
156private:
157 sk_sp<SkFactorySet> fFactorySet;
158 sk_sp<SkRefCntSet> fTFSet;
159
160 SkWriter32 fWriter;
161
162 // Only used if we do not have an fFactorySet
164};
165
174
175
176#endif // SkWriteBuffer_DEFINED
int count
SkColor4f color
uint32_t SkColor
Definition SkColor.h:37
SkWriteBufferImageFlags
@ kUnpremul
@ kVersion_bits
@ kCurrVersion
@ kHasSubsetRect
@ kHasMipmap
void writeBool(bool value) override
void writeByteArray(const void *data, size_t size) override
void writeFlattenable(const SkFlattenable *flattenable) override
void writeColor(SkColor color) override
void writeIntArray(const int32_t *value, uint32_t count) override
void writePoint(const SkPoint &point) override
void writeColor4f(const SkColor4f &color) override
void writeIRect(const SkIRect &rect) override
size_t writeStream(SkStream *stream, size_t length) override
void writeColorArray(const SkColor *color, uint32_t count) override
void writeTypeface(SkTypeface *typeface) override
void writeScalar(SkScalar value) override
void writeScalarArray(const SkScalar *value, uint32_t count) override
size_t bytesWritten() const
sk_sp< SkData > snapshotAsData() const
void writePointArray(const SkPoint *point, uint32_t count) override
bool writeToStream(SkWStream *) const
void writeString(std::string_view value) override
void writePoint3(const SkPoint3 &point) override
void reset(void *storage=nullptr, size_t storageSize=0)
void writePath(const SkPath &path) override
void writeColor4fArray(const SkColor4f *color, uint32_t count) override
void writePaint(const SkPaint &paint) override
void writeUInt(uint32_t value) override
void setTypefaceRecorder(sk_sp< SkRefCntSet >)
void setFactoryRecorder(sk_sp< SkFactorySet >)
~SkBinaryWriteBuffer() override
void writeRect(const SkRect &rect) override
void writeMatrix(const SkMatrix &matrix) override
void writeInt(int32_t value) override
void writeSampling(const SkSamplingOptions &) override
bool usingInitialStorage() const
void writeImage(const SkImage *) override
void writeRegion(const SkRegion &region) override
void write(const void *buffer, size_t bytes)
void writeToMemory(void *dst) const
void writePad32(const void *buffer, size_t bytes) override
const void * data() const
Definition SkData.h:37
Definition SkM44.h:150
virtual void writeScalarArray(const SkScalar *value, uint32_t count)=0
SkWriteBuffer(const SkSerialProcs &p)
virtual size_t writeStream(SkStream *stream, size_t length)=0
virtual void writeRegion(const SkRegion &region)=0
virtual void writePointArray(const SkPoint *point, uint32_t count)=0
virtual void writeTypeface(SkTypeface *typeface)=0
void writeDataAsByteArray(const SkData *data)
SkSerialProcs fProcs
virtual void writeInt(int32_t value)=0
virtual void writeBool(bool value)=0
virtual void writeColor(SkColor color)=0
virtual void writeRect(const SkRect &rect)=0
virtual void writeColor4fArray(const SkColor4f *color, uint32_t count)=0
virtual void writeFlattenable(const SkFlattenable *flattenable)=0
virtual ~SkWriteBuffer()
virtual void writeMatrix(const SkMatrix &matrix)=0
virtual void writePoint(const SkPoint &point)=0
virtual void writePad32(const void *buffer, size_t bytes)=0
virtual void writeImage(const SkImage *)=0
virtual void writeIRect(const SkIRect &rect)=0
virtual void writeSampling(const SkSamplingOptions &)=0
virtual void write(const SkM44 &)=0
virtual void writeByteArray(const void *data, size_t size)=0
virtual void writePoint3(const SkPoint3 &point)=0
void write32(int32_t value)
virtual void writeColor4f(const SkColor4f &color)=0
virtual void writePaint(const SkPaint &paint)=0
virtual void writeUInt(uint32_t value)=0
virtual void writeScalar(SkScalar value)=0
virtual void writePath(const SkPath &path)=0
const SkSerialProcs & serialProcs() const
virtual void writeColorArray(const SkColor *color, uint32_t count)=0
virtual void writeIntArray(const int32_t *value, uint32_t count)=0
virtual void writeString(std::string_view value)=0
void write(const void *values, size_t size)
Definition SkWriter32.h:170
void writePad(const void *src, size_t size)
Definition SkWriter32.h:192
void reset(void *external=nullptr, size_t externalBytes=0)
Definition SkWriter32.h:54
void flatten(void *dst) const
Definition SkWriter32.h:235
sk_sp< SkData > snapshotAsData() const
size_t bytesWritten() const
Definition SkWriter32.h:48
const Paint & paint
float SkScalar
Definition extension.cpp:12
static const uint8_t buffer[]
size_t length