@solidtv/renderer 1.5.0-1 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/src/core/Stage.js +2 -1
  2. package/dist/src/core/Stage.js.map +1 -1
  3. package/dist/src/core/TextureMemoryManager.d.ts +23 -0
  4. package/dist/src/core/TextureMemoryManager.js +37 -3
  5. package/dist/src/core/TextureMemoryManager.js.map +1 -1
  6. package/dist/src/core/lib/WebGlContextWrapper.d.ts +1 -1
  7. package/dist/src/core/lib/WebGlContextWrapper.js +10 -3
  8. package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
  9. package/dist/src/core/lib/textureCompression.js +68 -4
  10. package/dist/src/core/lib/textureCompression.js.map +1 -1
  11. package/dist/src/core/renderers/CoreRenderer.d.ts +1 -0
  12. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  13. package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +8 -0
  14. package/dist/src/core/renderers/webgl/WebGlRenderer.js +49 -13
  15. package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
  16. package/dist/src/core/renderers/webgl/internal/RendererUtils.js +9 -2
  17. package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
  18. package/dist/src/core/text-rendering/SdfTextRenderer.js +16 -3
  19. package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -1
  20. package/dist/src/main-api/Renderer.d.ts +16 -0
  21. package/dist/src/main-api/Renderer.js +2 -0
  22. package/dist/src/main-api/Renderer.js.map +1 -1
  23. package/dist/src/utils.js +23 -7
  24. package/dist/src/utils.js.map +1 -1
  25. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +1 -1
  28. package/src/core/Stage.ts +2 -0
  29. package/src/core/TextureMemoryManager.test.ts +51 -2
  30. package/src/core/TextureMemoryManager.ts +42 -3
  31. package/src/core/lib/WebGlContextWrapper.test.ts +58 -0
  32. package/src/core/lib/WebGlContextWrapper.ts +13 -3
  33. package/src/core/lib/textureCompression.test.ts +158 -0
  34. package/src/core/lib/textureCompression.ts +78 -4
  35. package/src/core/renderers/CoreRenderer.ts +1 -0
  36. package/src/core/renderers/webgl/WebGlRenderer.ts +58 -15
  37. package/src/core/renderers/webgl/internal/RendererUtils.test.ts +73 -0
  38. package/src/core/renderers/webgl/internal/RendererUtils.ts +9 -2
  39. package/src/core/text-rendering/SdfTextRenderer.test.ts +11 -10
  40. package/src/core/text-rendering/SdfTextRenderer.ts +17 -3
  41. package/src/main-api/Renderer.ts +19 -0
  42. package/src/utils.test.ts +57 -0
  43. package/src/utils.ts +24 -8
package/src/utils.ts CHANGED
@@ -29,17 +29,33 @@ export function createWebGLContext(
29
29
  throw new Error('Unable to create WebGL context');
30
30
  }
31
31
  if (contextSpy) {
32
- // Proxy the GL context to log all GL calls
33
- return new Proxy(gl, {
32
+ // Proxy the GL context and any extension object it hands out — so every
33
+ // call is counted. The renderer routes WebGL1 Vertex Array Object calls
34
+ // through the OES_vertex_array_object extension object; without wrapping
35
+ // that object its methods (bindVertexArrayOES / createVertexArrayOES /
36
+ // deleteVertexArrayOES) would bypass the spy entirely. On WebGL2 the same
37
+ // calls live on the context itself and are already captured.
38
+ const handler: ProxyHandler<object> = {
34
39
  get(target, prop) {
35
- const value = target[prop as never] as unknown;
36
- if (typeof value === 'function') {
37
- contextSpy.increment(String(prop));
38
- return value.bind(target);
40
+ const value = (target as Record<string | symbol, unknown>)[prop];
41
+ if (typeof value !== 'function') {
42
+ return value;
39
43
  }
40
- return value;
44
+ contextSpy.increment(String(prop));
45
+ const fn = value as (...args: unknown[]) => unknown;
46
+ if (prop === 'getExtension') {
47
+ return (...args: unknown[]): unknown => {
48
+ const ext = fn.apply(target, args);
49
+ if (ext !== null && typeof ext === 'object') {
50
+ return new Proxy(ext, handler);
51
+ }
52
+ return ext;
53
+ };
54
+ }
55
+ return fn.bind(target);
41
56
  },
42
- });
57
+ };
58
+ return new Proxy(gl as object, handler) as unknown as WebGLRenderingContext;
43
59
  }
44
60
 
45
61
  return gl;