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