Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/src/lib/libglew.js
4150 views
1
/**
2
* @license
3
* Copyright 2014 The Emscripten Authors
4
* SPDX-License-Identifier: MIT
5
*/
6
7
/*
8
* EMSCRIPTEN GLEW 1.10.0 emulation
9
*
10
* What it does:
11
* - Stubs init function.
12
* - GL Extensions support.
13
*
14
* Optional:
15
* - isLinaroFork variable to enable glew-es specific error strings.
16
* This is enabled by default, but should be disabled when upstream glew conflicts.
17
*
18
* Authors:
19
* - Jari Vetoniemi <[email protected]>
20
*/
21
22
var LibraryGLEW = {
23
$GLEW__deps: ['glGetString', '$stringToNewUTF8', '$UTF8ToString', '$webglGetExtensions'],
24
$GLEW: {
25
isLinaroFork: 1,
26
extensions: null,
27
28
error: {
29
0:null, // GLEW_OK || GLEW_NO_ERROR
30
1:null, // GLEW_ERROR_NO_GL_VERSION
31
2:null, // GLEW_ERROR_GL_VERSION_10_ONLY
32
3:null, // GLEW_ERROR_GLX_VERSION_11_ONLY
33
34
4:null, // GLEW_ERROR_NOT_GLES_VERSION
35
5:null, // GLEW_ERROR_GLES_VERSION
36
6:null, // GLEW_ERROR_NO_EGL_VERSION
37
7:null, // GLEW_ERROR_EGL_VERSION_10_ONLY
38
39
8:null, // Unknown error
40
},
41
42
version: {
43
1:null, // GLEW_VERSION
44
2:null, // GLEW_VERSION_MAJOR
45
3:null, // GLEW_VERSION_MINOR
46
4:null, // GLEW_VERSION_MICRO
47
},
48
49
errorStringConstantFromCode(error) {
50
if (GLEW.isLinaroFork) {
51
switch (error) {
52
case 4:return "OpenGL ES lib expected, found OpenGL lib"; // GLEW_ERROR_NOT_GLES_VERSION
53
case 5:return "OpenGL lib expected, found OpenGL ES lib"; // GLEW_ERROR_GLES_VERSION
54
case 6:return "Missing EGL version"; // GLEW_ERROR_NO_EGL_VERSION
55
case 7:return "EGL 1.1 and up are supported"; // GLEW_ERROR_EGL_VERSION_10_ONLY
56
default:break;
57
}
58
}
59
60
switch (error) {
61
case 0:return "No error"; // GLEW_OK || GLEW_NO_ERROR
62
case 1:return "Missing GL version"; // GLEW_ERROR_NO_GL_VERSION
63
case 2:return "GL 1.1 and up are supported"; // GLEW_ERROR_GL_VERSION_10_ONLY
64
case 3:return "GLX 1.2 and up are supported"; // GLEW_ERROR_GLX_VERSION_11_ONLY
65
default:return null;
66
}
67
},
68
69
errorString(error) {
70
if (!GLEW.error[error]) {
71
var string = GLEW.errorStringConstantFromCode(error);
72
if (!string) {
73
string = "Unknown error";
74
error = 8; // prevent array from growing more than this
75
}
76
GLEW.error[error] = stringToNewUTF8(string);
77
}
78
return GLEW.error[error];
79
},
80
81
versionStringConstantFromCode(name) {
82
switch (name) {
83
case 1:return "1.10.0"; // GLEW_VERSION
84
case 2:return "1"; // GLEW_VERSION_MAJOR
85
case 3:return "10"; // GLEW_VERSION_MINOR
86
case 4:return "0"; // GLEW_VERSION_MICRO
87
default:return null;
88
}
89
},
90
91
versionString(name) {
92
if (!GLEW.version[name]) {
93
var string = GLEW.versionStringConstantFromCode(name);
94
if (!string)
95
return 0;
96
GLEW.version[name] = stringToNewUTF8(string);
97
}
98
return GLEW.version[name];
99
},
100
101
extensionIsSupported(name) {
102
GLEW.extensions ||= webglGetExtensions();
103
104
if (GLEW.extensions.includes(name))
105
return 1;
106
107
// extensions from GLEmulations do not come unprefixed
108
// so, try with prefix
109
return (GLEW.extensions.includes("GL_" + name));
110
},
111
},
112
113
glewInit: () => 0,
114
115
glewIsSupported: (name) => {
116
var exts = UTF8ToString(name).split(' ');
117
for (var ext of exts) {
118
if (!GLEW.extensionIsSupported(ext)) return 0;
119
}
120
return 1;
121
},
122
123
glewGetExtension: (name) => GLEW.extensionIsSupported(UTF8ToString(name)),
124
125
glewGetErrorString: (error) => GLEW.errorString(error),
126
127
glewGetString: (name) => GLEW.versionString(name),
128
129
};
130
131
autoAddDeps(LibraryGLEW, '$GLEW');
132
addToLibrary(LibraryGLEW);
133
134