1 #include "EXGLNativeApi.h"
2 #include "EXGLContextManager.h"
3 #include "EXGLNativeContext.h"
4 
5 using namespace expo::gl_cpp;
6 
EXGLContextCreate()7 EXGLContextId EXGLContextCreate() {
8   return ContextCreate();
9 }
10 
EXGLContextPrepare(void * jsiPtr,EXGLContextId exglCtxId,std::function<void (void)> flushMethod)11 void EXGLContextPrepare(
12     void *jsiPtr,
13     EXGLContextId exglCtxId,
14     std::function<void(void)> flushMethod) {
15   auto [exglCtx, lock] = ContextGet(exglCtxId);
16   if (exglCtx) {
17     exglCtx->prepareContext(*reinterpret_cast<jsi::Runtime *>(jsiPtr), flushMethod);
18   }
19 }
20 
EXGLContextPrepareWorklet(EXGLContextId exglCtxId)21 void EXGLContextPrepareWorklet(EXGLContextId exglCtxId) {
22   auto [exglCtx, lock] = ContextGet(exglCtxId);
23   if (exglCtx) {
24     exglCtx->prepareWorkletContext();
25   }
26 }
27 
EXGLContextNeedsRedraw(EXGLContextId exglCtxId)28 bool EXGLContextNeedsRedraw(EXGLContextId exglCtxId) {
29   auto [exglCtx, lock] = ContextGet(exglCtxId);
30   if (exglCtx) {
31     return exglCtx->needsRedraw;
32   }
33   return false;
34 }
35 
EXGLContextDrawEnded(EXGLContextId exglCtxId)36 void EXGLContextDrawEnded(EXGLContextId exglCtxId) {
37   auto [exglCtx, lock] = ContextGet(exglCtxId);
38   if (exglCtx) {
39     exglCtx->needsRedraw = false;
40   }
41 }
42 
EXGLContextDestroy(EXGLContextId exglCtxId)43 void EXGLContextDestroy(EXGLContextId exglCtxId) {
44   ContextDestroy(exglCtxId);
45 }
46 
EXGLContextFlush(EXGLContextId exglCtxId)47 void EXGLContextFlush(EXGLContextId exglCtxId) {
48   auto [exglCtx, lock] = ContextGet(exglCtxId);
49   if (exglCtx) {
50     exglCtx->flush();
51   }
52 }
53 
EXGLContextSetDefaultFramebuffer(EXGLContextId exglCtxId,GLint framebuffer)54 void EXGLContextSetDefaultFramebuffer(EXGLContextId exglCtxId, GLint framebuffer) {
55   auto [exglCtx, lock] = ContextGet(exglCtxId);
56   if (exglCtx) {
57     exglCtx->defaultFramebuffer = framebuffer;
58   }
59 }
60 
EXGLContextCreateObject(EXGLContextId exglCtxId)61 EXGLObjectId EXGLContextCreateObject(EXGLContextId exglCtxId) {
62   auto [exglCtx, lock] = ContextGet(exglCtxId);
63   if (exglCtx) {
64     return exglCtx->createObject();
65   }
66   return 0;
67 }
68 
EXGLContextDestroyObject(EXGLContextId exglCtxId,EXGLObjectId exglObjId)69 void EXGLContextDestroyObject(EXGLContextId exglCtxId, EXGLObjectId exglObjId) {
70   auto [exglCtx, lock] = ContextGet(exglCtxId);
71   if (exglCtx) {
72     exglCtx->destroyObject(exglObjId);
73   }
74 }
75 
EXGLContextMapObject(EXGLContextId exglCtxId,EXGLObjectId exglObjId,GLuint glObj)76 void EXGLContextMapObject(EXGLContextId exglCtxId, EXGLObjectId exglObjId, GLuint glObj) {
77   auto [exglCtx, lock] = ContextGet(exglCtxId);
78   if (exglCtx) {
79     exglCtx->mapObject(exglObjId, glObj);
80   }
81 }
82 
EXGLContextGetObject(EXGLContextId exglCtxId,EXGLObjectId exglObjId)83 GLuint EXGLContextGetObject(EXGLContextId exglCtxId, EXGLObjectId exglObjId) {
84   auto [exglCtx, lock] = ContextGet(exglCtxId);
85   if (exglCtx) {
86     return exglCtx->lookupObject(exglObjId);
87   }
88   return 0;
89 }
90