pcbjam/tests/gal-regression/wasm/legacy_gl_stubs.js
Viktor Vaczi 18c73c355e feat(webgl): Fix WebGL GAL rendering with proper coordinate setup
- Fix coordinate system for 1:1 pixel mapping (was using nm scale)
- Set worldUnitLength to 1/96 to match native test setup
- Add SetLookAtPoint and SetZoomFactor for proper view transformation
- Fix glDrawBuffers for WebGL 2.0 (array index must match attachment)
- Add legacy_gl_stubs.js for wxWidgets compatibility
- Add isReady() check to prevent race condition in Playwright tests

All 28 GAL test scenarios now render correctly in WebGL.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 10:13:11 +01:00

91 lines
3.3 KiB
JavaScript

/**
* Legacy GL stubs for wxWidgets compatibility
*
* wxWidgets GL library may reference these functions at runtime even though:
* 1. wxGLAPI methods are stubbed as no-ops in C++ for WASM builds
* 2. KiCad doesn't use wxGLAPI - it has its own GAL
* 3. Our WEBGL_GAL uses modern WebGL 2.0 / OpenGL ES 3.0 only
*
* These no-op stubs satisfy the linker and runtime without affecting rendering.
* All actual rendering goes through WEBGL_GAL which uses VBOs and shaders.
*/
addToLibrary({
// Immediate mode rendering (replaced by VBOs in WEBGL_GAL)
glBegin: function(mode) {},
glEnd: function() {},
// Vertex submission (replaced by vertex manager in WEBGL_GAL)
glVertex2f: function(x, y) {},
glVertex3f: function(x, y, z) {},
glVertex2d: function(x, y) {},
glVertex3d: function(x, y, z) {},
glVertex4f: function(x, y, z, w) {},
glVertex4d: function(x, y, z, w) {},
// Color (replaced by vertex attributes/uniforms in WEBGL_GAL)
glColor3f: function(r, g, b) {},
glColor4f: function(r, g, b, a) {},
glColor3d: function(r, g, b) {},
glColor4d: function(r, g, b, a) {},
glColor3ub: function(r, g, b) {},
glColor4ub: function(r, g, b, a) {},
// Texture coordinates (replaced by vertex attributes in WEBGL_GAL)
glTexCoord2f: function(s, t) {},
glTexCoord2d: function(s, t) {},
// Normals (replaced by vertex attributes in WEBGL_GAL)
glNormal3f: function(nx, ny, nz) {},
glNormal3d: function(nx, ny, nz) {},
// Matrix mode (replaced by MVP matrix uniform in WEBGL_GAL)
glMatrixMode: function(mode) {},
glLoadIdentity: function() {},
glPushMatrix: function() {},
glPopMatrix: function() {},
// Projection (replaced by computeOrthoMatrix in WEBGL_GAL)
glOrtho: function(left, right, bottom, top, near, far) {},
glFrustum: function(left, right, bottom, top, near, far) {},
// Matrix operations (replaced by glm in WEBGL_GAL)
glLoadMatrixf: function(m) {},
glLoadMatrixd: function(m) {},
glMultMatrixf: function(m) {},
glMultMatrixd: function(m) {},
glTranslatef: function(x, y, z) {},
glTranslated: function(x, y, z) {},
glRotatef: function(angle, x, y, z) {},
glRotated: function(angle, x, y, z) {},
glScalef: function(x, y, z) {},
glScaled: function(x, y, z) {},
// Fixed function pipeline (not available in WebGL)
glShadeModel: function(mode) {},
glLightfv: function(light, pname, params) {},
glLightf: function(light, pname, param) {},
glMaterialfv: function(face, pname, params) {},
glMaterialf: function(face, pname, param) {},
glColorMaterial: function(face, mode) {},
// Legacy client state (replaced by glVertexAttribPointer in WEBGL_GAL)
glEnableClientState: function(array) {},
glDisableClientState: function(array) {},
glVertexPointer: function(size, type, stride, pointer) {},
glColorPointer: function(size, type, stride, pointer) {},
glTexCoordPointer: function(size, type, stride, pointer) {},
glNormalPointer: function(type, stride, pointer) {},
// Legacy texture environment (replaced by shaders in WEBGL_GAL)
glTexEnvf: function(target, pname, param) {},
glTexEnvi: function(target, pname, param) {},
glTexEnvfv: function(target, pname, params) {},
// glDrawBuffer (replaced by glDrawBuffers in WebGL 2.0)
glDrawBuffer: function(buf) {},
// Legacy index mode (not supported in WebGL)
glIndexi: function(c) {},
glIndexf: function(c) {},
});