expo-gl 12.0.1 → 12.2.0
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/CHANGELOG.md +12 -1
- package/{EXGL.podspec → ExpoGL.podspec} +5 -3
- package/README.md +1 -1
- package/android/CMakeLists.txt +6 -15
- package/android/build.gradle +37 -71
- package/android/legacy/CMakeLists.txt +62 -0
- package/build/GLView.d.ts +1 -1
- package/build/GLView.d.ts.map +1 -1
- package/build/GLView.types.d.ts +5 -5
- package/build/GLView.types.d.ts.map +1 -1
- package/build/GLView.web.d.ts +1 -1
- package/build/GLView.web.d.ts.map +1 -1
- package/build/GLView.web.js +1 -1
- package/build/GLView.web.js.map +1 -1
- package/common/EXGLNativeApi.h +2 -1
- package/{unimodule.json → expo-module.config.json} +2 -1
- package/ios/{EXGL/EXGLCameraObject.h → EXGLCameraObject.h} +2 -2
- package/ios/{EXGL/EXGLCameraObject.mm → EXGLCameraObject.mm} +2 -2
- package/ios/{EXGL/EXGLContext.h → EXGLContext.h} +1 -1
- package/ios/{EXGL/EXGLContext.mm → EXGLContext.mm} +2 -2
- package/ios/{EXGL/EXGLObject.h → EXGLObject.h} +1 -1
- package/ios/{EXGL/EXGLObject.mm → EXGLObject.mm} +1 -1
- package/ios/{EXGL/EXGLObjectManager.h → EXGLObjectManager.h} +0 -0
- package/ios/{EXGL/EXGLObjectManager.mm → EXGLObjectManager.mm} +4 -4
- package/ios/{EXGL/EXGLView.h → EXGLView.h} +5 -5
- package/ios/{EXGL/EXGLView.mm → EXGLView.mm} +4 -4
- package/ios/{EXGL/EXPlatformUtils.mm → EXPlatformUtils.mm} +1 -1
- package/ios/GLViewModule.swift +17 -0
- package/package.json +2 -2
- package/src/GLView.web.tsx +2 -2
- package/ios/EXGL/EXGLViewManager.h +0 -8
- package/ios/EXGL/EXGLViewManager.mm +0 -42
- package/ios/EXGL.xcframework/Info.plist +0 -40
- package/ios/EXGL.xcframework/ios-arm64/EXGL.framework/EXGL +0 -0
- package/ios/EXGL.xcframework/ios-arm64/EXGL.framework/Info.plist +0 -0
- package/ios/EXGL.xcframework/ios-arm64_x86_64-simulator/EXGL.framework/EXGL +0 -0
- package/ios/EXGL.xcframework/ios-arm64_x86_64-simulator/EXGL.framework/Info.plist +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -10,10 +10,21 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
-
## 12.0
|
|
13
|
+
## 12.2.0 — 2022-12-30
|
|
14
14
|
|
|
15
15
|
### 🐛 Bug fixes
|
|
16
16
|
|
|
17
|
+
- Added React Native 0.71 support. ([#20470](https://github.com/expo/expo/pull/20470) by [@kudo](https://github.com/kudo))
|
|
18
|
+
|
|
19
|
+
## 12.1.0 — 2022-12-05
|
|
20
|
+
|
|
21
|
+
### 🎉 New features
|
|
22
|
+
|
|
23
|
+
- Migrated the view manager to the new Expo modules API and thus added support for Fabric. ([#19859](https://github.com/expo/expo/pull/19859) by [@tsapeta](https://github.com/tsapeta))
|
|
24
|
+
|
|
25
|
+
### 🐛 Bug fixes
|
|
26
|
+
|
|
27
|
+
- Fixed build errors when testing on React Native nightly builds. ([#19805](https://github.com/expo/expo/pull/19805) by [@kudo](https://github.com/kudo))
|
|
17
28
|
- Fixed error for duplicated META-INF files when building on Android. ([#20251](https://github.com/expo/expo/pull/20251) by [@kudo](https://github.com/kudo))
|
|
18
29
|
|
|
19
30
|
## 12.0.0 — 2022-10-25
|
|
@@ -3,7 +3,7 @@ require 'json'
|
|
|
3
3
|
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
4
|
|
|
5
5
|
Pod::Spec.new do |s|
|
|
6
|
-
s.name = '
|
|
6
|
+
s.name = 'ExpoGL'
|
|
7
7
|
s.version = package['version']
|
|
8
8
|
s.summary = package['description']
|
|
9
9
|
s.description = package['description']
|
|
@@ -15,7 +15,7 @@ Pod::Spec.new do |s|
|
|
|
15
15
|
s.static_framework = true
|
|
16
16
|
|
|
17
17
|
s.dependency 'ExpoModulesCore'
|
|
18
|
-
s.dependency '
|
|
18
|
+
s.dependency 'ReactCommon/turbomodule/core'
|
|
19
19
|
|
|
20
20
|
s.compiler_flags = '-x objective-c++ -std=c++1z'
|
|
21
21
|
s.pod_target_xcconfig = {
|
|
@@ -26,6 +26,8 @@ Pod::Spec.new do |s|
|
|
|
26
26
|
s.source_files = "ios/**/*.h"
|
|
27
27
|
s.vendored_frameworks = "#{s.name}.xcframework"
|
|
28
28
|
else
|
|
29
|
-
s.source_files = "ios/**/*.{h,m,mm}", "common/**/*.{h,cpp,def}"
|
|
29
|
+
s.source_files = "ios/**/*.{h,m,mm,swift}", "common/**/*.{h,cpp,def}"
|
|
30
30
|
end
|
|
31
|
+
|
|
32
|
+
s.public_header_files = ['ios/**/*.h', 'common/EXGLNativeApi.h']
|
|
31
33
|
end
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Provides GLView that acts as OpenGL ES render target and gives GL context object
|
|
|
4
4
|
|
|
5
5
|
# API documentation
|
|
6
6
|
|
|
7
|
-
- [Documentation for the main branch](https://github.com/expo/expo/blob/main/docs/pages/versions/unversioned/sdk/gl-view.
|
|
7
|
+
- [Documentation for the main branch](https://github.com/expo/expo/blob/main/docs/pages/versions/unversioned/sdk/gl-view.mdx)
|
|
8
8
|
- [Documentation for the latest stable release](https://docs.expo.dev/versions/latest/sdk/gl-view/)
|
|
9
9
|
|
|
10
10
|
# Installation in managed Expo projects
|
package/android/CMakeLists.txt
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
cmake_minimum_required(VERSION 3.4.1)
|
|
2
2
|
|
|
3
|
+
project(expo-gl)
|
|
4
|
+
|
|
3
5
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
4
6
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
5
7
|
set(CMAKE_CXX_STANDARD 17)
|
|
@@ -7,6 +9,7 @@ set(CMAKE_CXX_STANDARD 17)
|
|
|
7
9
|
set(PACKAGE_NAME "expo-gl")
|
|
8
10
|
set(BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
|
|
9
11
|
set(COMMON_DIR ${CMAKE_SOURCE_DIR}/../common)
|
|
12
|
+
set(ignoreMe "${REACT_NATIVE_DIR} ${RN_SO_DIR}")
|
|
10
13
|
|
|
11
14
|
add_library(
|
|
12
15
|
${PACKAGE_NAME} SHARED
|
|
@@ -26,22 +29,10 @@ add_library(
|
|
|
26
29
|
${COMMON_DIR}/EXTypedArrayApi.h
|
|
27
30
|
./src/main/cpp/EXGLJniApi.cpp)
|
|
28
31
|
|
|
29
|
-
# Extracted AAR: ${BUILD_DIR}/react-native-0*/jni/${ANDROID_ABI}
|
|
30
|
-
file(GLOB LIBRN_DIR "${RN_SO_DIR}/${ANDROID_ABI}")
|
|
31
|
-
if(NOT LIBRN_DIR)
|
|
32
|
-
# If /${ANDROID_ABI} dir not found, then ${RN_SO_DIR} is probably:
|
|
33
|
-
# ReactAndroid/build/react-ndk/exported
|
|
34
|
-
file(GLOB LIBRN_DIR "${RN_SO_DIR}")
|
|
35
|
-
endif()
|
|
36
|
-
|
|
37
32
|
target_include_directories(
|
|
38
|
-
${PACKAGE_NAME} PRIVATE "${
|
|
39
|
-
"${COMMON_DIR}")
|
|
33
|
+
${PACKAGE_NAME} PRIVATE "${COMMON_DIR}")
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
JSI_LIB jsi
|
|
43
|
-
PATHS ${LIBRN_DIR}
|
|
44
|
-
NO_CMAKE_FIND_ROOT_PATH)
|
|
35
|
+
find_package(ReactAndroid REQUIRED CONFIG)
|
|
45
36
|
|
|
46
37
|
find_library(LOG_LIB log)
|
|
47
38
|
find_library(GLES_LIB GLESv3)
|
|
@@ -56,4 +47,4 @@ target_compile_options(
|
|
|
56
47
|
-Wno-unused-parameter
|
|
57
48
|
-Wshorten-64-to-32
|
|
58
49
|
-Wstrict-prototypes)
|
|
59
|
-
target_link_libraries(${PACKAGE_NAME}
|
|
50
|
+
target_link_libraries(${PACKAGE_NAME} ReactAndroid::jsi ${LOG_LIB} ${GLES_LIB} android)
|
package/android/build.gradle
CHANGED
|
@@ -3,16 +3,24 @@ import java.nio.file.Paths
|
|
|
3
3
|
apply plugin: 'com.android.library'
|
|
4
4
|
apply plugin: 'kotlin-android'
|
|
5
5
|
apply plugin: 'maven-publish'
|
|
6
|
+
apply plugin: "de.undercouch.download"
|
|
6
7
|
|
|
7
8
|
group = 'host.exp.exponent'
|
|
8
|
-
version = '12.0
|
|
9
|
-
|
|
10
|
-
def
|
|
11
|
-
def
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
version = '12.2.0'
|
|
10
|
+
|
|
11
|
+
def REACT_NATIVE_BUILD_FROM_SOURCE = findProject(":ReactAndroid") != null
|
|
12
|
+
def REACT_NATIVE_DIR = REACT_NATIVE_BUILD_FROM_SOURCE
|
|
13
|
+
? findProject(":ReactAndroid").getProjectDir().parent
|
|
14
|
+
: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).parent
|
|
15
|
+
def RN_SO_DIR = REACT_NATIVE_BUILD_FROM_SOURCE
|
|
16
|
+
? Paths.get(findProject(":ReactAndroid").getProjectDir().toString(), "build", "intermediates", "library_*", "*", "jni")
|
|
17
|
+
: "${buildDir}/react/jni"
|
|
18
|
+
|
|
19
|
+
def reactProperties = new Properties()
|
|
20
|
+
file("$REACT_NATIVE_DIR/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
|
|
21
|
+
def REACT_NATIVE_VERSION = System.getenv("REACT_NATIVE_OVERRIDE_VERSION") ?: reactProperties.getProperty("VERSION_NAME")
|
|
22
|
+
def REACT_NATIVE_TARGET_VERSION = REACT_NATIVE_VERSION.split("\\.")[1].toInteger()
|
|
23
|
+
|
|
16
24
|
def reactNativeArchitectures() {
|
|
17
25
|
def value = project.getProperties().get("reactNativeArchitectures")
|
|
18
26
|
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
|
|
@@ -45,6 +53,7 @@ buildscript {
|
|
|
45
53
|
|
|
46
54
|
dependencies {
|
|
47
55
|
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${getKotlinVersion()}")
|
|
56
|
+
classpath("de.undercouch:gradle-download-task:5.3.0")
|
|
48
57
|
}
|
|
49
58
|
}
|
|
50
59
|
|
|
@@ -94,7 +103,7 @@ android {
|
|
|
94
103
|
minSdkVersion safeExtGet("minSdkVersion", 21)
|
|
95
104
|
targetSdkVersion safeExtGet("targetSdkVersion", 31)
|
|
96
105
|
versionCode 31
|
|
97
|
-
versionName "12.0
|
|
106
|
+
versionName "12.2.0"
|
|
98
107
|
|
|
99
108
|
externalNativeBuild {
|
|
100
109
|
cmake {
|
|
@@ -108,10 +117,18 @@ android {
|
|
|
108
117
|
|
|
109
118
|
externalNativeBuild {
|
|
110
119
|
cmake {
|
|
111
|
-
|
|
120
|
+
if (REACT_NATIVE_TARGET_VERSION >= 71) {
|
|
121
|
+
path "CMakeLists.txt"
|
|
122
|
+
} else {
|
|
123
|
+
path "legacy/CMakeLists.txt"
|
|
124
|
+
}
|
|
112
125
|
}
|
|
113
126
|
}
|
|
114
127
|
|
|
128
|
+
buildFeatures {
|
|
129
|
+
prefab true
|
|
130
|
+
}
|
|
131
|
+
|
|
115
132
|
packagingOptions {
|
|
116
133
|
// Gradle will add cmake target dependencies into packaging.
|
|
117
134
|
excludes += [
|
|
@@ -139,69 +156,18 @@ dependencies {
|
|
|
139
156
|
implementation project(':expo-modules-core')
|
|
140
157
|
|
|
141
158
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
def extractReactNativeAAR = { buildType ->
|
|
145
|
-
def suffix = buildType == 'Debug' ? '-debug' : '-release'
|
|
146
|
-
def rnAARs = fileTree(RN_AAR_DIR).matching { include "**/react-native/**/*${suffix}.aar" }
|
|
147
|
-
if (rnAARs.isEmpty()) {
|
|
148
|
-
rnAARs = fileTree(RN_AAR_DIR).matching { include "**/react-native/**/*.aar" }
|
|
149
|
-
}
|
|
150
|
-
if (rnAARs.any()) {
|
|
151
|
-
// node_modules/react-native has a .aar, extract headers
|
|
152
|
-
if (rnAARs.size() > 1) {
|
|
153
|
-
logger.error("More than one React Native AAR file has been found:")
|
|
154
|
-
rnAARs.each {println(it) }
|
|
155
|
-
throw new GradleException("Multiple React Native AARs found:\n${rnAARs.join("\n")}" +
|
|
156
|
-
"\nRemove the old ones and try again")
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
def rnAAR = rnAARs.singleFile
|
|
160
|
-
def file = rnAAR.absoluteFile
|
|
161
|
-
def packageName = file.name.tokenize('-')[0]
|
|
162
|
-
copy {
|
|
163
|
-
from zipTree(file)
|
|
164
|
-
into "$buildDir/$file.name"
|
|
165
|
-
include "jni/**/*"
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
159
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
160
|
+
// Remove this when we drop SDK 47
|
|
161
|
+
if (REACT_NATIVE_TARGET_VERSION >= 71) {
|
|
162
|
+
compileOnly 'com.facebook.react:react-android'
|
|
172
163
|
}
|
|
173
164
|
}
|
|
174
165
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
doLast {
|
|
183
|
-
configurations.extractJNI.files.each {
|
|
184
|
-
def file = it.absoluteFile
|
|
185
|
-
copy {
|
|
186
|
-
from zipTree(file)
|
|
187
|
-
into "$buildDir/$file.name"
|
|
188
|
-
include "jni/**/*"
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
tasks.whenTaskAdded { task ->
|
|
195
|
-
if (!task.name.contains("Clean") && (task.name.contains('externalNativeBuild') || task.name.startsWith('configureCMake'))) {
|
|
196
|
-
def buildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
|
|
197
|
-
task.dependsOn(extractJNIFiles)
|
|
198
|
-
if (RN_BUILD_FROM_SOURCE) {
|
|
199
|
-
task.dependsOn(":ReactAndroid:copy${buildType}JniLibsProjectOnly")
|
|
200
|
-
} else {
|
|
201
|
-
task.dependsOn("extractReactNativeAAR${buildType}")
|
|
202
|
-
}
|
|
203
|
-
} else if (task.name.startsWith('generateJsonModel') && RN_BUILD_FROM_SOURCE) {
|
|
204
|
-
def buildType = task.name.endsWith('Debug') ? 'Debug' : 'Release'
|
|
205
|
-
task.dependsOn(":ReactAndroid:copy${buildType}JniLibsProjectOnly")
|
|
206
|
-
}
|
|
166
|
+
// Remove this when we drop SDK 47
|
|
167
|
+
if (REACT_NATIVE_TARGET_VERSION < 71) {
|
|
168
|
+
project.ext.extraLegacyReactNativeLibs = [
|
|
169
|
+
'prepareDoubleConversion',
|
|
170
|
+
'prepareFolly',
|
|
171
|
+
]
|
|
172
|
+
applyLegacyReactNativeLibsExtractionPlugin()
|
|
207
173
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Remove this legacy folder when we drop SDK 47
|
|
2
|
+
cmake_minimum_required(VERSION 3.4.1)
|
|
3
|
+
|
|
4
|
+
project(expo-gl)
|
|
5
|
+
|
|
6
|
+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
7
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
8
|
+
set(CMAKE_CXX_STANDARD 17)
|
|
9
|
+
|
|
10
|
+
set(PACKAGE_NAME "expo-gl")
|
|
11
|
+
set(BUILD_DIR ${CMAKE_SOURCE_DIR}/../build)
|
|
12
|
+
set(COMMON_DIR ${CMAKE_SOURCE_DIR}/../../common)
|
|
13
|
+
|
|
14
|
+
add_library(
|
|
15
|
+
${PACKAGE_NAME} SHARED
|
|
16
|
+
${COMMON_DIR}/EXGLNativeApi.cpp
|
|
17
|
+
${COMMON_DIR}/EXGLNativeApi.h
|
|
18
|
+
${COMMON_DIR}/EXGLImageUtils.cpp
|
|
19
|
+
${COMMON_DIR}/EXGLImageUtils.h
|
|
20
|
+
${COMMON_DIR}/EXGLNativeContext.cpp
|
|
21
|
+
${COMMON_DIR}/EXGLNativeContext.h
|
|
22
|
+
${COMMON_DIR}/EXGLContextManager.cpp
|
|
23
|
+
${COMMON_DIR}/EXGLContextManager.h
|
|
24
|
+
${COMMON_DIR}/EXWebGLMethods.cpp
|
|
25
|
+
${COMMON_DIR}/EXWebGLMethods.h
|
|
26
|
+
${COMMON_DIR}/EXWebGLRenderer.cpp
|
|
27
|
+
${COMMON_DIR}/EXWebGLRenderer.h
|
|
28
|
+
${COMMON_DIR}/EXTypedArrayApi.cpp
|
|
29
|
+
${COMMON_DIR}/EXTypedArrayApi.h
|
|
30
|
+
../src/main/cpp/EXGLJniApi.cpp)
|
|
31
|
+
|
|
32
|
+
# Extracted AAR: ${BUILD_DIR}/react-native-0*/jni/${ANDROID_ABI}
|
|
33
|
+
file(GLOB LIBRN_DIR "${RN_SO_DIR}/${ANDROID_ABI}")
|
|
34
|
+
if(NOT LIBRN_DIR)
|
|
35
|
+
# If /${ANDROID_ABI} dir not found, then ${RN_SO_DIR} is probably:
|
|
36
|
+
# ReactAndroid/build/react-ndk/exported
|
|
37
|
+
file(GLOB LIBRN_DIR "${RN_SO_DIR}")
|
|
38
|
+
endif()
|
|
39
|
+
|
|
40
|
+
target_include_directories(
|
|
41
|
+
${PACKAGE_NAME} PRIVATE "${REACT_NATIVE_DIR}/ReactCommon/jsi"
|
|
42
|
+
"${COMMON_DIR}")
|
|
43
|
+
|
|
44
|
+
find_library(
|
|
45
|
+
JSI_LIB jsi
|
|
46
|
+
PATHS ${LIBRN_DIR}
|
|
47
|
+
NO_CMAKE_FIND_ROOT_PATH)
|
|
48
|
+
|
|
49
|
+
find_library(LOG_LIB log)
|
|
50
|
+
find_library(GLES_LIB GLESv3)
|
|
51
|
+
|
|
52
|
+
target_compile_options(
|
|
53
|
+
${PACKAGE_NAME}
|
|
54
|
+
PRIVATE -O2
|
|
55
|
+
-fexceptions
|
|
56
|
+
-frtti
|
|
57
|
+
-Wall
|
|
58
|
+
-Wextra
|
|
59
|
+
-Wno-unused-parameter
|
|
60
|
+
-Wshorten-64-to-32
|
|
61
|
+
-Wstrict-prototypes)
|
|
62
|
+
target_link_libraries(${PACKAGE_NAME} ${JSI_LIB} ${LOG_LIB} ${GLES_LIB} android)
|
package/build/GLView.d.ts
CHANGED
package/build/GLView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GLView.d.ts","sourceRoot":"","sources":["../src/GLView.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,yBAAyB,EACzB,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAIxB,
|
|
1
|
+
{"version":3,"file":"GLView.d.ts","sourceRoot":"","sources":["../src/GLView.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,yBAAyB,EACzB,eAAe,EACf,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAIxB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AASF;;;GAGG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IAEvB,MAAM,CAAC,YAAY;;MAEjB;IAEF;;;;;;;OAOG;WACU,kBAAkB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAKrE;;;;OAIG;WACU,mBAAmB,CAAC,IAAI,CAAC,EAAE,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7F;;;;;OAKG;WACU,iBAAiB,CAC5B,IAAI,CAAC,EAAE,yBAAyB,GAAG,MAAM,EACzC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAKtB,MAAM,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,GAAG,SAAS,CACrD;IAEjC,SAAS,EAAE,iBAAiB,CAAQ;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM;IA0BN,aAAa,cAAe,iBAAiB,KAAG,IAAI,CAKlD;IAEF,gBAAgB,mCAAoC,kBAAkB,KAAG,IAAI,CAQ3E;IAGI,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;IAQnC,wBAAwB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBrF,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjE;;;;OAIG;IACG,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;CAO5E"}
|
package/build/GLView.types.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Component, ComponentClass } from 'react';
|
|
2
2
|
import { ViewProps } from 'react-native';
|
|
3
|
-
export
|
|
3
|
+
export type SurfaceCreateEvent = {
|
|
4
4
|
nativeEvent: {
|
|
5
5
|
exglCtxId: number;
|
|
6
6
|
};
|
|
7
7
|
};
|
|
8
|
-
export
|
|
8
|
+
export type SnapshotOptions = {
|
|
9
9
|
/**
|
|
10
10
|
* Whether to flip the snapshot vertically.
|
|
11
11
|
* @default false
|
|
@@ -40,7 +40,7 @@ export declare type SnapshotOptions = {
|
|
|
40
40
|
*/
|
|
41
41
|
compress?: number;
|
|
42
42
|
};
|
|
43
|
-
export
|
|
43
|
+
export type GLSnapshot = {
|
|
44
44
|
/**
|
|
45
45
|
* URI to the snapshot.
|
|
46
46
|
*/
|
|
@@ -64,8 +64,8 @@ export interface ExpoWebGLRenderingContext extends WebGL2RenderingContext {
|
|
|
64
64
|
flushEXP(): void;
|
|
65
65
|
__expoSetLogging(option: GLLoggingOption): void;
|
|
66
66
|
}
|
|
67
|
-
export
|
|
68
|
-
export
|
|
67
|
+
export type ComponentOrHandle = null | number | Component<any, any> | ComponentClass<any>;
|
|
68
|
+
export type GLViewProps = {
|
|
69
69
|
/**
|
|
70
70
|
* A function that will be called when the OpenGL ES context is created.
|
|
71
71
|
* The function is passed a single argument `gl` that extends a [WebGLRenderingContext](https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14) interface.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GLView.types.d.ts","sourceRoot":"","sources":["../src/GLView.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,
|
|
1
|
+
{"version":3,"file":"GLView.types.d.ts","sourceRoot":"","sources":["../src/GLView.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE;QACX,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAGF,MAAM,MAAM,UAAU,GAAG;IACvB;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,IAAI,IAAI,CAAC;IACpB,QAAQ,IAAI,IAAI,CAAC;IACjB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;CACjD;AAGD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAG1F,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACrD;;;;;OAKG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,sBAAsB,CAAC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,OAAE;CAC7D,GAAG,SAAS,CAAC;AAGd,oBAAY,eAAe;IACzB;;OAEG;IACH,QAAQ,IAAI;IACZ;;OAEG;IACH,YAAY,IAAI;IAChB;;;OAGG;IACH,UAAU,IAAI;IACd;;OAEG;IACH,iBAAiB,IAAI;IACrB;;;OAGG;IACH,gBAAgB,IAAI;IACpB;;OAEG;IACH,GAAG,KAAmE;CACvE"}
|
package/build/GLView.web.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { WebGLObject } from './GLView';
|
|
3
3
|
import { GLViewProps, GLSnapshot, SnapshotOptions, ComponentOrHandle } from './GLView.types';
|
|
4
|
-
export
|
|
4
|
+
export type GLViewWebProps = GLViewProps & {
|
|
5
5
|
onContextCreate: (gl: WebGLRenderingContext) => void;
|
|
6
6
|
onContextRestored?: (gl?: WebGLRenderingContext) => void;
|
|
7
7
|
onContextLost?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GLView.web.d.ts","sourceRoot":"","sources":["../src/GLView.web.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,WAAW,EAEX,UAAU,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAoExB,
|
|
1
|
+
{"version":3,"file":"GLView.web.d.ts","sourceRoot":"","sources":["../src/GLView.web.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,WAAW,EAEX,UAAU,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAoExB,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,eAAe,EAAE,CAAC,EAAE,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,sBAAsB,CAAC,CAAC,QAAQ,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,IAAI,OAAE;CACjF,CAAC;AA8BF,qBAAa,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;IACzD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B,EAAE,CAAC,EAAE,qBAAqB,CAAC;WAEd,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;WAW3D,mBAAmB,CAAC,IAAI,CAAC,EAAE,qBAAqB,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAK5E,iBAAiB,CAC5B,EAAE,EAAE,qBAAqB,EACzB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAetB,oBAAoB;IAcpB,MAAM;IAgBN,kBAAkB,CAAC,SAAS,KAAA;IAQ5B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,aAAa,CASnB;IAEF,OAAO,CAAC,iBAAiB,CAKvB;IAEF,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY,CAalB;IAEW,iBAAiB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,CAAC;IASrE,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtE"}
|
package/build/GLView.web.js
CHANGED
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { Dimensions } from 'react-native';
|
|
5
5
|
import Canvas from './Canvas';
|
|
6
6
|
function getImageForAsset(asset) {
|
|
7
|
-
if (asset != null && typeof asset === 'object' && asset
|
|
7
|
+
if (asset != null && typeof asset === 'object' && asset.downloadAsync) {
|
|
8
8
|
const dataURI = asset.localUri || asset.uri || '';
|
|
9
9
|
const image = new Image();
|
|
10
10
|
image.src = dataURI;
|
package/build/GLView.web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GLView.web.js","sourceRoot":"","sources":["../src/GLView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAU9B,SAAS,gBAAgB,CAAC,KAIzB;IACC,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,aAAa,EAAE;QACvF,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC;QACpB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAY;IACrC,OAAO,OAAO,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,EAA6B;IAClD,EAAE,CAAC,WAAW,GAAG,SAAS,aAAa,KAAU,CAAC,CAAC;IAEnD,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE;QAC3B,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;QACvC,EAAE,CAAC,UAAU,GAAG,CAAC,GAAG,KAAY,EAAO,EAAE;YACvC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QAC9C,CAAC,CAAC;KACH;IAED,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE;QAC9B,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;QAC7C,EAAE,CAAC,aAAa,GAAG,CAAC,GAAG,KAAY,EAAO,EAAE;YAC1C,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,qBAAqB,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACjD,CAAC,CAAC;KACH;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CACpB,MAA0B,EAC1B,iBAA0C;IAE1C,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,UAAU,CAClB,gBAAgB,EAChB,8DAA8D,CAC/D,CAAC;KACH;IAED,mFAAmF;IACnF,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAElF,MAAM,OAAO,GACX,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,iBAAiB,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,SAAS,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;IACrD,OAAO,aAAa,CAAC,OAAoC,CAAC,CAAC;AAC7D,CAAC;AAYD,KAAK,UAAU,gCAAgC,CAC7C,EAAyB,EACzB,UAA2B,EAAE;IAE7B,SAAS,CAAC,EAAE,EAAE,4EAA4E,CAAC,CAAC;IAE5F,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAEtB,IAAI,IAAI,GAAgB,IAAI,CAAC;IAE7B,IAAI,OAAQ,MAAc,CAAC,QAAQ,KAAK,UAAU,EAAE;QAClD,qEAAqE;QACrE,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;KAChC;SAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE;QACpC,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;KACxF;SAAM;QACL,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;KACJ;IAED,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,MAAO,SAAQ,KAAK,CAAC,SAAyB;IACzD,MAAM,CAAqB;IAE3B,EAAE,CAAyB;IAE3B,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAC7B,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE;YAC5B,OAAO,IAAI,CAAC;SACb;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QAC7B,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;QAC/B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAqC;QACpE,aAAa;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAC5B,EAAyB,EACzB,UAA2B,EAAE;QAE7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,gCAAgC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEpF,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,UAAU,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAC;SAC1E;QAED,OAAO;YACL,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,EAAE;YACZ,KAAK;YACL,MAAM;SACP,CAAC;IACJ,CAAC;IAED,oBAAoB;QAClB,IAAI,IAAI,CAAC,EAAE,EAAE;YACX,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAClE,IAAI,cAAc,EAAE;gBAClB,cAAc,CAAC,WAAW,EAAE,CAAC;aAC9B;YACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;SACrB;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACjF;IACH,CAAC;IAED,MAAM;QACJ,MAAM,EACJ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,WAAW,EACX,sBAAsB;QACtB,iCAAiC;QACjC,GAAG,EACH,GAAG,QAAQ,EACZ,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,OAAO,oBAAC,MAAM,OAAK,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,GAAI,CAAC;IAChE,CAAC;IAED,kBAAkB,CAAC,SAAS;QAC1B,MAAM,EAAE,sBAAsB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,IAAI,sBAAsB,KAAK,SAAS,CAAC,sBAAsB,EAAE;YAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;IACH,CAAC;IAEO,oBAAoB;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,IAAI,UAAU,CAClB,gBAAgB,EAChB,8DAA8D,CAC/D,CAAC;SACH;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,aAAa,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACpD,IAAI,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QAEpB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE;YAClD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;SAC5B;IACH,CAAC,CAAC;IAEM,iBAAiB,GAAG,GAAS,EAAE;QACrC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACpB,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE;YAC/B,MAAM,IAAI,UAAU,CAAC,gBAAgB,EAAE,+BAA+B,CAAC,CAAC;SACzE;IACH,CAAC,CAAC;IAEM,YAAY;QAClB,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACxE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;gBACpD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACrC;YACD,OAAO,IAAI,CAAC,EAAE,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,YAAY,GAAG,CAAC,MAAyB,EAAQ,EAAE;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,KAAK,UAAU,EAAE;YAC3D,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;SAC3C;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE7E,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB;IACH,CAAC,CAAC;IAEK,KAAK,CAAC,iBAAiB,CAAC,UAA2B,EAAE;QAC1D,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YAC7B,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;SAC/D;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACvC,OAAO,MAAM,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC9B,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjE,CAAC;IAEM,KAAK,CAAC,wBAAwB;QACnC,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACtE,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,QAAqB;QACnD,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IAChE,CAAC;CACF","sourcesContent":["import { CodedError, Platform, UnavailabilityError } from 'expo-modules-core';\nimport invariant from 'invariant';\nimport * as React from 'react';\nimport { Dimensions } from 'react-native';\n\nimport Canvas from './Canvas';\nimport { WebGLObject } from './GLView';\nimport {\n GLViewProps,\n ExpoWebGLRenderingContext,\n GLSnapshot,\n SnapshotOptions,\n ComponentOrHandle,\n} from './GLView.types';\n\nfunction getImageForAsset(asset: {\n downloadAsync: () => Promise<any>;\n uri?: string;\n localUri?: string;\n}): HTMLImageElement | any {\n if (asset != null && typeof asset === 'object' && asset !== null && asset.downloadAsync) {\n const dataURI = asset.localUri || asset.uri || '';\n const image = new Image();\n image.src = dataURI;\n return image;\n }\n return asset;\n}\n\nfunction isOffscreenCanvas(element: any): element is OffscreenCanvas {\n return element && typeof element.convertToBlob === 'function';\n}\n\nfunction asExpoContext(gl: ExpoWebGLRenderingContext): WebGLRenderingContext {\n gl.endFrameEXP = function glEndFrameEXP(): void {};\n\n if (!gl['_expo_texImage2D']) {\n gl['_expo_texImage2D'] = gl.texImage2D;\n gl.texImage2D = (...props: any[]): any => {\n const nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texImage2D'](...nextProps);\n };\n }\n\n if (!gl['_expo_texSubImage2D']) {\n gl['_expo_texSubImage2D'] = gl.texSubImage2D;\n gl.texSubImage2D = (...props: any[]): any => {\n const nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texSubImage2D'](...nextProps);\n };\n }\n\n return gl;\n}\n\nfunction ensureContext(\n canvas?: HTMLCanvasElement,\n contextAttributes?: WebGLContextAttributes\n): WebGLRenderingContext {\n if (!canvas) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n\n // Apple disables WebGL 2.0 and doesn't provide any way to detect if it's disabled.\n const isIOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n\n const context =\n (!isIOS && canvas.getContext('webgl2', contextAttributes)) ||\n canvas.getContext('webgl', contextAttributes) ||\n canvas.getContext('webgl-experimental', contextAttributes) ||\n canvas.getContext('experimental-webgl', contextAttributes);\n invariant(context, 'Browser does not support WebGL');\n return asExpoContext(context as ExpoWebGLRenderingContext);\n}\n\n// @needsAudit @docsMissing\nexport type GLViewWebProps = GLViewProps & {\n onContextCreate: (gl: WebGLRenderingContext) => void;\n onContextRestored?: (gl?: WebGLRenderingContext) => void;\n onContextLost?: () => void;\n webglContextAttributes?: WebGLContextAttributes;\n // type overwrite\n nativeRef_EXPERIMENTAL?(callback: ComponentOrHandle | HTMLCanvasElement | null);\n};\n\nasync function getBlobFromWebGLRenderingContext(\n gl: WebGLRenderingContext,\n options: SnapshotOptions = {}\n): Promise<{ width: number; height: number; blob: Blob | null }> {\n invariant(gl, 'getBlobFromWebGLRenderingContext(): WebGL Rendering Context is not defined');\n\n const { canvas } = gl;\n\n let blob: Blob | null = null;\n\n if (typeof (canvas as any).msToBlob === 'function') {\n // @ts-ignore: polyfill: https://stackoverflow.com/a/29815058/4047926\n blob = await canvas.msToBlob();\n } else if (isOffscreenCanvas(canvas)) {\n blob = await canvas.convertToBlob({ quality: options.compress, type: options.format });\n } else {\n blob = await new Promise((resolve) => {\n canvas.toBlob((blob: Blob | null) => resolve(blob), options.format, options.compress);\n });\n }\n\n return {\n blob,\n width: canvas.width,\n height: canvas.height,\n };\n}\n\nexport class GLView extends React.Component<GLViewWebProps> {\n canvas?: HTMLCanvasElement;\n\n gl?: WebGLRenderingContext;\n\n static async createContextAsync(): Promise<WebGLRenderingContext | null> {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n const canvas = document.createElement('canvas');\n const { width, height, scale } = Dimensions.get('window');\n canvas.width = width * scale;\n canvas.height = height * scale;\n return ensureContext(canvas);\n }\n\n static async destroyContextAsync(exgl?: WebGLRenderingContext | number): Promise<boolean> {\n // Do nothing\n return true;\n }\n\n static async takeSnapshotAsync(\n gl: WebGLRenderingContext,\n options: SnapshotOptions = {}\n ): Promise<GLSnapshot> {\n const { blob, width, height } = await getBlobFromWebGLRenderingContext(gl, options);\n\n if (!blob) {\n throw new CodedError('ERR_GL_SNAPSHOT', 'Failed to save the GL context');\n }\n\n return {\n uri: blob,\n localUri: '',\n width,\n height,\n };\n }\n\n componentWillUnmount() {\n if (this.gl) {\n const loseContextExt = this.gl.getExtension('WEBGL_lose_context');\n if (loseContextExt) {\n loseContextExt.loseContext();\n }\n this.gl = undefined;\n }\n if (this.canvas) {\n this.canvas.removeEventListener('webglcontextlost', this.onContextLost);\n this.canvas.removeEventListener('webglcontextrestored', this.onContextRestored);\n }\n }\n\n render() {\n const {\n onContextCreate,\n onContextRestored,\n onContextLost,\n webglContextAttributes,\n msaaSamples,\n nativeRef_EXPERIMENTAL,\n // @ts-ignore: ref does not exist\n ref,\n ...domProps\n } = this.props;\n\n return <Canvas {...domProps} canvasRef={this.setCanvasRef} />;\n }\n\n componentDidUpdate(prevProps) {\n const { webglContextAttributes } = this.props;\n if (this.canvas && webglContextAttributes !== prevProps.webglContextAttributes) {\n this.onContextLost(null);\n this.onContextRestored();\n }\n }\n\n private getGLContextOrReject(): WebGLRenderingContext {\n const gl = this.getGLContext();\n if (!gl) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n return gl;\n }\n\n private onContextLost = (event: Event | null): void => {\n if (event && event.preventDefault) {\n event.preventDefault();\n }\n this.gl = undefined;\n\n if (typeof this.props.onContextLost === 'function') {\n this.props.onContextLost();\n }\n };\n\n private onContextRestored = (): void => {\n this.gl = undefined;\n if (this.getGLContext() == null) {\n throw new CodedError('ERR_GL_INVALID', 'Failed to restore GL context.');\n }\n };\n\n private getGLContext(): WebGLRenderingContext | null {\n if (this.gl) return this.gl;\n\n if (this.canvas) {\n this.gl = ensureContext(this.canvas, this.props.webglContextAttributes);\n if (typeof this.props.onContextCreate === 'function') {\n this.props.onContextCreate(this.gl);\n }\n return this.gl;\n }\n return null;\n }\n\n private setCanvasRef = (canvas: HTMLCanvasElement): void => {\n this.canvas = canvas;\n\n if (typeof this.props.nativeRef_EXPERIMENTAL === 'function') {\n this.props.nativeRef_EXPERIMENTAL(canvas);\n }\n\n if (this.canvas) {\n this.canvas.addEventListener('webglcontextlost', this.onContextLost);\n this.canvas.addEventListener('webglcontextrestored', this.onContextRestored);\n\n this.getGLContext();\n }\n };\n\n public async takeSnapshotAsync(options: SnapshotOptions = {}): Promise<GLSnapshot> {\n if (!GLView.takeSnapshotAsync) {\n throw new UnavailabilityError('expo-gl', 'takeSnapshotAsync');\n }\n\n const gl = this.getGLContextOrReject();\n return await GLView.takeSnapshotAsync(gl, options);\n }\n\n public async startARSessionAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'startARSessionAsync');\n }\n\n public async createCameraTextureAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'createCameraTextureAsync');\n }\n\n public async destroyObjectAsync(glObject: WebGLObject): Promise<void> {\n throw new UnavailabilityError('GLView', 'destroyObjectAsync');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"GLView.web.js","sourceRoot":"","sources":["../src/GLView.web.tsx"],"names":[],"mappings":"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","sourcesContent":["import { CodedError, Platform, UnavailabilityError } from 'expo-modules-core';\nimport invariant from 'invariant';\nimport * as React from 'react';\nimport { Dimensions } from 'react-native';\n\nimport Canvas from './Canvas';\nimport { WebGLObject } from './GLView';\nimport {\n GLViewProps,\n ExpoWebGLRenderingContext,\n GLSnapshot,\n SnapshotOptions,\n ComponentOrHandle,\n} from './GLView.types';\n\nfunction getImageForAsset(asset: {\n downloadAsync?: () => Promise<any>;\n uri?: string;\n localUri?: string;\n}): HTMLImageElement | any {\n if (asset != null && typeof asset === 'object' && asset.downloadAsync) {\n const dataURI = asset.localUri || asset.uri || '';\n const image = new Image();\n image.src = dataURI;\n return image;\n }\n return asset;\n}\n\nfunction isOffscreenCanvas(element: any): element is OffscreenCanvas {\n return element && typeof element.convertToBlob === 'function';\n}\n\nfunction asExpoContext(gl: ExpoWebGLRenderingContext): WebGLRenderingContext {\n gl.endFrameEXP = function glEndFrameEXP(): void {};\n\n if (!gl['_expo_texImage2D']) {\n gl['_expo_texImage2D'] = gl.texImage2D;\n gl.texImage2D = (...props: any[]): any => {\n const nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texImage2D'](...nextProps);\n };\n }\n\n if (!gl['_expo_texSubImage2D']) {\n gl['_expo_texSubImage2D'] = gl.texSubImage2D;\n gl.texSubImage2D = (...props: any[]): any => {\n const nextProps = [...props];\n nextProps.push(getImageForAsset(nextProps.pop()));\n return gl['_expo_texSubImage2D'](...nextProps);\n };\n }\n\n return gl;\n}\n\nfunction ensureContext(\n canvas?: HTMLCanvasElement,\n contextAttributes?: WebGLContextAttributes\n): WebGLRenderingContext {\n if (!canvas) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n\n // Apple disables WebGL 2.0 and doesn't provide any way to detect if it's disabled.\n const isIOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n\n const context =\n (!isIOS && canvas.getContext('webgl2', contextAttributes)) ||\n canvas.getContext('webgl', contextAttributes) ||\n canvas.getContext('webgl-experimental', contextAttributes) ||\n canvas.getContext('experimental-webgl', contextAttributes);\n invariant(context, 'Browser does not support WebGL');\n return asExpoContext(context as ExpoWebGLRenderingContext);\n}\n\n// @needsAudit @docsMissing\nexport type GLViewWebProps = GLViewProps & {\n onContextCreate: (gl: WebGLRenderingContext) => void;\n onContextRestored?: (gl?: WebGLRenderingContext) => void;\n onContextLost?: () => void;\n webglContextAttributes?: WebGLContextAttributes;\n // type overwrite\n nativeRef_EXPERIMENTAL?(callback: ComponentOrHandle | HTMLCanvasElement | null);\n};\n\nasync function getBlobFromWebGLRenderingContext(\n gl: WebGLRenderingContext,\n options: SnapshotOptions = {}\n): Promise<{ width: number; height: number; blob: Blob | null }> {\n invariant(gl, 'getBlobFromWebGLRenderingContext(): WebGL Rendering Context is not defined');\n\n const { canvas } = gl;\n\n let blob: Blob | null = null;\n\n if (typeof (canvas as any).msToBlob === 'function') {\n // @ts-ignore: polyfill: https://stackoverflow.com/a/29815058/4047926\n blob = await canvas.msToBlob();\n } else if (isOffscreenCanvas(canvas)) {\n blob = await canvas.convertToBlob({ quality: options.compress, type: options.format });\n } else {\n blob = await new Promise((resolve) => {\n canvas.toBlob((blob: Blob | null) => resolve(blob), options.format, options.compress);\n });\n }\n\n return {\n blob,\n width: canvas.width,\n height: canvas.height,\n };\n}\n\nexport class GLView extends React.Component<GLViewWebProps> {\n canvas?: HTMLCanvasElement;\n\n gl?: WebGLRenderingContext;\n\n static async createContextAsync(): Promise<WebGLRenderingContext | null> {\n if (!Platform.isDOMAvailable) {\n return null;\n }\n const canvas = document.createElement('canvas');\n const { width, height, scale } = Dimensions.get('window');\n canvas.width = width * scale;\n canvas.height = height * scale;\n return ensureContext(canvas);\n }\n\n static async destroyContextAsync(exgl?: WebGLRenderingContext | number): Promise<boolean> {\n // Do nothing\n return true;\n }\n\n static async takeSnapshotAsync(\n gl: WebGLRenderingContext,\n options: SnapshotOptions = {}\n ): Promise<GLSnapshot> {\n const { blob, width, height } = await getBlobFromWebGLRenderingContext(gl, options);\n\n if (!blob) {\n throw new CodedError('ERR_GL_SNAPSHOT', 'Failed to save the GL context');\n }\n\n return {\n uri: blob,\n localUri: '',\n width,\n height,\n };\n }\n\n componentWillUnmount() {\n if (this.gl) {\n const loseContextExt = this.gl.getExtension('WEBGL_lose_context');\n if (loseContextExt) {\n loseContextExt.loseContext();\n }\n this.gl = undefined;\n }\n if (this.canvas) {\n this.canvas.removeEventListener('webglcontextlost', this.onContextLost);\n this.canvas.removeEventListener('webglcontextrestored', this.onContextRestored);\n }\n }\n\n render() {\n const {\n onContextCreate,\n onContextRestored,\n onContextLost,\n webglContextAttributes,\n msaaSamples,\n nativeRef_EXPERIMENTAL,\n // @ts-ignore: ref does not exist\n ref,\n ...domProps\n } = this.props;\n\n return <Canvas {...domProps} canvasRef={this.setCanvasRef} />;\n }\n\n componentDidUpdate(prevProps) {\n const { webglContextAttributes } = this.props;\n if (this.canvas && webglContextAttributes !== prevProps.webglContextAttributes) {\n this.onContextLost(null);\n this.onContextRestored();\n }\n }\n\n private getGLContextOrReject(): WebGLRenderingContext {\n const gl = this.getGLContext();\n if (!gl) {\n throw new CodedError(\n 'ERR_GL_INVALID',\n 'Attempting to use the GL context before it has been created.'\n );\n }\n return gl;\n }\n\n private onContextLost = (event: Event | null): void => {\n if (event && event.preventDefault) {\n event.preventDefault();\n }\n this.gl = undefined;\n\n if (typeof this.props.onContextLost === 'function') {\n this.props.onContextLost();\n }\n };\n\n private onContextRestored = (): void => {\n this.gl = undefined;\n if (this.getGLContext() == null) {\n throw new CodedError('ERR_GL_INVALID', 'Failed to restore GL context.');\n }\n };\n\n private getGLContext(): WebGLRenderingContext | null {\n if (this.gl) return this.gl;\n\n if (this.canvas) {\n this.gl = ensureContext(this.canvas, this.props.webglContextAttributes);\n if (typeof this.props.onContextCreate === 'function') {\n this.props.onContextCreate(this.gl);\n }\n return this.gl;\n }\n return null;\n }\n\n private setCanvasRef = (canvas: HTMLCanvasElement): void => {\n this.canvas = canvas;\n\n if (typeof this.props.nativeRef_EXPERIMENTAL === 'function') {\n this.props.nativeRef_EXPERIMENTAL(canvas);\n }\n\n if (this.canvas) {\n this.canvas.addEventListener('webglcontextlost', this.onContextLost);\n this.canvas.addEventListener('webglcontextrestored', this.onContextRestored);\n\n this.getGLContext();\n }\n };\n\n public async takeSnapshotAsync(options: SnapshotOptions = {}): Promise<GLSnapshot> {\n if (!GLView.takeSnapshotAsync) {\n throw new UnavailabilityError('expo-gl', 'takeSnapshotAsync');\n }\n\n const gl = this.getGLContextOrReject();\n return await GLView.takeSnapshotAsync(gl, options);\n }\n\n public async startARSessionAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'startARSessionAsync');\n }\n\n public async createCameraTextureAsync(): Promise<void> {\n throw new UnavailabilityError('GLView', 'createCameraTextureAsync');\n }\n\n public async destroyObjectAsync(glObject: WebGLObject): Promise<void> {\n throw new UnavailabilityError('GLView', 'destroyObjectAsync');\n }\n}\n"]}
|
package/common/EXGLNativeApi.h
CHANGED
|
@@ -28,11 +28,12 @@ typedef unsigned int EXGLObjectId;
|
|
|
28
28
|
|
|
29
29
|
EXGLContextId EXGLContextCreate();
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
#ifdef __cplusplus
|
|
32
32
|
// [JS thread] Create an EXGL context and return its id number. Saves the
|
|
33
33
|
// JavaScript interface object (has a WebGLRenderingContext-style API) at
|
|
34
34
|
// `global.__EXGLContexts[id]` in JavaScript.
|
|
35
35
|
void EXGLContextPrepare(void *runtime, EXGLContextId exglCtxId, std::function<void(void)> flushMethod);
|
|
36
|
+
#endif // __cplusplus
|
|
36
37
|
|
|
37
38
|
// [Any thread] Check whether we should redraw the surface
|
|
38
39
|
bool EXGLContextNeedsRedraw(EXGLContextId exglCtxId);
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
#import <ExpoModulesCore/EXCameraInterface.h>
|
|
9
9
|
|
|
10
|
-
#import <
|
|
11
|
-
#import <
|
|
10
|
+
#import <ExpoGL/EXGLCameraObject.h>
|
|
11
|
+
#import <ExpoGL/EXGLContext.h>
|
|
12
12
|
|
|
13
13
|
@interface EXGLCameraObject () <AVCaptureVideoDataOutputSampleBufferDelegate>
|
|
14
14
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2016-present 650 Industries. All rights reserved.
|
|
2
2
|
|
|
3
|
-
#import <
|
|
4
|
-
#import <
|
|
3
|
+
#import <ExpoGL/EXGLContext.h>
|
|
4
|
+
#import <ExpoGL/EXGLObjectManager.h>
|
|
5
5
|
|
|
6
6
|
#import <ExpoModulesCore/EXUtilities.h>
|
|
7
7
|
#import <ExpoModulesCore/EXUIManager.h>
|
|
File without changes
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
#import <ExpoModulesCore/EXUIManager.h>
|
|
5
5
|
#import <ExpoModulesCore/EXCameraInterface.h>
|
|
6
6
|
|
|
7
|
-
#import <
|
|
8
|
-
#import <
|
|
9
|
-
#import <
|
|
10
|
-
#import <
|
|
7
|
+
#import <ExpoGL/EXGLObjectManager.h>
|
|
8
|
+
#import <ExpoGL/EXGLObject.h>
|
|
9
|
+
#import <ExpoGL/EXGLView.h>
|
|
10
|
+
#import <ExpoGL/EXGLCameraObject.h>
|
|
11
11
|
|
|
12
12
|
@interface EXGLObjectManager ()
|
|
13
13
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// Copyright 2016-present 650 Industries. All rights reserved.
|
|
2
2
|
|
|
3
|
-
#import <
|
|
4
|
-
#import <
|
|
3
|
+
#import <ExpoGL/EXGLNativeApi.h>
|
|
4
|
+
#import <ExpoGL/EXGLContext.h>
|
|
5
5
|
#import <ExpoModulesCore/EXModuleRegistry.h>
|
|
6
|
+
#import <ExpoModulesCore/EXLegacyExpoViewProtocol.h>
|
|
6
7
|
|
|
7
8
|
NS_ASSUME_NONNULL_BEGIN
|
|
8
9
|
|
|
9
|
-
@interface EXGLView : UIView <EXGLContextDelegate>
|
|
10
|
+
@interface EXGLView : UIView <EXGLContextDelegate, EXLegacyExpoViewProtocol>
|
|
10
11
|
|
|
11
|
-
- (instancetype)initWithModuleRegistry:(EXModuleRegistry *)moduleRegistry;
|
|
12
12
|
- (EXGLContextId)exglCtxId;
|
|
13
13
|
|
|
14
14
|
// AR
|
|
@@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
16
16
|
- (void)maybeStopARSession;
|
|
17
17
|
|
|
18
18
|
@property (nonatomic, copy, nullable) EXDirectEventBlock onSurfaceCreate;
|
|
19
|
-
@property (nonatomic, assign)
|
|
19
|
+
@property (nonatomic, assign) NSInteger msaaSamples;
|
|
20
20
|
|
|
21
21
|
// "protected"
|
|
22
22
|
@property (nonatomic, strong, nullable) EXGLContext *glContext;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Copyright 2016-present 650 Industries. All rights reserved.
|
|
2
2
|
|
|
3
3
|
#import <ExpoModulesCore/EXUtilities.h>
|
|
4
|
-
#import <
|
|
5
|
-
#import <
|
|
4
|
+
#import <ExpoGL/EXGLView.h>
|
|
5
|
+
#import <ExpoGL/EXGLContext.h>
|
|
6
6
|
|
|
7
7
|
#include <OpenGLES/ES2/glext.h>
|
|
8
8
|
#include <OpenGLES/ES3/gl.h>
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
glGenRenderbuffers(1, &self->_msaaRenderbuffer);
|
|
189
189
|
glBindFramebuffer(GL_FRAMEBUFFER, self->_msaaFramebuffer);
|
|
190
190
|
glBindRenderbuffer(GL_RENDERBUFFER, self->_msaaRenderbuffer);
|
|
191
|
-
glRenderbufferStorageMultisample(GL_RENDERBUFFER, self.msaaSamples
|
|
191
|
+
glRenderbufferStorageMultisample(GL_RENDERBUFFER, self.msaaSamples, GL_RGBA8,
|
|
192
192
|
self->_layerWidth, self->_layerHeight);
|
|
193
193
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
|
|
194
194
|
GL_RENDERBUFFER, self->_msaaRenderbuffer);
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
// Set up new depth+stencil renderbuffer
|
|
199
199
|
glGenRenderbuffers(1, &self->_viewDepthStencilbuffer);
|
|
200
200
|
glBindRenderbuffer(GL_RENDERBUFFER, self->_viewDepthStencilbuffer);
|
|
201
|
-
glRenderbufferStorageMultisample(GL_RENDERBUFFER, self.msaaSamples
|
|
201
|
+
glRenderbufferStorageMultisample(GL_RENDERBUFFER, self.msaaSamples, GL_DEPTH24_STENCIL8,
|
|
202
202
|
self->_layerWidth, self->_layerHeight);
|
|
203
203
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
|
|
204
204
|
GL_RENDERBUFFER, self->_viewDepthStencilbuffer);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Copyright 2022-present 650 Industries. All rights reserved.
|
|
2
|
+
|
|
3
|
+
import ExpoModulesCore
|
|
4
|
+
|
|
5
|
+
public final class GLViewModule: Module {
|
|
6
|
+
public func definition() -> ModuleDefinition {
|
|
7
|
+
Name("ExponentGLView")
|
|
8
|
+
|
|
9
|
+
View(EXGLView.self) {
|
|
10
|
+
Events("onSurfaceCreate")
|
|
11
|
+
|
|
12
|
+
Prop("msaaSamples") { (view, msaaSamples: Int) in
|
|
13
|
+
view.msaaSamples = msaaSamples
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-gl",
|
|
3
|
-
"version": "12.0
|
|
3
|
+
"version": "12.2.0",
|
|
4
4
|
"description": "Provides GLView that acts as OpenGL ES render target and gives GL context object implementing WebGL 2.0 specification.",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"expo": "*"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "ba80e8181b79d06e00a245653727f4eaeb80420e"
|
|
53
53
|
}
|
package/src/GLView.web.tsx
CHANGED
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
} from './GLView.types';
|
|
15
15
|
|
|
16
16
|
function getImageForAsset(asset: {
|
|
17
|
-
downloadAsync
|
|
17
|
+
downloadAsync?: () => Promise<any>;
|
|
18
18
|
uri?: string;
|
|
19
19
|
localUri?: string;
|
|
20
20
|
}): HTMLImageElement | any {
|
|
21
|
-
if (asset != null && typeof asset === 'object' && asset
|
|
21
|
+
if (asset != null && typeof asset === 'object' && asset.downloadAsync) {
|
|
22
22
|
const dataURI = asset.localUri || asset.uri || '';
|
|
23
23
|
const image = new Image();
|
|
24
24
|
image.src = dataURI;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
// Copyright 2016-present 650 Industries. All rights reserved.
|
|
2
|
-
|
|
3
|
-
#import <EXGL/EXGLView.h>
|
|
4
|
-
#import <EXGL/EXGLViewManager.h>
|
|
5
|
-
#import <ExpoModulesCore/EXUIManager.h>
|
|
6
|
-
|
|
7
|
-
@interface EXGLViewManager ()
|
|
8
|
-
|
|
9
|
-
@property (nonatomic, weak) EXModuleRegistry *moduleRegistry;
|
|
10
|
-
|
|
11
|
-
@end
|
|
12
|
-
|
|
13
|
-
@implementation EXGLViewManager
|
|
14
|
-
|
|
15
|
-
EX_EXPORT_MODULE(ExponentGLViewManager);
|
|
16
|
-
|
|
17
|
-
- (UIView *)view
|
|
18
|
-
{
|
|
19
|
-
return [[EXGLView alloc] initWithModuleRegistry:_moduleRegistry];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
- (NSString *)viewName
|
|
23
|
-
{
|
|
24
|
-
return @"ExponentGLView";
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
- (NSArray<NSString *> *)supportedEvents
|
|
28
|
-
{
|
|
29
|
-
return @[@"onSurfaceCreate"];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
EX_VIEW_PROPERTY(msaaSamples, NSNumber *, EXGLView)
|
|
33
|
-
{
|
|
34
|
-
[view setMsaaSamples:value];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
- (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry
|
|
38
|
-
{
|
|
39
|
-
_moduleRegistry = moduleRegistry;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
@end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
-
<plist version="1.0">
|
|
4
|
-
<dict>
|
|
5
|
-
<key>AvailableLibraries</key>
|
|
6
|
-
<array>
|
|
7
|
-
<dict>
|
|
8
|
-
<key>LibraryIdentifier</key>
|
|
9
|
-
<string>ios-arm64_x86_64-simulator</string>
|
|
10
|
-
<key>LibraryPath</key>
|
|
11
|
-
<string>EXGL.framework</string>
|
|
12
|
-
<key>SupportedArchitectures</key>
|
|
13
|
-
<array>
|
|
14
|
-
<string>arm64</string>
|
|
15
|
-
<string>x86_64</string>
|
|
16
|
-
</array>
|
|
17
|
-
<key>SupportedPlatform</key>
|
|
18
|
-
<string>ios</string>
|
|
19
|
-
<key>SupportedPlatformVariant</key>
|
|
20
|
-
<string>simulator</string>
|
|
21
|
-
</dict>
|
|
22
|
-
<dict>
|
|
23
|
-
<key>LibraryIdentifier</key>
|
|
24
|
-
<string>ios-arm64</string>
|
|
25
|
-
<key>LibraryPath</key>
|
|
26
|
-
<string>EXGL.framework</string>
|
|
27
|
-
<key>SupportedArchitectures</key>
|
|
28
|
-
<array>
|
|
29
|
-
<string>arm64</string>
|
|
30
|
-
</array>
|
|
31
|
-
<key>SupportedPlatform</key>
|
|
32
|
-
<string>ios</string>
|
|
33
|
-
</dict>
|
|
34
|
-
</array>
|
|
35
|
-
<key>CFBundlePackageType</key>
|
|
36
|
-
<string>XFWK</string>
|
|
37
|
-
<key>XCFrameworkFormatVersion</key>
|
|
38
|
-
<string>1.0</string>
|
|
39
|
-
</dict>
|
|
40
|
-
</plist>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|