Skip to content

Commit 17ba4e7

Browse files
committed
Fix tests
1 parent e083085 commit 17ba4e7

File tree

7 files changed

+102
-288
lines changed

7 files changed

+102
-288
lines changed

src/cpp/bindings.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ static inline void initMethods(Napi::Env env, Napi::Object exports) {
191191
JS_GL_SET_METHOD(compressedTexImage2D);
192192
JS_GL_SET_METHOD(compressedTexImage3D);
193193
JS_GL_SET_METHOD(compressedTexSubImage3D);
194+
JS_GL_SET_METHOD(copyTexSubImage3D);
195+
JS_GL_SET_METHOD(texStorage3D);
196+
JS_GL_SET_METHOD(texSubImage3D);
194197

195198
// Uniform
196199
JS_GL_SET_METHOD(getActiveUniform);

src/cpp/textures.cpp

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,59 @@ DBG_EXPORT JS_METHOD(compressedTexSubImage3D) { NAPI_ENV;
406406
RET_UNDEFINED;
407407
}
408408

409-
// glCopyTexSubImage3D?
410-
// glTexStorage3D?
411-
// glTexSubImage3D?
409+
DBG_EXPORT JS_METHOD(copyTexSubImage3D) { NAPI_ENV;
410+
REQ_INT32_ARG(0, target);
411+
REQ_INT32_ARG(1, level);
412+
REQ_INT32_ARG(2, xoffset);
413+
REQ_INT32_ARG(3, yoffset);
414+
REQ_INT32_ARG(4, zoffset);
415+
REQ_INT32_ARG(5, x);
416+
REQ_INT32_ARG(6, y);
417+
REQ_INT32_ARG(7, width);
418+
REQ_INT32_ARG(8, height);
419+
420+
glCopyTexSubImage3D(
421+
target, level, xoffset, yoffset, zoffset, x, y, width, height
422+
);
423+
424+
RET_UNDEFINED;
425+
}
426+
427+
DBG_EXPORT JS_METHOD(texStorage3D) { NAPI_ENV;
428+
REQ_INT32_ARG(0, target);
429+
REQ_INT32_ARG(1, level);
430+
REQ_INT32_ARG(2, internalformat);
431+
REQ_INT32_ARG(3, width);
432+
REQ_INT32_ARG(4, height);
433+
REQ_INT32_ARG(5, depth);
434+
435+
glTexStorage3D(
436+
target, level, internalformat, width, height, depth
437+
);
438+
439+
RET_UNDEFINED;
440+
}
441+
442+
DBG_EXPORT JS_METHOD(texSubImage3D) { NAPI_ENV;
443+
REQ_INT32_ARG(0, target);
444+
REQ_INT32_ARG(1, level);
445+
REQ_INT32_ARG(2, xoffset);
446+
REQ_INT32_ARG(3, yoffset);
447+
REQ_INT32_ARG(4, zoffset);
448+
REQ_INT32_ARG(5, width);
449+
REQ_INT32_ARG(6, height);
450+
REQ_INT32_ARG(7, depth);
451+
REQ_INT32_ARG(8, format);
452+
REQ_INT32_ARG(9, type);
453+
REQ_OBJ_ARG(10, image);
454+
455+
void *pixels = getData(env, image);
456+
457+
glTexSubImage3D(
458+
target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels
459+
);
460+
461+
RET_UNDEFINED;
462+
}
412463

413464
} // namespace webgl

