Skip to content

Commit 2f01a8a

Browse files
committed
fix(JNI):fix crash in windows and macos again
1 parent 6f3038a commit 2f01a8a

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

native/src/gles2_shim.c

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <windows.h>
33
#include <GL/gl.h>
44
#include <stddef.h>
5+
#include <stdio.h>
56

67
typedef float GLfloat;
78
typedef signed char GLbyte;
@@ -98,12 +99,29 @@ void init_gles2_shim() {
9899
static int initialized = 0;
99100
if (initialized) return;
100101
HMODULE hLib = GetModuleHandleA("opengl32.dll");
101-
GET_PROC(glGenFramebuffers, PFNGLGENFRAMEBUFFERSPROC);
102-
GET_PROC(glBindFramebuffer, PFNGLBINDFRAMEBUFFERPROC);
103-
GET_PROC(glFramebufferTexture2D, PFNGLFRAMEBUFFERTEXTURE2DPROC);
104-
GET_PROC(glDeleteFramebuffers, PFNGLDELETEFRAMEBUFFERSPROC);
105-
GET_PROC(glCheckFramebufferStatus, PFNGLCHECKFRAMEBUFFERSTATUSPROC);
106-
GET_PROC(glActiveTexture, PFNGLACTIVETEXTUREPROC);
102+
if (!hLib) {
103+
fprintf(stderr, "Failed to get handle for opengl32.dll\n");
104+
return;
105+
}
106+
107+
#undef GET_PROC
108+
#define GET_PROC(name, type) \
109+
name = (type)wglGetProcAddress(#name); \
110+
if (!name) name = (type)GetProcAddress(hLib, #name); \
111+
if (!name) fprintf(stderr, "Failed to load function: %s\n", #name);
112+
113+
#define GET_PROC_EXT(name, type, ext) \
114+
name = (type)wglGetProcAddress(#name); \
115+
if (!name) name = (type)wglGetProcAddress(#name #ext); \
116+
if (!name) name = (type)GetProcAddress(hLib, #name); \
117+
if (!name) fprintf(stderr, "Failed to load function: %s (and %s)\n", #name, #name #ext);
118+
119+
GET_PROC_EXT(glGenFramebuffers, PFNGLGENFRAMEBUFFERSPROC, EXT);
120+
GET_PROC_EXT(glBindFramebuffer, PFNGLBINDFRAMEBUFFERPROC, EXT);
121+
GET_PROC_EXT(glFramebufferTexture2D, PFNGLFRAMEBUFFERTEXTURE2DPROC, EXT);
122+
GET_PROC_EXT(glDeleteFramebuffers, PFNGLDELETEFRAMEBUFFERSPROC, EXT);
123+
GET_PROC_EXT(glCheckFramebufferStatus, PFNGLCHECKFRAMEBUFFERSTATUSPROC, EXT);
124+
GET_PROC_EXT(glActiveTexture, PFNGLACTIVETEXTUREPROC, ARB);
107125
GET_PROC(glBlendFuncSeparate, PFNGLBLENDFUNCSEPARATEPROC);
108126
GET_PROC(glCreateShader, PFNGLCREATESHADERPROC);
109127
GET_PROC(glShaderSource, PFNGLSHADERSOURCEPROC);
@@ -130,6 +148,6 @@ void init_gles2_shim() {
130148
GET_PROC(glGetVertexAttribiv, PFNGLGETVERTEXATTRIBIVPROC);
131149
GET_PROC(glValidateProgram, PFNGLVALIDATEPROGRAMPROC);
132150
GET_PROC(glBindBuffer, PFNGLBINDBUFFERPROC);
151+
133152
initialized = 1;
134-
}
135-
#endif
153+
}

0 commit comments

Comments
 (0)