1 #pragma once
2 
3 #include <jsi/jsi.h>
4 #include <unordered_map>
5 #include "EXGLNativeApi.h"
6 
7 namespace expo {
8 namespace gl_cpp {
9 
10 struct glesContext {
11   int32_t viewportWidth;
12   int32_t viewportHeight;
13 };
14 
15 namespace jsi = facebook::jsi;
16 
17 class EXGLContext;
18 
19 enum class EXWebGLClass {
20   WebGLRenderingContext,
21   WebGL2RenderingContext,
22   WebGLObject,
23   WebGLBuffer,
24   WebGLFramebuffer,
25   WebGLProgram,
26   WebGLRenderbuffer,
27   WebGLShader,
28   WebGLTexture,
29   WebGLUniformLocation,
30   WebGLActiveInfo,
31   WebGLShaderPrecisionFormat,
32   WebGLQuery,
33   WebGLSampler,
34   WebGLSync,
35   WebGLTransformFeedback,
36   WebGLVertexArrayObject,
37 };
38 
39 void ensurePrototypes(jsi::Runtime &runtime);
40 void createWebGLRenderer(jsi::Runtime &runtime, EXGLContext *, glesContext, jsi::Object&& global);
41 jsi::Value createWebGLObject(
42     jsi::Runtime &runtime,
43     EXWebGLClass webglClass,
44     std::initializer_list<jsi::Value> &&args);
45 std::string getConstructorName(EXWebGLClass value);
46 
47 } // namespace gl_cpp
48 } // namespace expo
49