Skip to content

Commit 8a8c4d8

Browse files
committed
Improve gl.getParameter
1 parent 0300c65 commit 8a8c4d8

File tree

5 files changed

+117
-22
lines changed

5 files changed

+117
-22
lines changed

js/webgl.js

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,12 +288,103 @@ if (!gl.__isInited) {
288288

289289
// Misc OpenGL Functions
290290

291+
// https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getParameter
292+
// https://registry.khronos.org/OpenGL-Refpages/gl4/html/glGet.xhtml
291293
const _getParameter = gl.getParameter;
292294
gl.getParameter = (pname) => {
293295
if (pname === gl.VERSION) {
294296
return gl._versionString;
295297
}
296-
return _getParameter(pname);
298+
299+
// null
300+
// FIXME: Do these have OpenGL-based values?
301+
if (
302+
pname === gl.COPY_READ_BUFFER_BINDING ||
303+
pname === gl.COPY_WRITE_BUFFER_BINDING
304+
) {
305+
return null;
306+
}
307+
308+
const result = _getParameter(pname);
309+
310+
// Float32Array
311+
if (
312+
pname === gl.ALIASED_LINE_WIDTH_RANGE ||
313+
pname === gl.ALIASED_POINT_SIZE_RANGE ||
314+
pname === gl.BLEND_COLOR ||
315+
pname === gl.COLOR_CLEAR_VALUE ||
316+
pname === gl.DEPTH_RANGE
317+
) {
318+
return wrapF32(result);
319+
}
320+
321+
// Uint32Array
322+
if (pname === gl.COMPRESSED_TEXTURE_FORMATS) {
323+
return wrapUi32(result);
324+
}
325+
326+
// Int32Array
327+
if (pname === gl.MAX_VIEWPORT_DIMS || pname === gl.SCISSOR_BOX || pname === gl.VIEWPORT) {
328+
return wrapI32(result);
329+
}
330+
331+
// WebGLFramebuffer
332+
if (
333+
pname === gl.FRAMEBUFFER_BINDING ||
334+
pname === gl.DRAW_FRAMEBUFFER_BINDING ||
335+
pname === gl.READ_FRAMEBUFFER_BINDING
336+
) {
337+
return result ? new gl.WebGLFramebuffer(result) : null;
338+
}
339+
340+
// WebGLRenderbuffer
341+
if (pname === gl.RENDERBUFFER_BINDING) {
342+
return result ? new gl.WebGLRenderbuffer(result) : null;
343+
}
344+
345+
// WebGLSampler
346+
if (pname === gl.SAMPLER_BINDING) {
347+
return result ? new gl.WebGLSampler(result) : null;
348+
}
349+
350+
// WebGLTransformFeedback
351+
if (pname === gl.TRANSFORM_FEEDBACK_BINDING) {
352+
return result ? new gl.WebGLTransformFeedback(result) : null;
353+
}
354+
355+
// WebGLVertexArrayObject
356+
if (pname === gl.VERTEX_ARRAY_BINDING) {
357+
return result ? new gl.WebGLVertexArrayObject(result) : null;
358+
}
359+
360+
// WebGLProgram
361+
if (pname === gl.CURRENT_PROGRAM) {
362+
return result ? new gl.WebGLProgram(result) : null;
363+
}
364+
365+
// WebGLBuffer
366+
if (
367+
pname === gl.ARRAY_BUFFER_BINDING ||
368+
pname === gl.ELEMENT_ARRAY_BUFFER_BINDING ||
369+
pname === gl.PIXEL_PACK_BUFFER_BINDING ||
370+
pname === gl.PIXEL_UNPACK_BUFFER_BINDING ||
371+
pname === gl.TRANSFORM_FEEDBACK_BUFFER_BINDING ||
372+
pname === gl.UNIFORM_BUFFER_BINDING
373+
) {
374+
return result ? new gl.WebGLBuffer(result) : null;
375+
}
376+
377+
// WebGLTexture
378+
if (
379+
pname === gl.TEXTURE_BINDING_2D ||
380+
pname === gl.TEXTURE_BINDING_CUBE_MAP ||
381+
pname === gl.TEXTURE_BINDING_2D_ARRAY ||
382+
pname === gl.TEXTURE_BINDING_3D
383+
) {
384+
return result ? new gl.WebGLTexture(result) : null;
385+
}
386+
387+
return result;
297388
};
298389

299390

package-lock.json

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"author": "Luis Blanco <luisblanco1337@gmail.com>",
33
"name": "webgl-raub",
4-
"version": "5.2.0",
4+
"version": "5.3.0",
55
"description": "WebGL for Node.js",
66
"license": "MIT",
77
"main": "index.js",

src/cpp/buffers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ DBG_EXPORT JS_METHOD(bufferData) { NAPI_ENV;
9494
DBG_EXPORT JS_METHOD(bufferSubData) { NAPI_ENV;
9595
REQ_INT32_ARG(0, target);
9696
REQ_INT32_ARG(1, offset);
97-
REQ_TYPED_ARRAY_ARG(2, arr);
97+
REQ_OBJ_ARG(2, arr);
9898

9999
GLsizei count = 0;
100100
void* data = getArrayData(env, arr, &count);

src/cpp/webgl.cpp

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ DBG_EXPORT JS_METHOD(getParameter) { NAPI_ENV;
161161
const char *cParams;
162162
GLint iParams[4];
163163
GLfloat fParams[4];
164-
Napi::Array arr = JS_ARRAY;
165164
int32_t boundFeedback;
166165

167166
switch(name) {
@@ -182,42 +181,47 @@ DBG_EXPORT JS_METHOD(getParameter) { NAPI_ENV;
182181
RET_WEBGL_VOID;
183182
}
184183

185-
CASES_PARAM_INT2
184+
CASES_PARAM_INT2 {
185+
Napi::Array arr = JS_ARRAY;
186186
glGetIntegerv(name, iParams);
187187
arr.Set(0U, JS_NUM(iParams[0]));
188188
arr.Set(1U, JS_NUM(iParams[1]));
189189
RET_VALUE(arr);
190-
191-
CASES_PARAM_INT4
190+
}
191+
CASES_PARAM_INT4 {
192+
Napi::Array arr = JS_ARRAY;
192193
glGetIntegerv(name, iParams);
193194
arr.Set(0U, JS_NUM(iParams[0]));
194195
arr.Set(1U, JS_NUM(iParams[1]));
195196
arr.Set(2U, JS_NUM(iParams[2]));
196197
arr.Set(3U, JS_NUM(iParams[3]));
197198
RET_VALUE(arr);
198-
199-
CASES_PARAM_FLOAT2
199+
}
200+
CASES_PARAM_FLOAT2 {
201+
Napi::Array arr = JS_ARRAY;
200202
glGetFloatv(name, fParams);
201203
arr.Set(0U, JS_NUM(fParams[0]));
202204
arr.Set(1U, JS_NUM(fParams[1]));
203205
RET_VALUE(arr);
204-
205-
CASES_PARAM_FLOAT4
206+
}
207+
CASES_PARAM_FLOAT4 {
208+
Napi::Array arr = JS_ARRAY;
206209
glGetFloatv(name, fParams);
207210
arr.Set(0U, JS_NUM(fParams[0]));
208211
arr.Set(1U, JS_NUM(fParams[1]));
209212
arr.Set(2U, JS_NUM(fParams[2]));
210213
arr.Set(3U, JS_NUM(fParams[3]));
211214
RET_VALUE(arr);
212-
213-
CASES_PARAM_BOOL4
215+
}
216+
CASES_PARAM_BOOL4 {
217+
Napi::Array arr = JS_ARRAY;
214218
glGetBooleanv(name, bParams);
215219
arr.Set(0U, JS_BOOL(bParams[0] != 0));
216220
arr.Set(1U, JS_BOOL(bParams[1] != 0));
217221
arr.Set(2U, JS_BOOL(bParams[2] != 0));
218222
arr.Set(3U, JS_BOOL(bParams[3] != 0));
219223
RET_VALUE(arr);
220-
224+
}
221225
CASES_PARAM_INT
222226
glGetIntegerv(name, iParams);
223227
RET_NUM(iParams[0]);

0 commit comments

Comments
 (0)