@flighthq/scene3d-wgpu 0.2.1-next.840.857425c
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/dist/anisotropyPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js +52 -0
- package/dist/anisotropyPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.js +66 -0
- package/dist/blinnPhongWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js +52 -0
- package/dist/clearcoatPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.d.ts +7 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.js +225 -0
- package/dist/customShaderWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/depthWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/depthWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/depthWgpuMeshMaterialRenderer.js +42 -0
- package/dist/depthWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/drawWgpuScene3D.d.ts +4 -0
- package/dist/drawWgpuScene3D.d.ts.map +1 -0
- package/dist/drawWgpuScene3D.js +171 -0
- package/dist/drawWgpuScene3D.js.map +1 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.js +51 -0
- package/dist/emissiveWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.d.ts +5 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.d.ts.map +1 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.js +56 -0
- package/dist/enableWgpuScene3DCustomShaderGuards.js.map +1 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts +4 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.d.ts.map +1 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.js +17 -0
- package/dist/enableWgpuScene3DForwardLightSelectionGuards.js.map +1 -0
- package/dist/explainWgpuScene3DForwardLightSelection.d.ts +3 -0
- package/dist/explainWgpuScene3DForwardLightSelection.d.ts.map +1 -0
- package/dist/explainWgpuScene3DForwardLightSelection.js +18 -0
- package/dist/explainWgpuScene3DForwardLightSelection.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.js +60 -0
- package/dist/iridescencePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/lambertWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/lambertWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/lambertWgpuMeshMaterialRenderer.js +61 -0
- package/dist/lambertWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/matcapWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/matcapWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/matcapWgpuMeshMaterialRenderer.js +54 -0
- package/dist/matcapWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/normalWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/normalWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/normalWgpuMeshMaterialRenderer.js +47 -0
- package/dist/normalWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/phongWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/phongWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/phongWgpuMeshMaterialRenderer.js +63 -0
- package/dist/phongWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/prepareWgpuScene3DForwardLights.d.ts +3 -0
- package/dist/prepareWgpuScene3DForwardLights.d.ts.map +1 -0
- package/dist/prepareWgpuScene3DForwardLights.js +110 -0
- package/dist/prepareWgpuScene3DForwardLights.js.map +1 -0
- package/dist/registerStandardPbrWgpuMaterial.d.ts +3 -0
- package/dist/registerStandardPbrWgpuMaterial.d.ts.map +1 -0
- package/dist/registerStandardPbrWgpuMaterial.js +11 -0
- package/dist/registerStandardPbrWgpuMaterial.js.map +1 -0
- package/dist/shadedWgpuMeshMaterialRenderer.d.ts +11 -0
- package/dist/shadedWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/shadedWgpuMeshMaterialRenderer.js +47 -0
- package/dist/shadedWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.js +58 -0
- package/dist/sheenPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js +126 -0
- package/dist/specularGlossinessPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.js +65 -0
- package/dist/specularPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts +9 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.js +174 -0
- package/dist/standardPbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js +68 -0
- package/dist/subsurfacePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/toonWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/toonWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/toonWgpuMeshMaterialRenderer.js +71 -0
- package/dist/toonWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js +74 -0
- package/dist/transmissionVolumePbrWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/unlitWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/unlitWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/unlitWgpuMeshMaterialRenderer.js +57 -0
- package/dist/unlitWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.js +55 -0
- package/dist/vertexColorWgpuMeshMaterialRenderer.js.map +1 -0
- package/dist/wgpuClassicPrelude.d.ts +8 -0
- package/dist/wgpuClassicPrelude.d.ts.map +1 -0
- package/dist/wgpuClassicPrelude.js +319 -0
- package/dist/wgpuClassicPrelude.js.map +1 -0
- package/dist/wgpuCustomMaterialAbi.d.ts +3 -0
- package/dist/wgpuCustomMaterialAbi.d.ts.map +1 -0
- package/dist/wgpuCustomMaterialAbi.js +5 -0
- package/dist/wgpuCustomMaterialAbi.js.map +1 -0
- package/dist/wgpuDebugPrelude.d.ts +7 -0
- package/dist/wgpuDebugPrelude.d.ts.map +1 -0
- package/dist/wgpuDebugPrelude.js +133 -0
- package/dist/wgpuDebugPrelude.js.map +1 -0
- package/dist/wgpuEnvironmentCube.d.ts +4 -0
- package/dist/wgpuEnvironmentCube.d.ts.map +1 -0
- package/dist/wgpuEnvironmentCube.js +66 -0
- package/dist/wgpuEnvironmentCube.js.map +1 -0
- package/dist/wgpuEnvironmentIblBake.d.ts +4 -0
- package/dist/wgpuEnvironmentIblBake.d.ts.map +1 -0
- package/dist/wgpuEnvironmentIblBake.js +458 -0
- package/dist/wgpuEnvironmentIblBake.js.map +1 -0
- package/dist/wgpuEnvironmentSkybox.d.ts +3 -0
- package/dist/wgpuEnvironmentSkybox.d.ts.map +1 -0
- package/dist/wgpuEnvironmentSkybox.js +159 -0
- package/dist/wgpuEnvironmentSkybox.js.map +1 -0
- package/dist/wgpuMatcapPrelude.d.ts +7 -0
- package/dist/wgpuMatcapPrelude.d.ts.map +1 -0
- package/dist/wgpuMatcapPrelude.js +134 -0
- package/dist/wgpuMatcapPrelude.js.map +1 -0
- package/dist/wgpuMeshMaterialRegistry.d.ts +5 -0
- package/dist/wgpuMeshMaterialRegistry.d.ts.map +1 -0
- package/dist/wgpuMeshMaterialRegistry.js +29 -0
- package/dist/wgpuMeshMaterialRegistry.js.map +1 -0
- package/dist/wgpuMeshPipeline.d.ts +43 -0
- package/dist/wgpuMeshPipeline.d.ts.map +1 -0
- package/dist/wgpuMeshPipeline.js +1007 -0
- package/dist/wgpuMeshPipeline.js.map +1 -0
- package/dist/wgpuMeshUpload.d.ts +3 -0
- package/dist/wgpuMeshUpload.d.ts.map +1 -0
- package/dist/wgpuMeshUpload.js +58 -0
- package/dist/wgpuMeshUpload.js.map +1 -0
- package/dist/wgpuParticleEmitter3D.d.ts +4 -0
- package/dist/wgpuParticleEmitter3D.d.ts.map +1 -0
- package/dist/wgpuParticleEmitter3D.js +403 -0
- package/dist/wgpuParticleEmitter3D.js.map +1 -0
- package/dist/wgpuPbrPipelineCache.d.ts +4 -0
- package/dist/wgpuPbrPipelineCache.d.ts.map +1 -0
- package/dist/wgpuPbrPipelineCache.js +52 -0
- package/dist/wgpuPbrPipelineCache.js.map +1 -0
- package/dist/wgpuPbrPrelude.d.ts +7 -0
- package/dist/wgpuPbrPrelude.d.ts.map +1 -0
- package/dist/wgpuPbrPrelude.js +551 -0
- package/dist/wgpuPbrPrelude.js.map +1 -0
- package/dist/wgpuScene3DRuntime.d.ts +5 -0
- package/dist/wgpuScene3DRuntime.d.ts.map +1 -0
- package/dist/wgpuScene3DRuntime.js +81 -0
- package/dist/wgpuScene3DRuntime.js.map +1 -0
- package/dist/wgpuScene3DTestHelper.d.ts +14 -0
- package/dist/wgpuScene3DTestHelper.d.ts.map +1 -0
- package/dist/wgpuScene3DTestHelper.js +121 -0
- package/dist/wgpuScene3DTestHelper.js.map +1 -0
- package/dist/wgpuScene3DTime.d.ts +4 -0
- package/dist/wgpuScene3DTime.d.ts.map +1 -0
- package/dist/wgpuScene3DTime.js +11 -0
- package/dist/wgpuScene3DTime.js.map +1 -0
- package/dist/wgpuShadedModifierSnippet.d.ts +4 -0
- package/dist/wgpuShadedModifierSnippet.d.ts.map +1 -0
- package/dist/wgpuShadedModifierSnippet.js +18 -0
- package/dist/wgpuShadedModifierSnippet.js.map +1 -0
- package/dist/wgpuShadedPrelude.d.ts +16 -0
- package/dist/wgpuShadedPrelude.d.ts.map +1 -0
- package/dist/wgpuShadedPrelude.js +625 -0
- package/dist/wgpuShadedPrelude.js.map +1 -0
- package/dist/wgpuShadowMap.d.ts +4 -0
- package/dist/wgpuShadowMap.d.ts.map +1 -0
- package/dist/wgpuShadowMap.js +155 -0
- package/dist/wgpuShadowMap.js.map +1 -0
- package/dist/wgpuSkinPalette.d.ts +7 -0
- package/dist/wgpuSkinPalette.d.ts.map +1 -0
- package/dist/wgpuSkinPalette.js +173 -0
- package/dist/wgpuSkinPalette.js.map +1 -0
- package/dist/wgpuToonPrelude.d.ts +8 -0
- package/dist/wgpuToonPrelude.d.ts.map +1 -0
- package/dist/wgpuToonPrelude.js +192 -0
- package/dist/wgpuToonPrelude.js.map +1 -0
- package/dist/wgpuUnlitPrelude.d.ts +9 -0
- package/dist/wgpuUnlitPrelude.d.ts.map +1 -0
- package/dist/wgpuUnlitPrelude.js +142 -0
- package/dist/wgpuUnlitPrelude.js.map +1 -0
- package/dist/wgpuWireframePrelude.d.ts +6 -0
- package/dist/wgpuWireframePrelude.d.ts.map +1 -0
- package/dist/wgpuWireframePrelude.js +77 -0
- package/dist/wgpuWireframePrelude.js.map +1 -0
- package/dist/wgpuWireframeUpload.d.ts +3 -0
- package/dist/wgpuWireframeUpload.d.ts.map +1 -0
- package/dist/wgpuWireframeUpload.js +68 -0
- package/dist/wgpuWireframeUpload.js.map +1 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.d.ts +4 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.js +69 -0
- package/dist/wireframeWgpuMeshMaterialRenderer.js.map +1 -0
- package/package.json +57 -0
- package/src/anisotropyPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/blinnPhongWgpuMeshMaterialRenderer.test.ts +82 -0
- package/src/clearcoatPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/customShaderWgpuMeshMaterialRenderer.test.ts +207 -0
- package/src/depthWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/drawWgpuScene3D.test.ts +247 -0
- package/src/emissiveWgpuMeshMaterialRenderer.test.ts +64 -0
- package/src/enableWgpuScene3DCustomShaderGuards.test.ts +73 -0
- package/src/enableWgpuScene3DForwardLightSelectionGuards.test.ts +39 -0
- package/src/explainWgpuScene3DForwardLightSelection.test.ts +15 -0
- package/src/iridescencePbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/lambertWgpuMeshMaterialRenderer.test.ts +77 -0
- package/src/matcapWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/normalWgpuMeshMaterialRenderer.test.ts +69 -0
- package/src/phongWgpuMeshMaterialRenderer.test.ts +79 -0
- package/src/prepareWgpuScene3DForwardLights.test.ts +84 -0
- package/src/registerStandardPbrWgpuMaterial.test.ts +15 -0
- package/src/shadedWgpuMeshMaterialRenderer.test.ts +63 -0
- package/src/sheenPbrWgpuMeshMaterialRenderer.test.ts +87 -0
- package/src/specularGlossinessPbrWgpuMeshMaterialRenderer.test.ts +100 -0
- package/src/specularPbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/standardPbrWgpuMeshMaterialRenderer.test.ts +172 -0
- package/src/subsurfacePbrWgpuMeshMaterialRenderer.test.ts +90 -0
- package/src/toonWgpuMeshMaterialRenderer.test.ts +89 -0
- package/src/transmissionVolumePbrWgpuMeshMaterialRenderer.test.ts +97 -0
- package/src/unlitWgpuMeshMaterialRenderer.test.ts +94 -0
- package/src/vertexColorWgpuMeshMaterialRenderer.test.ts +62 -0
- package/src/wgpuClassicPrelude.test.ts +176 -0
- package/src/wgpuDebugPrelude.test.ts +79 -0
- package/src/wgpuEnvironmentCube.test.ts +86 -0
- package/src/wgpuEnvironmentIblBake.test.ts +79 -0
- package/src/wgpuEnvironmentSkybox.test.ts +56 -0
- package/src/wgpuMatcapPrelude.test.ts +70 -0
- package/src/wgpuMeshMaterialRegistry.test.ts +55 -0
- package/src/wgpuMeshPipeline.test.ts +844 -0
- package/src/wgpuMeshUpload.test.ts +177 -0
- package/src/wgpuParticleEmitter3D.test.ts +200 -0
- package/src/wgpuPbrPipelineCache.test.ts +67 -0
- package/src/wgpuPbrPrelude.test.ts +162 -0
- package/src/wgpuScene3DRuntime.test.ts +35 -0
- package/src/wgpuScene3DTime.test.ts +20 -0
- package/src/wgpuShadedModifierSnippet.test.ts +33 -0
- package/src/wgpuShadedPrelude.test.ts +394 -0
- package/src/wgpuShadowMap.test.ts +169 -0
- package/src/wgpuSkinPalette.test.ts +88 -0
- package/src/wgpuToonPrelude.test.ts +93 -0
- package/src/wgpuUnlitPrelude.test.ts +102 -0
- package/src/wgpuWireframePrelude.test.ts +54 -0
- package/src/wgpuWireframeUpload.test.ts +36 -0
- package/src/wireframeWgpuMeshMaterialRenderer.test.ts +69 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const anisotropyPbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerAnisotropyPbrWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=anisotropyPbrWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anisotropyPbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/anisotropyPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAyBzB,eAAO,MAAM,qCAAqC,EAAE,wBAmCnD,CAAC;AAIF,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE9E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { AnisotropyPbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { buildWgpuPbrStandardDefineKey, ensureWgpuPbrMaterialBindGroup, getWgpuPbrMaterialScratch, writeWgpuPbrMaterialUniform, writeWgpuPbrStandardBlock, } from './standardPbrWgpuMeshMaterialRenderer';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
6
|
+
import { ensureWgpuPbrPipeline } from './wgpuPbrPipelineCache';
|
|
7
|
+
// The built-in Anisotropy (KHR_materials_anisotropy) forward-lit mesh-material renderer — the WGSL
|
|
8
|
+
// mirror of anisotropyPbrGlMeshMaterialRenderer. Anisotropy stretches the specular highlight along the
|
|
9
|
+
// mesh tangent direction — brushed metal, hair, vinyl — by splitting roughness into along-tangent and
|
|
10
|
+
// across-tangent axes and evaluating an anisotropic GGX distribution (Burley) in the shader's rotated
|
|
11
|
+
// tangent frame. It REQUIRES mesh tangents, which the canonical PBR vertex record already carries
|
|
12
|
+
// (location 2). bind builds the standard define key from `material.standard` + the surface trailer, sets
|
|
13
|
+
// the ANISOTROPY flag, selects/compiles that pipeline variant for the current color format, writes the
|
|
14
|
+
// shared Frame uniform, then writes the base block + the anisotropy strength/rotation into the one
|
|
15
|
+
// MaterialBlock uniform and binds it at group(2). The lobe lives behind `const ANISOTROPY` in the PBR
|
|
16
|
+
// uber-shader. The anisotropy direction map is reserved by the descriptor but NOT sampled on wgpu yet
|
|
17
|
+
// (maps deferred). See registerAnisotropyPbrWgpuMaterial.
|
|
18
|
+
export const anisotropyPbrWgpuMeshMaterialRenderer = {
|
|
19
|
+
bind(state, material, lights, camera) {
|
|
20
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
21
|
+
const pass = stateRuntime.renderPass;
|
|
22
|
+
if (pass === null)
|
|
23
|
+
return;
|
|
24
|
+
const anisotropy = material;
|
|
25
|
+
const standard = anisotropy !== null ? anisotropy.standard : null;
|
|
26
|
+
const key = buildWgpuPbrStandardDefineKey(standard, anisotropy);
|
|
27
|
+
key.anisotropyEnabled = true;
|
|
28
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
29
|
+
const pipeline = ensureWgpuPbrPipeline(state, key, format);
|
|
30
|
+
writeWgpuFrameUniform(state, camera, lights);
|
|
31
|
+
const binding = ensureWgpuPbrMaterialBindGroup(state, pipeline, anisotropy ?? FALLBACK_MATERIAL, standard);
|
|
32
|
+
const out = getWgpuPbrMaterialScratch();
|
|
33
|
+
writeWgpuPbrStandardBlock(out, standard, anisotropy !== null ? anisotropy.alphaCutoff : 0.5);
|
|
34
|
+
out.fill(0, 16);
|
|
35
|
+
// anisotropy group (floats 24..25): strength, rotation (radians).
|
|
36
|
+
out[24] = anisotropy !== null ? anisotropy.anisotropyStrength : 0;
|
|
37
|
+
out[25] = anisotropy !== null ? anisotropy.anisotropyRotation : 0;
|
|
38
|
+
writeWgpuPbrMaterialUniform(state, binding);
|
|
39
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
40
|
+
pass.setBindGroup(2, binding.bindGroup);
|
|
41
|
+
},
|
|
42
|
+
draw(state, proxy, geometry) {
|
|
43
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
// Installs the built-in Anisotropy renderer for AnisotropyPbrMaterialKind on this state. Opt-in (no
|
|
47
|
+
// top-level side effect): drawScene3D only draws Anisotropy subsets once this is called.
|
|
48
|
+
export function registerAnisotropyPbrWgpuMaterial(state) {
|
|
49
|
+
registerWgpuMeshMaterialRenderer(state, AnisotropyPbrMaterialKind, anisotropyPbrWgpuMeshMaterialRenderer);
|
|
50
|
+
}
|
|
51
|
+
const FALLBACK_MATERIAL = {};
|
|
52
|
+
//# sourceMappingURL=anisotropyPbrWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anisotropyPbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/anisotropyPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const blinnPhongWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerBlinnPhongWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=blinnPhongWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blinnPhongWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/blinnPhongWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,wBAAwB,EACxB,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAezB,eAAO,MAAM,kCAAkC,EAAE,wBA4ChD,CAAC;AAKF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE3E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
3
|
+
import { BlinnPhongMaterialKind } from '@flighthq/types';
|
|
4
|
+
import { bindWgpuClassicSurface, ensureWgpuClassicPipeline } from './wgpuClassicPrelude';
|
|
5
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
6
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, isWgpuTextureReady, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
7
|
+
// The built-in classic BlinnPhong forward-lit mesh-material renderer (WgpuMeshMaterialRenderer for
|
|
8
|
+
// BlinnPhongMaterialKind) — the WGSL mirror of blinnPhongGlMeshMaterialRenderer. Lambert diffuse plus
|
|
9
|
+
// a half-vector specular lobe (cheaper, smoother highlights than reflection-vector Phong): bind selects
|
|
10
|
+
// the classic uber-shader's `blinnphong` variant for the material's alpha mode + color format, writes
|
|
11
|
+
// the shared Frame uniform (camera position AND view-projection, since the specular term is view-
|
|
12
|
+
// dependent, plus the packed light block), binds the pipeline + Frame group (beginWgpuMeshDraw), then
|
|
13
|
+
// binds the material's linear diffuse + specular colors and shininess at group(2). draw issues the
|
|
14
|
+
// indexed draw. See registerBlinnPhongWgpuMaterial to install it.
|
|
15
|
+
export const blinnPhongWgpuMeshMaterialRenderer = {
|
|
16
|
+
bind(state, material, lights, camera) {
|
|
17
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
18
|
+
const pass = stateRuntime.renderPass;
|
|
19
|
+
if (pass === null)
|
|
20
|
+
return;
|
|
21
|
+
const blinnPhong = material;
|
|
22
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
23
|
+
const pipeline = ensureWgpuClassicPipeline(state, defineKeyForMaterial(blinnPhong), format);
|
|
24
|
+
writeWgpuFrameUniform(state, camera, lights);
|
|
25
|
+
let group;
|
|
26
|
+
if (blinnPhong === null) {
|
|
27
|
+
group = bindWgpuClassicSurface(state, pipeline, FALLBACK_MATERIAL, WHITE, WHITE, 32, 0.5, null, null, null, null);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
unpackColorToLinear(_diffuse, blinnPhong.diffuse);
|
|
31
|
+
unpackColorToLinear(_specular, blinnPhong.specular);
|
|
32
|
+
group = bindWgpuClassicSurface(state, pipeline, blinnPhong, _diffuse, _specular, blinnPhong.shininess, blinnPhong.alphaCutoff, blinnPhong.diffuseMap, blinnPhong.specularMap, blinnPhong.normalMap, blinnPhong.alphaMap);
|
|
33
|
+
}
|
|
34
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
35
|
+
pass.setBindGroup(2, group);
|
|
36
|
+
},
|
|
37
|
+
draw(state, proxy, geometry) {
|
|
38
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
// Registers the built-in BlinnPhong renderer for BlinnPhongMaterialKind on this state. Opt-in (no
|
|
42
|
+
// top-level side effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with BlinnPhong
|
|
43
|
+
// materials draw.
|
|
44
|
+
export function registerBlinnPhongWgpuMaterial(state) {
|
|
45
|
+
registerWgpuMeshMaterialRenderer(state, BlinnPhongMaterialKind, blinnPhongWgpuMeshMaterialRenderer);
|
|
46
|
+
}
|
|
47
|
+
// The feature define key for a BlinnPhong material: the fixed `blinnphong` lighting model plus the
|
|
48
|
+
// alpha-mask + double-sided flags and which optional maps are present (mirrors
|
|
49
|
+
// blinnPhongGlMeshMaterialRenderer).
|
|
50
|
+
function defineKeyForMaterial(material) {
|
|
51
|
+
return {
|
|
52
|
+
alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
|
|
53
|
+
doubleSided: material !== null && material.doubleSided,
|
|
54
|
+
// Opaque materials ignore coverage (SurfaceMaterial contract) — only 'mask'/'blend' sample the map.
|
|
55
|
+
hasAlphaMap: material !== null && material.alphaMode !== 'opaque' && isWgpuTextureReady(material.alphaMap),
|
|
56
|
+
hasDiffuseMap: material !== null && isWgpuTextureReady(material.diffuseMap),
|
|
57
|
+
hasNormalMap: material !== null && isWgpuTextureReady(material.normalMap),
|
|
58
|
+
hasSpecularMap: material !== null && isWgpuTextureReady(material.specularMap),
|
|
59
|
+
lightingModel: 'blinnphong',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
const _diffuse = [0, 0, 0, 0];
|
|
63
|
+
const _specular = [0, 0, 0, 0];
|
|
64
|
+
const WHITE = [1, 1, 1, 1];
|
|
65
|
+
const FALLBACK_MATERIAL = {};
|
|
66
|
+
//# sourceMappingURL=blinnPhongWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blinnPhongWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/blinnPhongWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const clearcoatPbrWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerClearcoatPbrWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=clearcoatPbrWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearcoatPbrWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/clearcoatPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAyBzB,eAAO,MAAM,oCAAoC,EAAE,wBAmClD,CAAC;AAIF,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE7E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { ClearcoatPbrMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { buildWgpuPbrStandardDefineKey, ensureWgpuPbrMaterialBindGroup, getWgpuPbrMaterialScratch, writeWgpuPbrMaterialUniform, writeWgpuPbrStandardBlock, } from './standardPbrWgpuMeshMaterialRenderer';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
6
|
+
import { ensureWgpuPbrPipeline } from './wgpuPbrPipelineCache';
|
|
7
|
+
// The built-in Clearcoat (KHR_materials_clearcoat) forward-lit mesh-material renderer — the WGSL mirror
|
|
8
|
+
// of clearcoatPbrGlMeshMaterialRenderer. Clearcoat adds a second, always-dielectric GGX specular lobe
|
|
9
|
+
// (F0 = 0.04) over the base PBR layer — the wet, lacquered highlight of car paint or varnish — with its
|
|
10
|
+
// own clearcoat roughness, and attenuates the base layers by the clearcoat's Fresnel so energy is
|
|
11
|
+
// conserved. bind builds the standard define key from `material.standard` + the surface trailer, sets
|
|
12
|
+
// the CLEARCOAT flag, selects/compiles that pipeline variant for the current color format, writes the
|
|
13
|
+
// shared Frame uniform, then writes the base block + the clearcoat factors into the one MaterialBlock
|
|
14
|
+
// uniform and binds it at group(2). The clearcoat lobe lives behind `const CLEARCOAT` in the one PBR
|
|
15
|
+
// uber-shader. The clearcoat/roughness/normal maps are reserved by the descriptor but NOT sampled on
|
|
16
|
+
// wgpu yet (scalar clearcoat is the current approximation; maps deferred). See
|
|
17
|
+
// registerClearcoatPbrWgpuMaterial.
|
|
18
|
+
export const clearcoatPbrWgpuMeshMaterialRenderer = {
|
|
19
|
+
bind(state, material, lights, camera) {
|
|
20
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
21
|
+
const pass = stateRuntime.renderPass;
|
|
22
|
+
if (pass === null)
|
|
23
|
+
return;
|
|
24
|
+
const clearcoat = material;
|
|
25
|
+
const standard = clearcoat !== null ? clearcoat.standard : null;
|
|
26
|
+
const key = buildWgpuPbrStandardDefineKey(standard, clearcoat);
|
|
27
|
+
key.clearcoatEnabled = true;
|
|
28
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
29
|
+
const pipeline = ensureWgpuPbrPipeline(state, key, format);
|
|
30
|
+
writeWgpuFrameUniform(state, camera, lights);
|
|
31
|
+
const binding = ensureWgpuPbrMaterialBindGroup(state, pipeline, clearcoat ?? FALLBACK_MATERIAL, standard);
|
|
32
|
+
const out = getWgpuPbrMaterialScratch();
|
|
33
|
+
writeWgpuPbrStandardBlock(out, standard, clearcoat !== null ? clearcoat.alphaCutoff : 0.5);
|
|
34
|
+
out.fill(0, 16);
|
|
35
|
+
// clearcoat group (floats 16..19): clearcoat strength, clearcoat roughness.
|
|
36
|
+
out[16] = clearcoat !== null ? clearcoat.clearcoat : 0;
|
|
37
|
+
out[17] = clearcoat !== null ? clearcoat.clearcoatRoughness : 0;
|
|
38
|
+
writeWgpuPbrMaterialUniform(state, binding);
|
|
39
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
40
|
+
pass.setBindGroup(2, binding.bindGroup);
|
|
41
|
+
},
|
|
42
|
+
draw(state, proxy, geometry) {
|
|
43
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
// Installs the built-in Clearcoat renderer for ClearcoatPbrMaterialKind on this state. Opt-in (no
|
|
47
|
+
// top-level side effect): drawScene3D only draws Clearcoat subsets once this is called.
|
|
48
|
+
export function registerClearcoatPbrWgpuMaterial(state) {
|
|
49
|
+
registerWgpuMeshMaterialRenderer(state, ClearcoatPbrMaterialKind, clearcoatPbrWgpuMeshMaterialRenderer);
|
|
50
|
+
}
|
|
51
|
+
const FALLBACK_MATERIAL = {};
|
|
52
|
+
//# sourceMappingURL=clearcoatPbrWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearcoatPbrWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/clearcoatPbrWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WgpuCustomMaterialShaderSource, WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export { WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY } from './wgpuCustomMaterialAbi';
|
|
3
|
+
export declare const customShaderWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
4
|
+
export declare function getWgpuCustomMaterialShaderSource(state: WgpuRenderState, shaderKey: string): WgpuCustomMaterialShaderSource | null;
|
|
5
|
+
export declare function registerCustomShaderWgpuMaterial(state: WgpuRenderState): void;
|
|
6
|
+
export declare function registerWgpuCustomMaterialShader(state: WgpuRenderState, shaderKey: string, wgslSource: WgpuCustomMaterialShaderSource): void;
|
|
7
|
+
//# sourceMappingURL=customShaderWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customShaderWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/customShaderWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,8BAA8B,EAC9B,wBAAwB,EAExB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAmBzB,OAAO,EAAE,mCAAmC,EAAE,qCAAqC,EAAE,MAAM,yBAAyB,CAAC;AAmBrH,eAAO,MAAM,oCAAoC,EAAE,wBAuDlD,CAAC;AAGF,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,GAChB,8BAA8B,GAAG,IAAI,CAEvC;AAGD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAE7E;AAgBD,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,eAAe,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,8BAA8B,GACzC,IAAI,CAON"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { CustomShaderMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY } from './wgpuCustomMaterialAbi';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, createWgpuMeshPipeline, drawWgpuMeshSubset, ensureWgpuPlaceholderTextureView, ensureWgpuScene3DPipeline, getWgpuMaterialSampler, isWgpuTextureReady, resolveWgpuMaterialTextureView, stashWgpuUvTransform, writeWgpuFrameUniform, } from './wgpuMeshPipeline';
|
|
6
|
+
import { getWgpuScene3DRuntime } from './wgpuScene3DRuntime';
|
|
7
|
+
export { WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY } from './wgpuCustomMaterialAbi';
|
|
8
|
+
// WebGPU's CustomShaderMaterial mesh renderer. The shader is a complete caller-authored WGSL module,
|
|
9
|
+
// while scene-wgpu supplies and writes the same fixed Frame group(0) and Draw group(1) used by every
|
|
10
|
+
// built-in mesh family. User values occupy group(2); bag-order sampler/texture pairs occupy group(3).
|
|
11
|
+
export const customShaderWgpuMeshMaterialRenderer = {
|
|
12
|
+
bind(state, material, lights, camera) {
|
|
13
|
+
const scene = getWgpuScene3DRuntime(state);
|
|
14
|
+
const runtime = getWgpuRenderStateRuntime(state);
|
|
15
|
+
const pass = runtime.renderPass;
|
|
16
|
+
const custom = material;
|
|
17
|
+
if (pass === null || custom === null || custom.shaderKey === '') {
|
|
18
|
+
scene.activeMeshPipeline = null;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const source = getWgpuCustomMaterialShaderSource(state, custom.shaderKey);
|
|
22
|
+
if (source === null) {
|
|
23
|
+
scene.activeMeshPipeline = null;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
scene.customShaderGuard?.(state, custom.shaderKey, source, custom);
|
|
27
|
+
if (Object.keys(custom.uniforms ?? {}).length > WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY ||
|
|
28
|
+
Object.keys(custom.textures ?? {}).length > WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY) {
|
|
29
|
+
// Never submit a bind group that cannot satisfy the fixed layout. The opt-in guard above
|
|
30
|
+
// explains the overflow; without guards this follows the renderer's silent skip convention.
|
|
31
|
+
scene.activeMeshPipeline = null;
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const layouts = ensureCustomMaterialLayouts(state);
|
|
35
|
+
const format = runtime.currentColorFormat ?? state.format;
|
|
36
|
+
const sideKey = custom.doubleSided ? 'double' : 'single';
|
|
37
|
+
const pipeline = ensureWgpuScene3DPipeline(state, `custom:${custom.shaderKey}:${format}:${sideKey}`, (blended, skinned) => compileCustomMaterialPipeline(state, source, format, custom.doubleSided, blended, skinned, layouts));
|
|
38
|
+
const binding = ensureCustomMaterialBinding(state, custom, layouts.user);
|
|
39
|
+
uploadCustomUniforms(state, binding.uniformBuffer, custom);
|
|
40
|
+
const textureBindGroup = ensureCustomTextureBindGroup(state, custom, layouts.texture, binding);
|
|
41
|
+
writeWgpuFrameUniform(state, camera, lights);
|
|
42
|
+
stashWgpuUvTransform(state, null);
|
|
43
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
44
|
+
pass.setBindGroup(2, binding.uniformBindGroup);
|
|
45
|
+
pass.setBindGroup(3, textureBindGroup);
|
|
46
|
+
},
|
|
47
|
+
draw(state, proxy, geometry) {
|
|
48
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
// Returns the WGSL module registered under `shaderKey`, or null when the material should skip drawing.
|
|
52
|
+
export function getWgpuCustomMaterialShaderSource(state, shaderKey) {
|
|
53
|
+
return _customMaterialShaders.get(state)?.get(shaderKey) ?? null;
|
|
54
|
+
}
|
|
55
|
+
// Installs CustomShaderMaterialKind in this state's WGPU mesh-material registry.
|
|
56
|
+
export function registerCustomShaderWgpuMaterial(state) {
|
|
57
|
+
registerWgpuMeshMaterialRenderer(state, CustomShaderMaterialKind, customShaderWgpuMeshMaterialRenderer);
|
|
58
|
+
}
|
|
59
|
+
// Registers a complete WGSL module for a CustomShaderMaterial shaderKey.
|
|
60
|
+
//
|
|
61
|
+
// Fixed ABI:
|
|
62
|
+
// - group(0)/binding(0): the Frame struct from WGPU_MESH_PRELUDE_WGSL.
|
|
63
|
+
// - group(1)/binding(0): the Draw struct from WGPU_MESH_PRELUDE_WGSL (normalMatrix is mat3x3f).
|
|
64
|
+
// - group(2)/binding(0): `var<uniform> user : UserBlock`. Declare one vec4f field for each material
|
|
65
|
+
// uniform, in alphabetical field-name order. Scalars use .x; 2/3/4-component values use .xy/.xyz/.xyzw.
|
|
66
|
+
// - group(3): the material texture bag in Object.keys order, each slot N declaring its sampler at
|
|
67
|
+
// binding 2*N and texture_2d<f32> at binding 2*N+1.
|
|
68
|
+
//
|
|
69
|
+
// Entry points are `vs_main` and `fs_main`; attributes use locations 0 position, 1 normal, 2 tangent,
|
|
70
|
+
// and 3 uv. Alpha-blended materials must return straight (not premultiplied) fragment alpha. The
|
|
71
|
+
// registry follows the GL lifetime rule: last source write wins before compilation, while an already
|
|
72
|
+
// compiled shaderKey remains cached; use a new key to compile edited WGSL.
|
|
73
|
+
export function registerWgpuCustomMaterialShader(state, shaderKey, wgslSource) {
|
|
74
|
+
let registry = _customMaterialShaders.get(state);
|
|
75
|
+
if (registry === undefined) {
|
|
76
|
+
registry = new Map();
|
|
77
|
+
_customMaterialShaders.set(state, registry);
|
|
78
|
+
}
|
|
79
|
+
registry.set(shaderKey, wgslSource);
|
|
80
|
+
}
|
|
81
|
+
function compileCustomMaterialPipeline(state, source, format, doubleSided, blended, skinned, layouts) {
|
|
82
|
+
return createWgpuMeshPipeline(state, {
|
|
83
|
+
blended,
|
|
84
|
+
doubleSided,
|
|
85
|
+
extraBindGroupLayout: layouts.texture,
|
|
86
|
+
format,
|
|
87
|
+
materialBindGroupLayout: layouts.user,
|
|
88
|
+
module: state.device.createShaderModule({ code: source }),
|
|
89
|
+
skinned,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function ensureCustomMaterialLayouts(state) {
|
|
93
|
+
let layouts = _customMaterialLayouts.get(state);
|
|
94
|
+
if (layouts !== undefined)
|
|
95
|
+
return layouts;
|
|
96
|
+
const visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
|
|
97
|
+
const entries = [];
|
|
98
|
+
for (let slot = 0; slot < WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY; slot++) {
|
|
99
|
+
entries.push({
|
|
100
|
+
binding: slot * 2,
|
|
101
|
+
visibility,
|
|
102
|
+
sampler: { type: 'filtering' },
|
|
103
|
+
});
|
|
104
|
+
entries.push({
|
|
105
|
+
binding: slot * 2 + 1,
|
|
106
|
+
visibility,
|
|
107
|
+
texture: { sampleType: 'float' },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
layouts = {
|
|
111
|
+
texture: state.device.createBindGroupLayout({ entries }),
|
|
112
|
+
user: state.device.createBindGroupLayout({
|
|
113
|
+
entries: [{ binding: 0, visibility, buffer: { type: 'uniform' } }],
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
_customMaterialLayouts.set(state, layouts);
|
|
117
|
+
return layouts;
|
|
118
|
+
}
|
|
119
|
+
function ensureCustomMaterialBinding(state, material, layout) {
|
|
120
|
+
let stateBindings = _customMaterialBindings.get(state);
|
|
121
|
+
if (stateBindings === undefined) {
|
|
122
|
+
stateBindings = new WeakMap();
|
|
123
|
+
_customMaterialBindings.set(state, stateBindings);
|
|
124
|
+
}
|
|
125
|
+
let binding = stateBindings.get(material);
|
|
126
|
+
if (binding !== undefined)
|
|
127
|
+
return binding;
|
|
128
|
+
const uniformBuffer = state.device.createBuffer({
|
|
129
|
+
size: WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY * 16,
|
|
130
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
131
|
+
});
|
|
132
|
+
binding = {
|
|
133
|
+
textureBindGroup: null,
|
|
134
|
+
textureKeys: [],
|
|
135
|
+
textureSamplers: [],
|
|
136
|
+
textureViews: [],
|
|
137
|
+
uniformBindGroup: state.device.createBindGroup({
|
|
138
|
+
layout,
|
|
139
|
+
entries: [{ binding: 0, resource: { buffer: uniformBuffer } }],
|
|
140
|
+
}),
|
|
141
|
+
uniformBuffer,
|
|
142
|
+
};
|
|
143
|
+
stateBindings.set(material, binding);
|
|
144
|
+
return binding;
|
|
145
|
+
}
|
|
146
|
+
function uploadCustomUniforms(state, buffer, material) {
|
|
147
|
+
_uniformScratch.fill(0);
|
|
148
|
+
const uniforms = material.uniforms ?? {};
|
|
149
|
+
const names = Object.keys(uniforms).sort();
|
|
150
|
+
const count = Math.min(names.length, WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY);
|
|
151
|
+
for (let slot = 0; slot < count; slot++) {
|
|
152
|
+
const value = uniforms[names[slot]];
|
|
153
|
+
const offset = slot * 4;
|
|
154
|
+
if (typeof value === 'number') {
|
|
155
|
+
_uniformScratch[offset] = value;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const componentCount = Math.min(value.length, 4);
|
|
159
|
+
for (let component = 0; component < componentCount; component++) {
|
|
160
|
+
_uniformScratch[offset + component] = value[component];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
state.device.queue.writeBuffer(buffer, 0, _uniformScratch.buffer, 0, _uniformScratch.byteLength);
|
|
164
|
+
}
|
|
165
|
+
function ensureCustomTextureBindGroup(state, material, layout, binding) {
|
|
166
|
+
const textures = material.textures ?? {};
|
|
167
|
+
const placeholder = ensureWgpuPlaceholderTextureView(state);
|
|
168
|
+
let textureCount = 0;
|
|
169
|
+
for (const name in textures) {
|
|
170
|
+
if (!Object.prototype.hasOwnProperty.call(textures, name))
|
|
171
|
+
continue;
|
|
172
|
+
const texture = textures[name];
|
|
173
|
+
_textureKeyScratch[textureCount] = name;
|
|
174
|
+
_textureSamplerScratch[textureCount] = getWgpuMaterialSampler(state, texture);
|
|
175
|
+
_textureViewScratch[textureCount] = isWgpuTextureReady(texture)
|
|
176
|
+
? resolveWgpuMaterialTextureView(state, texture)
|
|
177
|
+
: placeholder;
|
|
178
|
+
textureCount++;
|
|
179
|
+
}
|
|
180
|
+
_textureKeyScratch.length = textureCount;
|
|
181
|
+
for (let slot = textureCount; slot < WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY; slot++) {
|
|
182
|
+
_textureSamplerScratch[slot] = getWgpuMaterialSampler(state, null);
|
|
183
|
+
_textureViewScratch[slot] = placeholder;
|
|
184
|
+
}
|
|
185
|
+
if (!customTextureBindingNeedsRebuild(binding, textureCount))
|
|
186
|
+
return binding.textureBindGroup;
|
|
187
|
+
const entries = [];
|
|
188
|
+
for (let slot = 0; slot < WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY; slot++) {
|
|
189
|
+
entries.push({ binding: slot * 2, resource: _textureSamplerScratch[slot] });
|
|
190
|
+
entries.push({ binding: slot * 2 + 1, resource: _textureViewScratch[slot] });
|
|
191
|
+
}
|
|
192
|
+
binding.textureBindGroup = state.device.createBindGroup({ layout, entries });
|
|
193
|
+
overwriteCache(binding.textureKeys, _textureKeyScratch);
|
|
194
|
+
overwriteCache(binding.textureSamplers, _textureSamplerScratch);
|
|
195
|
+
overwriteCache(binding.textureViews, _textureViewScratch);
|
|
196
|
+
return binding.textureBindGroup;
|
|
197
|
+
}
|
|
198
|
+
function customTextureBindingNeedsRebuild(binding, textureCount) {
|
|
199
|
+
if (binding.textureBindGroup === null || binding.textureKeys.length !== textureCount)
|
|
200
|
+
return true;
|
|
201
|
+
for (let slot = 0; slot < textureCount; slot++) {
|
|
202
|
+
if (binding.textureKeys[slot] !== _textureKeyScratch[slot])
|
|
203
|
+
return true;
|
|
204
|
+
}
|
|
205
|
+
for (let slot = 0; slot < WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY; slot++) {
|
|
206
|
+
if (binding.textureSamplers[slot] !== _textureSamplerScratch[slot] ||
|
|
207
|
+
binding.textureViews[slot] !== _textureViewScratch[slot]) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
function overwriteCache(cache, source) {
|
|
214
|
+
cache.length = source.length;
|
|
215
|
+
for (let i = 0; i < source.length; i++)
|
|
216
|
+
cache[i] = source[i];
|
|
217
|
+
}
|
|
218
|
+
const _customMaterialShaders = new WeakMap();
|
|
219
|
+
const _customMaterialLayouts = new WeakMap();
|
|
220
|
+
const _customMaterialBindings = new WeakMap();
|
|
221
|
+
const _uniformScratch = new Float32Array(WGPU_CUSTOM_SHADER_USER_VEC4_CAPACITY * 4);
|
|
222
|
+
const _textureKeyScratch = [];
|
|
223
|
+
const _textureSamplerScratch = new Array(WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY);
|
|
224
|
+
const _textureViewScratch = new Array(WGPU_CUSTOM_SHADER_TEXTURE_CAPACITY);
|
|
225
|
+
//# sourceMappingURL=customShaderWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customShaderWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/customShaderWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WgpuMeshMaterialRenderer, WgpuRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const depthWgpuMeshMaterialRenderer: WgpuMeshMaterialRenderer;
|
|
3
|
+
export declare function registerDepthWgpuMaterial(state: WgpuRenderState): void;
|
|
4
|
+
//# sourceMappingURL=depthWgpuMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthWgpuMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/depthWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,wBAAwB,EACxB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAazB,eAAO,MAAM,6BAA6B,EAAE,wBA8B3C,CAAC;AAIF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAEtE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getWgpuRenderStateRuntime } from '@flighthq/render-wgpu';
|
|
2
|
+
import { DepthMaterialKind } from '@flighthq/types';
|
|
3
|
+
import { bindWgpuDebugSurface, ensureWgpuDebugPipeline } from './wgpuDebugPrelude';
|
|
4
|
+
import { registerWgpuMeshMaterialRenderer } from './wgpuMeshMaterialRegistry';
|
|
5
|
+
import { beginWgpuMeshDraw, drawWgpuMeshSubset, writeWgpuFrameUniform } from './wgpuMeshPipeline';
|
|
6
|
+
// The built-in Depth forward renderer (WgpuMeshMaterialRenderer for DepthMaterialKind) — the WGSL mirror
|
|
7
|
+
// of depthGlMeshMaterialRenderer. A lighting-independent debug/utility pass material: bind selects the
|
|
8
|
+
// debug pipeline in depth mode for the color format, writes the shared Frame uniform (lights ignored),
|
|
9
|
+
// and binds the material's [near, far] linearization range; draw issues the indexed draw. The fragment
|
|
10
|
+
// scene2d linearizes window-space depth into eye space and writes it as grayscale LINEAR color. See
|
|
11
|
+
// registerDepthWgpuMaterial to install it.
|
|
12
|
+
export const depthWgpuMeshMaterialRenderer = {
|
|
13
|
+
bind(state, material, _lights, camera) {
|
|
14
|
+
const stateRuntime = getWgpuRenderStateRuntime(state);
|
|
15
|
+
const pass = stateRuntime.renderPass;
|
|
16
|
+
if (pass === null)
|
|
17
|
+
return;
|
|
18
|
+
const depth = material;
|
|
19
|
+
const format = stateRuntime.currentColorFormat ?? state.format;
|
|
20
|
+
const pipeline = ensureWgpuDebugPipeline(state, { hasNormalMap: false, mode: 'depth' }, format);
|
|
21
|
+
writeWgpuFrameUniform(state, camera, _lights);
|
|
22
|
+
let group;
|
|
23
|
+
if (depth === null) {
|
|
24
|
+
group = bindWgpuDebugSurface(state, pipeline, FALLBACK_MATERIAL, 0, 1, 1);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
group = bindWgpuDebugSurface(state, pipeline, depth, depth.near, depth.far, 1);
|
|
28
|
+
}
|
|
29
|
+
beginWgpuMeshDraw(state, pipeline);
|
|
30
|
+
pass.setBindGroup(2, group);
|
|
31
|
+
},
|
|
32
|
+
draw(state, proxy, geometry) {
|
|
33
|
+
drawWgpuMeshSubset(state, proxy, geometry);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Registers the built-in Depth renderer for DepthMaterialKind on this state. Opt-in (no top-level side
|
|
37
|
+
// effect); call once per WgpuRenderState before drawWgpuScene3D so meshes with DepthMaterials draw.
|
|
38
|
+
export function registerDepthWgpuMaterial(state) {
|
|
39
|
+
registerWgpuMeshMaterialRenderer(state, DepthMaterialKind, depthWgpuMeshMaterialRenderer);
|
|
40
|
+
}
|
|
41
|
+
const FALLBACK_MATERIAL = {};
|
|
42
|
+
//# sourceMappingURL=depthWgpuMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthWgpuMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/depthWgpuMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAWlE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElG,yGAAyG;AACzG,uGAAuG;AACvG,uGAAuG;AACvG,uGAAuG;AACvG,oGAAoG;AACpG,2CAA2C;AAC3C,MAAM,CAAC,MAAM,6BAA6B,GAA6B;IACrE,IAAI,CACF,KAAsB,EACtB,QAAmC,EACnC,OAAoC,EACpC,MAA0B;QAE1B,MAAM,YAAY,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;QACrC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO;QAE1B,MAAM,KAAK,GAAG,QAA0C,CAAC;QACzD,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QAChG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAE9C,IAAI,KAAmB,CAAC;QACxB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,KAAsB,EAAE,KAAmC,EAAE,QAAgC;QAChG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF,uGAAuG;AACvG,oGAAoG;AACpG,MAAM,UAAU,yBAAyB,CAAC,KAAsB;IAC9D,gCAAgC,CAAC,KAAK,EAAE,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,iBAAiB,GAAG,EAA6B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Camera3D, Mesh, Scene3DLightsLike, Node3D, WgpuRenderState, WgpuScene3DForwardLightList } from '@flighthq/types';
|
|
2
|
+
export declare function drawWgpuScene3D(state: WgpuRenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>, forwardLights?: Readonly<WgpuScene3DForwardLightList>): void;
|
|
3
|
+
export declare function isWgpuMeshGpuSkinned(state: WgpuRenderState, mesh: Readonly<Mesh>): boolean;
|
|
4
|
+
//# sourceMappingURL=drawWgpuScene3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawWgpuScene3D.d.ts","sourceRoot":"","sources":["../src/drawWgpuScene3D.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,QAAQ,EAIR,IAAI,EAGJ,iBAAiB,EACjB,MAAM,EAIN,eAAe,EAEf,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAyBzB,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAC1B,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,aAAa,CAAC,EAAE,QAAQ,CAAC,2BAA2B,CAAC,GACpD,IAAI,CA4DN;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAG1F"}
|