@shopify/react-native-skia 1.0.5 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +4 -8
- package/android/build.gradle +9 -2
- package/android/cpp/jni/JniPlatformContext.cpp +7 -7
- package/android/cpp/jni/JniSkiaManager.cpp +1 -1
- package/android/cpp/jni/include/JniSkiaBaseView.h +2 -2
- package/android/cpp/jni/include/JniSkiaDomView.h +4 -4
- package/android/cpp/jni/include/JniSkiaManager.h +4 -4
- package/android/cpp/jni/include/JniSkiaPictureView.h +4 -4
- package/android/cpp/rnskia-android/GrAHardwareBufferUtils.cpp +245 -0
- package/android/cpp/rnskia-android/GrAHardwareBufferUtils.h +33 -0
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +3 -3
- package/android/cpp/rnskia-android/RNSkAndroidView.h +1 -1
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +2 -2
- package/android/cpp/rnskia-android/SkiaOpenGLHelper.h +4 -4
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +32 -2
- package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.h +7 -4
- package/cpp/api/JsiSkAnimatedImage.h +1 -1
- package/cpp/api/JsiSkCanvas.h +8 -8
- package/cpp/api/JsiSkColor.h +1 -1
- package/cpp/api/JsiSkColorFilter.h +1 -1
- package/cpp/api/JsiSkColorFilterFactory.h +2 -2
- package/cpp/api/JsiSkContourMeasure.h +1 -1
- package/cpp/api/JsiSkContourMeasureIter.h +1 -1
- package/cpp/api/JsiSkData.h +2 -2
- package/cpp/api/JsiSkFont.h +2 -2
- package/cpp/api/JsiSkFontMgr.h +1 -1
- package/cpp/api/JsiSkFontMgrFactory.h +1 -1
- package/cpp/api/JsiSkFontStyle.h +2 -2
- package/cpp/api/JsiSkImage.h +2 -2
- package/cpp/api/JsiSkImageFactory.h +0 -1
- package/cpp/api/JsiSkImageFilter.h +1 -1
- package/cpp/api/JsiSkImageFilterFactory.h +1 -1
- package/cpp/api/JsiSkImageInfo.h +1 -1
- package/cpp/api/JsiSkMaskFilter.h +1 -1
- package/cpp/api/JsiSkMaskFilterFactory.h +1 -1
- package/cpp/api/JsiSkMatrix.h +1 -1
- package/cpp/api/JsiSkPaint.h +1 -1
- package/cpp/api/JsiSkParagraph.h +7 -7
- package/cpp/api/JsiSkParagraphBuilder.h +9 -9
- package/cpp/api/JsiSkParagraphBuilderFactory.h +4 -4
- package/cpp/api/JsiSkParagraphStyle.h +3 -3
- package/cpp/api/JsiSkPath.h +11 -11
- package/cpp/api/JsiSkPathEffect.h +1 -1
- package/cpp/api/JsiSkPathEffectFactory.h +4 -4
- package/cpp/api/JsiSkPathFactory.h +2 -2
- package/cpp/api/JsiSkPicture.h +1 -1
- package/cpp/api/JsiSkPictureFactory.h +2 -2
- package/cpp/api/JsiSkPictureRecorder.h +2 -2
- package/cpp/api/JsiSkPoint.h +1 -1
- package/cpp/api/JsiSkRRect.h +1 -1
- package/cpp/api/JsiSkRSXform.h +1 -1
- package/cpp/api/JsiSkRect.h +1 -1
- package/cpp/api/JsiSkRuntimeEffect.h +1 -1
- package/cpp/api/JsiSkRuntimeShaderBuilder.h +1 -1
- package/cpp/api/JsiSkSVGFactory.h +1 -1
- package/cpp/api/JsiSkShader.h +2 -2
- package/cpp/api/JsiSkShaderFactory.h +3 -3
- package/cpp/api/JsiSkStrutStyle.h +1 -1
- package/cpp/api/JsiSkSurface.h +1 -1
- package/cpp/api/JsiSkSurfaceFactory.h +1 -1
- package/cpp/api/JsiSkTextBlob.h +1 -1
- package/cpp/api/JsiSkTextBlobFactory.h +1 -1
- package/cpp/api/JsiSkTextStyle.h +2 -2
- package/cpp/api/JsiSkTypeface.h +3 -3
- package/cpp/api/JsiSkTypefaceFontProvider.h +2 -2
- package/cpp/api/JsiSkVertices.h +1 -1
- package/cpp/jsi/JsiHostObject.cpp +1 -1
- package/cpp/rnskia/RNSkDomView.cpp +1 -1
- package/cpp/rnskia/RNSkDomView.h +3 -3
- package/cpp/rnskia/RNSkJsiViewApi.h +48 -0
- package/cpp/rnskia/RNSkManager.cpp +5 -5
- package/cpp/rnskia/RNSkPictureView.h +3 -3
- package/cpp/rnskia/RNSkPlatformContext.h +5 -5
- package/cpp/rnskia/RNSkView.h +2 -2
- package/cpp/rnskia/dom/base/ConcatablePaint.h +6 -6
- package/cpp/rnskia/dom/base/Declaration.h +1 -1
- package/cpp/rnskia/dom/base/DeclarationContext.h +7 -7
- package/cpp/rnskia/dom/base/DrawingContext.h +3 -3
- package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +2 -2
- package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiPointsNode.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +1 -1
- package/cpp/rnskia/dom/props/BlendModeProp.h +1 -1
- package/cpp/rnskia/dom/props/BoxShadowProps.h +1 -1
- package/cpp/rnskia/dom/props/CircleProp.h +1 -1
- package/cpp/rnskia/dom/props/ClipProp.h +2 -2
- package/cpp/rnskia/dom/props/PaintProps.h +1 -1
- package/cpp/rnskia/dom/props/PathProp.h +1 -1
- package/cpp/rnskia/dom/props/PointProp.h +1 -1
- package/cpp/rnskia/dom/props/PointsProp.h +1 -1
- package/cpp/rnskia/dom/props/RRectProp.h +2 -2
- package/cpp/rnskia/dom/props/RSXformProp.h +1 -1
- package/cpp/rnskia/dom/props/RadiusProp.h +1 -1
- package/cpp/rnskia/dom/props/RectProp.h +1 -1
- package/cpp/rnskia/dom/props/StrokeProps.h +1 -1
- package/cpp/rnskia/dom/props/TileModeProp.h +1 -1
- package/cpp/rnskia/dom/props/UniformsProp.h +1 -1
- package/cpp/rnskia/dom/props/VertexModeProp.h +1 -1
- package/cpp/rnskia/dom/props/VerticesProps.h +1 -1
- package/cpp/skia/src/gpu/ganesh/gl/GrGLDefines.h +1158 -0
- package/cpp/utils/RNSkTypedArray.h +1 -1
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +6 -6
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +3 -3
- package/ios/RNSkia-iOS/SkiaDomView.mm +7 -7
- package/ios/RNSkia-iOS/SkiaDomViewManager.mm +7 -7
- package/ios/RNSkia-iOS/SkiaManager.h +1 -1
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +1 -1
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +5 -5
- package/ios/RNSkia-iOS/SkiaPictureView.mm +7 -7
- package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +4 -4
- package/ios/RNSkia-iOS/SkiaUIView.h +3 -3
- package/ios/RNSkia-iOS/SkiaUIView.mm +2 -2
- package/ios/RNSkia-iOS/ViewScreenshotService.h +1 -1
- package/ios/RNSkia-iOS/ViewScreenshotService.mm +1 -1
- package/lib/commonjs/headless/index.d.ts +1 -0
- package/lib/commonjs/headless/index.js +17 -0
- package/lib/commonjs/headless/index.js.map +1 -1
- package/lib/commonjs/mock/index.js +1 -0
- package/lib/commonjs/mock/index.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js +1 -1
- package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js.map +1 -1
- package/lib/commonjs/views/SkiaDomView.d.ts +6 -0
- package/lib/commonjs/views/SkiaDomView.js +10 -0
- package/lib/commonjs/views/SkiaDomView.js.map +1 -1
- package/lib/commonjs/views/types.d.ts +1 -0
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/headless/index.d.ts +1 -0
- package/lib/module/headless/index.js +1 -0
- package/lib/module/headless/index.js.map +1 -1
- package/lib/module/mock/index.js +1 -0
- package/lib/module/mock/index.js.map +1 -1
- package/lib/module/skia/web/JsiSkSurfaceFactory.js +1 -1
- package/lib/module/skia/web/JsiSkSurfaceFactory.js.map +1 -1
- package/lib/module/views/SkiaDomView.d.ts +6 -0
- package/lib/module/views/SkiaDomView.js +10 -0
- package/lib/module/views/SkiaDomView.js.map +1 -1
- package/lib/module/views/types.d.ts +1 -0
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/src/headless/index.d.ts +1 -0
- package/lib/typescript/src/views/SkiaDomView.d.ts +6 -0
- package/lib/typescript/src/views/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/headless/index.ts +2 -0
- package/src/mock/index.ts +1 -0
- package/src/skia/web/JsiSkSurfaceFactory.ts +1 -1
- package/src/views/SkiaDomView.tsx +10 -0
- package/src/views/types.ts +1 -0
package/android/CMakeLists.txt
CHANGED
@@ -46,6 +46,7 @@ add_library(
|
|
46
46
|
"${PROJECT_SOURCE_DIR}/cpp/jni/JniPlatformContext.cpp"
|
47
47
|
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp"
|
48
48
|
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp"
|
49
|
+
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/GrAHardwareBufferUtils.cpp"
|
49
50
|
|
50
51
|
"${PROJECT_SOURCE_DIR}/../cpp/jsi/JsiHostObject.cpp"
|
51
52
|
"${PROJECT_SOURCE_DIR}/../cpp/jsi/JsiValue.cpp"
|
@@ -80,14 +81,9 @@ target_include_directories(
|
|
80
81
|
cpp/jni/include
|
81
82
|
cpp/rnskia-android
|
82
83
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
../cpp/skia/include/utils/
|
87
|
-
../cpp/skia/include/pathops/
|
88
|
-
../cpp/skia/modules/
|
89
|
-
../cpp/skia/modules/skparagraph/include/
|
90
|
-
../cpp/skia/include/
|
84
|
+
# Skia headers have to be included with "fully"-qualified paths,
|
85
|
+
# so "include/core/SkRef.h" instead of "SkRef.h", as otherwise
|
86
|
+
# the prefab cannot be shipped.
|
91
87
|
../cpp/skia
|
92
88
|
|
93
89
|
../cpp/api
|
package/android/build.gradle
CHANGED
@@ -161,6 +161,9 @@ android {
|
|
161
161
|
}
|
162
162
|
|
163
163
|
sourceSets.main {
|
164
|
+
jniLibs {
|
165
|
+
srcDirs += ['../libs/android']
|
166
|
+
}
|
164
167
|
java {
|
165
168
|
if (!isNewArchitectureEnabled()) {
|
166
169
|
srcDirs += [
|
@@ -309,16 +312,20 @@ extractJNIFiles.mustRunAfter extractAARHeaders
|
|
309
312
|
if (ENABLE_PREFAB) {
|
310
313
|
// Package all the cpp code in a flattened directory structure
|
311
314
|
task prepareHeaders(type: Copy) {
|
315
|
+
from("../cpp")
|
312
316
|
from("./cpp")
|
313
|
-
into "${project.buildDir}/headers/rnskia/"
|
317
|
+
into "${project.buildDir}/headers/rnskia/react-native-skia"
|
314
318
|
includeEmptyDirs = false
|
315
319
|
include "**/*.h"
|
316
320
|
eachFile {
|
317
321
|
String path = it.path
|
318
322
|
|
319
|
-
// Skip flattening third_party dir
|
320
323
|
if (path.contains("api/third_party")) {
|
324
|
+
// Skip flattening third_party dir
|
321
325
|
path = path.substring("api/".length())
|
326
|
+
} else if (path.contains("skia/include") || path.contains("skia/modules") || path.contains("skia/src")) {
|
327
|
+
// Skip flattening Skia dir
|
328
|
+
path = path.substring("skia/".length())
|
322
329
|
} else {
|
323
330
|
// flatten anything else
|
324
331
|
path = path.substring(path.lastIndexOf("/") + 1)
|
@@ -4,18 +4,18 @@
|
|
4
4
|
#include <thread>
|
5
5
|
#include <utility>
|
6
6
|
|
7
|
-
#include "SkData.h"
|
8
|
-
#include "SkRefCnt.h"
|
9
|
-
#include "SkStream.h"
|
10
|
-
#include "SkTypes.h"
|
7
|
+
#include "include/core/SkData.h"
|
8
|
+
#include "include/core/SkRefCnt.h"
|
9
|
+
#include "include/core/SkStream.h"
|
10
|
+
#include "include/core/SkTypes.h"
|
11
11
|
|
12
12
|
#include <android/bitmap.h>
|
13
13
|
|
14
14
|
#pragma clang diagnostic push
|
15
15
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
16
16
|
|
17
|
-
#include "SkBitmap.h"
|
18
|
-
#include "SkPixmap.h"
|
17
|
+
#include "include/core/SkBitmap.h"
|
18
|
+
#include "include/core/SkPixmap.h"
|
19
19
|
|
20
20
|
#pragma clang diagnostic pop
|
21
21
|
|
@@ -216,4 +216,4 @@ void JniPlatformContext::raiseError(const std::exception &err) {
|
|
216
216
|
method(javaPart_.get(), std::string(err.what()));
|
217
217
|
}
|
218
218
|
|
219
|
-
} // namespace RNSkia
|
219
|
+
} // namespace RNSkia
|
@@ -7,10 +7,10 @@
|
|
7
7
|
#include <jni.h>
|
8
8
|
#include <jsi/jsi.h>
|
9
9
|
|
10
|
-
#include
|
11
|
-
#include
|
12
|
-
#include
|
13
|
-
#include
|
10
|
+
#include "JniSkiaBaseView.h"
|
11
|
+
#include "JniSkiaManager.h"
|
12
|
+
#include "RNSkAndroidView.h"
|
13
|
+
#include "RNSkDomView.h"
|
14
14
|
|
15
15
|
#include <android/native_window.h>
|
16
16
|
#include <android/native_window_jni.h>
|
@@ -7,10 +7,10 @@
|
|
7
7
|
#include <memory>
|
8
8
|
#include <react/jni/JRuntimeExecutor.h>
|
9
9
|
|
10
|
-
#include
|
11
|
-
#include
|
12
|
-
#include
|
13
|
-
#include
|
10
|
+
#include "JniPlatformContext.h"
|
11
|
+
#include "RNSkAndroidPlatformContext.h"
|
12
|
+
#include "RNSkLog.h"
|
13
|
+
#include "RNSkManager.h"
|
14
14
|
|
15
15
|
namespace RNSkia {
|
16
16
|
|
@@ -7,10 +7,10 @@
|
|
7
7
|
#include <jni.h>
|
8
8
|
#include <jsi/jsi.h>
|
9
9
|
|
10
|
-
#include
|
11
|
-
#include
|
12
|
-
#include
|
13
|
-
#include
|
10
|
+
#include "JniSkiaBaseView.h"
|
11
|
+
#include "JniSkiaManager.h"
|
12
|
+
#include "RNSkAndroidView.h"
|
13
|
+
#include "RNSkPictureView.h"
|
14
14
|
|
15
15
|
#include <android/native_window.h>
|
16
16
|
#include <android/native_window_jni.h>
|
@@ -0,0 +1,245 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2023 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
|
+
#include "GrAHardwareBufferUtils.h"
|
9
|
+
#if __ANDROID_API__ >= 26
|
10
|
+
|
11
|
+
#define GL_GLEXT_PROTOTYPES
|
12
|
+
#define EGL_EGLEXT_PROTOTYPES
|
13
|
+
|
14
|
+
#include "include/gpu/GrBackendSurface.h"
|
15
|
+
#include "include/gpu/GrDirectContext.h"
|
16
|
+
#include "include/gpu/ganesh/gl/GrGLBackendSurface.h"
|
17
|
+
#include "include/gpu/gl/GrGLTypes.h"
|
18
|
+
#include "src/gpu/ganesh/gl/GrGLDefines.h"
|
19
|
+
// #include "src/gpu/ganesh/GrDirectContextPriv.h"
|
20
|
+
// #include "src/gpu/ganesh/gl/GrGLUtil.h"
|
21
|
+
|
22
|
+
#include <EGL/egl.h>
|
23
|
+
#include <EGL/eglext.h>
|
24
|
+
#include <GLES/gl.h>
|
25
|
+
#include <GLES/glext.h>
|
26
|
+
#include <android/hardware_buffer.h>
|
27
|
+
|
28
|
+
#define PROT_CONTENT_EXT_STR "EGL_EXT_protected_content"
|
29
|
+
#define EGL_PROTECTED_CONTENT_EXT 0x32C0
|
30
|
+
|
31
|
+
namespace RNSkia {
|
32
|
+
|
33
|
+
typedef EGLClientBuffer (*EGLGetNativeClientBufferANDROIDProc)(
|
34
|
+
const struct AHardwareBuffer *);
|
35
|
+
typedef EGLImageKHR (*EGLCreateImageKHRProc)(EGLDisplay, EGLContext, EGLenum,
|
36
|
+
EGLClientBuffer, const EGLint *);
|
37
|
+
typedef void (*EGLImageTargetTexture2DOESProc)(EGLenum, void *);
|
38
|
+
|
39
|
+
GrBackendFormat GetGLBackendFormat(GrDirectContext *dContext,
|
40
|
+
uint32_t bufferFormat,
|
41
|
+
bool requireKnownFormat) {
|
42
|
+
GrBackendApi backend = dContext->backend();
|
43
|
+
if (backend != GrBackendApi::kOpenGL) {
|
44
|
+
return GrBackendFormat();
|
45
|
+
}
|
46
|
+
switch (bufferFormat) {
|
47
|
+
// TODO: find out if we can detect, which graphic buffers support
|
48
|
+
// GR_GL_TEXTURE_2D
|
49
|
+
case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:
|
50
|
+
case AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM:
|
51
|
+
return GrBackendFormats::MakeGL(GR_GL_RGBA8, GR_GL_TEXTURE_EXTERNAL);
|
52
|
+
case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:
|
53
|
+
return GrBackendFormats::MakeGL(GR_GL_RGBA16F, GR_GL_TEXTURE_EXTERNAL);
|
54
|
+
case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:
|
55
|
+
return GrBackendFormats::MakeGL(GR_GL_RGB565, GR_GL_TEXTURE_EXTERNAL);
|
56
|
+
case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:
|
57
|
+
return GrBackendFormats::MakeGL(GR_GL_RGB10_A2, GR_GL_TEXTURE_EXTERNAL);
|
58
|
+
case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:
|
59
|
+
return GrBackendFormats::MakeGL(GR_GL_RGB8, GR_GL_TEXTURE_EXTERNAL);
|
60
|
+
#if __ANDROID_API__ >= 33
|
61
|
+
case AHARDWAREBUFFER_FORMAT_R8_UNORM:
|
62
|
+
return GrBackendFormats::MakeGL(GR_GL_R8, GR_GL_TEXTURE_EXTERNAL);
|
63
|
+
#endif
|
64
|
+
default:
|
65
|
+
if (requireKnownFormat) {
|
66
|
+
return GrBackendFormat();
|
67
|
+
} else {
|
68
|
+
return GrBackendFormats::MakeGL(GR_GL_RGBA8, GR_GL_TEXTURE_EXTERNAL);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
SkUNREACHABLE;
|
72
|
+
}
|
73
|
+
|
74
|
+
class GLTextureHelper {
|
75
|
+
public:
|
76
|
+
GLTextureHelper(GrGLuint texID, EGLImageKHR image, EGLDisplay display,
|
77
|
+
GrGLuint texTarget)
|
78
|
+
: fTexID(texID), fImage(image), fDisplay(display), fTexTarget(texTarget) {
|
79
|
+
}
|
80
|
+
~GLTextureHelper() {
|
81
|
+
glDeleteTextures(1, &fTexID);
|
82
|
+
// eglDestroyImageKHR will remove a ref from the AHardwareBuffer
|
83
|
+
eglDestroyImageKHR(fDisplay, fImage);
|
84
|
+
}
|
85
|
+
void rebind(GrDirectContext *);
|
86
|
+
|
87
|
+
private:
|
88
|
+
GrGLuint fTexID;
|
89
|
+
EGLImageKHR fImage;
|
90
|
+
EGLDisplay fDisplay;
|
91
|
+
GrGLuint fTexTarget;
|
92
|
+
};
|
93
|
+
|
94
|
+
void GLTextureHelper::rebind(GrDirectContext *dContext) {
|
95
|
+
glBindTexture(fTexTarget, fTexID);
|
96
|
+
GLenum status = GL_NO_ERROR;
|
97
|
+
if ((status = glGetError()) != GL_NO_ERROR) {
|
98
|
+
SkDebugf("glBindTexture(%#x, %d) failed (%#x)",
|
99
|
+
static_cast<int>(fTexTarget), static_cast<int>(fTexID),
|
100
|
+
static_cast<int>(status));
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
glEGLImageTargetTexture2DOES(fTexTarget, fImage);
|
104
|
+
if ((status = glGetError()) != GL_NO_ERROR) {
|
105
|
+
SkDebugf("glEGLImageTargetTexture2DOES failed (%#x)",
|
106
|
+
static_cast<int>(status));
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
dContext->resetContext(kTextureBinding_GrGLBackendState);
|
110
|
+
}
|
111
|
+
|
112
|
+
void delete_gl_texture(void *context) {
|
113
|
+
GLTextureHelper *cleanupHelper = static_cast<GLTextureHelper *>(context);
|
114
|
+
delete cleanupHelper;
|
115
|
+
}
|
116
|
+
|
117
|
+
void update_gl_texture(void *context, GrDirectContext *dContext) {
|
118
|
+
GLTextureHelper *cleanupHelper = static_cast<GLTextureHelper *>(context);
|
119
|
+
cleanupHelper->rebind(dContext);
|
120
|
+
}
|
121
|
+
|
122
|
+
static GrBackendTexture make_gl_backend_texture(
|
123
|
+
GrDirectContext *dContext, AHardwareBuffer *hardwareBuffer, int width,
|
124
|
+
int height, DeleteImageProc *deleteProc, UpdateImageProc *updateProc,
|
125
|
+
TexImageCtx *imageCtx, bool isProtectedContent,
|
126
|
+
const GrBackendFormat &backendFormat, bool isRenderable) {
|
127
|
+
while (GL_NO_ERROR != glGetError()) {
|
128
|
+
} // clear GL errors
|
129
|
+
|
130
|
+
EGLGetNativeClientBufferANDROIDProc eglGetNativeClientBufferANDROID =
|
131
|
+
(EGLGetNativeClientBufferANDROIDProc)eglGetProcAddress(
|
132
|
+
"eglGetNativeClientBufferANDROID");
|
133
|
+
if (!eglGetNativeClientBufferANDROID) {
|
134
|
+
RNSkLogger::logToConsole(
|
135
|
+
"Failed to get the eglGetNativeClientBufferAndroid proc");
|
136
|
+
return GrBackendTexture();
|
137
|
+
}
|
138
|
+
|
139
|
+
EGLClientBuffer clientBuffer =
|
140
|
+
eglGetNativeClientBufferANDROID(hardwareBuffer);
|
141
|
+
EGLint attribs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
|
142
|
+
isProtectedContent ? EGL_PROTECTED_CONTENT_EXT : EGL_NONE,
|
143
|
+
isProtectedContent ? EGL_TRUE : EGL_NONE, EGL_NONE};
|
144
|
+
EGLDisplay display = eglGetCurrentDisplay();
|
145
|
+
// eglCreateImageKHR will add a ref to the AHardwareBuffer
|
146
|
+
EGLImageKHR image =
|
147
|
+
eglCreateImageKHR(display, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,
|
148
|
+
clientBuffer, attribs);
|
149
|
+
if (EGL_NO_IMAGE_KHR == image) {
|
150
|
+
SkDebugf("Could not create EGL image, err = (%#x)",
|
151
|
+
static_cast<int>(eglGetError()));
|
152
|
+
return GrBackendTexture();
|
153
|
+
}
|
154
|
+
|
155
|
+
GrGLuint texID;
|
156
|
+
glGenTextures(1, &texID);
|
157
|
+
if (!texID) {
|
158
|
+
eglDestroyImageKHR(display, image);
|
159
|
+
return GrBackendTexture();
|
160
|
+
}
|
161
|
+
|
162
|
+
GrGLuint target = isRenderable ? GR_GL_TEXTURE_2D : GR_GL_TEXTURE_EXTERNAL;
|
163
|
+
|
164
|
+
glBindTexture(target, texID);
|
165
|
+
GLenum status = GL_NO_ERROR;
|
166
|
+
if ((status = glGetError()) != GL_NO_ERROR) {
|
167
|
+
SkDebugf("glBindTexture failed (%#x)", static_cast<int>(status));
|
168
|
+
glDeleteTextures(1, &texID);
|
169
|
+
eglDestroyImageKHR(display, image);
|
170
|
+
return GrBackendTexture();
|
171
|
+
}
|
172
|
+
glEGLImageTargetTexture2DOES(target, image);
|
173
|
+
if ((status = glGetError()) != GL_NO_ERROR) {
|
174
|
+
SkDebugf("glEGLImageTargetTexture2DOES failed (%#x)",
|
175
|
+
static_cast<int>(status));
|
176
|
+
glDeleteTextures(1, &texID);
|
177
|
+
eglDestroyImageKHR(display, image);
|
178
|
+
return GrBackendTexture();
|
179
|
+
}
|
180
|
+
dContext->resetContext(kTextureBinding_GrGLBackendState);
|
181
|
+
|
182
|
+
GrGLTextureInfo textureInfo;
|
183
|
+
textureInfo.fID = texID;
|
184
|
+
SkASSERT(backendFormat.isValid());
|
185
|
+
textureInfo.fTarget = target;
|
186
|
+
textureInfo.fFormat = GrBackendFormats::AsGLFormatEnum(backendFormat);
|
187
|
+
textureInfo.fProtected = skgpu::Protected(isProtectedContent);
|
188
|
+
|
189
|
+
*deleteProc = delete_gl_texture;
|
190
|
+
*updateProc = update_gl_texture;
|
191
|
+
*imageCtx = new GLTextureHelper(texID, image, display, target);
|
192
|
+
|
193
|
+
return GrBackendTextures::MakeGL(width, height, skgpu::Mipmapped::kNo,
|
194
|
+
textureInfo);
|
195
|
+
}
|
196
|
+
|
197
|
+
static bool can_import_protected_content_eglimpl() {
|
198
|
+
EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
199
|
+
const char *exts = eglQueryString(dpy, EGL_EXTENSIONS);
|
200
|
+
size_t cropExtLen = strlen(PROT_CONTENT_EXT_STR);
|
201
|
+
size_t extsLen = strlen(exts);
|
202
|
+
bool equal = !strcmp(PROT_CONTENT_EXT_STR, exts);
|
203
|
+
bool atStart = !strncmp(PROT_CONTENT_EXT_STR " ", exts, cropExtLen + 1);
|
204
|
+
bool atEnd =
|
205
|
+
(cropExtLen + 1) < extsLen &&
|
206
|
+
!strcmp(" " PROT_CONTENT_EXT_STR, exts + extsLen - (cropExtLen + 1));
|
207
|
+
bool inMiddle = strstr(exts, " " PROT_CONTENT_EXT_STR " ");
|
208
|
+
return equal || atStart || atEnd || inMiddle;
|
209
|
+
}
|
210
|
+
|
211
|
+
static bool can_import_protected_content(GrDirectContext *dContext) {
|
212
|
+
SkASSERT(GrBackendApi::kOpenGL == dContext->backend());
|
213
|
+
// Only compute whether the extension is present once the first time this
|
214
|
+
// function is called.
|
215
|
+
static bool hasIt = can_import_protected_content_eglimpl();
|
216
|
+
return hasIt;
|
217
|
+
}
|
218
|
+
|
219
|
+
GrBackendTexture
|
220
|
+
MakeGLBackendTexture(GrDirectContext *dContext, AHardwareBuffer *hardwareBuffer,
|
221
|
+
int width, int height, DeleteImageProc *deleteProc,
|
222
|
+
UpdateImageProc *updateProc, TexImageCtx *imageCtx,
|
223
|
+
bool isProtectedContent,
|
224
|
+
const GrBackendFormat &backendFormat, bool isRenderable) {
|
225
|
+
SkASSERT(dContext);
|
226
|
+
if (!dContext || dContext->abandoned()) {
|
227
|
+
return GrBackendTexture();
|
228
|
+
}
|
229
|
+
|
230
|
+
if (GrBackendApi::kOpenGL != dContext->backend()) {
|
231
|
+
return GrBackendTexture();
|
232
|
+
}
|
233
|
+
|
234
|
+
if (isProtectedContent && !can_import_protected_content(dContext)) {
|
235
|
+
return GrBackendTexture();
|
236
|
+
}
|
237
|
+
|
238
|
+
return make_gl_backend_texture(
|
239
|
+
dContext, hardwareBuffer, width, height, deleteProc, updateProc, imageCtx,
|
240
|
+
isProtectedContent, backendFormat, isRenderable);
|
241
|
+
}
|
242
|
+
|
243
|
+
} // namespace RNSkia
|
244
|
+
|
245
|
+
#endif
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include "include/core/SkTypes.h"
|
4
|
+
|
5
|
+
#include "RNSkLog.h"
|
6
|
+
|
7
|
+
#if __ANDROID_API__ >= 26
|
8
|
+
|
9
|
+
#include "include/gpu/GrBackendSurface.h"
|
10
|
+
#include "include/gpu/GrTypes.h"
|
11
|
+
|
12
|
+
class GrDirectContext;
|
13
|
+
|
14
|
+
extern "C" {
|
15
|
+
typedef struct AHardwareBuffer AHardwareBuffer;
|
16
|
+
}
|
17
|
+
|
18
|
+
namespace RNSkia {
|
19
|
+
|
20
|
+
typedef void *TexImageCtx;
|
21
|
+
typedef void (*DeleteImageProc)(TexImageCtx);
|
22
|
+
typedef void (*UpdateImageProc)(TexImageCtx, GrDirectContext *);
|
23
|
+
|
24
|
+
GrBackendTexture
|
25
|
+
MakeGLBackendTexture(GrDirectContext *dContext, AHardwareBuffer *hardwareBuffer,
|
26
|
+
int width, int height, DeleteImageProc *deleteProc,
|
27
|
+
UpdateImageProc *updateProc, TexImageCtx *imageCtx,
|
28
|
+
bool isProtectedContent,
|
29
|
+
const GrBackendFormat &backendFormat, bool isRenderable);
|
30
|
+
|
31
|
+
} // namespace RNSkia
|
32
|
+
|
33
|
+
#endif
|
@@ -5,9 +5,9 @@
|
|
5
5
|
#include <memory>
|
6
6
|
#include <string>
|
7
7
|
|
8
|
-
#include
|
9
|
-
#include
|
10
|
-
#include
|
8
|
+
#include "JniPlatformContext.h"
|
9
|
+
#include "RNSkPlatformContext.h"
|
10
|
+
#include "SkiaOpenGLSurfaceFactory.h"
|
11
11
|
|
12
12
|
#pragma clang diagnostic push
|
13
13
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
@@ -12,9 +12,9 @@
|
|
12
12
|
#pragma clang diagnostic push
|
13
13
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
14
14
|
|
15
|
-
#include "SkCanvas.h"
|
16
|
-
#include "SkColorSpace.h"
|
17
|
-
#include "SkSurface.h"
|
15
|
+
#include "include/core/SkCanvas.h"
|
16
|
+
#include "include/core/SkColorSpace.h"
|
17
|
+
#include "include/core/SkSurface.h"
|
18
18
|
#include "include/gpu/GrDirectContext.h"
|
19
19
|
#include "include/gpu/ganesh/gl/GrGLDirectContext.h"
|
20
20
|
#include "include/gpu/gl/GrGLInterface.h"
|
@@ -307,4 +307,4 @@ private:
|
|
307
307
|
return true;
|
308
308
|
}
|
309
309
|
};
|
310
|
-
} // namespace RNSkia
|
310
|
+
} // namespace RNSkia
|
@@ -1,9 +1,11 @@
|
|
1
|
+
#include "SkiaOpenGLSurfaceFactory.h"
|
2
|
+
#include "GrAHardwareBufferUtils.h"
|
1
3
|
#include "SkiaOpenGLHelper.h"
|
2
|
-
#include <SkiaOpenGLSurfaceFactory.h>
|
3
4
|
|
4
5
|
#pragma clang diagnostic push
|
5
6
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
6
7
|
|
8
|
+
#include "include/gpu/ganesh/SkImageGanesh.h"
|
7
9
|
#include "include/gpu/ganesh/gl/GrGLBackendSurface.h"
|
8
10
|
|
9
11
|
#pragma clang diagnostic pop
|
@@ -12,6 +14,34 @@ namespace RNSkia {
|
|
12
14
|
|
13
15
|
thread_local SkiaOpenGLContext ThreadContextHolder::ThreadSkiaOpenGLContext;
|
14
16
|
|
17
|
+
sk_sp<SkImage>
|
18
|
+
SkiaOpenGLSurfaceFactory::makeImageFromHardwareBuffer(const SkImageInfo &info,
|
19
|
+
void *buffer) {
|
20
|
+
#if __ANDROID_API__ >= 26
|
21
|
+
const AHardwareBuffer *hardwareBuffer =
|
22
|
+
static_cast<AHardwareBuffer *>(buffer);
|
23
|
+
DeleteImageProc deleteImageProc = nullptr;
|
24
|
+
UpdateImageProc updateImageProc = nullptr;
|
25
|
+
TexImageCtx deleteImageCtx = nullptr;
|
26
|
+
auto backendTex = MakeGLBackendTexture(
|
27
|
+
ThreadContextHolder::ThreadSkiaOpenGLContext.directContext.get(),
|
28
|
+
const_cast<AHardwareBuffer *>(hardwareBuffer), info.width(),
|
29
|
+
info.height(), &deleteImageProc, &updateImageProc, &deleteImageCtx, false,
|
30
|
+
// GR_GL_RGBA8 0x8058
|
31
|
+
// GR_GL_TEXTURE_EXTERNAL 0x8D65
|
32
|
+
GrBackendFormats::MakeGL(0x8058, 0x8D65), false);
|
33
|
+
sk_sp<SkImage> image = SkImages::BorrowTextureFrom(
|
34
|
+
ThreadContextHolder::ThreadSkiaOpenGLContext.directContext.get(),
|
35
|
+
backendTex, kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType,
|
36
|
+
kPremul_SkAlphaType, nullptr);
|
37
|
+
return image;
|
38
|
+
#else
|
39
|
+
RNSkLogger::logToConsole(
|
40
|
+
"Hardware buffer in only supported on Android API level 26 and above.");
|
41
|
+
return nullptr;
|
42
|
+
#endif
|
43
|
+
}
|
44
|
+
|
15
45
|
sk_sp<SkSurface> SkiaOpenGLSurfaceFactory::makeOffscreenSurface(int width,
|
16
46
|
int height) {
|
17
47
|
// Setup OpenGL and Skia:
|
@@ -150,4 +180,4 @@ sk_sp<SkSurface> WindowSurfaceHolder::getSurface() {
|
|
150
180
|
return _skSurface;
|
151
181
|
}
|
152
182
|
|
153
|
-
} // namespace RNSkia
|
183
|
+
} // namespace RNSkia
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
-
#include
|
3
|
+
#include "RNSkLog.h"
|
4
4
|
|
5
5
|
#include <fbjni/fbjni.h>
|
6
6
|
#include <jni.h>
|
@@ -18,9 +18,9 @@
|
|
18
18
|
#pragma clang diagnostic push
|
19
19
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
20
20
|
|
21
|
-
#include "SkCanvas.h"
|
22
|
-
#include "SkColorSpace.h"
|
23
|
-
#include "SkSurface.h"
|
21
|
+
#include "include/core/SkCanvas.h"
|
22
|
+
#include "include/core/SkColorSpace.h"
|
23
|
+
#include "include/core/SkSurface.h"
|
24
24
|
#include "include/gpu/GrBackendSurface.h"
|
25
25
|
#include "include/gpu/GrDirectContext.h"
|
26
26
|
#include "include/gpu/ganesh/SkSurfaceGanesh.h"
|
@@ -149,6 +149,9 @@ public:
|
|
149
149
|
*/
|
150
150
|
static sk_sp<SkSurface> makeOffscreenSurface(int width, int height);
|
151
151
|
|
152
|
+
static sk_sp<SkImage> makeImageFromHardwareBuffer(const SkImageInfo &info,
|
153
|
+
void *buffer);
|
154
|
+
|
152
155
|
/**
|
153
156
|
* Creates a windowed Skia Surface holder.
|
154
157
|
* @param width Initial width of surface
|
@@ -11,8 +11,8 @@
|
|
11
11
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
12
12
|
|
13
13
|
#include "JsiSkImage.h"
|
14
|
-
#include "SkStream.h"
|
15
14
|
#include "include/codec/SkEncodedImageFormat.h"
|
15
|
+
#include "include/core/SkStream.h"
|
16
16
|
|
17
17
|
#include "include/android/SkAnimatedImage.h"
|
18
18
|
#include "include/codec/SkAndroidCodec.h"
|
package/cpp/api/JsiSkCanvas.h
CHANGED
@@ -26,14 +26,14 @@
|
|
26
26
|
#pragma clang diagnostic push
|
27
27
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
28
28
|
|
29
|
-
#include "SkCanvas.h"
|
30
|
-
#include "SkFont.h"
|
31
|
-
#include "SkPaint.h"
|
32
|
-
#include "SkPath.h"
|
33
|
-
#include "SkPicture.h"
|
34
|
-
#include "SkRegion.h"
|
35
|
-
#include "SkSurface.h"
|
36
|
-
#include "SkTypeface.h"
|
29
|
+
#include "include/core/SkCanvas.h"
|
30
|
+
#include "include/core/SkFont.h"
|
31
|
+
#include "include/core/SkPaint.h"
|
32
|
+
#include "include/core/SkPath.h"
|
33
|
+
#include "include/core/SkPicture.h"
|
34
|
+
#include "include/core/SkRegion.h"
|
35
|
+
#include "include/core/SkSurface.h"
|
36
|
+
#include "include/core/SkTypeface.h"
|
37
37
|
|
38
38
|
#pragma clang diagnostic pop
|
39
39
|
|
package/cpp/api/JsiSkColor.h
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
#pragma clang diagnostic push
|
11
11
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
12
12
|
|
13
|
-
#include "SkColorFilter.h"
|
14
|
-
#include "SkLumaColorFilter.h"
|
13
|
+
#include "include/core/SkColorFilter.h"
|
14
|
+
#include "include/effects/SkLumaColorFilter.h"
|
15
15
|
|
16
16
|
#pragma clang diagnostic pop
|
17
17
|
|