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