xref: /expo/packages/expo-gl/ios/EXGLContext.h (revision 58fb4e57)
1 // Copyright 2016-present 650 Industries. All rights reserved.
2 
3 #import <OpenGLES/EAGL.h>
4 #import <ExpoGL/EXGLNativeApi.h>
5 #import <ExpoModulesCore/EXModuleRegistry.h>
6 
7 @class EXGLContext;
8 
9 @protocol EXGLContextDelegate <NSObject>
10 
11 - (void)glContextFlushed:(nonnull EXGLContext *)context;
12 - (void)glContextInitialized:(nonnull EXGLContext *)context;
13 - (void)glContextWillDestroy:(nonnull EXGLContext *)context;
14 - (EXGLObjectId)glContextGetDefaultFramebuffer;
15 
16 @end
17 
18 @interface EXGLContext : NSObject
19 
20 - (nullable instancetype)initWithDelegate:(nullable id<EXGLContextDelegate>)delegate
21                         andModuleRegistry:(nonnull EXModuleRegistry *)moduleRegistry;
22 - (void)initialize;
23 - (void)prepare:(nullable void(^)(BOOL))callback andEnableExperimentalWorkletSupport:(BOOL)enableExperimentalWorkletSupport;
24 - (BOOL)isInitialized;
25 - (nullable EAGLContext *)createSharedEAGLContext;
26 - (void)runAsync:(nonnull void(^)(void))callback;
27 - (void)runInEAGLContext:(nonnull EAGLContext*)context callback:(nonnull void(^)(void))callback;
28 - (void)takeSnapshotWithOptions:(nonnull NSDictionary *)options resolve:(nonnull EXPromiseResolveBlock)resolve reject:(nonnull EXPromiseRejectBlock)reject;
29 - (void)destroy;
30 
31 // "protected"
32 @property (nonatomic, assign) EXGLContextId contextId;
33 @property (nonatomic, strong, nonnull) EAGLContext *eaglCtx;
34 @property (nonatomic, weak, nullable) id <EXGLContextDelegate> delegate;
35 
36 @end
37