@shopify/react-native-skia 1.5.3 → 1.5.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +53 -13
- package/android/build.gradle +3 -0
- package/android/cpp/rnskia-android/OpenGLContext.h +122 -11
- package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +73 -0
- package/android/cpp/rnskia-android/OpenGLWindowContext.h +74 -0
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +18 -1
- package/android/cpp/rnskia-android/RNSkAndroidVideo.cpp +12 -1
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +13 -1
- package/android/cpp/rnskia-android/opengl/Context.h +77 -0
- package/android/cpp/rnskia-android/opengl/Display.h +117 -0
- package/android/cpp/rnskia-android/opengl/Error.cpp +9 -0
- package/android/cpp/rnskia-android/opengl/Error.h +44 -0
- package/android/cpp/rnskia-android/opengl/Surface.h +43 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +0 -1
- package/cpp/api/JsiSkImage.h +15 -2
- package/cpp/api/JsiSkSurface.h +18 -3
- package/cpp/rnskia/DawnContext.h +241 -0
- package/cpp/rnskia/DawnUtils.h +127 -0
- package/cpp/rnskia/DawnWindowContext.cpp +19 -0
- package/cpp/rnskia/DawnWindowContext.h +77 -0
- package/cpp/rnskia/ImageProvider.h +100 -0
- package/cpp/rnskia/RNSkView.h +6 -0
- package/cpp/skia/include/android/SkAnimatedImage.h +14 -0
- package/cpp/skia/include/codec/SkAvifDecoder.h +39 -3
- package/cpp/skia/include/codec/SkCodec.h +16 -0
- package/cpp/skia/include/config/SkUserConfig.h +3 -2
- package/cpp/skia/include/core/SkCanvas.h +55 -10
- package/cpp/skia/include/core/SkContourMeasure.h +76 -0
- package/cpp/skia/include/core/SkFontScanner.h +48 -0
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPath.h +11 -0
- package/cpp/skia/include/core/SkPathEffect.h +0 -23
- package/cpp/skia/include/core/SkRect.h +2 -0
- package/cpp/skia/include/core/SkString.h +4 -0
- package/cpp/skia/include/core/SkTypeface.h +5 -0
- package/cpp/skia/include/core/SkTypes.h +8 -3
- package/cpp/skia/include/docs/SkPDFDocument.h +3 -3
- package/cpp/skia/include/effects/SkOverdrawColorFilter.h +1 -0
- package/cpp/skia/include/effects/SkRuntimeEffect.h +2 -1
- package/cpp/skia/include/encode/SkJpegEncoder.h +4 -0
- package/cpp/skia/include/gpu/ganesh/GrContextOptions.h +8 -1
- package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +18 -3
- package/cpp/skia/include/gpu/ganesh/GrTypes.h +11 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLFunctions.h +5 -1
- package/cpp/skia/include/gpu/ganesh/gl/GrGLInterface.h +0 -1
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +8 -0
- package/cpp/skia/include/gpu/graphite/Recorder.h +0 -2
- package/cpp/skia/include/gpu/graphite/precompile/PaintOptions.h +7 -4
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileImageFilter.h +2 -0
- package/cpp/skia/include/gpu/graphite/precompile/PrecompileMaskFilter.h +2 -0
- package/cpp/skia/include/ports/SkFontMgr_android_ndk.h +25 -0
- package/cpp/skia/include/ports/SkFontMgr_fontconfig.h +4 -2
- package/cpp/skia/include/ports/SkFontScanner_Fontations.h +15 -0
- package/cpp/skia/include/ports/SkFontScanner_FreeType.h +15 -0
- package/cpp/skia/include/private/SkExif.h +14 -0
- package/cpp/skia/include/private/SkPathRef.h +36 -0
- package/cpp/skia/include/private/base/SkFeatures.h +4 -0
- package/cpp/skia/include/private/base/SkSpan_impl.h +1 -3
- package/cpp/skia/modules/skcms/src/skcms_internals.h +3 -0
- package/cpp/skia/src/base/SkMathPriv.h +1 -8
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +1 -2
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +25 -19
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +23 -0
- package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +4 -8
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +26 -8
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +0 -20
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/Info.plist +5 -5
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libskunicode_core.xcframework/Info.plist +5 -5
- package/libs/ios/libskunicode_core.xcframework/ios-arm64_arm64e/libskunicode_core.a +0 -0
- package/libs/ios/libskunicode_core.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
- package/libs/ios/libskunicode_libgrapheme.xcframework/Info.plist +5 -5
- package/libs/ios/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
- package/libs/ios/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +1 -1
- package/react-native-skia.podspec +35 -9
- package/src/renderer/__tests__/e2e/SVG.spec.tsx +2 -1
- package/android/cpp/rnskia-android/SkiaOpenGLHelper.h +0 -310
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +0 -188
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +0 -100
|
@@ -10,14 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
#include "include/core/SkFlattenable.h"
|
|
12
12
|
#include "include/core/SkRefCnt.h"
|
|
13
|
-
#include "include/core/SkScalar.h"
|
|
14
13
|
#include "include/private/base/SkAPI.h"
|
|
15
14
|
|
|
16
15
|
// TODO(kjlubick) update clients and remove this unnecessary #include
|
|
17
16
|
#include "include/core/SkPath.h" // IWYU pragma: keep
|
|
18
17
|
|
|
19
18
|
#include <cstddef>
|
|
20
|
-
#include <cstdint>
|
|
21
19
|
|
|
22
20
|
class SkMatrix;
|
|
23
21
|
class SkStrokeRec;
|
|
@@ -55,27 +53,6 @@ public:
|
|
|
55
53
|
return kSkPathEffect_Type;
|
|
56
54
|
}
|
|
57
55
|
|
|
58
|
-
// move to base?
|
|
59
|
-
|
|
60
|
-
enum DashType {
|
|
61
|
-
kNone_DashType, //!< ignores the info parameter
|
|
62
|
-
kDash_DashType, //!< fills in all of the info parameter
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
struct DashInfo {
|
|
66
|
-
DashInfo() : fIntervals(nullptr), fCount(0), fPhase(0) {}
|
|
67
|
-
DashInfo(SkScalar* intervals, int32_t count, SkScalar phase)
|
|
68
|
-
: fIntervals(intervals), fCount(count), fPhase(phase) {}
|
|
69
|
-
|
|
70
|
-
SkScalar* fIntervals; //!< Length of on/off intervals for dashed lines
|
|
71
|
-
// Even values represent ons, and odds offs
|
|
72
|
-
int32_t fCount; //!< Number of intervals in the dash. Should be even number
|
|
73
|
-
SkScalar fPhase; //!< Offset into the dashed interval pattern
|
|
74
|
-
// mod the sum of all intervals
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
DashType asADash(DashInfo* info) const;
|
|
78
|
-
|
|
79
56
|
/**
|
|
80
57
|
* Given a src path (input) and a stroke-rec (input and output), apply
|
|
81
58
|
* this effect to the src path, returning the new path in dst, and return
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include <cstring>
|
|
22
22
|
|
|
23
23
|
struct SkRect;
|
|
24
|
+
class SkString;
|
|
24
25
|
|
|
25
26
|
/** \struct SkIRect
|
|
26
27
|
SkIRect holds four 32-bit integer coordinates describing the upper and
|
|
@@ -1347,6 +1348,7 @@ public:
|
|
|
1347
1348
|
example: https://fiddle.skia.org/c/@Rect_dump
|
|
1348
1349
|
*/
|
|
1349
1350
|
void dump(bool asHex) const;
|
|
1351
|
+
SkString dumpToString(bool asHex) const;
|
|
1350
1352
|
|
|
1351
1353
|
/** Writes text representation of SkRect to standard output. The representation may be
|
|
1352
1354
|
directly compiled as C++ code. Floating point values are written
|
|
@@ -132,6 +132,8 @@ public:
|
|
|
132
132
|
const char* data() const { return fRec->data(); }
|
|
133
133
|
const char* c_str() const { return fRec->data(); }
|
|
134
134
|
char operator[](size_t n) const { return this->c_str()[n]; }
|
|
135
|
+
const char* begin() const { return data(); }
|
|
136
|
+
const char* end() const { return data() + size(); }
|
|
135
137
|
|
|
136
138
|
bool equals(const SkString&) const;
|
|
137
139
|
bool equals(const char text[]) const;
|
|
@@ -177,6 +179,8 @@ public:
|
|
|
177
179
|
|
|
178
180
|
char* data();
|
|
179
181
|
char& operator[](size_t n) { return this->data()[n]; }
|
|
182
|
+
char* begin() { return data(); }
|
|
183
|
+
char* end() { return data() + size(); }
|
|
180
184
|
|
|
181
185
|
void reset();
|
|
182
186
|
/** String contents are preserved on resize. (For destructive resize, `set(nullptr, length)`.)
|
|
@@ -352,6 +352,10 @@ protected:
|
|
|
352
352
|
// Must return a valid scaler context. It can not return nullptr.
|
|
353
353
|
virtual std::unique_ptr<SkScalerContext> onCreateScalerContext(const SkScalerContextEffects&,
|
|
354
354
|
const SkDescriptor*) const = 0;
|
|
355
|
+
virtual std::unique_ptr<SkScalerContext> onCreateScalerContextAsProxyTypeface
|
|
356
|
+
(const SkScalerContextEffects&,
|
|
357
|
+
const SkDescriptor*,
|
|
358
|
+
sk_sp<SkTypeface>) const;
|
|
355
359
|
virtual void onFilterRec(SkScalerContextRec*) const = 0;
|
|
356
360
|
friend class SkScalerContext; // onFilterRec
|
|
357
361
|
|
|
@@ -420,6 +424,7 @@ private:
|
|
|
420
424
|
std::unique_ptr<SkAdvancedTypefaceMetrics> getAdvancedMetrics() const;
|
|
421
425
|
friend class SkRandomTypeface; // getAdvancedMetrics
|
|
422
426
|
friend class SkPDFFont; // getAdvancedMetrics
|
|
427
|
+
friend class SkTypeface_fontconfig;
|
|
423
428
|
|
|
424
429
|
friend class SkFontPriv; // getGlyphToUnicodeMap
|
|
425
430
|
|
|
@@ -96,7 +96,8 @@
|
|
|
96
96
|
#if defined(SK_HISTOGRAM_ENUMERATION) || \
|
|
97
97
|
defined(SK_HISTOGRAM_BOOLEAN) || \
|
|
98
98
|
defined(SK_HISTOGRAM_EXACT_LINEAR) || \
|
|
99
|
-
defined(SK_HISTOGRAM_MEMORY_KB)
|
|
99
|
+
defined(SK_HISTOGRAM_MEMORY_KB) || \
|
|
100
|
+
defined(SK_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES)
|
|
100
101
|
# define SK_HISTOGRAMS_ENABLED 1
|
|
101
102
|
#else
|
|
102
103
|
# define SK_HISTOGRAMS_ENABLED 0
|
|
@@ -107,17 +108,21 @@
|
|
|
107
108
|
#endif
|
|
108
109
|
|
|
109
110
|
#ifndef SK_HISTOGRAM_ENUMERATION
|
|
110
|
-
# define SK_HISTOGRAM_ENUMERATION(name,
|
|
111
|
+
# define SK_HISTOGRAM_ENUMERATION(name, sampleEnum, enumSize)
|
|
111
112
|
#endif
|
|
112
113
|
|
|
113
114
|
#ifndef SK_HISTOGRAM_EXACT_LINEAR
|
|
114
|
-
# define SK_HISTOGRAM_EXACT_LINEAR(name, sample,
|
|
115
|
+
# define SK_HISTOGRAM_EXACT_LINEAR(name, sample, valueMax)
|
|
115
116
|
#endif
|
|
116
117
|
|
|
117
118
|
#ifndef SK_HISTOGRAM_MEMORY_KB
|
|
118
119
|
# define SK_HISTOGRAM_MEMORY_KB(name, sample)
|
|
119
120
|
#endif
|
|
120
121
|
|
|
122
|
+
#ifndef SK_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES
|
|
123
|
+
# define SK_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(name, sampleUSec, minUSec, maxUSec, bucketCount)
|
|
124
|
+
#endif
|
|
125
|
+
|
|
121
126
|
#define SK_HISTOGRAM_PERCENTAGE(name, percent_as_int) \
|
|
122
127
|
SK_HISTOGRAM_EXACT_LINEAR(name, percent_as_int, 101)
|
|
123
128
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
class SkCanvas;
|
|
19
19
|
class SkExecutor;
|
|
20
20
|
class SkPDFArray;
|
|
21
|
-
class
|
|
21
|
+
class SkPDFStructTree;
|
|
22
22
|
class SkWStream;
|
|
23
23
|
|
|
24
24
|
#define SKPDF_STRING(X) SKPDF_STRING_IMPL(X)
|
|
@@ -46,9 +46,10 @@ public:
|
|
|
46
46
|
const std::vector<int>& nodeIds);
|
|
47
47
|
|
|
48
48
|
private:
|
|
49
|
-
friend class ::
|
|
49
|
+
friend class ::SkPDFStructTree;
|
|
50
50
|
|
|
51
51
|
std::unique_ptr<SkPDFArray> fAttrs;
|
|
52
|
+
std::vector<int> fElemIds; // element identifiers referenced by fAttrs
|
|
52
53
|
};
|
|
53
54
|
|
|
54
55
|
/** A node in a PDF structure tree, giving a semantic representation
|
|
@@ -60,7 +61,6 @@ struct StructureElementNode {
|
|
|
60
61
|
SkString fTypeString;
|
|
61
62
|
std::vector<std::unique_ptr<StructureElementNode>> fChildVector;
|
|
62
63
|
int fNodeId = 0;
|
|
63
|
-
std::vector<int> fAdditionalNodeIds;
|
|
64
64
|
AttributeList fAttributes;
|
|
65
65
|
SkString fAlt;
|
|
66
66
|
SkString fLang;
|
|
@@ -162,6 +162,7 @@ public:
|
|
|
162
162
|
|
|
163
163
|
// Color filter SkSL requires an entry point that looks like:
|
|
164
164
|
// vec4 main(vec4 inColor) { ... }
|
|
165
|
+
// https://fiddle.skia.org/c/@runtimeeffect_colorfilter_grid
|
|
165
166
|
static Result MakeForColorFilter(SkString sksl, const Options&);
|
|
166
167
|
static Result MakeForColorFilter(SkString sksl) {
|
|
167
168
|
return MakeForColorFilter(std::move(sksl), Options{});
|
|
@@ -352,7 +353,7 @@ private:
|
|
|
352
353
|
* Note that SkRuntimeEffectBuilder is built entirely on the public API of SkRuntimeEffect,
|
|
353
354
|
* so can be used as-is or serve as inspiration for other interfaces or binding techniques.
|
|
354
355
|
*/
|
|
355
|
-
class SkRuntimeEffectBuilder {
|
|
356
|
+
class SK_API SkRuntimeEffectBuilder {
|
|
356
357
|
public:
|
|
357
358
|
explicit SkRuntimeEffectBuilder(sk_sp<SkRuntimeEffect> effect)
|
|
358
359
|
: fEffect(std::move(effect))
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
#ifndef SkJpegEncoder_DEFINED
|
|
9
9
|
#define SkJpegEncoder_DEFINED
|
|
10
10
|
|
|
11
|
+
#include "include/codec/SkEncodedOrigin.h"
|
|
11
12
|
#include "include/core/SkRefCnt.h"
|
|
12
13
|
#include "include/private/base/SkAPI.h"
|
|
13
14
|
|
|
14
15
|
#include <memory>
|
|
16
|
+
#include <optional>
|
|
15
17
|
|
|
16
18
|
class SkColorSpace;
|
|
17
19
|
class SkData;
|
|
@@ -86,6 +88,8 @@ struct Options {
|
|
|
86
88
|
*/
|
|
87
89
|
const skcms_ICCProfile* fICCProfile = nullptr;
|
|
88
90
|
const char* fICCProfileDescription = nullptr;
|
|
91
|
+
|
|
92
|
+
std::optional<SkEncodedOrigin> fOrigin;
|
|
89
93
|
};
|
|
90
94
|
|
|
91
95
|
/**
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
#include "include/core/SkData.h"
|
|
12
12
|
#include "include/core/SkString.h"
|
|
13
13
|
#include "include/core/SkTypes.h"
|
|
14
|
+
#include "include/gpu/ShaderErrorHandler.h"
|
|
14
15
|
#include "include/gpu/ganesh/GrDriverBugWorkarounds.h"
|
|
15
16
|
#include "include/gpu/ganesh/GrTypes.h"
|
|
16
|
-
#include "include/gpu/ShaderErrorHandler.h"
|
|
17
17
|
#include "include/private/gpu/ganesh/GrTypesPriv.h"
|
|
18
18
|
|
|
19
19
|
#include <optional>
|
|
@@ -176,6 +176,13 @@ struct SK_API GrContextOptions {
|
|
|
176
176
|
*/
|
|
177
177
|
bool fAvoidStencilBuffers = false;
|
|
178
178
|
|
|
179
|
+
/**
|
|
180
|
+
* If true, texture fetches from mip-mapped textures will be biased to read larger MIP levels.
|
|
181
|
+
* This has the effect of sharpening those textures, at the cost of some aliasing, and possible
|
|
182
|
+
* performance impact.
|
|
183
|
+
*/
|
|
184
|
+
bool fSharpenMipmappedTextures = true;
|
|
185
|
+
|
|
179
186
|
/**
|
|
180
187
|
* Enables driver workaround to use draws instead of HW clears, e.g. glClear on the GL backend.
|
|
181
188
|
*/
|
|
@@ -479,10 +479,25 @@ public:
|
|
|
479
479
|
* If it returns false, then those same semaphores will not have been submitted and we will not
|
|
480
480
|
* try to submit them again. The caller is free to delete the semaphores at any time.
|
|
481
481
|
*
|
|
482
|
-
* If
|
|
483
|
-
* submitted work.
|
|
482
|
+
* If GrSubmitInfo::fSync flag is GrSyncCpu::kYes, this function will return once the gpu has
|
|
483
|
+
* finished with all submitted work.
|
|
484
|
+
*
|
|
485
|
+
* If GrSubmitInfo::fMarkBoundary flag is GrMarkFrameBoundary::kYes and the GPU supports a way
|
|
486
|
+
* to be notified about frame boundaries, then we will notify the GPU during/after the
|
|
487
|
+
* submission of work to the GPU. GrSubmitInfo::fFrameID is a frame ID that is passed to the
|
|
488
|
+
* GPU when marking a boundary. Ideally this value should be unique for each frame. Currently
|
|
489
|
+
* marking frame boundaries is only supported with the Vulkan backend and only if the
|
|
490
|
+
* VK_EXT_frame_boudnary extenstion is available.
|
|
484
491
|
*/
|
|
485
|
-
bool submit(
|
|
492
|
+
bool submit(const GrSubmitInfo&);
|
|
493
|
+
|
|
494
|
+
bool submit(GrSyncCpu sync = GrSyncCpu::kNo) {
|
|
495
|
+
GrSubmitInfo info;
|
|
496
|
+
info.fSync = sync;
|
|
497
|
+
|
|
498
|
+
return this->submit(info);
|
|
499
|
+
}
|
|
500
|
+
|
|
486
501
|
|
|
487
502
|
/**
|
|
488
503
|
* Checks whether any asynchronous work is complete and if so calls related callbacks.
|
|
@@ -174,4 +174,15 @@ enum class GrSyncCpu : bool {
|
|
|
174
174
|
kYes = true,
|
|
175
175
|
};
|
|
176
176
|
|
|
177
|
+
enum class GrMarkFrameBoundary : bool {
|
|
178
|
+
kNo = false,
|
|
179
|
+
kYes = true,
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
struct GrSubmitInfo {
|
|
183
|
+
GrSyncCpu fSync = GrSyncCpu::kNo;
|
|
184
|
+
GrMarkFrameBoundary fMarkBoundary = GrMarkFrameBoundary::kNo;
|
|
185
|
+
uint64_t fFrameID = 0;
|
|
186
|
+
};
|
|
187
|
+
|
|
177
188
|
#endif
|
|
@@ -104,7 +104,6 @@ using GrGLGetProgramInfoLogFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, G
|
|
|
104
104
|
using GrGLGetProgramivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint program, GrGLenum pname, GrGLint* params);
|
|
105
105
|
using GrGLGetQueryivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum GLtarget, GrGLenum pname, GrGLint* params);
|
|
106
106
|
using GrGLGetQueryObjecti64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLint64* params);
|
|
107
|
-
using GrGLGetQueryObjectivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLint* params);
|
|
108
107
|
using GrGLGetQueryObjectui64vFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint64* params);
|
|
109
108
|
using GrGLGetQueryObjectuivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLuint id, GrGLenum pname, GrGLuint* params);
|
|
110
109
|
using GrGLGetRenderbufferParameterivFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLenum target, GrGLenum pname, GrGLint* params);
|
|
@@ -219,8 +218,13 @@ using GrGLMultiDrawElementsInstancedBaseVertexBaseInstanceFn = GrGLvoid GR_GL_FU
|
|
|
219
218
|
/* ARB_sync */
|
|
220
219
|
using GrGLFenceSyncFn = GrGLsync GR_GL_FUNCTION_TYPE(GrGLenum condition, GrGLbitfield flags);
|
|
221
220
|
using GrGLIsSyncFn = GrGLboolean GR_GL_FUNCTION_TYPE(GrGLsync sync);
|
|
221
|
+
#if defined(__EMSCRIPTEN__)
|
|
222
|
+
using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLint timeoutLo, GrGLint timeoutHi);
|
|
223
|
+
using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint timeoutLo, GrGLuint timeoutHi);
|
|
224
|
+
#else
|
|
222
225
|
using GrGLClientWaitSyncFn = GrGLenum GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
|
|
223
226
|
using GrGLWaitSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync, GrGLbitfield flags, GrGLuint64 timeout);
|
|
227
|
+
#endif
|
|
224
228
|
using GrGLDeleteSyncFn = GrGLvoid GR_GL_FUNCTION_TYPE(GrGLsync sync);
|
|
225
229
|
|
|
226
230
|
/* ARB_internalformat_query */
|
|
@@ -174,7 +174,6 @@ public:
|
|
|
174
174
|
GrGLFunction<GrGLGetProgramInfoLogFn> fGetProgramInfoLog;
|
|
175
175
|
GrGLFunction<GrGLGetProgramivFn> fGetProgramiv;
|
|
176
176
|
GrGLFunction<GrGLGetQueryObjecti64vFn> fGetQueryObjecti64v;
|
|
177
|
-
GrGLFunction<GrGLGetQueryObjectivFn> fGetQueryObjectiv;
|
|
178
177
|
GrGLFunction<GrGLGetQueryObjectui64vFn> fGetQueryObjectui64v;
|
|
179
178
|
GrGLFunction<GrGLGetQueryObjectuivFn> fGetQueryObjectuiv;
|
|
180
179
|
GrGLFunction<GrGLGetQueryivFn> fGetQueryiv;
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#define skgpu_graphite_GraphiteTypes_DEFINED
|
|
10
10
|
|
|
11
11
|
#include "include/core/SkPoint.h"
|
|
12
|
+
#include "include/core/SkRect.h"
|
|
12
13
|
#include "include/core/SkTypes.h"
|
|
13
14
|
#include "include/gpu/GpuTypes.h"
|
|
14
15
|
|
|
@@ -44,6 +45,9 @@ using GpuFinishedProc = void (*)(GpuFinishedContext finishedContext, CallbackRes
|
|
|
44
45
|
*
|
|
45
46
|
* fTargetTranslation is an additional translation applied to draws targeting fTargetSurface.
|
|
46
47
|
*
|
|
48
|
+
* fTargetClip is an additional clip applied to draws targeting fTargetSurface. It is defined in the
|
|
49
|
+
* local replay space, that is, with fTargetTranslation applied. An empty clip will not be applied.
|
|
50
|
+
*
|
|
47
51
|
* The client may pass in two arrays of initialized BackendSemaphores to be included in the
|
|
48
52
|
* command stream. At some time before issuing commands in the Recording, the fWaitSemaphores will
|
|
49
53
|
* be waited on by the gpu. We only guarantee these wait semaphores block transfer and fragment
|
|
@@ -62,6 +66,7 @@ struct InsertRecordingInfo {
|
|
|
62
66
|
|
|
63
67
|
SkSurface* fTargetSurface = nullptr;
|
|
64
68
|
SkIVector fTargetTranslation = {0, 0};
|
|
69
|
+
SkIRect fTargetClip = {0, 0, 0, 0};
|
|
65
70
|
MutableTextureState* fTargetTextureState = nullptr;
|
|
66
71
|
|
|
67
72
|
size_t fNumWaitSemaphores = 0;
|
|
@@ -150,7 +155,10 @@ enum DrawTypeFlags : uint16_t {
|
|
|
150
155
|
// TessellateCurvesRenderStep[*] for [even-odd], [winding]
|
|
151
156
|
// MiddleOutFanRenderStep[*] for [even-odd], [winding]
|
|
152
157
|
kNonSimpleShape = 0b10000000,
|
|
158
|
+
|
|
159
|
+
kLast = kNonSimpleShape,
|
|
153
160
|
};
|
|
161
|
+
static constexpr int kDrawTypeFlagsCnt = static_cast<int>(DrawTypeFlags::kLast) + 1;
|
|
154
162
|
|
|
155
163
|
} // namespace skgpu::graphite
|
|
156
164
|
|
|
@@ -58,7 +58,6 @@ class UploadBufferManager;
|
|
|
58
58
|
class UploadList;
|
|
59
59
|
|
|
60
60
|
template<typename T> class PipelineDataCache;
|
|
61
|
-
using UniformDataCache = PipelineDataCache<UniformDataBlock>;
|
|
62
61
|
using TextureDataCache = PipelineDataCache<TextureDataBlock>;
|
|
63
62
|
|
|
64
63
|
struct SK_API RecorderOptions final {
|
|
@@ -262,7 +261,6 @@ private:
|
|
|
262
261
|
// Aggregated one-time uploads that preceed all tasks in the root task list.
|
|
263
262
|
std::unique_ptr<UploadList> fRootUploads;
|
|
264
263
|
|
|
265
|
-
std::unique_ptr<UniformDataCache> fUniformDataCache;
|
|
266
264
|
std::unique_ptr<TextureDataCache> fTextureDataCache;
|
|
267
265
|
std::unique_ptr<DrawBufferManager> fDrawBufferManager;
|
|
268
266
|
std::unique_ptr<UploadBufferManager> fUploadBufferManager;
|
|
@@ -32,6 +32,7 @@ class KeyContext;
|
|
|
32
32
|
class PaintOptionsPriv;
|
|
33
33
|
class PaintParamsKeyBuilder;
|
|
34
34
|
class PipelineDataGatherer;
|
|
35
|
+
struct RenderPassDesc;
|
|
35
36
|
class UniquePaintParamsID;
|
|
36
37
|
|
|
37
38
|
/** \class PaintOptions
|
|
@@ -171,14 +172,16 @@ private:
|
|
|
171
172
|
typedef std::function<void(UniquePaintParamsID id,
|
|
172
173
|
DrawTypeFlags,
|
|
173
174
|
bool withPrimitiveBlender,
|
|
174
|
-
Coverage
|
|
175
|
+
Coverage,
|
|
176
|
+
const RenderPassDesc&)> ProcessCombination;
|
|
175
177
|
|
|
176
178
|
void buildCombinations(const KeyContext&,
|
|
177
179
|
PipelineDataGatherer*,
|
|
178
|
-
DrawTypeFlags
|
|
180
|
+
DrawTypeFlags,
|
|
179
181
|
bool addPrimitiveBlender,
|
|
180
|
-
Coverage
|
|
181
|
-
const
|
|
182
|
+
Coverage,
|
|
183
|
+
const RenderPassDesc&,
|
|
184
|
+
const ProcessCombination&) const;
|
|
182
185
|
|
|
183
186
|
skia_private::TArray<sk_sp<PrecompileShader>> fShaderOptions;
|
|
184
187
|
skia_private::TArray<sk_sp<PrecompileColorFilter>> fColorFilterOptions;
|
|
@@ -61,10 +61,12 @@ private:
|
|
|
61
61
|
|
|
62
62
|
virtual void onCreatePipelines(const KeyContext&,
|
|
63
63
|
PipelineDataGatherer*,
|
|
64
|
+
const RenderPassDesc&,
|
|
64
65
|
const PaintOptions::ProcessCombination&) const = 0;
|
|
65
66
|
|
|
66
67
|
void createPipelines(const KeyContext&,
|
|
67
68
|
PipelineDataGatherer*,
|
|
69
|
+
const RenderPassDesc&,
|
|
68
70
|
const PaintOptions::ProcessCombination&);
|
|
69
71
|
|
|
70
72
|
skia_private::AutoSTArray<2, sk_sp<PrecompileImageFilter>> fInputs;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Google LLC.
|
|
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 SkFontMgr_android_ndk_DEFINED
|
|
9
|
+
#define SkFontMgr_android_ndk_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/core/SkRefCnt.h"
|
|
12
|
+
#include "include/core/SkTypes.h"
|
|
13
|
+
|
|
14
|
+
#include <memory>
|
|
15
|
+
|
|
16
|
+
class SkFontMgr;
|
|
17
|
+
class SkFontScanner;
|
|
18
|
+
|
|
19
|
+
/** Create a font manager for Android NDK. May return nullptr if unavailable (API < 29). */
|
|
20
|
+
SK_API sk_sp<SkFontMgr> SkFontMgr_New_AndroidNDK(bool cacheFontFiles);
|
|
21
|
+
|
|
22
|
+
SK_API sk_sp<SkFontMgr> SkFontMgr_New_AndroidNDK(bool cacheFontFiles,
|
|
23
|
+
std::unique_ptr<SkFontScanner> scanner);
|
|
24
|
+
|
|
25
|
+
#endif // SkFontMgr_android_ndk_DEFINED
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
#ifndef SkFontMgr_fontconfig_DEFINED
|
|
9
9
|
#define SkFontMgr_fontconfig_DEFINED
|
|
10
10
|
|
|
11
|
-
#include "include/core/SkRefCnt.h"
|
|
12
11
|
#include <fontconfig/fontconfig.h>
|
|
12
|
+
#include "include/core/SkRefCnt.h"
|
|
13
|
+
#include <memory>
|
|
13
14
|
|
|
14
15
|
class SkFontMgr;
|
|
15
16
|
|
|
@@ -17,6 +18,7 @@ class SkFontMgr;
|
|
|
17
18
|
* If 'fc' is NULL, will use a new default config.
|
|
18
19
|
* Takes ownership of 'fc' and will call FcConfigDestroy on it.
|
|
19
20
|
*/
|
|
21
|
+
class SkFontScanner;
|
|
22
|
+
SK_API sk_sp<SkFontMgr> SkFontMgr_New_FontConfig(FcConfig* fc, std::unique_ptr<SkFontScanner> scanner);
|
|
20
23
|
SK_API sk_sp<SkFontMgr> SkFontMgr_New_FontConfig(FcConfig* fc);
|
|
21
|
-
|
|
22
24
|
#endif // #ifndef SkFontMgr_fontconfig_DEFINED
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 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 SKFONTSCANNER_FONTATIONS_H_
|
|
9
|
+
#define SKFONTSCANNER_FONTATIONS_H_
|
|
10
|
+
|
|
11
|
+
#include "include/core/SkFontScanner.h"
|
|
12
|
+
|
|
13
|
+
SK_API std::unique_ptr<SkFontScanner> SkFontScanner_Make_Fontations();
|
|
14
|
+
|
|
15
|
+
#endif // SKFONTSCANNER_FONTATIONS_H_
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 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 SKFONTSCANNER_FREETYPE_H_
|
|
9
|
+
#define SKFONTSCANNER_FREETYPE_H_
|
|
10
|
+
|
|
11
|
+
#include "include/core/SkFontScanner.h"
|
|
12
|
+
|
|
13
|
+
SK_API std::unique_ptr<SkFontScanner> SkFontScanner_Make_FreeType();
|
|
14
|
+
|
|
15
|
+
#endif // SKFONTSCANNER_FREETYPE_H_
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#define SkExif_DEFINED
|
|
10
10
|
|
|
11
11
|
#include "include/codec/SkEncodedOrigin.h"
|
|
12
|
+
#include "include/core/SkRefCnt.h"
|
|
12
13
|
#include "include/private/base/SkAPI.h"
|
|
13
14
|
|
|
14
15
|
#include <cstdint>
|
|
@@ -50,6 +51,19 @@ struct Metadata {
|
|
|
50
51
|
*/
|
|
51
52
|
void SK_API Parse(Metadata& metadata, const SkData* data);
|
|
52
53
|
|
|
54
|
+
/*
|
|
55
|
+
* Write exif data that includes the values in |metadata| and returns it as SkData
|
|
56
|
+
* untruncated. Return nullptr if a write to the data stream fails or if
|
|
57
|
+
* |metadata.fHdrHeadroom| has value.
|
|
58
|
+
* This function cannot write an IFD entry based on the HdrHeadroom value because
|
|
59
|
+
* the information of maker33 and maker48 are lost in decoding.
|
|
60
|
+
* For metadata that belongs in a subIFD the function will write it to one and
|
|
61
|
+
* store it after the root IFD.
|
|
62
|
+
* Data that does not fit within kSizeEntry, is appended to the end of the data,
|
|
63
|
+
* after the subIFD if it exists.
|
|
64
|
+
*/
|
|
65
|
+
sk_sp<SkData> WriteExif(Metadata& metadata);
|
|
66
|
+
|
|
53
67
|
} // namespace SkExif
|
|
54
68
|
|
|
55
69
|
#endif
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#ifndef SkPathRef_DEFINED
|
|
9
9
|
#define SkPathRef_DEFINED
|
|
10
10
|
|
|
11
|
+
#include "include/core/SkArc.h"
|
|
11
12
|
#include "include/core/SkPoint.h"
|
|
12
13
|
#include "include/core/SkRect.h"
|
|
13
14
|
#include "include/core/SkRefCnt.h"
|
|
@@ -63,6 +64,7 @@ public:
|
|
|
63
64
|
kGeneral,
|
|
64
65
|
kOval,
|
|
65
66
|
kRRect,
|
|
67
|
+
kArc,
|
|
66
68
|
};
|
|
67
69
|
|
|
68
70
|
SkPathRef(SkSpan<const SkPoint> points, SkSpan<const uint8_t> verbs,
|
|
@@ -78,6 +80,9 @@ public:
|
|
|
78
80
|
// The next two values don't matter unless fType is kOval or kRRect
|
|
79
81
|
fRRectOrOvalIsCCW = false;
|
|
80
82
|
fRRectOrOvalStartIdx = 0xAC;
|
|
83
|
+
fArcOval.setEmpty();
|
|
84
|
+
fArcStartAngle = fArcSweepAngle = 0.0f;
|
|
85
|
+
fArcType = SkArc::Type::kArc;
|
|
81
86
|
SkDEBUGCODE(fEditorsAttached.store(0);)
|
|
82
87
|
|
|
83
88
|
this->computeBounds(); // do this now, before we worry about multiple owners/threads
|
|
@@ -160,6 +165,10 @@ public:
|
|
|
160
165
|
fPathRef->setIsRRect(isCCW, start);
|
|
161
166
|
}
|
|
162
167
|
|
|
168
|
+
void setIsArc(const SkArc& arc) {
|
|
169
|
+
fPathRef->setIsArc(arc);
|
|
170
|
+
}
|
|
171
|
+
|
|
163
172
|
void setBounds(const SkRect& rect) { fPathRef->setBounds(rect); }
|
|
164
173
|
|
|
165
174
|
private:
|
|
@@ -249,6 +258,16 @@ public:
|
|
|
249
258
|
|
|
250
259
|
bool isRRect(SkRRect* rrect, bool* isCCW, unsigned* start) const;
|
|
251
260
|
|
|
261
|
+
bool isArc(SkArc* arc) const {
|
|
262
|
+
if (fType == PathType::kArc) {
|
|
263
|
+
if (arc) {
|
|
264
|
+
*arc = SkArc::Make(fArcOval, fArcStartAngle, fArcSweepAngle, fArcType);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return fType == PathType::kArc;
|
|
269
|
+
}
|
|
270
|
+
|
|
252
271
|
bool hasComputedBounds() const {
|
|
253
272
|
return !fBoundsIsDirty;
|
|
254
273
|
}
|
|
@@ -365,6 +384,9 @@ private:
|
|
|
365
384
|
// The next two values don't matter unless fType is kOval or kRRect
|
|
366
385
|
fRRectOrOvalIsCCW = false;
|
|
367
386
|
fRRectOrOvalStartIdx = 0xAC;
|
|
387
|
+
fArcOval.setEmpty();
|
|
388
|
+
fArcStartAngle = fArcSweepAngle = 0.0f;
|
|
389
|
+
fArcType = SkArc::Type::kArc;
|
|
368
390
|
if (numPoints > 0) {
|
|
369
391
|
fPoints.reserve_exact(numPoints);
|
|
370
392
|
}
|
|
@@ -497,6 +519,14 @@ private:
|
|
|
497
519
|
fRRectOrOvalStartIdx = SkToU8(start);
|
|
498
520
|
}
|
|
499
521
|
|
|
522
|
+
void setIsArc(const SkArc& arc) {
|
|
523
|
+
fType = PathType::kArc;
|
|
524
|
+
fArcOval = arc.fOval;
|
|
525
|
+
fArcStartAngle = arc.fStartAngle;
|
|
526
|
+
fArcSweepAngle = arc.fSweepAngle;
|
|
527
|
+
fArcType = arc.fType;
|
|
528
|
+
}
|
|
529
|
+
|
|
500
530
|
// called only by the editor. Note that this is not a const function.
|
|
501
531
|
SkPoint* getWritablePoints() {
|
|
502
532
|
SkDEBUGCODE(this->validate();)
|
|
@@ -534,6 +564,12 @@ private:
|
|
|
534
564
|
bool fRRectOrOvalIsCCW;
|
|
535
565
|
uint8_t fRRectOrOvalStartIdx;
|
|
536
566
|
uint8_t fSegmentMask;
|
|
567
|
+
// If the path is an arc, these four variables store that information.
|
|
568
|
+
// We should just store an SkArc, but alignment would cost us 8 more bytes.
|
|
569
|
+
SkArc::Type fArcType;
|
|
570
|
+
SkRect fArcOval;
|
|
571
|
+
SkScalar fArcStartAngle;
|
|
572
|
+
SkScalar fArcSweepAngle;
|
|
537
573
|
|
|
538
574
|
friend class PathRefTest_Private;
|
|
539
575
|
friend class ForceIsRRect_Private; // unit test isRRect
|
|
@@ -69,7 +69,7 @@ public:
|
|
|
69
69
|
template <typename Integer, std::enable_if_t<std::is_integral_v<Integer>, bool> = true>
|
|
70
70
|
constexpr SkSpan(T* ptr, Integer size) : fPtr{ptr}, fSize{SkToSizeT(size)} {
|
|
71
71
|
SkASSERT(ptr || fSize == 0); // disallow nullptr + a nonzero size
|
|
72
|
-
SkASSERT(fSize <
|
|
72
|
+
SkASSERT(fSize < (std::numeric_limits<size_t>::max() / sizeof(T)));
|
|
73
73
|
}
|
|
74
74
|
template <typename U, typename = std::enable_if_t<std::is_same_v<const U, T>>>
|
|
75
75
|
constexpr SkSpan(const SkSpan<U>& that) : fPtr(std::data(that)), fSize(std::size(that)) {}
|
|
@@ -118,8 +118,6 @@ public:
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
private:
|
|
121
|
-
static constexpr size_t kMaxSize = std::numeric_limits<size_t>::max() / sizeof(T);
|
|
122
|
-
|
|
123
121
|
T* fPtr;
|
|
124
122
|
size_t fSize;
|
|
125
123
|
};
|