src/cpp/webgl.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,9 @@ namespace webgl {
139139
DBG_EXPORT JS_METHOD(compressedTexImage2D);
140140
DBG_EXPORT JS_METHOD(compressedTexImage3D);
141141
DBG_EXPORT JS_METHOD(compressedTexSubImage3D);
142+
DBG_EXPORT JS_METHOD(copyTexSubImage3D);
143+
DBG_EXPORT JS_METHOD(texStorage3D);
144+
DBG_EXPORT JS_METHOD(texSubImage3D);
142145

143146
// Uniform
144147
DBG_EXPORT JS_METHOD(getActiveUniform);

test/index.test.js

Lines changed: 4 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -6,132 +6,11 @@ const webgl = require('..');
66

77

88
const constants = [
9-
'DEPTH_BUFFER_BIT','STENCIL_BUFFER_BIT','COLOR_BUFFER_BIT','FALSE','TRUE',
10-
'POINTS','LINES','LINE_LOOP','LINE_STRIP','TRIANGLES','TRIANGLE_STRIP',
11-
'TRIANGLE_FAN','ZERO','ONE','SRC_COLOR','ONE_MINUS_SRC_COLOR','SRC_ALPHA',
12-
'ONE_MINUS_SRC_ALPHA','DST_ALPHA','ONE_MINUS_DST_ALPHA','DST_COLOR',
13-
'ONE_MINUS_DST_COLOR','SRC_ALPHA_SATURATE','FUNC_ADD','BLEND_EQUATION',
14-
'BLEND_EQUATION_RGB','BLEND_EQUATION_ALPHA','FUNC_SUBTRACT',
15-
'FUNC_REVERSE_SUBTRACT','BLEND_DST_RGB','BLEND_SRC_RGB','BLEND_DST_ALPHA',
16-
'BLEND_SRC_ALPHA','CONSTANT_COLOR','ONE_MINUS_CONSTANT_COLOR',
17-
'CONSTANT_ALPHA','ONE_MINUS_CONSTANT_ALPHA','BLEND_COLOR','ARRAY_BUFFER',
18-
'ELEMENT_ARRAY_BUFFER','ARRAY_BUFFER_BINDING','ELEMENT_ARRAY_BUFFER_BINDING',
19-
'STREAM_DRAW','STATIC_DRAW','DYNAMIC_DRAW','BUFFER_SIZE','BUFFER_USAGE',
20-
'CURRENT_VERTEX_ATTRIB','FRONT','BACK','FRONT_AND_BACK','TEXTURE_2D',
21-
'CULL_FACE','BLEND','DITHER','STENCIL_TEST','DEPTH_TEST','SCISSOR_TEST',
22-
'POLYGON_OFFSET_FILL','SAMPLE_ALPHA_TO_COVERAGE','SAMPLE_COVERAGE',
23-
'NO_ERROR','INVALID_ENUM','INVALID_VALUE','INVALID_OPERATION','OUT_OF_MEMORY',
24-
'CW','CCW','LINE_WIDTH','ALIASED_POINT_SIZE_RANGE','ALIASED_LINE_WIDTH_RANGE',
25-
'CULL_FACE_MODE','FRONT_FACE','DEPTH_RANGE','DEPTH_WRITEMASK',
26-
'DEPTH_CLEAR_VALUE','DEPTH_FUNC','STENCIL_CLEAR_VALUE','STENCIL_FUNC',
27-
'STENCIL_FAIL','STENCIL_PASS_DEPTH_FAIL','STENCIL_PASS_DEPTH_PASS','STENCIL_REF',
28-
'STENCIL_VALUE_MASK','STENCIL_WRITEMASK','STENCIL_BACK_FUNC','STENCIL_BACK_FAIL',
29-
'STENCIL_BACK_PASS_DEPTH_FAIL','STENCIL_BACK_PASS_DEPTH_PASS','STENCIL_BACK_REF',
30-
'STENCIL_BACK_VALUE_MASK','STENCIL_BACK_WRITEMASK','VIEWPORT','SCISSOR_BOX',
31-
'COLOR_CLEAR_VALUE','COLOR_WRITEMASK','UNPACK_ALIGNMENT','PACK_ALIGNMENT',
32-
'MAX_TEXTURE_SIZE','MAX_VIEWPORT_DIMS','SUBPIXEL_BITS','RED_BITS','GREEN_BITS',
33-
'BLUE_BITS','ALPHA_BITS','DEPTH_BITS','STENCIL_BITS','POLYGON_OFFSET_UNITS',
34-
'POLYGON_OFFSET_FACTOR','TEXTURE_BINDING_2D','SAMPLE_BUFFERS','SAMPLES',
35-
'SAMPLE_COVERAGE_VALUE','SAMPLE_COVERAGE_INVERT','NUM_COMPRESSED_TEXTURE_FORMATS',
36-
'COMPRESSED_TEXTURE_FORMATS','DONT_CARE','FASTEST','NICEST',
37-
'GENERATE_MIPMAP_HINT','BYTE','UNSIGNED_BYTE','SHORT','UNSIGNED_SHORT',
38-
'INT','UNSIGNED_INT','FLOAT','FIXED','DEPTH_COMPONENT','ALPHA','RGB','RGBA',
39-
'LUMINANCE','LUMINANCE_ALPHA','UNSIGNED_SHORT_4_4_4_4','UNSIGNED_SHORT_5_5_5_1',
40-
'UNSIGNED_SHORT_5_6_5','FRAGMENT_SHADER','VERTEX_SHADER','MAX_VERTEX_ATTRIBS',
41-
'MAX_VERTEX_UNIFORM_VECTORS','MAX_VARYING_VECTORS',
42-
'MAX_COMBINED_TEXTURE_IMAGE_UNITS','MAX_VERTEX_TEXTURE_IMAGE_UNITS',
43-
'MAX_TEXTURE_IMAGE_UNITS','MAX_FRAGMENT_UNIFORM_VECTORS','SHADER_TYPE',
44-
'DELETE_STATUS','LINK_STATUS','VALIDATE_STATUS','ATTACHED_SHADERS',
45-
'ACTIVE_UNIFORMS','ACTIVE_UNIFORM_MAX_LENGTH','ACTIVE_ATTRIBUTES',
46-
'ACTIVE_ATTRIBUTE_MAX_LENGTH','SHADING_LANGUAGE_VERSION','CURRENT_PROGRAM',
47-
'NEVER','LESS','EQUAL','LEQUAL','GREATER','NOTEQUAL','GEQUAL','ALWAYS',
48-
'KEEP','REPLACE','INCR','DECR','INVERT','INCR_WRAP','DECR_WRAP',
49-
'PROGRAM_POINT_SIZE','POINT_SPRITE','VENDOR','RENDERER','VERSION',
50-
'EXTENSIONS','NEAREST','LINEAR','NEAREST_MIPMAP_NEAREST','LINEAR_MIPMAP_NEAREST',
51-
'NEAREST_MIPMAP_LINEAR','LINEAR_MIPMAP_LINEAR','TEXTURE_MAG_FILTER',
52-
'TEXTURE_MIN_FILTER','TEXTURE_WRAP_S','TEXTURE_WRAP_T','TEXTURE',
53-
'TEXTURE_CUBE_MAP','TEXTURE_BINDING_CUBE_MAP','TEXTURE_CUBE_MAP_POSITIVE_X',
54-
'TEXTURE_CUBE_MAP_NEGATIVE_X','TEXTURE_CUBE_MAP_POSITIVE_Y',
55-
'TEXTURE_CUBE_MAP_NEGATIVE_Y','TEXTURE_CUBE_MAP_POSITIVE_Z',
56-
'TEXTURE_CUBE_MAP_NEGATIVE_Z','MAX_CUBE_MAP_TEXTURE_SIZE','TEXTURE0',
57-
'TEXTURE1','TEXTURE2','TEXTURE3','TEXTURE4','TEXTURE5','TEXTURE6',
58-
'TEXTURE7','TEXTURE8','TEXTURE9','TEXTURE10','TEXTURE11','TEXTURE12',
59-
'TEXTURE13','TEXTURE14','TEXTURE15','TEXTURE16','TEXTURE17','TEXTURE18',
60-
'TEXTURE19','TEXTURE20','TEXTURE21','TEXTURE22','TEXTURE23','TEXTURE24',
61-
'TEXTURE25','TEXTURE26','TEXTURE27','TEXTURE28','TEXTURE29','TEXTURE30',
62-
'TEXTURE31','ACTIVE_TEXTURE','CLAMP','CLAMP_TO_BORDER','CLAMP_TO_EDGE',
63-
'MIRRORED_REPEAT','REPEAT','FLOAT_VEC2','FLOAT_VEC3','FLOAT_VEC4','INT_VEC2',
64-
'INT_VEC3','INT_VEC4','BOOL','BOOL_VEC2','BOOL_VEC3','BOOL_VEC4','FLOAT_MAT2',
65-
'FLOAT_MAT3','FLOAT_MAT4','SAMPLER_2D','SAMPLER_CUBE',
66-
'VERTEX_ATTRIB_ARRAY_ENABLED','VERTEX_ATTRIB_ARRAY_SIZE',
67-
'VERTEX_ATTRIB_ARRAY_STRIDE','VERTEX_ATTRIB_ARRAY_TYPE',
68-
'VERTEX_ATTRIB_ARRAY_NORMALIZED','VERTEX_ATTRIB_ARRAY_POINTER',
69-
'VERTEX_ATTRIB_ARRAY_BUFFER_BINDING','IMPLEMENTATION_COLOR_READ_TYPE',
70-
'IMPLEMENTATION_COLOR_READ_FORMAT','COMPILE_STATUS','INFO_LOG_LENGTH',
71-
'SHADER_SOURCE_LENGTH','SHADER_COMPILER','SHADER_BINARY_FORMATS',
72-
'NUM_SHADER_BINARY_FORMATS','LOW_FLOAT','MEDIUM_FLOAT','HIGH_FLOAT',
73-
'LOW_INT','MEDIUM_INT','HIGH_INT','FRAMEBUFFER','RENDERBUFFER','RGBA4',
74-
'RGB5_A1','DEPTH_COMPONENT16','STENCIL_INDEX','STENCIL_INDEX8',
75-
'DEPTH_STENCIL','DEPTH24_STENCIL8','RENDERBUFFER_WIDTH',
76-
'RENDERBUFFER_HEIGHT','RENDERBUFFER_INTERNAL_FORMAT','RENDERBUFFER_RED_SIZE',
77-
'RENDERBUFFER_GREEN_SIZE','RENDERBUFFER_BLUE_SIZE','RENDERBUFFER_ALPHA_SIZE',
78-
'RENDERBUFFER_DEPTH_SIZE','RENDERBUFFER_STENCIL_SIZE',
79-
'FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE','FRAMEBUFFER_ATTACHMENT_OBJECT_NAME',
80-
'FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL',
81-
'FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE','COLOR_ATTACHMENT0',
82-
'DEPTH_ATTACHMENT','STENCIL_ATTACHMENT','DEPTH_STENCIL_ATTACHMENT',
83-
'NONE','FRAMEBUFFER_COMPLETE','FRAMEBUFFER_INCOMPLETE_ATTACHMENT',
84-
'FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT',
85-
'FRAMEBUFFER_UNSUPPORTED',
86-
'FRAMEBUFFER_BINDING','RENDERBUFFER_BINDING','MAX_RENDERBUFFER_SIZE',
87-
'INVALID_FRAMEBUFFER_OPERATION','UNPACK_FLIP_Y_WEBGL',
88-
'UNPACK_PREMULTIPLY_ALPHA_WEBGL','CONTEXT_LOST_WEBGL',
89-
'UNPACK_COLORSPACE_CONVERSION_WEBGL','BROWSER_DEFAULT_WEBGL',
90-
'PIXEL_PACK_BUFFER','PIXEL_UNPACK_BUFFER','PIXEL_PACK_BUFFER_BINDING',
91-
'PIXEL_UNPACK_BUFFER_BINDING',
9+
'contextAttributes', 'drawingBufferWidth', 'drawingBufferHeight',
9210
];
9311

9412
const methods = [
95-
'init',
96-
'uniform1f','uniform2f','uniform3f','uniform4f',
97-
'uniform1i','uniform2i','uniform3i','uniform4i',
98-
'uniform1fv','uniform2fv','uniform3fv','uniform4fv',
99-
'uniform1iv','uniform2iv','uniform3iv','uniform4iv',
100-
'pixelStorei','bindAttribLocation','getError','drawArrays',
101-
'uniformMatrix2fv','uniformMatrix3fv','uniformMatrix4fv',
102-
'generateMipmap','getAttribLocation','depthFunc','viewport',
103-
'createShader','shaderSource','compileShader',
104-
'getShaderParameter','getShaderInfoLog',
105-
'createProgram','attachShader','linkProgram',
106-
'getProgramParameter','getUniformLocation',
107-
'clearColor','clearDepth','disable',
108-
'createTexture','bindTexture','texImage2D','texParameteri','texParameterf',
109-
'clear','useProgram',
110-
'createFramebuffer','bindFramebuffer','framebufferTexture2D',
111-
'createBuffer','bindBuffer','bufferData','bufferSubData',
112-
'enable','blendEquation','blendFunc',
113-
'enableVertexAttribArray','vertexAttribPointer',
114-
'activeTexture','drawElements','flush','finish',
115-
'vertexAttrib1f','vertexAttrib2f','vertexAttrib3f','vertexAttrib4f',
116-
'vertexAttrib1fv','vertexAttrib2fv','vertexAttrib3fv','vertexAttrib4fv',
117-
'blendColor','blendEquationSeparate','blendFuncSeparate',
118-
'clearStencil','colorMask',
119-
'copyTexImage2D','copyTexSubImage2D',
120-
'cullFace','depthMask','depthRange','disableVertexAttribArray',
121-
'hint','isEnabled','lineWidth','polygonOffset','scissor',
122-
'stencilFunc','stencilFuncSeparate','stencilMask',
123-
'stencilMaskSeparate','stencilOp','stencilOpSeparate',
124-
'bindRenderbuffer','createRenderbuffer',
125-
'deleteBuffer','deleteFramebuffer','deleteProgram','deleteRenderbuffer',
126-
'deleteShader','deleteTexture','detachShader',
127-
'framebufferRenderbuffer','getVertexAttribOffset',
128-
'isBuffer','isFramebuffer','isProgram','isRenderbuffer','isShader','isTexture',
129-
'renderbufferStorage','getShaderSource','validateProgram',
130-
'texSubImage2D','readPixels','getTexParameter',
131-
'getActiveAttrib','getActiveUniform','getAttachedShaders','getParameter',
132-
'getBufferParameter','getFramebufferAttachmentParameter','getProgramInfoLog',
133-
'getRenderbufferParameter','getVertexAttrib','getSupportedExtensions','getExtension',
134-
'checkFramebufferStatus','frontFace',
13+
'init', 'useWebGL2', 'getContextAttributes',
13514
];
13615

13716

@@ -141,13 +20,13 @@ describe('WebGL', () => {
14120
});
14221

14322
constants.forEach((constant) => {
144-
it(`#${constant} constant exposed`, () => {
23+
it(`\`${constant}\` constant exposed`, () => {
14524
assert.ok(webgl[constant] !== undefined);
14625
});
14726
});
14827

14928
methods.forEach((method) => {
150-
it(`#${method}() method exposed`, () => {
29+
it(`\`${method}()\` method exposed`, () => {
15130
assert.strictEqual(typeof webgl[method], 'function');
15231
});
15332
});

test/spec.test.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
3+
const assert = require('node:assert').strict;
4+
const { describe, it } = require('node:test');
5+
6+
const { parseSpec } = require('./specs/parse-spec');
7+
const webgl = require('..');
8+
9+
10+
const parsedWebgl103 = parseSpec('webgl103');
11+
const parsedWebgl200 = parseSpec('webgl200');
12+
13+
const testSpec = (name, parsed) => {
14+
describe(name, () => {
15+
parsed.constants.forEach((constant) => {
16+
it(`\`${constant}\` constant exposed`, () => {
17+
assert.ok(webgl[constant] !== undefined);
18+
});
19+
});
20+
21+
parsed.methods.forEach((method) => {
22+
it(`\`${method}()\` method exposed`, () => {
23+
assert.strictEqual(typeof webgl[method], 'function');
24+
});
25+
});
26+
});
27+
};
28+
29+
describe('WebGL Specs', () => {
30+
testSpec('WebGL 1.03', parsedWebgl103);
31+
testSpec('WebGL 2.00', parsedWebgl200);
32+
33+
return Promise.resolve();
34+
});

test/specs/parse-spec.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
'use strict';
22

3-
const { read } = require('addon-tools-raub');
3+
const { readFileSync } = require('node:fs');
44

5-
const parseSpec = async (name) => {
6-
const text = await read(`${__dirname}/${name}.idl`);
5+
6+
const parseSpec = (name) => {
7+
const text = readFileSync(`${__dirname}/${name}.idl`).toString();
78

89
const constants = text.match(
910
/const GL\w+ \w+/g,
@@ -21,9 +22,6 @@ const parseSpec = async (name) => {
2122
(a, i, v) => (v.indexOf(a) === i)
2223
).sort();
2324

24-
console.log(constants.join(', '));
25-
console.log(methods.join(', '));
26-
2725
return {
2826
constants,
2927
methods,

0 commit comments

Comments
 (0)