@vib3code/sdk 2.0.1
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.
- package/CHANGELOG.md +118 -0
- package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
- package/DOCS/CI_TESTING.md +38 -0
- package/DOCS/CLI_ONBOARDING.md +75 -0
- package/DOCS/CONTROL_REFERENCE.md +64 -0
- package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
- package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
- package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
- package/DOCS/ENV_SETUP.md +189 -0
- package/DOCS/EXPORT_FORMATS.md +417 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
- package/DOCS/LICENSING_TIERS.md +275 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
- package/DOCS/OBS_SETUP_GUIDE.md +98 -0
- package/DOCS/PROJECT_SETUP.md +66 -0
- package/DOCS/RENDERER_LIFECYCLE.md +40 -0
- package/DOCS/REPO_MANIFEST.md +121 -0
- package/DOCS/SESSION_014_PLAN.md +195 -0
- package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
- package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
- package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
- package/DOCS/SYSTEM_INVENTORY.md +520 -0
- package/DOCS/TELEMETRY_EXPORTS.md +34 -0
- package/DOCS/WEBGPU_STATUS.md +38 -0
- package/DOCS/XR_BENCHMARKS.md +608 -0
- package/LICENSE +21 -0
- package/README.md +426 -0
- package/docs/.nojekyll +0 -0
- package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/02-hyperspatial_ego_death.html +346 -0
- package/docs/03-post_cartesian_sublime.html +346 -0
- package/docs/04-crystalline_void_meditation.html +346 -0
- package/docs/05-quantum_decoherence_ballet.html +346 -0
- package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/07-hyperspatial_ego_death.html +346 -0
- package/docs/08-post_cartesian_sublime.html +346 -0
- package/docs/09-crystalline_void_meditation.html +346 -0
- package/docs/10-quantum_decoherence_ballet.html +346 -0
- package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
- package/docs/12-hyperspatial_ego_death.html +346 -0
- package/docs/13-post_cartesian_sublime.html +346 -0
- package/docs/index.html +794 -0
- package/docs/test-hub.html +441 -0
- package/docs/url-state.js +102 -0
- package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
- package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
- package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
- package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
- package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
- package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
- package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
- package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
- package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
- package/docs/vib3-exports/index.html +238 -0
- package/docs/webgpu-live.html +702 -0
- package/package.json +367 -0
- package/src/advanced/AIPresetGenerator.js +777 -0
- package/src/advanced/MIDIController.js +703 -0
- package/src/advanced/OffscreenWorker.js +1051 -0
- package/src/advanced/WebGPUCompute.js +1051 -0
- package/src/advanced/WebXRRenderer.js +680 -0
- package/src/agent/cli/AgentCLI.js +615 -0
- package/src/agent/cli/index.js +14 -0
- package/src/agent/index.js +73 -0
- package/src/agent/mcp/MCPServer.js +950 -0
- package/src/agent/mcp/index.js +9 -0
- package/src/agent/mcp/tools.js +548 -0
- package/src/agent/telemetry/EventStream.js +669 -0
- package/src/agent/telemetry/Instrumentation.js +618 -0
- package/src/agent/telemetry/TelemetryExporters.js +427 -0
- package/src/agent/telemetry/TelemetryService.js +464 -0
- package/src/agent/telemetry/index.js +52 -0
- package/src/benchmarks/BenchmarkRunner.js +381 -0
- package/src/benchmarks/MetricsCollector.js +299 -0
- package/src/benchmarks/index.js +9 -0
- package/src/benchmarks/scenes.js +259 -0
- package/src/cli/index.js +675 -0
- package/src/config/ApiConfig.js +88 -0
- package/src/core/CanvasManager.js +217 -0
- package/src/core/ErrorReporter.js +117 -0
- package/src/core/ParameterMapper.js +333 -0
- package/src/core/Parameters.js +396 -0
- package/src/core/RendererContracts.js +200 -0
- package/src/core/UnifiedResourceManager.js +370 -0
- package/src/core/VIB3Engine.js +636 -0
- package/src/core/renderers/FacetedRendererAdapter.js +32 -0
- package/src/core/renderers/HolographicRendererAdapter.js +29 -0
- package/src/core/renderers/QuantumRendererAdapter.js +29 -0
- package/src/core/renderers/RendererLifecycleManager.js +63 -0
- package/src/creative/ColorPresetsSystem.js +980 -0
- package/src/creative/ParameterTimeline.js +1061 -0
- package/src/creative/PostProcessingPipeline.js +1113 -0
- package/src/creative/TransitionAnimator.js +683 -0
- package/src/export/CSSExporter.js +226 -0
- package/src/export/CardGeneratorBase.js +279 -0
- package/src/export/ExportManager.js +580 -0
- package/src/export/FacetedCardGenerator.js +279 -0
- package/src/export/HolographicCardGenerator.js +543 -0
- package/src/export/LottieExporter.js +552 -0
- package/src/export/QuantumCardGenerator.js +315 -0
- package/src/export/SVGExporter.js +519 -0
- package/src/export/ShaderExporter.js +903 -0
- package/src/export/TradingCardGenerator.js +3055 -0
- package/src/export/TradingCardManager.js +181 -0
- package/src/export/VIB3PackageExporter.js +559 -0
- package/src/export/index.js +14 -0
- package/src/export/systems/TradingCardSystemFaceted.js +494 -0
- package/src/export/systems/TradingCardSystemHolographic.js +452 -0
- package/src/export/systems/TradingCardSystemQuantum.js +411 -0
- package/src/faceted/FacetedSystem.js +963 -0
- package/src/features/CollectionManager.js +433 -0
- package/src/gallery/CollectionManager.js +240 -0
- package/src/gallery/GallerySystem.js +485 -0
- package/src/geometry/GeometryFactory.js +314 -0
- package/src/geometry/GeometryLibrary.js +72 -0
- package/src/geometry/buffers/BufferBuilder.js +338 -0
- package/src/geometry/buffers/index.js +18 -0
- package/src/geometry/generators/Crystal.js +420 -0
- package/src/geometry/generators/Fractal.js +298 -0
- package/src/geometry/generators/KleinBottle.js +197 -0
- package/src/geometry/generators/Sphere.js +192 -0
- package/src/geometry/generators/Tesseract.js +160 -0
- package/src/geometry/generators/Tetrahedron.js +225 -0
- package/src/geometry/generators/Torus.js +304 -0
- package/src/geometry/generators/Wave.js +341 -0
- package/src/geometry/index.js +142 -0
- package/src/geometry/warp/HypersphereCore.js +211 -0
- package/src/geometry/warp/HypertetraCore.js +386 -0
- package/src/geometry/warp/index.js +57 -0
- package/src/holograms/HolographicVisualizer.js +1073 -0
- package/src/holograms/RealHolographicSystem.js +966 -0
- package/src/holograms/variantRegistry.js +69 -0
- package/src/integrations/FigmaPlugin.js +854 -0
- package/src/integrations/OBSMode.js +754 -0
- package/src/integrations/ThreeJsPackage.js +660 -0
- package/src/integrations/TouchDesignerExport.js +552 -0
- package/src/integrations/frameworks/Vib3React.js +591 -0
- package/src/integrations/frameworks/Vib3Svelte.js +654 -0
- package/src/integrations/frameworks/Vib3Vue.js +628 -0
- package/src/llm/LLMParameterInterface.js +240 -0
- package/src/llm/LLMParameterUI.js +577 -0
- package/src/math/Mat4x4.js +708 -0
- package/src/math/Projection.js +341 -0
- package/src/math/Rotor4D.js +637 -0
- package/src/math/Vec4.js +476 -0
- package/src/math/constants.js +164 -0
- package/src/math/index.js +68 -0
- package/src/math/projections.js +54 -0
- package/src/math/rotations.js +196 -0
- package/src/quantum/QuantumEngine.js +906 -0
- package/src/quantum/QuantumVisualizer.js +1103 -0
- package/src/reactivity/ReactivityConfig.js +499 -0
- package/src/reactivity/ReactivityManager.js +586 -0
- package/src/reactivity/SpatialInputSystem.js +1783 -0
- package/src/reactivity/index.js +93 -0
- package/src/render/CommandBuffer.js +465 -0
- package/src/render/MultiCanvasBridge.js +340 -0
- package/src/render/RenderCommand.js +514 -0
- package/src/render/RenderResourceRegistry.js +523 -0
- package/src/render/RenderState.js +552 -0
- package/src/render/RenderTarget.js +512 -0
- package/src/render/ShaderLoader.js +253 -0
- package/src/render/ShaderProgram.js +599 -0
- package/src/render/UnifiedRenderBridge.js +496 -0
- package/src/render/backends/WebGLBackend.js +1108 -0
- package/src/render/backends/WebGPUBackend.js +1409 -0
- package/src/render/commands/CommandBufferExecutor.js +607 -0
- package/src/render/commands/RenderCommandBuffer.js +661 -0
- package/src/render/commands/index.js +17 -0
- package/src/render/index.js +367 -0
- package/src/scene/Disposable.js +498 -0
- package/src/scene/MemoryPool.js +618 -0
- package/src/scene/Node4D.js +697 -0
- package/src/scene/ResourceManager.js +599 -0
- package/src/scene/Scene4D.js +540 -0
- package/src/scene/index.js +98 -0
- package/src/schemas/error.schema.json +84 -0
- package/src/schemas/extension.schema.json +88 -0
- package/src/schemas/index.js +214 -0
- package/src/schemas/parameters.schema.json +142 -0
- package/src/schemas/tool-pack.schema.json +44 -0
- package/src/schemas/tool-response.schema.json +127 -0
- package/src/shaders/common/fullscreen.vert.glsl +5 -0
- package/src/shaders/common/fullscreen.vert.wgsl +17 -0
- package/src/shaders/common/geometry24.glsl +65 -0
- package/src/shaders/common/geometry24.wgsl +54 -0
- package/src/shaders/common/rotation4d.glsl +85 -0
- package/src/shaders/common/rotation4d.wgsl +86 -0
- package/src/shaders/common/uniforms.glsl +44 -0
- package/src/shaders/common/uniforms.wgsl +48 -0
- package/src/shaders/faceted/faceted.frag.glsl +129 -0
- package/src/shaders/faceted/faceted.frag.wgsl +164 -0
- package/src/shaders/holographic/holographic.frag.glsl +406 -0
- package/src/shaders/holographic/holographic.frag.wgsl +185 -0
- package/src/shaders/quantum/quantum.frag.glsl +513 -0
- package/src/shaders/quantum/quantum.frag.wgsl +361 -0
- package/src/testing/ParallelTestFramework.js +519 -0
- package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
- package/src/testing/exportFormats.test.js +8 -0
- package/src/testing/projections.test.js +14 -0
- package/src/testing/rotations.test.js +37 -0
- package/src/ui/InteractivityMenu.js +516 -0
- package/src/ui/StatusManager.js +96 -0
- package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
- package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
- package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
- package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
- package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
- package/src/variations/VariationManager.js +431 -0
- package/src/viewer/AudioReactivity.js +505 -0
- package/src/viewer/CardBending.js +481 -0
- package/src/viewer/GalleryUI.js +832 -0
- package/src/viewer/ReactivityManager.js +590 -0
- package/src/viewer/TradingCardExporter.js +600 -0
- package/src/viewer/ViewerPortal.js +374 -0
- package/src/viewer/index.js +12 -0
- package/src/wasm/WasmLoader.js +296 -0
- package/src/wasm/index.js +132 -0
- package/tools/agentic/mcpTools.js +88 -0
- package/tools/cli/agent-cli.js +92 -0
- package/tools/export/formats.js +24 -0
- package/tools/math/rotation-baseline.mjs +64 -0
- package/tools/shader-sync-verify.js +937 -0
- package/tools/telemetry/manifestPipeline.js +141 -0
- package/tools/telemetry/telemetryEvents.js +35 -0
- package/types/adaptive-sdk.d.ts +185 -0
- package/types/advanced/AIPresetGenerator.d.ts +81 -0
- package/types/advanced/MIDIController.d.ts +100 -0
- package/types/advanced/OffscreenWorker.d.ts +82 -0
- package/types/advanced/WebGPUCompute.d.ts +52 -0
- package/types/advanced/WebXRRenderer.d.ts +77 -0
- package/types/advanced/index.d.ts +46 -0
- package/types/core/ErrorReporter.d.ts +50 -0
- package/types/core/VIB3Engine.d.ts +204 -0
- package/types/creative/ColorPresetsSystem.d.ts +91 -0
- package/types/creative/ParameterTimeline.d.ts +74 -0
- package/types/creative/PostProcessingPipeline.d.ts +109 -0
- package/types/creative/TransitionAnimator.d.ts +71 -0
- package/types/creative/index.d.ts +35 -0
- package/types/integrations/FigmaPlugin.d.ts +46 -0
- package/types/integrations/OBSMode.d.ts +74 -0
- package/types/integrations/ThreeJsPackage.d.ts +62 -0
- package/types/integrations/TouchDesignerExport.d.ts +36 -0
- package/types/integrations/Vib3React.d.ts +74 -0
- package/types/integrations/Vib3Svelte.d.ts +63 -0
- package/types/integrations/Vib3Vue.d.ts +55 -0
- package/types/integrations/index.d.ts +52 -0
- package/types/reactivity/SpatialInputSystem.d.ts +173 -0
- package/types/reactivity/index.d.ts +394 -0
- package/types/render/CommandBuffer.d.ts +169 -0
- package/types/render/RenderCommand.d.ts +312 -0
- package/types/render/RenderState.d.ts +279 -0
- package/types/render/RenderTarget.d.ts +254 -0
- package/types/render/ShaderProgram.d.ts +277 -0
- package/types/render/UnifiedRenderBridge.d.ts +143 -0
- package/types/render/WebGLBackend.d.ts +168 -0
- package/types/render/WebGPUBackend.d.ts +186 -0
- package/types/render/index.d.ts +141 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render Module - VIB3+ SDK
|
|
3
|
+
*
|
|
4
|
+
* Complete rendering abstraction for 4D visualization:
|
|
5
|
+
* - GPU state management
|
|
6
|
+
* - Render command pattern
|
|
7
|
+
* - Command buffer batching and sorting
|
|
8
|
+
* - Framebuffer/render target abstraction
|
|
9
|
+
* - Shader program management
|
|
10
|
+
* - WebGL 2.0 backend
|
|
11
|
+
* - WebGPU backend (fullscreen quad / procedural shaders)
|
|
12
|
+
* - Unified render bridge (WebGL/WebGPU transparent switching)
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// State management
|
|
16
|
+
export {
|
|
17
|
+
BlendMode,
|
|
18
|
+
DepthFunc,
|
|
19
|
+
CullFace,
|
|
20
|
+
PolygonMode,
|
|
21
|
+
StencilOp,
|
|
22
|
+
BlendState,
|
|
23
|
+
DepthState,
|
|
24
|
+
StencilState,
|
|
25
|
+
RasterizerState,
|
|
26
|
+
Viewport,
|
|
27
|
+
RenderState
|
|
28
|
+
} from './RenderState.js';
|
|
29
|
+
|
|
30
|
+
// Render commands
|
|
31
|
+
export {
|
|
32
|
+
CommandType,
|
|
33
|
+
PrimitiveType,
|
|
34
|
+
RenderCommand,
|
|
35
|
+
ClearCommand,
|
|
36
|
+
SetStateCommand,
|
|
37
|
+
BindShaderCommand,
|
|
38
|
+
BindTextureCommand,
|
|
39
|
+
BindVertexArrayCommand,
|
|
40
|
+
BindRenderTargetCommand,
|
|
41
|
+
SetUniformCommand,
|
|
42
|
+
DrawCommand,
|
|
43
|
+
DrawIndexedCommand,
|
|
44
|
+
DrawInstancedCommand,
|
|
45
|
+
DrawIndexedInstancedCommand,
|
|
46
|
+
SetViewportCommand,
|
|
47
|
+
CustomCommand
|
|
48
|
+
} from './RenderCommand.js';
|
|
49
|
+
|
|
50
|
+
// Command buffer
|
|
51
|
+
export {
|
|
52
|
+
SortMode,
|
|
53
|
+
CommandBuffer,
|
|
54
|
+
CommandBufferPool,
|
|
55
|
+
commandBufferPool
|
|
56
|
+
} from './CommandBuffer.js';
|
|
57
|
+
|
|
58
|
+
// Render targets
|
|
59
|
+
export {
|
|
60
|
+
TextureFormat,
|
|
61
|
+
AttachmentType,
|
|
62
|
+
FilterMode,
|
|
63
|
+
WrapMode,
|
|
64
|
+
AttachmentDescriptor,
|
|
65
|
+
RenderTarget,
|
|
66
|
+
RenderTargetPool,
|
|
67
|
+
renderTargetPool
|
|
68
|
+
} from './RenderTarget.js';
|
|
69
|
+
|
|
70
|
+
// Resource registry
|
|
71
|
+
export {
|
|
72
|
+
RenderResourceRegistry
|
|
73
|
+
} from './RenderResourceRegistry.js';
|
|
74
|
+
|
|
75
|
+
// Shader programs
|
|
76
|
+
export {
|
|
77
|
+
ShaderStage,
|
|
78
|
+
UniformType,
|
|
79
|
+
UniformDescriptor,
|
|
80
|
+
AttributeDescriptor,
|
|
81
|
+
ShaderSource,
|
|
82
|
+
ShaderProgram,
|
|
83
|
+
ShaderLib,
|
|
84
|
+
ShaderCache,
|
|
85
|
+
shaderCache
|
|
86
|
+
} from './ShaderProgram.js';
|
|
87
|
+
|
|
88
|
+
// WebGL backend
|
|
89
|
+
export {
|
|
90
|
+
WebGLBackend,
|
|
91
|
+
createWebGLBackend
|
|
92
|
+
} from './backends/WebGLBackend.js';
|
|
93
|
+
|
|
94
|
+
// WebGPU backend
|
|
95
|
+
export {
|
|
96
|
+
WebGPUBackend,
|
|
97
|
+
WebGPUFeatures,
|
|
98
|
+
WGSLShaderLib,
|
|
99
|
+
isWebGPUSupported,
|
|
100
|
+
getWebGPUFeatures,
|
|
101
|
+
createWebGPUBackend,
|
|
102
|
+
createWebGPUWithFallback
|
|
103
|
+
} from './backends/WebGPUBackend.js';
|
|
104
|
+
|
|
105
|
+
// Unified render bridge (WebGL/WebGPU transparent switching)
|
|
106
|
+
export {
|
|
107
|
+
UnifiedRenderBridge,
|
|
108
|
+
canUseWebGPU
|
|
109
|
+
} from './UnifiedRenderBridge.js';
|
|
110
|
+
|
|
111
|
+
// Shader loader (external shader file fetch + cache)
|
|
112
|
+
export {
|
|
113
|
+
ShaderLoader,
|
|
114
|
+
shaderLoader
|
|
115
|
+
} from './ShaderLoader.js';
|
|
116
|
+
|
|
117
|
+
// Multi-canvas bridge (5-layer orchestration for Quantum/Holographic)
|
|
118
|
+
export {
|
|
119
|
+
MultiCanvasBridge
|
|
120
|
+
} from './MultiCanvasBridge.js';
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Create a complete rendering context
|
|
124
|
+
* @param {HTMLCanvasElement} canvas
|
|
125
|
+
* @param {object} [options]
|
|
126
|
+
* @returns {object} Rendering context with backend and helpers
|
|
127
|
+
*/
|
|
128
|
+
export function createRenderContext(canvas, options = {}) {
|
|
129
|
+
if (options.backend === 'webgpu') {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const { createWebGLBackend } = require('./backends/WebGLBackend.js');
|
|
133
|
+
const backend = createWebGLBackend(canvas, options);
|
|
134
|
+
|
|
135
|
+
if (!backend) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
backend,
|
|
141
|
+
canvas,
|
|
142
|
+
gl: backend.gl,
|
|
143
|
+
|
|
144
|
+
// Helper methods
|
|
145
|
+
createCommandBuffer: (opts) => new CommandBuffer(opts),
|
|
146
|
+
createRenderTarget: (width, height, opts) => new RenderTarget(width, height, opts),
|
|
147
|
+
createShader: (opts) => new ShaderProgram(opts),
|
|
148
|
+
|
|
149
|
+
// Dispose all
|
|
150
|
+
dispose() {
|
|
151
|
+
backend.dispose();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Create a rendering context (async, supports WebGPU).
|
|
158
|
+
* @param {HTMLCanvasElement} canvas
|
|
159
|
+
* @param {object} [options]
|
|
160
|
+
* @param {string} [options.backend] - 'webgl' or 'webgpu'
|
|
161
|
+
* @param {boolean} [options.preferWebGPU] - Try WebGPU first, fallback to WebGL
|
|
162
|
+
* @returns {Promise<object|null>}
|
|
163
|
+
*/
|
|
164
|
+
export async function createRenderContextAsync(canvas, options = {}) {
|
|
165
|
+
// Use UnifiedRenderBridge for auto backend selection
|
|
166
|
+
if (options.preferWebGPU || options.backend === 'bridge') {
|
|
167
|
+
const bridge = await UnifiedRenderBridge.create(canvas, options);
|
|
168
|
+
if (bridge) {
|
|
169
|
+
return {
|
|
170
|
+
backend: bridge,
|
|
171
|
+
canvas,
|
|
172
|
+
backendType: bridge.backendType,
|
|
173
|
+
dispose() {
|
|
174
|
+
bridge.dispose();
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// Fall through to direct WebGL
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (options.backend === 'webgpu') {
|
|
182
|
+
const backend = await createWebGPUBackend(canvas, options);
|
|
183
|
+
|
|
184
|
+
if (!backend) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
backend,
|
|
190
|
+
canvas,
|
|
191
|
+
device: backend.device,
|
|
192
|
+
context: backend.context,
|
|
193
|
+
format: backend.format,
|
|
194
|
+
dispose() {
|
|
195
|
+
backend.dispose();
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return createRenderContext(canvas, options);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Preset render states for common use cases
|
|
205
|
+
*/
|
|
206
|
+
export const RenderPresets = {
|
|
207
|
+
/** Default opaque rendering */
|
|
208
|
+
opaque: () => RenderState.opaque(),
|
|
209
|
+
|
|
210
|
+
/** Alpha-blended transparent rendering */
|
|
211
|
+
transparent: () => RenderState.transparent(),
|
|
212
|
+
|
|
213
|
+
/** Additive blending for effects */
|
|
214
|
+
additive: () => RenderState.additive(),
|
|
215
|
+
|
|
216
|
+
/** Wireframe rendering */
|
|
217
|
+
wireframe: () => RenderState.wireframe(),
|
|
218
|
+
|
|
219
|
+
/** 4D geometry with W-depth sorting */
|
|
220
|
+
geometry4D: () => {
|
|
221
|
+
const state = RenderState.opaque();
|
|
222
|
+
state.depth.testEnabled = true;
|
|
223
|
+
state.depth.writeEnabled = true;
|
|
224
|
+
return state;
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
/** Transparent 4D with back-to-front sorting */
|
|
228
|
+
transparent4D: () => {
|
|
229
|
+
const state = RenderState.transparent();
|
|
230
|
+
state.depth.testEnabled = true;
|
|
231
|
+
state.depth.writeEnabled = false;
|
|
232
|
+
return state;
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Common shader snippets for 4D rendering
|
|
238
|
+
*/
|
|
239
|
+
export const Shader4D = {
|
|
240
|
+
/** All rotation functions for 6 planes */
|
|
241
|
+
rotation: ShaderLib.rotation4D,
|
|
242
|
+
|
|
243
|
+
/** Projection functions (perspective, stereographic, orthographic) */
|
|
244
|
+
projection: ShaderLib.projection4D,
|
|
245
|
+
|
|
246
|
+
/** Basic 4D vertex shader template */
|
|
247
|
+
basicVertex: ShaderLib.vertex4D,
|
|
248
|
+
|
|
249
|
+
/** Basic fragment shader with W-fog */
|
|
250
|
+
basicFragment: ShaderLib.fragment4D,
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Generate complete vertex shader for 4D geometry
|
|
254
|
+
* @param {object} [options]
|
|
255
|
+
* @returns {string}
|
|
256
|
+
*/
|
|
257
|
+
generateVertexShader(options = {}) {
|
|
258
|
+
const includeColor = options.color !== false;
|
|
259
|
+
const includeNormal = options.normal === true;
|
|
260
|
+
|
|
261
|
+
return `#version 300 es
|
|
262
|
+
precision highp float;
|
|
263
|
+
|
|
264
|
+
// 4D position
|
|
265
|
+
in vec4 a_position;
|
|
266
|
+
${includeColor ? 'in vec4 a_color;' : ''}
|
|
267
|
+
${includeNormal ? 'in vec4 a_normal;' : ''}
|
|
268
|
+
|
|
269
|
+
// Transforms
|
|
270
|
+
uniform mat4 u_modelMatrix;
|
|
271
|
+
uniform mat4 u_viewMatrix;
|
|
272
|
+
uniform mat4 u_projMatrix;
|
|
273
|
+
uniform mat4 u_rotation4D;
|
|
274
|
+
uniform float u_projDistance;
|
|
275
|
+
|
|
276
|
+
// Outputs
|
|
277
|
+
${includeColor ? 'out vec4 v_color;' : ''}
|
|
278
|
+
${includeNormal ? 'out vec3 v_normal;' : ''}
|
|
279
|
+
out float v_depth4D;
|
|
280
|
+
out vec3 v_position;
|
|
281
|
+
|
|
282
|
+
${ShaderLib.rotation4D}
|
|
283
|
+
${ShaderLib.projection4D}
|
|
284
|
+
|
|
285
|
+
void main() {
|
|
286
|
+
// Apply 4D rotation
|
|
287
|
+
vec4 rotated = u_rotation4D * a_position;
|
|
288
|
+
|
|
289
|
+
// Project 4D -> 3D
|
|
290
|
+
vec3 projected = projectPerspective(rotated, u_projDistance);
|
|
291
|
+
|
|
292
|
+
// Apply 3D transforms
|
|
293
|
+
vec4 worldPos = u_modelMatrix * vec4(projected, 1.0);
|
|
294
|
+
vec4 viewPos = u_viewMatrix * worldPos;
|
|
295
|
+
gl_Position = u_projMatrix * viewPos;
|
|
296
|
+
|
|
297
|
+
// Pass to fragment shader
|
|
298
|
+
v_position = worldPos.xyz;
|
|
299
|
+
v_depth4D = rotated.w;
|
|
300
|
+
${includeColor ? 'v_color = a_color;' : ''}
|
|
301
|
+
${includeNormal ? `
|
|
302
|
+
vec4 rotatedNormal = u_rotation4D * a_normal;
|
|
303
|
+
v_normal = normalize((u_modelMatrix * vec4(rotatedNormal.xyz, 0.0)).xyz);
|
|
304
|
+
` : ''}
|
|
305
|
+
}`;
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Generate complete fragment shader for 4D geometry
|
|
310
|
+
* @param {object} [options]
|
|
311
|
+
* @returns {string}
|
|
312
|
+
*/
|
|
313
|
+
generateFragmentShader(options = {}) {
|
|
314
|
+
const includeColor = options.color !== false;
|
|
315
|
+
const includeLighting = options.lighting === true;
|
|
316
|
+
const includeWFog = options.wFog !== false;
|
|
317
|
+
|
|
318
|
+
return `#version 300 es
|
|
319
|
+
precision highp float;
|
|
320
|
+
|
|
321
|
+
${includeColor ? 'in vec4 v_color;' : ''}
|
|
322
|
+
${includeLighting ? 'in vec3 v_normal;' : ''}
|
|
323
|
+
in float v_depth4D;
|
|
324
|
+
in vec3 v_position;
|
|
325
|
+
|
|
326
|
+
uniform float u_wFogDistance;
|
|
327
|
+
uniform bool u_wFogEnabled;
|
|
328
|
+
${includeColor ? '' : 'uniform vec4 u_baseColor;'}
|
|
329
|
+
${includeLighting ? `
|
|
330
|
+
uniform vec3 u_lightDir;
|
|
331
|
+
uniform vec3 u_lightColor;
|
|
332
|
+
uniform vec3 u_ambientColor;
|
|
333
|
+
` : ''}
|
|
334
|
+
|
|
335
|
+
out vec4 fragColor;
|
|
336
|
+
|
|
337
|
+
void main() {
|
|
338
|
+
${includeColor ? 'vec4 color = v_color;' : 'vec4 color = u_baseColor;'}
|
|
339
|
+
|
|
340
|
+
${includeLighting ? `
|
|
341
|
+
// Simple directional lighting
|
|
342
|
+
float NdotL = max(dot(v_normal, normalize(u_lightDir)), 0.0);
|
|
343
|
+
vec3 diffuse = u_lightColor * NdotL;
|
|
344
|
+
vec3 ambient = u_ambientColor;
|
|
345
|
+
color.rgb *= (ambient + diffuse);
|
|
346
|
+
` : ''}
|
|
347
|
+
|
|
348
|
+
${includeWFog ? `
|
|
349
|
+
// W-depth fog (fades objects far in 4th dimension)
|
|
350
|
+
if (u_wFogEnabled) {
|
|
351
|
+
float fogFactor = clamp(abs(v_depth4D) / u_wFogDistance, 0.0, 1.0);
|
|
352
|
+
color.a *= 1.0 - fogFactor;
|
|
353
|
+
}
|
|
354
|
+
` : ''}
|
|
355
|
+
|
|
356
|
+
fragColor = color;
|
|
357
|
+
}`;
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
// Import classes for createRenderContext helper
|
|
362
|
+
import { CommandBuffer } from './CommandBuffer.js';
|
|
363
|
+
import { RenderTarget } from './RenderTarget.js';
|
|
364
|
+
import { RenderState } from './RenderState.js';
|
|
365
|
+
import { ShaderProgram, ShaderLib } from './ShaderProgram.js';
|
|
366
|
+
import { UnifiedRenderBridge } from './UnifiedRenderBridge.js';
|
|
367
|
+
import { createWebGPUBackend } from './backends/WebGPUBackend.js';
|