expo-gl 16.0.9 → 16.0.10-canary-20251212-acb11f2

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +9 -9
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/gl/GLContext.java +2 -2
  4. package/android/src/main/java/expo/modules/gl/{GLObjectManagerModule.kt → GLModule.kt} +10 -3
  5. package/android/src/main/java/expo/modules/gl/GLView.kt +1 -1
  6. package/build/GLView.d.ts +0 -1
  7. package/build/GLView.d.ts.map +1 -1
  8. package/build/GLView.js +10 -18
  9. package/build/GLView.js.map +1 -1
  10. package/expo-module.config.json +3 -3
  11. package/ios/EXGLContext.mm +2 -4
  12. package/ios/EXGLObjectManager.h +21 -8
  13. package/ios/EXGLObjectManager.mm +32 -76
  14. package/ios/ExpoGLModule.swift +76 -0
  15. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar +0 -0
  16. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar.md5 +1 -0
  17. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar.sha1 +1 -0
  18. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar.sha256 +1 -0
  19. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar.sha512 +1 -0
  20. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar +0 -0
  21. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar.md5 +1 -0
  22. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar.sha1 +1 -0
  23. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar.sha256 +1 -0
  24. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar.sha512 +1 -0
  25. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.module +87 -0
  26. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.module.md5 +1 -0
  27. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.module.sha1 +1 -0
  28. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.module.sha256 +1 -0
  29. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.module.sha512 +1 -0
  30. package/local-maven-repo/host/exp/exponent/expo.modules.gl/{16.0.9/expo.modules.gl-16.0.9.pom → 16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.pom} +1 -1
  31. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.pom.md5 +1 -0
  32. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.pom.sha1 +1 -0
  33. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.pom.sha256 +1 -0
  34. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.10-canary-20251212-acb11f2/expo.modules.gl-16.0.10-canary-20251212-acb11f2.pom.sha512 +1 -0
  35. package/local-maven-repo/host/exp/exponent/expo.modules.gl/maven-metadata.xml +4 -4
  36. package/local-maven-repo/host/exp/exponent/expo.modules.gl/maven-metadata.xml.md5 +1 -1
  37. package/local-maven-repo/host/exp/exponent/expo.modules.gl/maven-metadata.xml.sha1 +1 -1
  38. package/local-maven-repo/host/exp/exponent/expo.modules.gl/maven-metadata.xml.sha256 +1 -1
  39. package/local-maven-repo/host/exp/exponent/expo.modules.gl/maven-metadata.xml.sha512 +1 -1
  40. package/package.json +5 -6
  41. package/src/GLView.tsx +9 -23
  42. package/android/src/main/java/expo/modules/gl/GLViewModule.kt +0 -17
  43. package/ios/GLViewModule.swift +0 -20
  44. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9-sources.jar +0 -0
  45. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9-sources.jar.md5 +0 -1
  46. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9-sources.jar.sha1 +0 -1
  47. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9-sources.jar.sha256 +0 -1
  48. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9-sources.jar.sha512 +0 -1
  49. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.aar +0 -0
  50. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.aar.md5 +0 -1
  51. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.aar.sha1 +0 -1
  52. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.aar.sha256 +0 -1
  53. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.aar.sha512 +0 -1
  54. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.module +0 -87
  55. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.module.md5 +0 -1
  56. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.module.sha1 +0 -1
  57. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.module.sha256 +0 -1
  58. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.module.sha512 +0 -1
  59. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.pom.md5 +0 -1
  60. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.pom.sha1 +0 -1
  61. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.pom.sha256 +0 -1
  62. package/local-maven-repo/host/exp/exponent/expo.modules.gl/16.0.9/expo.modules.gl-16.0.9.pom.sha512 +0 -1
package/CHANGELOG.md CHANGED
@@ -8,21 +8,21 @@
8
8
 
9
9
  ### 🐛 Bug fixes
10
10
 
11
- ### 💡 Others
12
-
13
- ## 16.0.9 — 2025-12-11
14
-
15
- ### 🐛 Bug fixes
16
-
17
11
  - Fix race condition bug for **web** env for `onLayout` callback. ([#41460](https://github.com/expo/expo/pull/41460) by [@psnet](https://github.com/psnet))
18
12
 
19
13
  ### 💡 Others
20
14
 
21
- - Updated library `stb_image.h` used for image decoding in `texImage2D` expo wraper method. A lot of fixes and performance improvements, see related PR. ([#41000](https://github.com/expo/expo/pull/41000) by [@psnet](https://github.com/psnet))
22
- - **Performance optimization**: reduce supported old image formats in lib `stb_image.h` used for image decoding in `texImage2D` expo wrapper to support only **JPEG, PNG, GIF** image formats. Formats **BMP, PSD, TGA, HDR, PIC, PNM** are no longer supported. ([#41001](https://github.com/expo/expo/pull/41001) by [@psnet](https://github.com/psnet))
15
+ - Methods of the legacy `EXGLObjectManager` module are now exported from the existing native module in Swift. ([#41171](https://github.com/expo/expo/pull/41171) by [@tsapeta](https://github.com/tsapeta))
16
+ - [android] rename module to align with iOS ([#41193](https://github.com/expo/expo/pull/41193) by [@Ubax](https://github.com/Ubax))
17
+
18
+ ### ⚠️ Notices
19
+
23
20
  - **Performance optimization**: remove support of **GIF** image format in image decoding in `texImage2D` expo wrapper. ([#41499](https://github.com/expo/expo/pull/41499) by [@psnet](https://github.com/psnet))
21
+ - **Performance optimization**: reduce supported old image formats in lib `stb_image.h` used for image decoding in `texImage2D` expo wrapper to support only **JPEG, PNG, GIF** image formats. Formats **BMP, PSD, TGA, HDR, PIC, PNM** are no longer supported. ([#41001](https://github.com/expo/expo/pull/41001) by [@psnet](https://github.com/psnet))
22
+ - Updated library `stb_image.h` used for image decoding in `texImage2D` expo wraper method. A lot of fixes and performance improvements, see related PR. ([#41000](https://github.com/expo/expo/pull/41000) by [@psnet](https://github.com/psnet))
23
+ - Added support for React Native 0.82.x. ([#39678](https://github.com/expo/expo/pull/39678) by [@gabrieldonadel](https://github.com/gabrieldonadel))
24
24
 
25
- ## 16.0.8 2025-12-05
25
+ ## 16.0.8 - 2025-12-05
26
26
 
27
27
  _This version does not introduce any user-facing changes._
28
28
 
@@ -9,7 +9,7 @@ def reactNativeArchitectures() {
9
9
  }
10
10
 
11
11
  group = 'host.exp.exponent'
12
- version = '16.0.9'
12
+ version = '16.0.10-canary-20251212-acb11f2'
13
13
 
14
14
  android {
15
15
  if (rootProject.hasProperty("ndkPath")) {
@@ -22,7 +22,7 @@ android {
22
22
  namespace "expo.modules.gl"
23
23
  defaultConfig {
24
24
  versionCode 31
25
- versionName "16.0.9"
25
+ versionName "16.0.10-canary-20251212-acb11f2"
26
26
 
27
27
  externalNativeBuild {
28
28
  cmake {
@@ -39,7 +39,7 @@ import static expo.modules.gl.cpp.EXGL.*;
39
39
  public class GLContext {
40
40
  private int mEXGLCtxId = -1;
41
41
 
42
- private final GLObjectManagerModule mManager;
42
+ private final GLModule mManager;
43
43
  private GLThread mGLThread;
44
44
  private EGLDisplay mEGLDisplay;
45
45
  private EGLSurface mEGLSurface;
@@ -49,7 +49,7 @@ public class GLContext {
49
49
 
50
50
  private BlockingQueue<Runnable> mEventQueue = new LinkedBlockingQueue<>();
51
51
 
52
- public GLContext(GLObjectManagerModule manager) {
52
+ public GLContext(GLModule manager) {
53
53
  super();
54
54
  mManager = manager;
55
55
  }
@@ -18,11 +18,11 @@ private class InvalidCameraViewException :
18
18
  private class InvalidGLContextException :
19
19
  CodedException("GLContext not found for given context id")
20
20
 
21
- class GLObjectManagerModule : Module() {
21
+ class GLModule : Module() {
22
22
  private val mGLObjects = SparseArray<GLObject>()
23
23
  private val mGLContextMap = SparseArray<GLContext>()
24
24
  override fun definition() = ModuleDefinition {
25
- Name("ExponentGLObjectManager")
25
+ Name("ExpoGL")
26
26
 
27
27
  AsyncFunction("destroyObjectAsync") { exglObjId: Int ->
28
28
  val glObject = mGLObjects[exglObjId]
@@ -61,7 +61,7 @@ class GLObjectManagerModule : Module() {
61
61
  }
62
62
 
63
63
  AsyncFunction("createContextAsync") { promise: Promise ->
64
- val glContext = GLContext(this@GLObjectManagerModule)
64
+ val glContext = GLContext(this@GLModule)
65
65
  glContext.initialize(null, false) {
66
66
  val results = Bundle()
67
67
  results.putInt("exglCtxId", glContext.contextId)
@@ -76,6 +76,13 @@ class GLObjectManagerModule : Module() {
76
76
  glContext.destroy()
77
77
  true
78
78
  }
79
+
80
+ View(GLView::class) {
81
+ Events("onSurfaceCreate")
82
+ Prop("enableExperimentalWorkletSupport") { view: GLView, enableExperimentalWorkletSupport: Boolean? ->
83
+ view.enableExperimentalWorkletSupport = enableExperimentalWorkletSupport ?: false
84
+ }
85
+ }
79
86
  }
80
87
 
81
88
  private fun getContextWithId(exglCtxId: Int): GLContext? {
@@ -21,7 +21,7 @@ class GLView(context: Context, appContext: AppContext) : TextureView(context), S
21
21
  private var glContext = GLContext(
22
22
  appContext
23
23
  .registry
24
- .getModule<GLObjectManagerModule>()
24
+ .getModule<GLModule>()
25
25
  )
26
26
 
27
27
  private val exglContextId: Int
package/build/GLView.d.ts CHANGED
@@ -48,7 +48,6 @@ export declare class GLView extends React.Component<GLViewProps> {
48
48
  _onSurfaceCreate: ({ nativeEvent: { exglCtxId } }: SurfaceCreateEvent) => void;
49
49
  componentWillUnmount(): void;
50
50
  componentDidUpdate(prevProps: GLViewProps): void;
51
- startARSessionAsync(): Promise<any>;
52
51
  createCameraTextureAsync(cameraRefOrHandle: ComponentOrHandle): Promise<WebGLTexture>;
53
52
  destroyObjectAsync(glObject: WebGLObject): Promise<boolean>;
54
53
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"GLView.d.ts","sourceRoot":"","sources":["../src/GLView.tsx"],"names":[],"mappings":"AAOA,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;AAUF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAG1F;AAGD;;;GAGG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IAEvB,MAAM,CAAC,YAAY;;;MAGjB;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;IAM7F;;;;;OAKG;WACU,iBAAiB,CAC5B,IAAI,CAAC,EAAE,yBAAyB,GAAG,MAAM,EACzC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAKtB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,GAAG,SAAS,CACnD;IAEnC,SAAS,EAAE,iBAAiB,CAAQ;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM;IAwBN,aAAa,GAAI,WAAW,iBAAiB,KAAG,IAAI,CAKlD;IAEF,gBAAgB,GAAI,gCAAgC,kBAAkB,KAAG,IAAI,CAQ3E;IAEF,oBAAoB,IAAI,IAAI;IAM5B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAS1C,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"}
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;AAQF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAG1F;AAGD;;;GAGG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IAEvB,MAAM,CAAC,YAAY;;;MAGjB;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;IAM7F;;;;;OAKG;WACU,iBAAiB,CAC5B,IAAI,CAAC,EAAE,yBAAyB,GAAG,MAAM,EACzC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC;IAKtB;;;OAGG;IACH,MAAM,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,GAAG,SAAS,CACnD;IAEnC,SAAS,EAAE,iBAAiB,CAAQ;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM;IAwBN,aAAa,GAAI,WAAW,iBAAiB,KAAG,IAAI,CAKlD;IAEF,gBAAgB,GAAI,gCAAgC,kBAAkB,KAAG,IAAI,CAQ3E;IAEF,oBAAoB,IAAI,IAAI;IAM5B,kBAAkB,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAS1C,wBAAwB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBrF,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.js CHANGED
@@ -1,11 +1,10 @@
1
- import { NativeModulesProxy, UnavailabilityError, requireNativeModule, requireNativeViewManager, CodedError, } from 'expo-modules-core';
1
+ import { UnavailabilityError, requireNativeModule, requireNativeViewManager, CodedError, } from 'expo-modules-core';
2
2
  import * as React from 'react';
3
3
  import { Platform, View, findNodeHandle } from 'react-native';
4
4
  import { configureLogging } from './GLUtils';
5
5
  import { createWorkletContextManager } from './GLWorkletContextManager';
6
- const ExponentGLObjectManager = requireNativeModule('ExponentGLObjectManager');
7
- const { ExponentGLViewManager } = NativeModulesProxy;
8
- const NativeView = requireNativeViewManager('ExponentGLView');
6
+ const GLNativeModule = requireNativeModule('ExpoGL');
7
+ const NativeView = requireNativeViewManager('ExpoGL');
9
8
  const workletContextManager = createWorkletContextManager();
10
9
  export function getWorkletContext(contextId) {
11
10
  'worklet';
@@ -31,7 +30,7 @@ export class GLView extends React.Component {
31
30
  * @return A promise that resolves to WebGL context object. See [WebGL API](#webgl-api) for more details.
32
31
  */
33
32
  static async createContextAsync() {
34
- const { exglCtxId } = await ExponentGLObjectManager.createContextAsync();
33
+ const { exglCtxId } = await GLNativeModule.createContextAsync();
35
34
  return getGl(exglCtxId);
36
35
  }
37
36
  /**
@@ -42,7 +41,7 @@ export class GLView extends React.Component {
42
41
  static async destroyContextAsync(exgl) {
43
42
  const exglCtxId = getContextId(exgl);
44
43
  unregisterGLContext(exglCtxId);
45
- return ExponentGLObjectManager.destroyContextAsync(exglCtxId);
44
+ return GLNativeModule.destroyContextAsync(exglCtxId);
46
45
  }
47
46
  /**
48
47
  * Takes a snapshot of the framebuffer and saves it as a file to app's cache directory.
@@ -52,7 +51,7 @@ export class GLView extends React.Component {
52
51
  */
53
52
  static async takeSnapshotAsync(exgl, options = {}) {
54
53
  const exglCtxId = getContextId(exgl);
55
- return ExponentGLObjectManager.takeSnapshotAsync(exglCtxId, options);
54
+ return GLNativeModule.takeSnapshotAsync(exglCtxId, options);
56
55
  }
57
56
  /**
58
57
  * This method doesn't work inside of the worklets with new reanimated versions.
@@ -98,15 +97,8 @@ export class GLView extends React.Component {
98
97
  }
99
98
  }
100
99
  // @docsMissing
101
- async startARSessionAsync() {
102
- if (!ExponentGLViewManager.startARSessionAsync) {
103
- throw new UnavailabilityError('expo-gl', 'startARSessionAsync');
104
- }
105
- return await ExponentGLViewManager.startARSessionAsync(findNodeHandle(this.nativeRef));
106
- }
107
- // @docsMissing
108
100
  async createCameraTextureAsync(cameraRefOrHandle) {
109
- if (!ExponentGLObjectManager.createCameraTextureAsync) {
101
+ if (!GLNativeModule.createCameraTextureAsync) {
110
102
  throw new UnavailabilityError('expo-gl', 'createCameraTextureAsync');
111
103
  }
112
104
  const { exglCtxId } = this;
@@ -114,15 +106,15 @@ export class GLView extends React.Component {
114
106
  throw new Error("GLView's surface is not created yet!");
115
107
  }
116
108
  const cameraTag = findNodeHandle(cameraRefOrHandle);
117
- const { exglObjId } = await ExponentGLObjectManager.createCameraTextureAsync(exglCtxId, cameraTag);
109
+ const { exglObjId } = await GLNativeModule.createCameraTextureAsync(exglCtxId, cameraTag);
118
110
  return { id: exglObjId };
119
111
  }
120
112
  // @docsMissing
121
113
  async destroyObjectAsync(glObject) {
122
- if (!ExponentGLObjectManager.destroyObjectAsync) {
114
+ if (!GLNativeModule.destroyObjectAsync) {
123
115
  throw new UnavailabilityError('expo-gl', 'destroyObjectAsync');
124
116
  }
125
- return await ExponentGLObjectManager.destroyObjectAsync(glObject.id);
117
+ return await GLNativeModule.destroyObjectAsync(glObject.id);
126
118
  }
127
119
  /**
128
120
  * Same as static [`takeSnapshotAsync()`](#takesnapshotasyncoptions),
@@ -1 +1 @@
1
- {"version":3,"file":"GLView.js","sourceRoot":"","sources":["../src/GLView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n NativeModulesProxy,\n UnavailabilityError,\n requireNativeModule,\n requireNativeViewManager,\n CodedError,\n} from 'expo-modules-core';\nimport * as React from 'react';\nimport { Platform, View, findNodeHandle } from 'react-native';\n\nimport { configureLogging } from './GLUtils';\nimport {\n ComponentOrHandle,\n SurfaceCreateEvent,\n GLSnapshot,\n ExpoWebGLRenderingContext,\n SnapshotOptions,\n GLViewProps,\n} from './GLView.types';\nimport { createWorkletContextManager } from './GLWorkletContextManager';\n\n// @docsMissing\nexport type WebGLObject = {\n id: number;\n};\n\ndeclare let global: any;\n\nconst ExponentGLObjectManager = requireNativeModule('ExponentGLObjectManager');\nconst { ExponentGLViewManager } = NativeModulesProxy;\n\nconst NativeView = requireNativeViewManager('ExponentGLView');\nconst workletContextManager = createWorkletContextManager();\n\nexport function getWorkletContext(contextId: number): ExpoWebGLRenderingContext | undefined {\n 'worklet';\n return workletContextManager.getContext(contextId);\n}\n\n// @needsAudit\n/**\n * A View that acts as an OpenGL ES render target. On mounting, an OpenGL ES context is created.\n * Its drawing buffer is presented as the contents of the View every frame.\n */\nexport class GLView extends React.Component<GLViewProps> {\n static NativeView: any;\n\n static defaultProps = {\n msaaSamples: 4,\n enableExperimentalWorkletSupport: false,\n };\n\n /**\n * Imperative API that creates headless context which is devoid of underlying view.\n * It's useful for headless rendering or in case you want to keep just one context per application and share it between multiple components.\n * It is slightly faster than usual context as it doesn't swap framebuffers and doesn't present them on the canvas,\n * however it may require you to take a snapshot in order to present its results.\n * Also, keep in mind that you need to set up a viewport and create your own framebuffer and texture that you will be drawing to, before you take a snapshot.\n * @return A promise that resolves to WebGL context object. See [WebGL API](#webgl-api) for more details.\n */\n static async createContextAsync(): Promise<ExpoWebGLRenderingContext> {\n const { exglCtxId } = await ExponentGLObjectManager.createContextAsync();\n return getGl(exglCtxId);\n }\n\n /**\n * Destroys given context.\n * @param exgl WebGL context to destroy.\n * @return A promise that resolves to boolean value that is `true` if given context existed and has been destroyed successfully.\n */\n static async destroyContextAsync(exgl?: ExpoWebGLRenderingContext | number): Promise<boolean> {\n const exglCtxId = getContextId(exgl);\n unregisterGLContext(exglCtxId);\n return ExponentGLObjectManager.destroyContextAsync(exglCtxId);\n }\n\n /**\n * Takes a snapshot of the framebuffer and saves it as a file to app's cache directory.\n * @param exgl WebGL context to take a snapshot from.\n * @param options\n * @return A promise that resolves to `GLSnapshot` object.\n */\n static async takeSnapshotAsync(\n exgl?: ExpoWebGLRenderingContext | number,\n options: SnapshotOptions = {}\n ): Promise<GLSnapshot> {\n const exglCtxId = getContextId(exgl);\n return ExponentGLObjectManager.takeSnapshotAsync(exglCtxId, options);\n }\n\n /**\n * This method doesn't work inside of the worklets with new reanimated versions.\n * @deprecated Use `getWorkletContext` from the global scope instead.\n */\n static getWorkletContext: (contextId: number) => ExpoWebGLRenderingContext | undefined =\n workletContextManager.getContext;\n\n nativeRef: ComponentOrHandle = null;\n exglCtxId?: number;\n\n render() {\n const { onContextCreate, msaaSamples, enableExperimentalWorkletSupport, ...viewProps } =\n this.props;\n\n return (\n <View {...viewProps}>\n <NativeView\n ref={this._setNativeRef}\n style={{\n flex: 1,\n ...(Platform.OS === 'ios'\n ? {\n backgroundColor: 'transparent',\n }\n : {}),\n }}\n onSurfaceCreate={this._onSurfaceCreate}\n enableExperimentalWorkletSupport={enableExperimentalWorkletSupport}\n msaaSamples={Platform.OS === 'ios' ? msaaSamples : undefined}\n />\n </View>\n );\n }\n\n _setNativeRef = (nativeRef: ComponentOrHandle): void => {\n if (this.props.nativeRef_EXPERIMENTAL) {\n this.props.nativeRef_EXPERIMENTAL(nativeRef);\n }\n this.nativeRef = nativeRef;\n };\n\n _onSurfaceCreate = ({ nativeEvent: { exglCtxId } }: SurfaceCreateEvent): void => {\n const gl = getGl(exglCtxId);\n\n this.exglCtxId = exglCtxId;\n\n if (this.props.onContextCreate) {\n this.props.onContextCreate(gl);\n }\n };\n\n componentWillUnmount(): void {\n if (this.exglCtxId) {\n unregisterGLContext(this.exglCtxId);\n }\n }\n\n componentDidUpdate(prevProps: GLViewProps): void {\n if (\n this.props.enableExperimentalWorkletSupport !== prevProps.enableExperimentalWorkletSupport\n ) {\n console.warn('Updating prop enableExperimentalWorkletSupport is not supported');\n }\n }\n\n // @docsMissing\n async startARSessionAsync(): Promise<any> {\n if (!ExponentGLViewManager.startARSessionAsync) {\n throw new UnavailabilityError('expo-gl', 'startARSessionAsync');\n }\n return await ExponentGLViewManager.startARSessionAsync(findNodeHandle(this.nativeRef));\n }\n\n // @docsMissing\n async createCameraTextureAsync(cameraRefOrHandle: ComponentOrHandle): Promise<WebGLTexture> {\n if (!ExponentGLObjectManager.createCameraTextureAsync) {\n throw new UnavailabilityError('expo-gl', 'createCameraTextureAsync');\n }\n\n const { exglCtxId } = this;\n\n if (!exglCtxId) {\n throw new Error(\"GLView's surface is not created yet!\");\n }\n\n const cameraTag = findNodeHandle(cameraRefOrHandle);\n const { exglObjId } = await ExponentGLObjectManager.createCameraTextureAsync(\n exglCtxId,\n cameraTag\n );\n return { id: exglObjId } as WebGLTexture;\n }\n\n // @docsMissing\n async destroyObjectAsync(glObject: WebGLObject): Promise<boolean> {\n if (!ExponentGLObjectManager.destroyObjectAsync) {\n throw new UnavailabilityError('expo-gl', 'destroyObjectAsync');\n }\n return await ExponentGLObjectManager.destroyObjectAsync(glObject.id);\n }\n\n /**\n * Same as static [`takeSnapshotAsync()`](#takesnapshotasyncoptions),\n * but uses WebGL context that is associated with the view on which the method is called.\n * @param options\n */\n async takeSnapshotAsync(options: SnapshotOptions = {}): Promise<GLSnapshot> {\n if (!GLView.takeSnapshotAsync) {\n throw new UnavailabilityError('expo-gl', 'takeSnapshotAsync');\n }\n const { exglCtxId } = this;\n return await GLView.takeSnapshotAsync(exglCtxId, options);\n }\n}\n\nGLView.NativeView = NativeView;\n\nfunction unregisterGLContext(exglCtxId: number) {\n if (global.__EXGLContexts) {\n delete global.__EXGLContexts[String(exglCtxId)];\n }\n workletContextManager.unregister?.(exglCtxId);\n}\n\n// Get the GL interface from an EXGLContextId\nconst getGl = (exglCtxId: number): ExpoWebGLRenderingContext => {\n if (!global.__EXGLContexts) {\n throw new CodedError(\n 'ERR_GL_NOT_AVAILABLE',\n 'GL is currently not available. (Have you enabled remote debugging? GL is not available while debugging remotely.)'\n );\n }\n const gl = global.__EXGLContexts[String(exglCtxId)];\n\n configureLogging(gl);\n\n return gl;\n};\n\nconst getContextId = (exgl?: ExpoWebGLRenderingContext | number): number => {\n const exglCtxId = exgl && typeof exgl === 'object' ? exgl.contextId : exgl;\n\n if (!exglCtxId || typeof exglCtxId !== 'number') {\n throw new Error(`Invalid EXGLContext id: ${String(exglCtxId)}`);\n }\n return exglCtxId;\n};\n"]}
1
+ {"version":3,"file":"GLView.js","sourceRoot":"","sources":["../src/GLView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n UnavailabilityError,\n requireNativeModule,\n requireNativeViewManager,\n CodedError,\n} from 'expo-modules-core';\nimport * as React from 'react';\nimport { Platform, View, findNodeHandle } from 'react-native';\n\nimport { configureLogging } from './GLUtils';\nimport {\n ComponentOrHandle,\n SurfaceCreateEvent,\n GLSnapshot,\n ExpoWebGLRenderingContext,\n SnapshotOptions,\n GLViewProps,\n} from './GLView.types';\nimport { createWorkletContextManager } from './GLWorkletContextManager';\n\n// @docsMissing\nexport type WebGLObject = {\n id: number;\n};\n\ndeclare let global: any;\n\nconst GLNativeModule = requireNativeModule('ExpoGL');\nconst NativeView = requireNativeViewManager('ExpoGL');\nconst workletContextManager = createWorkletContextManager();\n\nexport function getWorkletContext(contextId: number): ExpoWebGLRenderingContext | undefined {\n 'worklet';\n return workletContextManager.getContext(contextId);\n}\n\n// @needsAudit\n/**\n * A View that acts as an OpenGL ES render target. On mounting, an OpenGL ES context is created.\n * Its drawing buffer is presented as the contents of the View every frame.\n */\nexport class GLView extends React.Component<GLViewProps> {\n static NativeView: any;\n\n static defaultProps = {\n msaaSamples: 4,\n enableExperimentalWorkletSupport: false,\n };\n\n /**\n * Imperative API that creates headless context which is devoid of underlying view.\n * It's useful for headless rendering or in case you want to keep just one context per application and share it between multiple components.\n * It is slightly faster than usual context as it doesn't swap framebuffers and doesn't present them on the canvas,\n * however it may require you to take a snapshot in order to present its results.\n * Also, keep in mind that you need to set up a viewport and create your own framebuffer and texture that you will be drawing to, before you take a snapshot.\n * @return A promise that resolves to WebGL context object. See [WebGL API](#webgl-api) for more details.\n */\n static async createContextAsync(): Promise<ExpoWebGLRenderingContext> {\n const { exglCtxId } = await GLNativeModule.createContextAsync();\n return getGl(exglCtxId);\n }\n\n /**\n * Destroys given context.\n * @param exgl WebGL context to destroy.\n * @return A promise that resolves to boolean value that is `true` if given context existed and has been destroyed successfully.\n */\n static async destroyContextAsync(exgl?: ExpoWebGLRenderingContext | number): Promise<boolean> {\n const exglCtxId = getContextId(exgl);\n unregisterGLContext(exglCtxId);\n return GLNativeModule.destroyContextAsync(exglCtxId);\n }\n\n /**\n * Takes a snapshot of the framebuffer and saves it as a file to app's cache directory.\n * @param exgl WebGL context to take a snapshot from.\n * @param options\n * @return A promise that resolves to `GLSnapshot` object.\n */\n static async takeSnapshotAsync(\n exgl?: ExpoWebGLRenderingContext | number,\n options: SnapshotOptions = {}\n ): Promise<GLSnapshot> {\n const exglCtxId = getContextId(exgl);\n return GLNativeModule.takeSnapshotAsync(exglCtxId, options);\n }\n\n /**\n * This method doesn't work inside of the worklets with new reanimated versions.\n * @deprecated Use `getWorkletContext` from the global scope instead.\n */\n static getWorkletContext: (contextId: number) => ExpoWebGLRenderingContext | undefined =\n workletContextManager.getContext;\n\n nativeRef: ComponentOrHandle = null;\n exglCtxId?: number;\n\n render() {\n const { onContextCreate, msaaSamples, enableExperimentalWorkletSupport, ...viewProps } =\n this.props;\n\n return (\n <View {...viewProps}>\n <NativeView\n ref={this._setNativeRef}\n style={{\n flex: 1,\n ...(Platform.OS === 'ios'\n ? {\n backgroundColor: 'transparent',\n }\n : {}),\n }}\n onSurfaceCreate={this._onSurfaceCreate}\n enableExperimentalWorkletSupport={enableExperimentalWorkletSupport}\n msaaSamples={Platform.OS === 'ios' ? msaaSamples : undefined}\n />\n </View>\n );\n }\n\n _setNativeRef = (nativeRef: ComponentOrHandle): void => {\n if (this.props.nativeRef_EXPERIMENTAL) {\n this.props.nativeRef_EXPERIMENTAL(nativeRef);\n }\n this.nativeRef = nativeRef;\n };\n\n _onSurfaceCreate = ({ nativeEvent: { exglCtxId } }: SurfaceCreateEvent): void => {\n const gl = getGl(exglCtxId);\n\n this.exglCtxId = exglCtxId;\n\n if (this.props.onContextCreate) {\n this.props.onContextCreate(gl);\n }\n };\n\n componentWillUnmount(): void {\n if (this.exglCtxId) {\n unregisterGLContext(this.exglCtxId);\n }\n }\n\n componentDidUpdate(prevProps: GLViewProps): void {\n if (\n this.props.enableExperimentalWorkletSupport !== prevProps.enableExperimentalWorkletSupport\n ) {\n console.warn('Updating prop enableExperimentalWorkletSupport is not supported');\n }\n }\n\n // @docsMissing\n async createCameraTextureAsync(cameraRefOrHandle: ComponentOrHandle): Promise<WebGLTexture> {\n if (!GLNativeModule.createCameraTextureAsync) {\n throw new UnavailabilityError('expo-gl', 'createCameraTextureAsync');\n }\n\n const { exglCtxId } = this;\n\n if (!exglCtxId) {\n throw new Error(\"GLView's surface is not created yet!\");\n }\n\n const cameraTag = findNodeHandle(cameraRefOrHandle);\n const { exglObjId } = await GLNativeModule.createCameraTextureAsync(exglCtxId, cameraTag);\n return { id: exglObjId } as WebGLTexture;\n }\n\n // @docsMissing\n async destroyObjectAsync(glObject: WebGLObject): Promise<boolean> {\n if (!GLNativeModule.destroyObjectAsync) {\n throw new UnavailabilityError('expo-gl', 'destroyObjectAsync');\n }\n return await GLNativeModule.destroyObjectAsync(glObject.id);\n }\n\n /**\n * Same as static [`takeSnapshotAsync()`](#takesnapshotasyncoptions),\n * but uses WebGL context that is associated with the view on which the method is called.\n * @param options\n */\n async takeSnapshotAsync(options: SnapshotOptions = {}): Promise<GLSnapshot> {\n if (!GLView.takeSnapshotAsync) {\n throw new UnavailabilityError('expo-gl', 'takeSnapshotAsync');\n }\n const { exglCtxId } = this;\n return await GLView.takeSnapshotAsync(exglCtxId, options);\n }\n}\n\nGLView.NativeView = NativeView;\n\nfunction unregisterGLContext(exglCtxId: number) {\n if (global.__EXGLContexts) {\n delete global.__EXGLContexts[String(exglCtxId)];\n }\n workletContextManager.unregister?.(exglCtxId);\n}\n\n// Get the GL interface from an EXGLContextId\nconst getGl = (exglCtxId: number): ExpoWebGLRenderingContext => {\n if (!global.__EXGLContexts) {\n throw new CodedError(\n 'ERR_GL_NOT_AVAILABLE',\n 'GL is currently not available. (Have you enabled remote debugging? GL is not available while debugging remotely.)'\n );\n }\n const gl = global.__EXGLContexts[String(exglCtxId)];\n\n configureLogging(gl);\n\n return gl;\n};\n\nconst getContextId = (exgl?: ExpoWebGLRenderingContext | number): number => {\n const exglCtxId = exgl && typeof exgl === 'object' ? exgl.contextId : exgl;\n\n if (!exglCtxId || typeof exglCtxId !== 'number') {\n throw new Error(`Invalid EXGLContext id: ${String(exglCtxId)}`);\n }\n return exglCtxId;\n};\n"]}
@@ -2,14 +2,14 @@
2
2
  "platforms": ["apple", "android"],
3
3
  "apple": {
4
4
  "podspecPath": "./ExpoGL.podspec",
5
- "modules": ["GLViewModule"]
5
+ "modules": ["ExpoGLModule"]
6
6
  },
7
7
  "android": {
8
- "modules": ["expo.modules.gl.GLViewModule", "expo.modules.gl.GLObjectManagerModule"],
8
+ "modules": ["expo.modules.gl.GLModule"],
9
9
  "publication": {
10
10
  "groupId": "host.exp.exponent",
11
11
  "artifactId": "expo.modules.gl",
12
- "version": "16.0.9",
12
+ "version": "16.0.10-canary-20251212-acb11f2",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }
@@ -17,7 +17,6 @@
17
17
 
18
18
  @property (nonatomic, strong) dispatch_queue_t glQueue;
19
19
  @property (nonatomic, weak) EXModuleRegistry *moduleRegistry;
20
- @property (nonatomic, weak) EXGLObjectManager *objectManager;
21
20
  @property (nonatomic, assign) BOOL isContextReady;
22
21
  @property (nonatomic, assign) BOOL wasPrepareCalled;
23
22
  @property (nonatomic) BOOL appIsBackgrounded;
@@ -33,7 +32,6 @@
33
32
  self.delegate = delegate;
34
33
 
35
34
  _moduleRegistry = moduleRegistry;
36
- _objectManager = (EXGLObjectManager *)[_moduleRegistry getExportedModuleOfClass:[EXGLObjectManager class]];
37
35
  _glQueue = dispatch_queue_create("host.exp.gl", DISPATCH_QUEUE_SERIAL);
38
36
  _eaglCtx = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3] ?: [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
39
37
  _isContextReady = NO;
@@ -75,7 +73,7 @@
75
73
  - (void)initialize
76
74
  {
77
75
  self->_contextId = EXGLContextCreate();
78
- [self->_objectManager saveContext:self];
76
+ [[EXGLObjectManager shared] saveContext:self];
79
77
 
80
78
  // listen for foreground/background transitions
81
79
  [[NSNotificationCenter defaultCenter] addObserver:self
@@ -182,7 +180,7 @@
182
180
  EXGLContextDestroy(self->_contextId);
183
181
 
184
182
  // Remove from dictionary of contexts
185
- [self->_objectManager deleteContextWithId:@(self->_contextId)];
183
+ [[EXGLObjectManager shared] deleteContextWithId:@(self->_contextId)];
186
184
  }];
187
185
  }];
188
186
  }
@@ -1,17 +1,30 @@
1
1
  // Copyright 2016-present 650 Industries. All rights reserved.
2
2
 
3
- #import <ExpoModulesCore/EXExportedModule.h>
4
- #import <ExpoModulesCore/EXModuleRegistryConsumer.h>
3
+ #import <ExpoModulesCore/EXCameraInterface.h>
5
4
 
6
- #import <ExpoModulesCore/EXUIManager.h>
7
- #import <ExpoModulesCore/EXFileSystemInterface.h>
5
+ @interface EXGLObjectManager : NSObject
8
6
 
9
- @interface EXGLObjectManager : EXExportedModule <EXModuleRegistryConsumer>
10
-
11
- @property (nonatomic, weak, nullable) id<EXUIManager> uiManager;
12
- @property (nonatomic, weak, nullable) id<EXFileSystemInterface> fileSystem;
7
+ @property (class, nonnull, nonatomic, strong) EXGLObjectManager *shared;
13
8
 
14
9
  - (void)saveContext:(nonnull id)glContext;
15
10
  - (void)deleteContextWithId:(nonnull NSNumber *)contextId;
16
11
 
12
+ - (void)takeSnapshotWithContextId:(nonnull NSNumber *)exglCtxId
13
+ andOptions:(nonnull NSDictionary *)options
14
+ resolver:(nonnull EXPromiseResolveBlock)resolve
15
+ rejecter:(nonnull EXPromiseRejectBlock)reject;
16
+
17
+ - (void)destroyContextWithId:(nonnull NSNumber *)exglCtxId
18
+ resolve:(nonnull EXPromiseResolveBlock)resolve
19
+ reject:(nonnull EXPromiseRejectBlock)reject;
20
+
21
+ - (void)destroyObjectAsync:(nonnull NSNumber *)exglObjId
22
+ resolve:(nonnull EXPromiseResolveBlock)resolve
23
+ reject:(nonnull EXPromiseRejectBlock)reject;
24
+
25
+ - (void)createTextureForContextWithId:(nonnull NSNumber *)exglCtxId
26
+ cameraView:(nonnull id<EXCameraInterface>)cameraView
27
+ resolver:(nonnull EXPromiseResolveBlock)resolve
28
+ rejecter:(nonnull EXPromiseRejectBlock)reject;
29
+
17
30
  @end
@@ -2,7 +2,6 @@
2
2
 
3
3
  #import <ExpoModulesCore/EXModuleRegistry.h>
4
4
  #import <ExpoModulesCore/EXUIManager.h>
5
- #import <ExpoModulesCore/EXCameraInterface.h>
6
5
 
7
6
  #import <ExpoGL/EXGLObjectManager.h>
8
7
  #import <ExpoGL/EXGLObject.h>
@@ -10,7 +9,6 @@
10
9
 
11
10
  @interface EXGLObjectManager ()
12
11
 
13
- @property (nonatomic, weak) EXModuleRegistry *moduleRegistry;
14
12
  @property (nonatomic, strong) NSMutableDictionary<NSNumber *, EXGLContext *> *glContexts;
15
13
  @property (nonatomic, strong) NSMutableDictionary<NSNumber *, EXGLObject *> *objects; // Key is `EXGLObjectId`
16
14
 
@@ -18,11 +16,14 @@
18
16
 
19
17
  @implementation EXGLObjectManager
20
18
 
21
- EX_REGISTER_MODULE();
22
-
23
- + (const NSString *)exportedModuleName
19
+ + (nonnull instancetype)shared
24
20
  {
25
- return @"ExponentGLObjectManager";
21
+ static EXGLObjectManager *sharedInstance = nil;
22
+ static dispatch_once_t onceToken;
23
+ dispatch_once(&onceToken, ^{
24
+ sharedInstance = [[EXGLObjectManager alloc] init];
25
+ });
26
+ return sharedInstance;
26
27
  }
27
28
 
28
29
  - (instancetype)init
@@ -34,18 +35,6 @@ EX_REGISTER_MODULE();
34
35
  return self;
35
36
  }
36
37
 
37
- - (dispatch_queue_t)methodQueue
38
- {
39
- return dispatch_queue_create("host.exp.exponent.GLObjectManager", DISPATCH_QUEUE_SERIAL);
40
- }
41
-
42
- - (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry
43
- {
44
- _moduleRegistry = moduleRegistry;
45
- _uiManager = [moduleRegistry getModuleImplementingProtocol:@protocol(EXUIManager)];
46
- _fileSystem = [moduleRegistry getModuleImplementingProtocol:@protocol(EXFileSystemInterface)];
47
- }
48
-
49
38
  - (EXGLContext *)getContextWithId:(NSNumber *)contextId
50
39
  {
51
40
  return _glContexts[contextId];
@@ -73,11 +62,10 @@ EX_REGISTER_MODULE();
73
62
 
74
63
  # pragma mark - Snapshots
75
64
 
76
- EX_EXPORT_METHOD_AS(takeSnapshotAsync,
77
- takeSnapshotWithContextId:(nonnull NSNumber *)exglCtxId
78
- andOptions:(nonnull NSDictionary *)options
79
- resolver:(EXPromiseResolveBlock)resolve
80
- rejecter:(EXPromiseRejectBlock)reject)
65
+ - (void)takeSnapshotWithContextId:(nonnull NSNumber *)exglCtxId
66
+ andOptions:(nonnull NSDictionary *)options
67
+ resolver:(EXPromiseResolveBlock)resolve
68
+ rejecter:(EXPromiseRejectBlock)reject
81
69
  {
82
70
  EXGLContext *glContext = [self getContextWithId:exglCtxId];
83
71
 
@@ -89,32 +77,9 @@ EX_EXPORT_METHOD_AS(takeSnapshotAsync,
89
77
  [glContext takeSnapshotWithOptions:options resolve:resolve reject:reject];
90
78
  }
91
79
 
92
- # pragma mark - Headless Context
93
-
94
- EX_EXPORT_METHOD_AS(createContextAsync,
95
- createContext:(EXPromiseResolveBlock)resolve
96
- reject:(EXPromiseRejectBlock)reject)
97
- {
98
- EXGLContext *glContext = [[EXGLContext alloc] initWithDelegate:nil
99
- andModuleRegistry:_moduleRegistry];
100
-
101
- [glContext prepare:^(BOOL success) {
102
- if (success) {
103
- resolve(@{ @"exglCtxId": @(glContext.contextId) });
104
- } else {
105
- reject(
106
- @"E_GL_CONTEXT_NOT_INITIALIZED",
107
- nil,
108
- EXErrorWithMessage(@"ExponentGLObjectManager.createContextAsync: Unexpected error occurred when initializing headless context")
109
- );
110
- }
111
- } andEnableExperimentalWorkletSupport:NO];
112
- }
113
-
114
- EX_EXPORT_METHOD_AS(destroyContextAsync,
115
- destroyContextWithId:(nonnull NSNumber *)exglCtxId
116
- resolve:(EXPromiseResolveBlock)resolve
117
- reject:(EXPromiseRejectBlock)reject)
80
+ - (void)destroyContextWithId:(nonnull NSNumber *)exglCtxId
81
+ resolve:(EXPromiseResolveBlock)resolve
82
+ reject:(EXPromiseRejectBlock)reject
118
83
  {
119
84
  EXGLContext *glContext = [self getContextWithId:exglCtxId];
120
85
 
@@ -128,39 +93,30 @@ EX_EXPORT_METHOD_AS(destroyContextAsync,
128
93
 
129
94
  # pragma mark - Camera integration
130
95
 
131
- EX_EXPORT_METHOD_AS(destroyObjectAsync,
132
- destroyObjectAsync:(nonnull NSNumber *)exglObjId
133
- resolve:(EXPromiseResolveBlock)resolve
134
- reject:(EXPromiseRejectBlock)reject)
96
+ - (void)destroyObjectAsync:(nonnull NSNumber *)exglObjId
97
+ resolve:(EXPromiseResolveBlock)resolve
98
+ reject:(EXPromiseRejectBlock)reject
135
99
  {
136
100
  _objects[exglObjId] = nil;
137
101
  resolve(@(YES));
138
102
  }
139
103
 
140
- EX_EXPORT_METHOD_AS(createCameraTextureAsync,
141
- createTextureForContextWithId:(nonnull NSNumber *)exglCtxId
142
- andCameraWithReactTag:(nonnull NSNumber *)cameraViewTag
143
- resolver:(EXPromiseResolveBlock)resolve
144
- rejecter:(EXPromiseRejectBlock)reject)
104
+ - (void)createTextureForContextWithId:(nonnull NSNumber *)exglCtxId
105
+ cameraView:(nonnull id<EXCameraInterface>)cameraView
106
+ resolver:(EXPromiseResolveBlock)resolve
107
+ rejecter:(EXPromiseRejectBlock)reject
145
108
  {
146
- [_uiManager executeUIBlock:^(id view) {
147
- EXGLContext *glContext = [self getContextWithId:exglCtxId];
148
- id<EXCameraInterface> cameraView = (id<EXCameraInterface>)view;
149
-
150
- if (glContext == nil) {
151
- reject(@"E_GL_BAD_VIEW_TAG", nil, EXErrorWithMessage(@"ExponentGLObjectManager.createCameraTextureAsync: Expected a GLView"));
152
- return;
153
- }
154
- if (cameraView == nil) {
155
- reject(@"E_GL_BAD_CAMERA_VIEW_TAG", nil, EXErrorWithMessage(@"ExponentGLObjectManager.createCameraTextureAsync: Expected an EXCamera"));
156
- return;
157
- }
158
-
159
- EXGLCameraObject *cameraTexture = [[EXGLCameraObject alloc] initWithContext:glContext andCamera:cameraView];
160
-
161
- self->_objects[@(cameraTexture.exglObjId)] = cameraTexture;
162
- resolve(@{ @"exglObjId": @(cameraTexture.exglObjId) });
163
- } forView:cameraViewTag implementingProtocol:@protocol(EXCameraInterface)];
109
+ EXGLContext *glContext = [self getContextWithId:exglCtxId];
110
+
111
+ if (glContext == nil) {
112
+ reject(@"E_GL_BAD_VIEW_TAG", nil, EXErrorWithMessage(@"ExponentGLObjectManager.createCameraTextureAsync: Expected a GLView"));
113
+ return;
114
+ }
115
+
116
+ EXGLCameraObject *cameraTexture = [[EXGLCameraObject alloc] initWithContext:glContext andCamera:cameraView];
117
+
118
+ self->_objects[@(cameraTexture.exglObjId)] = cameraTexture;
119
+ resolve(@{ @"exglObjId": @(cameraTexture.exglObjId) });
164
120
  }
165
121
 
166
122
  @end
@@ -0,0 +1,76 @@
1
+ // Copyright 2022-present 650 Industries. All rights reserved.
2
+
3
+ import ExpoModulesCore
4
+
5
+ public final class ExpoGLModule: Module {
6
+ public func definition() -> ModuleDefinition {
7
+ Name("ExpoGL")
8
+
9
+ AsyncFunction("takeSnapshotAsync") { (contextId: UInt, options: [String: Any], promise: Promise) in
10
+ EXGLObjectManager.shared.takeSnapshot(
11
+ withContextId: contextId as NSNumber,
12
+ andOptions: options,
13
+ resolver: promise.resolver,
14
+ rejecter: promise.legacyRejecter
15
+ )
16
+ }
17
+
18
+ AsyncFunction("createContextAsync") { (promise: Promise) in
19
+ guard let legacyModuleRegistry = appContext?.legacyModuleRegistry else {
20
+ promise.reject("E_GL_MODULE_REGISTRY_NOT_FOUND", "ExpoGL.createContextAsync: Unable to find the module registry")
21
+ return
22
+ }
23
+ let glContext = EXGLContext(delegate: nil, andModuleRegistry: legacyModuleRegistry)
24
+
25
+ glContext.prepare({ success in
26
+ if success {
27
+ promise.resolve(["exglCtxId": glContext.contextId as NSNumber])
28
+ } else {
29
+ promise.reject("E_GL_CONTEXT_NOT_INITIALIZED", "ExpoGL.createContextAsync: Unexpected error occurred when initializing headless context")
30
+ }
31
+ }, andEnableExperimentalWorkletSupport: false)
32
+ }
33
+
34
+ AsyncFunction("destroyContextAsync") { (contextId: UInt, promise: Promise) in
35
+ EXGLObjectManager.shared.destroyContext(
36
+ withId: contextId as NSNumber,
37
+ resolve: promise.resolver,
38
+ reject: promise.legacyRejecter
39
+ )
40
+ }
41
+
42
+ AsyncFunction("destroyObjectAsync") { (objectId: UInt, promise: Promise) in
43
+ EXGLObjectManager.shared.destroyObjectAsync(
44
+ objectId as NSNumber,
45
+ resolve: promise.resolver,
46
+ reject: promise.legacyRejecter
47
+ )
48
+ }
49
+
50
+ AsyncFunction("createCameraTextureAsync") { (contextId: UInt, cameraViewTag: Int, promise: Promise) in
51
+ guard let cameraView = appContext?.findView(withTag: cameraViewTag, ofType: EXCameraInterface.self) else {
52
+ promise.reject("E_GL_BAD_CAMERA_VIEW_TAG", "ExpoGL.createCameraTextureAsync: Expected a camera view")
53
+ return
54
+ }
55
+ EXGLObjectManager.shared.createTextureForContext(
56
+ withId: contextId as NSNumber,
57
+ cameraView: cameraView,
58
+ resolver: promise.resolver,
59
+ rejecter: promise.legacyRejecter
60
+ )
61
+ }
62
+ .runOnQueue(.main)
63
+
64
+ View(GLView.self) {
65
+ Events("onSurfaceCreate")
66
+
67
+ Prop("msaaSamples") { (view, msaaSamples: Int) in
68
+ view.msaaSamples = msaaSamples
69
+ }
70
+
71
+ Prop("enableExperimentalWorkletSupport") { (view, enableExperimentalWorkletSupport: Bool) in
72
+ view.enableExperimentalWorkletSupport = enableExperimentalWorkletSupport
73
+ }
74
+ }
75
+ }
76
+ }
@@ -0,0 +1 @@
1
+ 11a34a55c37c76b33f3931b9caa588e4d4ac4c204f943b6bc46580a3587fd782a3c1814ad275da5a086860e42b60cdf7de12d16eb835d14ecef8bedd4e0a1209
@@ -0,0 +1 @@
1
+ 469402e584083a3488b4ece60a1bacba5c77d9223888767556e879da2b093dbce72dba8ea2f43cb72c608a4535512de7bb854b8e2889f78af9dd8ca30ac75e8f
@@ -0,0 +1,87 @@
1
+ {
2
+ "formatVersion": "1.1",
3
+ "component": {
4
+ "group": "host.exp.exponent",
5
+ "module": "expo.modules.gl",
6
+ "version": "16.0.10-canary-20251212-acb11f2",
7
+ "attributes": {
8
+ "org.gradle.status": "release"
9
+ }
10
+ },
11
+ "createdBy": {
12
+ "gradle": {
13
+ "version": "9.0.0"
14
+ }
15
+ },
16
+ "variants": [
17
+ {
18
+ "name": "releaseVariantReleaseApiPublication",
19
+ "attributes": {
20
+ "org.gradle.category": "library",
21
+ "org.gradle.dependency.bundling": "external",
22
+ "org.gradle.libraryelements": "aar",
23
+ "org.gradle.usage": "java-api"
24
+ },
25
+ "files": [
26
+ {
27
+ "name": "expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar",
28
+ "url": "expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar",
29
+ "size": 981246,
30
+ "sha512": "469402e584083a3488b4ece60a1bacba5c77d9223888767556e879da2b093dbce72dba8ea2f43cb72c608a4535512de7bb854b8e2889f78af9dd8ca30ac75e8f",
31
+ "sha256": "9d4f1adbbe5cee618c68b534111efbd97e6b84f41ebf03875ba4a3ea11078b2b",
32
+ "sha1": "f14b598f3e17814c3f5debf1aca3da3e22ae9e4f",
33
+ "md5": "ca254b249228f90493811ee31845e1fc"
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "name": "releaseVariantReleaseRuntimePublication",
39
+ "attributes": {
40
+ "org.gradle.category": "library",
41
+ "org.gradle.dependency.bundling": "external",
42
+ "org.gradle.libraryelements": "aar",
43
+ "org.gradle.usage": "java-runtime"
44
+ },
45
+ "dependencies": [
46
+ {
47
+ "group": "org.jetbrains.kotlin",
48
+ "module": "kotlin-stdlib-jdk7",
49
+ "version": {
50
+ "requires": "2.1.20"
51
+ }
52
+ }
53
+ ],
54
+ "files": [
55
+ {
56
+ "name": "expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar",
57
+ "url": "expo.modules.gl-16.0.10-canary-20251212-acb11f2.aar",
58
+ "size": 981246,
59
+ "sha512": "469402e584083a3488b4ece60a1bacba5c77d9223888767556e879da2b093dbce72dba8ea2f43cb72c608a4535512de7bb854b8e2889f78af9dd8ca30ac75e8f",
60
+ "sha256": "9d4f1adbbe5cee618c68b534111efbd97e6b84f41ebf03875ba4a3ea11078b2b",
61
+ "sha1": "f14b598f3e17814c3f5debf1aca3da3e22ae9e4f",
62
+ "md5": "ca254b249228f90493811ee31845e1fc"
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "name": "releaseVariantReleaseSourcePublication",
68
+ "attributes": {
69
+ "org.gradle.category": "documentation",
70
+ "org.gradle.dependency.bundling": "external",
71
+ "org.gradle.docstype": "sources",
72
+ "org.gradle.usage": "java-runtime"
73
+ },
74
+ "files": [
75
+ {
76
+ "name": "expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar",
77
+ "url": "expo.modules.gl-16.0.10-canary-20251212-acb11f2-sources.jar",
78
+ "size": 12052,
79
+ "sha512": "11a34a55c37c76b33f3931b9caa588e4d4ac4c204f943b6bc46580a3587fd782a3c1814ad275da5a086860e42b60cdf7de12d16eb835d14ecef8bedd4e0a1209",
80
+ "sha256": "34258c1facd47505795431b582b01ae721e99682f193a8029e6d33b419247f80",
81
+ "sha1": "e0997b0887893b0554ab4c1ffb972f92f0962cad",
82
+ "md5": "82c85258009a79435ad0ffbfde08e7cc"
83
+ }
84
+ ]
85
+ }
86
+ ]
87
+ }
@@ -0,0 +1 @@
1
+ 24a66866b867052b898992cd907b9a8ee9050dcb8c5c10e02ad8b4b738ccd859e6b71ccaa96c715e826ea8056c5803b3c45394d9ed5307129fa752ae36fe4915
@@ -9,7 +9,7 @@
9
9
  <modelVersion>4.0.0</modelVersion>
10
10
  <groupId>host.exp.exponent</groupId>
11
11
  <artifactId>expo.modules.gl</artifactId>
12
- <version>16.0.9</version>
12
+ <version>16.0.10-canary-20251212-acb11f2</version>
13
13
  <packaging>aar</packaging>
14
14
  <name>expo.modules.gl</name>
15
15
  <url>https://github.com/expo/expo</url>
@@ -0,0 +1 @@
1
+ e3e36426cb008cb225f8529aa8ec849a006707f84e302664e22bbd63aa7058ce6ac6a2f1dc41a05f2ca8f81ed64f332825c06a6f25ecb3b019f68ba021fb5c2e
@@ -3,11 +3,11 @@
3
3
  <groupId>host.exp.exponent</groupId>
4
4
  <artifactId>expo.modules.gl</artifactId>
5
5
  <versioning>
6
- <latest>16.0.9</latest>
7
- <release>16.0.9</release>
6
+ <latest>16.0.10-canary-20251212-acb11f2</latest>
7
+ <release>16.0.10-canary-20251212-acb11f2</release>
8
8
  <versions>
9
- <version>16.0.9</version>
9
+ <version>16.0.10-canary-20251212-acb11f2</version>
10
10
  </versions>
11
- <lastUpdated>20251211203626</lastUpdated>
11
+ <lastUpdated>20251212085930</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 535ced1de5f1cdf7f9cbf78bfb15d9c0
1
+ 2cd9b874087ba93619da38fdeae078ba
@@ -1 +1 @@
1
- 4bf8a1b7b026a674fceb50ebed59e7fe9bf2c063
1
+ e43fe2a49ca97d856823efdca169896c2cb89432
@@ -1 +1 @@
1
- 22da90bd303ad785a1d3455f681a7c0156de4d39c43d84ea7df4da8c020869ce
1
+ 4e8e95bf17d6910dd73c5d094f16fb23e025d2be7ddc41d5a295e94ea033bcd4
@@ -1 +1 @@
1
- 41fb83d533938074517c246639821386750b3fc8604618549e52167c8fda7676be40fca9dcc8e87eb44a86de4378598bd23391dc98b6268c1e7859a5f7e2a69e
1
+ 147012f63e7fd1fc1d18dd402dc9f354d20cea68b86a5645fa796376e9694c230490030f98fcfcba15c8cf0feb26c8d1b6fcfb7e676442d0e44fe430184ca4d6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expo-gl",
3
- "version": "16.0.9",
3
+ "version": "16.0.10-canary-20251212-acb11f2",
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",
@@ -43,11 +43,11 @@
43
43
  "@types/invariant": "^2.2.33",
44
44
  "@types/offscreencanvas": "2019.6.4",
45
45
  "@types/webgl2": "^0.0.6",
46
- "expo-module-scripts": "^5.0.8",
47
- "react-test-renderer": "19.1.0"
46
+ "expo-module-scripts": "5.1.0-canary-20251212-acb11f2",
47
+ "react-test-renderer": "19.2.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "expo": "*",
50
+ "expo": "55.0.0-canary-20251212-acb11f2",
51
51
  "react": "*",
52
52
  "react-dom": "*",
53
53
  "react-native": "*",
@@ -64,6 +64,5 @@
64
64
  "react-native-web": {
65
65
  "optional": true
66
66
  }
67
- },
68
- "gitHead": "b6d1de9d53724e311e417c51dd0a9f9bee1c040d"
67
+ }
69
68
  }
package/src/GLView.tsx CHANGED
@@ -1,5 +1,4 @@
1
1
  import {
2
- NativeModulesProxy,
3
2
  UnavailabilityError,
4
3
  requireNativeModule,
5
4
  requireNativeViewManager,
@@ -26,10 +25,8 @@ export type WebGLObject = {
26
25
 
27
26
  declare let global: any;
28
27
 
29
- const ExponentGLObjectManager = requireNativeModule('ExponentGLObjectManager');
30
- const { ExponentGLViewManager } = NativeModulesProxy;
31
-
32
- const NativeView = requireNativeViewManager('ExponentGLView');
28
+ const GLNativeModule = requireNativeModule('ExpoGL');
29
+ const NativeView = requireNativeViewManager('ExpoGL');
33
30
  const workletContextManager = createWorkletContextManager();
34
31
 
35
32
  export function getWorkletContext(contextId: number): ExpoWebGLRenderingContext | undefined {
@@ -59,7 +56,7 @@ export class GLView extends React.Component<GLViewProps> {
59
56
  * @return A promise that resolves to WebGL context object. See [WebGL API](#webgl-api) for more details.
60
57
  */
61
58
  static async createContextAsync(): Promise<ExpoWebGLRenderingContext> {
62
- const { exglCtxId } = await ExponentGLObjectManager.createContextAsync();
59
+ const { exglCtxId } = await GLNativeModule.createContextAsync();
63
60
  return getGl(exglCtxId);
64
61
  }
65
62
 
@@ -71,7 +68,7 @@ export class GLView extends React.Component<GLViewProps> {
71
68
  static async destroyContextAsync(exgl?: ExpoWebGLRenderingContext | number): Promise<boolean> {
72
69
  const exglCtxId = getContextId(exgl);
73
70
  unregisterGLContext(exglCtxId);
74
- return ExponentGLObjectManager.destroyContextAsync(exglCtxId);
71
+ return GLNativeModule.destroyContextAsync(exglCtxId);
75
72
  }
76
73
 
77
74
  /**
@@ -85,7 +82,7 @@ export class GLView extends React.Component<GLViewProps> {
85
82
  options: SnapshotOptions = {}
86
83
  ): Promise<GLSnapshot> {
87
84
  const exglCtxId = getContextId(exgl);
88
- return ExponentGLObjectManager.takeSnapshotAsync(exglCtxId, options);
85
+ return GLNativeModule.takeSnapshotAsync(exglCtxId, options);
89
86
  }
90
87
 
91
88
  /**
@@ -153,17 +150,9 @@ export class GLView extends React.Component<GLViewProps> {
153
150
  }
154
151
  }
155
152
 
156
- // @docsMissing
157
- async startARSessionAsync(): Promise<any> {
158
- if (!ExponentGLViewManager.startARSessionAsync) {
159
- throw new UnavailabilityError('expo-gl', 'startARSessionAsync');
160
- }
161
- return await ExponentGLViewManager.startARSessionAsync(findNodeHandle(this.nativeRef));
162
- }
163
-
164
153
  // @docsMissing
165
154
  async createCameraTextureAsync(cameraRefOrHandle: ComponentOrHandle): Promise<WebGLTexture> {
166
- if (!ExponentGLObjectManager.createCameraTextureAsync) {
155
+ if (!GLNativeModule.createCameraTextureAsync) {
167
156
  throw new UnavailabilityError('expo-gl', 'createCameraTextureAsync');
168
157
  }
169
158
 
@@ -174,19 +163,16 @@ export class GLView extends React.Component<GLViewProps> {
174
163
  }
175
164
 
176
165
  const cameraTag = findNodeHandle(cameraRefOrHandle);
177
- const { exglObjId } = await ExponentGLObjectManager.createCameraTextureAsync(
178
- exglCtxId,
179
- cameraTag
180
- );
166
+ const { exglObjId } = await GLNativeModule.createCameraTextureAsync(exglCtxId, cameraTag);
181
167
  return { id: exglObjId } as WebGLTexture;
182
168
  }
183
169
 
184
170
  // @docsMissing
185
171
  async destroyObjectAsync(glObject: WebGLObject): Promise<boolean> {
186
- if (!ExponentGLObjectManager.destroyObjectAsync) {
172
+ if (!GLNativeModule.destroyObjectAsync) {
187
173
  throw new UnavailabilityError('expo-gl', 'destroyObjectAsync');
188
174
  }
189
- return await ExponentGLObjectManager.destroyObjectAsync(glObject.id);
175
+ return await GLNativeModule.destroyObjectAsync(glObject.id);
190
176
  }
191
177
 
192
178
  /**
@@ -1,17 +0,0 @@
1
- package expo.modules.gl
2
-
3
- import expo.modules.kotlin.modules.Module
4
- import expo.modules.kotlin.modules.ModuleDefinition
5
-
6
- class GLViewModule : Module() {
7
- override fun definition() = ModuleDefinition {
8
- Name("ExponentGLView")
9
-
10
- View(GLView::class) {
11
- Events("onSurfaceCreate")
12
- Prop("enableExperimentalWorkletSupport") { view: GLView, enableExperimentalWorkletSupport: Boolean? ->
13
- view.enableExperimentalWorkletSupport = enableExperimentalWorkletSupport ?: false
14
- }
15
- }
16
- }
17
- }
@@ -1,20 +0,0 @@
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(GLView.self) {
10
- Events("onSurfaceCreate")
11
-
12
- Prop("msaaSamples") { (view, msaaSamples: Int) in
13
- view.msaaSamples = msaaSamples
14
- }
15
- Prop("enableExperimentalWorkletSupport") { (view, enableExperimentalWorkletSupport: Bool) in
16
- view.enableExperimentalWorkletSupport = enableExperimentalWorkletSupport
17
- }
18
- }
19
- }
20
- }
@@ -1 +0,0 @@
1
- 9320c91f795454db182a73ea736fbe26dfdebd04
@@ -1 +0,0 @@
1
- e8892c6837d1eb5093b2c3b063883d7511799b0e246940c5b70f1515cb4451cd
@@ -1 +0,0 @@
1
- 1cab724074b050f7459a884ac9e98fbf2d009d8239810ca6384c5113f52dd33e5ac40a72ec7174b297e1b10521e56682d73f533715316be5be66ce0e482356d8
@@ -1 +0,0 @@
1
- deabe400ff5b72247c57f082599a72f70cc4695f
@@ -1 +0,0 @@
1
- 8186fb60e412173d54765cf18008aae25e6463fd459bf6b3f992a60d13b535a8
@@ -1 +0,0 @@
1
- ef9e2bc8440d401eaa7e5f2050b895e0567c88cf481d0dbf7f5c89a55ed9398697791a2571605b4bc7dfa338059ed7cb9939857f851cb6c25a810faa64e2cee4
@@ -1,87 +0,0 @@
1
- {
2
- "formatVersion": "1.1",
3
- "component": {
4
- "group": "host.exp.exponent",
5
- "module": "expo.modules.gl",
6
- "version": "16.0.9",
7
- "attributes": {
8
- "org.gradle.status": "release"
9
- }
10
- },
11
- "createdBy": {
12
- "gradle": {
13
- "version": "8.14.3"
14
- }
15
- },
16
- "variants": [
17
- {
18
- "name": "releaseVariantReleaseApiPublication",
19
- "attributes": {
20
- "org.gradle.category": "library",
21
- "org.gradle.dependency.bundling": "external",
22
- "org.gradle.libraryelements": "aar",
23
- "org.gradle.usage": "java-api"
24
- },
25
- "files": [
26
- {
27
- "name": "expo.modules.gl-16.0.9.aar",
28
- "url": "expo.modules.gl-16.0.9.aar",
29
- "size": 983793,
30
- "sha512": "ef9e2bc8440d401eaa7e5f2050b895e0567c88cf481d0dbf7f5c89a55ed9398697791a2571605b4bc7dfa338059ed7cb9939857f851cb6c25a810faa64e2cee4",
31
- "sha256": "8186fb60e412173d54765cf18008aae25e6463fd459bf6b3f992a60d13b535a8",
32
- "sha1": "deabe400ff5b72247c57f082599a72f70cc4695f",
33
- "md5": "1abb98e8610bb2a7f4cb1d021734c3df"
34
- }
35
- ]
36
- },
37
- {
38
- "name": "releaseVariantReleaseRuntimePublication",
39
- "attributes": {
40
- "org.gradle.category": "library",
41
- "org.gradle.dependency.bundling": "external",
42
- "org.gradle.libraryelements": "aar",
43
- "org.gradle.usage": "java-runtime"
44
- },
45
- "dependencies": [
46
- {
47
- "group": "org.jetbrains.kotlin",
48
- "module": "kotlin-stdlib-jdk7",
49
- "version": {
50
- "requires": "2.1.20"
51
- }
52
- }
53
- ],
54
- "files": [
55
- {
56
- "name": "expo.modules.gl-16.0.9.aar",
57
- "url": "expo.modules.gl-16.0.9.aar",
58
- "size": 983793,
59
- "sha512": "ef9e2bc8440d401eaa7e5f2050b895e0567c88cf481d0dbf7f5c89a55ed9398697791a2571605b4bc7dfa338059ed7cb9939857f851cb6c25a810faa64e2cee4",
60
- "sha256": "8186fb60e412173d54765cf18008aae25e6463fd459bf6b3f992a60d13b535a8",
61
- "sha1": "deabe400ff5b72247c57f082599a72f70cc4695f",
62
- "md5": "1abb98e8610bb2a7f4cb1d021734c3df"
63
- }
64
- ]
65
- },
66
- {
67
- "name": "releaseVariantReleaseSourcePublication",
68
- "attributes": {
69
- "org.gradle.category": "documentation",
70
- "org.gradle.dependency.bundling": "external",
71
- "org.gradle.docstype": "sources",
72
- "org.gradle.usage": "java-runtime"
73
- },
74
- "files": [
75
- {
76
- "name": "expo.modules.gl-16.0.9-sources.jar",
77
- "url": "expo.modules.gl-16.0.9-sources.jar",
78
- "size": 12381,
79
- "sha512": "1cab724074b050f7459a884ac9e98fbf2d009d8239810ca6384c5113f52dd33e5ac40a72ec7174b297e1b10521e56682d73f533715316be5be66ce0e482356d8",
80
- "sha256": "e8892c6837d1eb5093b2c3b063883d7511799b0e246940c5b70f1515cb4451cd",
81
- "sha1": "9320c91f795454db182a73ea736fbe26dfdebd04",
82
- "md5": "06e25696d702c60602274564533d18bc"
83
- }
84
- ]
85
- }
86
- ]
87
- }
@@ -1 +0,0 @@
1
- a5bc89efdeade18be47933a32a50515acf86253c
@@ -1 +0,0 @@
1
- ff1a7de26e559d44cbadc9b58889a4cf3d4e81be8992cacf02fe9632ebf7c6e2
@@ -1 +0,0 @@
1
- a6fd85d62d58dde758c649e991ebac36bd501bbbdda551d16b0e93567ee98ccd7196a68daef8db320ffcee5fc8fd485428bc5b5835a9d11323d46c4835c7bdd4
@@ -1 +0,0 @@
1
- d752d256bfe116a2ed0e4b45948c0b80c9a562fa
@@ -1 +0,0 @@
1
- cc5421f7ad9fc42605ccdcf90141bd11270eaabf270432723bbac19f6f09a17a
@@ -1 +0,0 @@
1
- d42f95c845d5ab14b8213c69d7cb9beae2b6d45eb9ec889622b2dab754ff1a14769a09d5b215dce506d43d562cc207253c909a372a29d862f2e07920a05b0b0a