@flighthq/scene3d-gl 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/anisotropyPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/anisotropyPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js +102 -0
- package/dist/blinnPhongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js +45 -0
- package/dist/clearcoatPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts +6 -0
- package/dist/customShaderGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/customShaderGlMeshMaterialRenderer.js +136 -0
- package/dist/customShaderGlMeshMaterialRenderer.js.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/depthGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/depthGlMeshMaterialRenderer.js +36 -0
- package/dist/depthGlMeshMaterialRenderer.js.map +1 -0
- package/dist/drawGlScene3D.d.ts +3 -0
- package/dist/drawGlScene3D.d.ts.map +1 -0
- package/dist/drawGlScene3D.js +251 -0
- package/dist/drawGlScene3D.js.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/emissiveGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/emissiveGlMeshMaterialRenderer.js +49 -0
- package/dist/emissiveGlMeshMaterialRenderer.js.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts +4 -0
- package/dist/enableGlScene3DColorSpaceGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DColorSpaceGuards.js +22 -0
- package/dist/enableGlScene3DColorSpaceGuards.js.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts +4 -0
- package/dist/enableGlScene3DCustomShaderGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DCustomShaderGuards.js +71 -0
- package/dist/enableGlScene3DCustomShaderGuards.js.map +1 -0
- package/dist/enableGlScene3DDeformGuards.d.ts +4 -0
- package/dist/enableGlScene3DDeformGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DDeformGuards.js +42 -0
- package/dist/enableGlScene3DDeformGuards.js.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts +4 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.d.ts.map +1 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js +21 -0
- package/dist/enableGlScene3DForwardLightSelectionGuards.js.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts +3 -0
- package/dist/explainGlScene3DForwardLightSelection.d.ts.map +1 -0
- package/dist/explainGlScene3DForwardLightSelection.js +19 -0
- package/dist/explainGlScene3DForwardLightSelection.js.map +1 -0
- package/dist/glClassicPrelude.d.ts +9 -0
- package/dist/glClassicPrelude.d.ts.map +1 -0
- package/dist/glClassicPrelude.js +288 -0
- package/dist/glClassicPrelude.js.map +1 -0
- package/dist/glDebugPrelude.d.ts +9 -0
- package/dist/glDebugPrelude.d.ts.map +1 -0
- package/dist/glDebugPrelude.js +143 -0
- package/dist/glDebugPrelude.js.map +1 -0
- package/dist/glEnvironmentCube.d.ts +5 -0
- package/dist/glEnvironmentCube.d.ts.map +1 -0
- package/dist/glEnvironmentCube.js +65 -0
- package/dist/glEnvironmentCube.js.map +1 -0
- package/dist/glEnvironmentIblBake.d.ts +4 -0
- package/dist/glEnvironmentIblBake.d.ts.map +1 -0
- package/dist/glEnvironmentIblBake.js +365 -0
- package/dist/glEnvironmentIblBake.js.map +1 -0
- package/dist/glEnvironmentSkybox.d.ts +3 -0
- package/dist/glEnvironmentSkybox.d.ts.map +1 -0
- package/dist/glEnvironmentSkybox.js +95 -0
- package/dist/glEnvironmentSkybox.js.map +1 -0
- package/dist/glLitProgram.d.ts +5 -0
- package/dist/glLitProgram.d.ts.map +1 -0
- package/dist/glLitProgram.js +211 -0
- package/dist/glLitProgram.js.map +1 -0
- package/dist/glMatcapPrelude.d.ts +8 -0
- package/dist/glMatcapPrelude.d.ts.map +1 -0
- package/dist/glMatcapPrelude.js +118 -0
- package/dist/glMatcapPrelude.js.map +1 -0
- package/dist/glMeshMaterialRegistry.d.ts +5 -0
- package/dist/glMeshMaterialRegistry.d.ts.map +1 -0
- package/dist/glMeshMaterialRegistry.js +29 -0
- package/dist/glMeshMaterialRegistry.js.map +1 -0
- package/dist/glMeshProgram.d.ts +14 -0
- package/dist/glMeshProgram.d.ts.map +1 -0
- package/dist/glMeshProgram.js +193 -0
- package/dist/glMeshProgram.js.map +1 -0
- package/dist/glMeshUpload.d.ts +4 -0
- package/dist/glMeshUpload.d.ts.map +1 -0
- package/dist/glMeshUpload.js +190 -0
- package/dist/glMeshUpload.js.map +1 -0
- package/dist/glParticleEmitter3D.d.ts +4 -0
- package/dist/glParticleEmitter3D.d.ts.map +1 -0
- package/dist/glParticleEmitter3D.js +342 -0
- package/dist/glParticleEmitter3D.js.map +1 -0
- package/dist/glPbrPrelude.d.ts +8 -0
- package/dist/glPbrPrelude.d.ts.map +1 -0
- package/dist/glPbrPrelude.js +569 -0
- package/dist/glPbrPrelude.js.map +1 -0
- package/dist/glPbrProgramCache.d.ts +4 -0
- package/dist/glPbrProgramCache.d.ts.map +1 -0
- package/dist/glPbrProgramCache.js +63 -0
- package/dist/glPbrProgramCache.js.map +1 -0
- package/dist/glPbrStandardBlock.d.ts +13 -0
- package/dist/glPbrStandardBlock.d.ts.map +1 -0
- package/dist/glPbrStandardBlock.js +107 -0
- package/dist/glPbrStandardBlock.js.map +1 -0
- package/dist/glScene3DRuntime.d.ts +5 -0
- package/dist/glScene3DRuntime.d.ts.map +1 -0
- package/dist/glScene3DRuntime.js +99 -0
- package/dist/glScene3DRuntime.js.map +1 -0
- package/dist/glScene3DTestHelper.d.ts +20 -0
- package/dist/glScene3DTestHelper.d.ts.map +1 -0
- package/dist/glScene3DTestHelper.js +178 -0
- package/dist/glScene3DTestHelper.js.map +1 -0
- package/dist/glScene3DTime.d.ts +4 -0
- package/dist/glScene3DTime.d.ts.map +1 -0
- package/dist/glScene3DTime.js +18 -0
- package/dist/glScene3DTime.js.map +1 -0
- package/dist/glShadedBuiltInModifiers.d.ts +11 -0
- package/dist/glShadedBuiltInModifiers.d.ts.map +1 -0
- package/dist/glShadedBuiltInModifiers.js +386 -0
- package/dist/glShadedBuiltInModifiers.js.map +1 -0
- package/dist/glShadedModifierSnippet.d.ts +4 -0
- package/dist/glShadedModifierSnippet.d.ts.map +1 -0
- package/dist/glShadedModifierSnippet.js +24 -0
- package/dist/glShadedModifierSnippet.js.map +1 -0
- package/dist/glShadedPrelude.d.ts +5 -0
- package/dist/glShadedPrelude.d.ts.map +1 -0
- package/dist/glShadedPrelude.js +393 -0
- package/dist/glShadedPrelude.js.map +1 -0
- package/dist/glShadowMap.d.ts +3 -0
- package/dist/glShadowMap.d.ts.map +1 -0
- package/dist/glShadowMap.js +150 -0
- package/dist/glShadowMap.js.map +1 -0
- package/dist/glToonPrelude.d.ts +7 -0
- package/dist/glToonPrelude.d.ts.map +1 -0
- package/dist/glToonPrelude.js +172 -0
- package/dist/glToonPrelude.js.map +1 -0
- package/dist/glUnlitPrelude.d.ts +9 -0
- package/dist/glUnlitPrelude.d.ts.map +1 -0
- package/dist/glUnlitPrelude.js +160 -0
- package/dist/glUnlitPrelude.js.map +1 -0
- package/dist/glWireframePrelude.d.ts +6 -0
- package/dist/glWireframePrelude.d.ts.map +1 -0
- package/dist/glWireframePrelude.js +56 -0
- package/dist/glWireframePrelude.js.map +1 -0
- package/dist/glWireframeUpload.d.ts +4 -0
- package/dist/glWireframeUpload.d.ts.map +1 -0
- package/dist/glWireframeUpload.js +85 -0
- package/dist/glWireframeUpload.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js +54 -0
- package/dist/iridescencePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/lambertGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/lambertGlMeshMaterialRenderer.js +70 -0
- package/dist/lambertGlMeshMaterialRenderer.js.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/matcapGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/matcapGlMeshMaterialRenderer.js +49 -0
- package/dist/matcapGlMeshMaterialRenderer.js.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/normalGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/normalGlMeshMaterialRenderer.js +39 -0
- package/dist/normalGlMeshMaterialRenderer.js.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/phongGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/phongGlMeshMaterialRenderer.js +90 -0
- package/dist/phongGlMeshMaterialRenderer.js.map +1 -0
- package/dist/prepareGlScene3DForwardLights.d.ts +3 -0
- package/dist/prepareGlScene3DForwardLights.d.ts.map +1 -0
- package/dist/prepareGlScene3DForwardLights.js +117 -0
- package/dist/prepareGlScene3DForwardLights.js.map +1 -0
- package/dist/presentGlScene3D.d.ts +3 -0
- package/dist/presentGlScene3D.d.ts.map +1 -0
- package/dist/presentGlScene3D.js +21 -0
- package/dist/presentGlScene3D.js.map +1 -0
- package/dist/registerStandardPbrGlMaterial.d.ts +3 -0
- package/dist/registerStandardPbrGlMaterial.d.ts.map +1 -0
- package/dist/registerStandardPbrGlMaterial.js +11 -0
- package/dist/registerStandardPbrGlMaterial.js.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/shadedGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/shadedGlMeshMaterialRenderer.js +135 -0
- package/dist/shadedGlMeshMaterialRenderer.js.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js +54 -0
- package/dist/sheenPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js +121 -0
- package/dist/specularGlossinessPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/specularPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js +55 -0
- package/dist/specularPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts +3 -0
- package/dist/standardPbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js +35 -0
- package/dist/standardPbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js +57 -0
- package/dist/subsurfacePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/toonGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/toonGlMeshMaterialRenderer.js +81 -0
- package/dist/toonGlMeshMaterialRenderer.js.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js +62 -0
- package/dist/transmissionVolumePbrGlMeshMaterialRenderer.js.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/unlitGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/unlitGlMeshMaterialRenderer.js +61 -0
- package/dist/unlitGlMeshMaterialRenderer.js.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/vertexColorGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js +54 -0
- package/dist/vertexColorGlMeshMaterialRenderer.js.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts +4 -0
- package/dist/wireframeGlMeshMaterialRenderer.d.ts.map +1 -0
- package/dist/wireframeGlMeshMaterialRenderer.js +50 -0
- package/dist/wireframeGlMeshMaterialRenderer.js.map +1 -0
- package/package.json +58 -0
- package/src/anisotropyPbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/blinnPhongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/clearcoatPbrGlMeshMaterialRenderer.test.ts +81 -0
- package/src/customShaderGlMeshMaterialRenderer.test.ts +169 -0
- package/src/depthGlMeshMaterialRenderer.test.ts +69 -0
- package/src/drawGlScene3D.test.ts +304 -0
- package/src/emissiveGlMeshMaterialRenderer.test.ts +60 -0
- package/src/enableGlScene3DColorSpaceGuards.test.ts +63 -0
- package/src/enableGlScene3DCustomShaderGuards.test.ts +85 -0
- package/src/enableGlScene3DDeformGuards.test.ts +98 -0
- package/src/enableGlScene3DForwardLightSelectionGuards.test.ts +84 -0
- package/src/explainGlScene3DForwardLightSelection.test.ts +32 -0
- package/src/glClassicPrelude.test.ts +214 -0
- package/src/glDebugPrelude.test.ts +94 -0
- package/src/glEnvironmentCube.test.ts +71 -0
- package/src/glEnvironmentIblBake.test.ts +31 -0
- package/src/glEnvironmentSkybox.test.ts +24 -0
- package/src/glLitProgram.test.ts +181 -0
- package/src/glMatcapPrelude.test.ts +74 -0
- package/src/glMeshMaterialRegistry.test.ts +52 -0
- package/src/glMeshProgram.test.ts +406 -0
- package/src/glMeshUpload.test.ts +311 -0
- package/src/glParticleEmitter3D.test.ts +280 -0
- package/src/glPbrPrelude.test.ts +178 -0
- package/src/glPbrProgramCache.test.ts +116 -0
- package/src/glPbrStandardBlock.test.ts +85 -0
- package/src/glScene3DRuntime.test.ts +108 -0
- package/src/glScene3DTime.test.ts +31 -0
- package/src/glShadedBuiltInModifiers.test.ts +377 -0
- package/src/glShadedModifierSnippet.test.ts +46 -0
- package/src/glShadedPrelude.test.ts +177 -0
- package/src/glShadowMap.test.ts +219 -0
- package/src/glToonPrelude.test.ts +118 -0
- package/src/glUnlitPrelude.test.ts +156 -0
- package/src/glWireframePrelude.test.ts +46 -0
- package/src/glWireframeUpload.test.ts +50 -0
- package/src/iridescencePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/lambertGlMeshMaterialRenderer.test.ts +92 -0
- package/src/matcapGlMeshMaterialRenderer.test.ts +70 -0
- package/src/normalGlMeshMaterialRenderer.test.ts +69 -0
- package/src/phongGlMeshMaterialRenderer.test.ts +94 -0
- package/src/prepareGlScene3DForwardLights.test.ts +106 -0
- package/src/presentGlScene3D.test.ts +98 -0
- package/src/registerStandardPbrGlMaterial.test.ts +14 -0
- package/src/shadedGlMeshMaterialRenderer.test.ts +106 -0
- package/src/sheenPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/specularGlossinessPbrGlMeshMaterialRenderer.test.ts +96 -0
- package/src/specularPbrGlMeshMaterialRenderer.test.ts +83 -0
- package/src/standardPbrGlMeshMaterialRenderer.test.ts +88 -0
- package/src/subsurfacePbrGlMeshMaterialRenderer.test.ts +86 -0
- package/src/toonGlMeshMaterialRenderer.test.ts +92 -0
- package/src/transmissionVolumePbrGlMeshMaterialRenderer.test.ts +93 -0
- package/src/unlitGlMeshMaterialRenderer.test.ts +88 -0
- package/src/vertexColorGlMeshMaterialRenderer.test.ts +60 -0
- package/src/wireframeGlMeshMaterialRenderer.test.ts +69 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const anisotropyPbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerAnisotropyPbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=anisotropyPbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anisotropyPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/anisotropyPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAKd,MAAM,iBAAiB,CAAC;AAkBzB,eAAO,MAAM,mCAAmC,EAAE,sBA8BjD,CAAC;AAIF,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAE1E"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AnisotropyPbrMaterialKind } from '@flighthq/types';
|
|
2
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
3
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
4
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
5
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
6
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
7
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
8
|
+
// The built-in Anisotropy (KHR_materials_anisotropy) forward-lit mesh-material renderer. Anisotropy
|
|
9
|
+
// stretches the specular highlight along the mesh tangent direction — brushed metal, hair, vinyl —
|
|
10
|
+
// by splitting roughness into along-tangent and across-tangent axes and evaluating an anisotropic
|
|
11
|
+
// GGX distribution (Burley) in the shader's rotated tangent frame. It REQUIRES mesh tangents, which
|
|
12
|
+
// the PBR vertex record already carries (location 2). bind composes the material's `standard` block
|
|
13
|
+
// through the shared bindGlPbrStandardBlock and uploads the anisotropy strength + rotation; the lobe
|
|
14
|
+
// lives behind `#define ANISOTROPY` in the PBR uber-shader. The anisotropy direction map is reserved
|
|
15
|
+
// by the descriptor but not yet sampled here. See registerAnisotropyPbrGlMaterial.
|
|
16
|
+
export const anisotropyPbrGlMeshMaterialRenderer = {
|
|
17
|
+
bind(state, material, lights, camera) {
|
|
18
|
+
const gl = state.gl;
|
|
19
|
+
const anisotropy = material;
|
|
20
|
+
const standard = anisotropy !== null ? anisotropy.standard : null;
|
|
21
|
+
const key = buildGlPbrStandardDefineKey(standard, anisotropy);
|
|
22
|
+
key.anisotropyEnabled = true;
|
|
23
|
+
const program = ensureGlPbrProgram(state, key);
|
|
24
|
+
beginGlMeshDraw(state, program, anisotropy !== null && anisotropy.doubleSided);
|
|
25
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
26
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
27
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
28
|
+
bindGlPbrStandardBlock(state, program, standard);
|
|
29
|
+
gl.uniform1f(program.locAlphaCutoff, anisotropy !== null ? anisotropy.alphaCutoff : 0.5);
|
|
30
|
+
gl.uniform1f(program.locAnisotropyStrength, anisotropy !== null ? anisotropy.anisotropyStrength : 0);
|
|
31
|
+
gl.uniform1f(program.locAnisotropyRotation, anisotropy !== null ? anisotropy.anisotropyRotation : 0);
|
|
32
|
+
},
|
|
33
|
+
draw(state, proxy, geometry) {
|
|
34
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
35
|
+
if (program === null)
|
|
36
|
+
return;
|
|
37
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
// Installs the built-in Anisotropy renderer for AnisotropyPbrMaterialKind on this state. Opt-in (no
|
|
41
|
+
// top-level side effect): drawScene3D only draws Anisotropy subsets once this is called.
|
|
42
|
+
export function registerAnisotropyPbrGlMaterial(state) {
|
|
43
|
+
registerGlMeshMaterialRenderer(state, AnisotropyPbrMaterialKind, anisotropyPbrGlMeshMaterialRenderer);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=anisotropyPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anisotropyPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/anisotropyPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,oGAAoG;AACpG,mGAAmG;AACnG,kGAAkG;AAClG,oGAAoG;AACpG,oGAAoG;AACpG,qGAAqG;AACrG,qGAAqG;AACrG,mFAAmF;AACnF,MAAM,CAAC,MAAM,mCAAmC,GAA2B;IACzE,IAAI,CACF,KAAoB,EACpB,QAAmC,EACnC,MAAmC,EACnC,MAA0B;QAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,QAAkD,CAAC;QACtE,MAAM,QAAQ,GAAG,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,MAAM,GAAG,GAAG,2BAA2B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9D,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAE/E,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEzF,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,KAAmC,EAAE,QAAgC;QAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,oGAAoG;AACpG,yFAAyF;AACzF,MAAM,UAAU,+BAA+B,CAAC,KAAoB;IAClE,8BAA8B,CAAC,KAAK,EAAE,yBAAyB,EAAE,mCAAmC,CAAC,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const blinnPhongGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerBlinnPhongGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=blinnPhongGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blinnPhongGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/blinnPhongGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIV,sBAAsB,EACtB,aAAa,EAOd,MAAM,iBAAiB,CAAC;AAwBzB,eAAO,MAAM,gCAAgC,EAAE,sBAuB9C,CAAC;AAKF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEvE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { unpackColorToLinear } from '@flighthq/color';
|
|
2
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
3
|
+
import { bindGlImageResourceTexture } from '@flighthq/render-gl';
|
|
4
|
+
import { BlinnPhongMaterialKind } from '@flighthq/types';
|
|
5
|
+
import { ensureGlClassicProgram } from './glClassicPrelude';
|
|
6
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
7
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
8
|
+
import { beginGlMeshDraw, bindGlUvTransform, drawGlMeshSubset, hasGlUvTransform, setGlMeshCameraPosition, setGlMeshViewProjection, } from './glMeshProgram';
|
|
9
|
+
import { isGlTextureReady } from './glPbrStandardBlock';
|
|
10
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
11
|
+
// The built-in classic BlinnPhong forward-lit mesh-material renderer (GlMeshMaterialRenderer for
|
|
12
|
+
// BlinnPhongMaterialKind). Lambert diffuse plus a half-vector specular lobe (cheaper, smoother
|
|
13
|
+
// highlights than reflection-vector Phong): bind selects the classic uber-shader's `blinnphong`
|
|
14
|
+
// variant for the material's diffuse / specular / normal maps and alpha mode, uploads the camera
|
|
15
|
+
// view-projection AND position (the specular term is view-dependent), the packed light block, and the
|
|
16
|
+
// material's linear diffuse + specular colors, shininess, and maps. draw issues the indexed draw. See
|
|
17
|
+
// registerBlinnPhongGlMaterial to install it.
|
|
18
|
+
export const blinnPhongGlMeshMaterialRenderer = {
|
|
19
|
+
bind(state, material, lights, camera) {
|
|
20
|
+
const gl = state.gl;
|
|
21
|
+
const blinnPhong = material;
|
|
22
|
+
const program = ensureGlClassicProgram(state, defineKeyForMaterial(blinnPhong));
|
|
23
|
+
beginGlMeshDraw(state, program, blinnPhong !== null && blinnPhong.doubleSided);
|
|
24
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
25
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
26
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
27
|
+
bindGlBlinnPhongMaterialUniforms(state, program, blinnPhong);
|
|
28
|
+
},
|
|
29
|
+
draw(state, proxy, geometry) {
|
|
30
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
31
|
+
if (program === null)
|
|
32
|
+
return;
|
|
33
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
// Registers the built-in BlinnPhong renderer for BlinnPhongMaterialKind on this state. Opt-in (no
|
|
37
|
+
// top-level side effect); call once per GlRenderState before drawScene3D so meshes with BlinnPhong
|
|
38
|
+
// materials draw.
|
|
39
|
+
export function registerBlinnPhongGlMaterial(state) {
|
|
40
|
+
registerGlMeshMaterialRenderer(state, BlinnPhongMaterialKind, blinnPhongGlMeshMaterialRenderer);
|
|
41
|
+
}
|
|
42
|
+
function bindGlBlinnPhongMaterialUniforms(state, program, material) {
|
|
43
|
+
const gl = state.gl;
|
|
44
|
+
if (material === null) {
|
|
45
|
+
gl.uniform4f(program.locDiffuse, 1, 1, 1, 1);
|
|
46
|
+
gl.uniform4f(program.locSpecular, 1, 1, 1, 1);
|
|
47
|
+
gl.uniform1f(program.locShininess, 32);
|
|
48
|
+
gl.uniform1f(program.locNormalScale, 1);
|
|
49
|
+
gl.uniform1f(program.locAlphaCutoff, 0.5);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
unpackColorToLinear(scratchRgba, material.diffuse);
|
|
53
|
+
gl.uniform4f(program.locDiffuse, scratchRgba[0], scratchRgba[1], scratchRgba[2], scratchRgba[3]);
|
|
54
|
+
unpackColorToLinear(scratchRgba, material.specular);
|
|
55
|
+
gl.uniform4f(program.locSpecular, scratchRgba[0], scratchRgba[1], scratchRgba[2], scratchRgba[3]);
|
|
56
|
+
gl.uniform1f(program.locShininess, material.shininess);
|
|
57
|
+
gl.uniform1f(program.locNormalScale, material.normalScale);
|
|
58
|
+
gl.uniform1f(program.locAlphaCutoff, material.alphaCutoff);
|
|
59
|
+
const diffuseMap = material.diffuseMap;
|
|
60
|
+
if (diffuseMap !== null && diffuseMap.image !== null && hasImageResourcePixels(diffuseMap.image)) {
|
|
61
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
62
|
+
bindGlImageResourceTexture(state, diffuseMap.image, diffuseMap.sampler);
|
|
63
|
+
gl.uniform1i(program.locDiffuseMap, 0);
|
|
64
|
+
}
|
|
65
|
+
const specularMap = material.specularMap;
|
|
66
|
+
if (specularMap !== null && specularMap.image !== null && hasImageResourcePixels(specularMap.image)) {
|
|
67
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
68
|
+
bindGlImageResourceTexture(state, specularMap.image, specularMap.sampler);
|
|
69
|
+
gl.uniform1i(program.locSpecularMap, 1);
|
|
70
|
+
}
|
|
71
|
+
const normalMap = material.normalMap;
|
|
72
|
+
if (normalMap !== null && normalMap.image !== null && hasImageResourcePixels(normalMap.image)) {
|
|
73
|
+
gl.activeTexture(gl.TEXTURE2);
|
|
74
|
+
bindGlImageResourceTexture(state, normalMap.image, normalMap.sampler);
|
|
75
|
+
gl.uniform1i(program.locNormalMap, 2);
|
|
76
|
+
}
|
|
77
|
+
const alphaMap = material.alphaMap;
|
|
78
|
+
if (alphaMap !== null && alphaMap.image !== null && hasImageResourcePixels(alphaMap.image)) {
|
|
79
|
+
gl.activeTexture(gl.TEXTURE3);
|
|
80
|
+
bindGlImageResourceTexture(state, alphaMap.image, alphaMap.sampler);
|
|
81
|
+
gl.uniform1i(program.locAlphaMap, 3);
|
|
82
|
+
}
|
|
83
|
+
bindGlUvTransform(gl, program, diffuseMap);
|
|
84
|
+
}
|
|
85
|
+
// The feature define key for a BlinnPhong material: the fixed `blinnphong` lighting model plus which
|
|
86
|
+
// optional maps are present and whether alpha-mask cutoff is active.
|
|
87
|
+
function defineKeyForMaterial(material) {
|
|
88
|
+
return {
|
|
89
|
+
alphaMaskEnabled: material !== null && material.alphaMode === 'mask',
|
|
90
|
+
// Match the bind's readiness test (isGlTextureReady, incl. hasImageResourcePixels) so the compiled
|
|
91
|
+
// HAS_ALPHA_MAP variant and the bound texture never disagree. Gated off 'opaque' — an opaque
|
|
92
|
+
// material ignores coverage (SurfaceMaterial contract), so it must not sample the alpha map.
|
|
93
|
+
hasAlphaMap: material !== null && material.alphaMode !== 'opaque' && isGlTextureReady(material.alphaMap),
|
|
94
|
+
hasDiffuseMap: material !== null && material.diffuseMap !== null && material.diffuseMap.image !== null,
|
|
95
|
+
hasNormalMap: material !== null && material.normalMap !== null && material.normalMap.image !== null,
|
|
96
|
+
hasSpecularMap: material !== null && material.specularMap !== null && material.specularMap.image !== null,
|
|
97
|
+
hasUvTransform: hasGlUvTransform(material !== null ? material.diffuseMap : null),
|
|
98
|
+
lightingModel: 'blinnphong',
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const scratchRgba = [0, 0, 0, 0];
|
|
102
|
+
//# sourceMappingURL=blinnPhongGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blinnPhongGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/blinnPhongGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAcjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,iGAAiG;AACjG,+FAA+F;AAC/F,gGAAgG;AAChG,iGAAiG;AACjG,sGAAsG;AACtG,sGAAsG;AACtG,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gCAAgC,GAA2B;IACtE,IAAI,CACF,KAAoB,EACpB,QAAmC,EACnC,MAAmC,EACnC,MAA0B;QAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,QAA+C,CAAC;QACnE,MAAM,OAAO,GAAG,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;QAChF,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAE/E,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,gCAAgC,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,KAAmC,EAAE,QAAgC;QAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,kGAAkG;AAClG,mGAAmG;AACnG,kBAAkB;AAClB,MAAM,UAAU,4BAA4B,CAAC,KAAoB;IAC/D,8BAA8B,CAAC,KAAK,EAAE,sBAAsB,EAAE,gCAAgC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,gCAAgC,CACvC,KAAoB,EACpB,OAAmC,EACnC,QAA6C;IAE7C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QACxC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3D,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE3D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACvC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,0BAA0B,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QACxE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;IACzC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACpG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,0BAA0B,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1E,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9F,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,0BAA0B,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACtE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3F,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9B,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,qGAAqG;AACrG,qEAAqE;AACrE,SAAS,oBAAoB,CAAC,QAA6C;IACzE,OAAO;QACL,gBAAgB,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM;QACpE,mGAAmG;QACnG,6FAA6F;QAC7F,6FAA6F;QAC7F,WAAW,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxG,aAAa,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI;QACtG,YAAY,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,IAAI;QACnG,cAAc,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI;QACzG,cAAc,EAAE,gBAAgB,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,aAAa,EAAE,YAAY;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const clearcoatPbrGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerClearcoatPbrGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=clearcoatPbrGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearcoatPbrGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/clearcoatPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAKd,MAAM,iBAAiB,CAAC;AAkBzB,eAAO,MAAM,kCAAkC,EAAE,sBA8BhD,CAAC;AAIF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ClearcoatPbrMaterialKind } from '@flighthq/types';
|
|
2
|
+
import { bindGlMeshLightBlock } from './glLitProgram';
|
|
3
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
4
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshCameraPosition, setGlMeshViewProjection } from './glMeshProgram';
|
|
5
|
+
import { ensureGlPbrProgram } from './glPbrProgramCache';
|
|
6
|
+
import { bindGlPbrStandardBlock, buildGlPbrStandardDefineKey } from './glPbrStandardBlock';
|
|
7
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
8
|
+
// The built-in Clearcoat (KHR_materials_clearcoat) forward-lit mesh-material renderer. Clearcoat
|
|
9
|
+
// adds a second, always-dielectric GGX specular lobe (F0 = 0.04) over the base PBR layer — the wet,
|
|
10
|
+
// lacquered highlight of car paint or varnish — with its own clearcoat roughness, and attenuates the
|
|
11
|
+
// base layers by the clearcoat's Fresnel so energy is conserved. bind composes the material's
|
|
12
|
+
// `standard` block (full StandardPbrMaterialProperties) through the shared bindGlPbrStandardBlock and
|
|
13
|
+
// then uploads the clearcoat-specific scalars; the clearcoat lobe lives behind `#define CLEARCOAT` in
|
|
14
|
+
// the one PBR uber-shader. The clearcoat/roughness/normal maps are reserved by the descriptor but not
|
|
15
|
+
// yet sampled here (scalar clearcoat is the current approximation). See registerClearcoatPbrGlMaterial.
|
|
16
|
+
export const clearcoatPbrGlMeshMaterialRenderer = {
|
|
17
|
+
bind(state, material, lights, camera) {
|
|
18
|
+
const gl = state.gl;
|
|
19
|
+
const clearcoat = material;
|
|
20
|
+
const standard = clearcoat !== null ? clearcoat.standard : null;
|
|
21
|
+
const key = buildGlPbrStandardDefineKey(standard, clearcoat);
|
|
22
|
+
key.clearcoatEnabled = true;
|
|
23
|
+
const program = ensureGlPbrProgram(state, key);
|
|
24
|
+
beginGlMeshDraw(state, program, clearcoat !== null && clearcoat.doubleSided);
|
|
25
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
26
|
+
setGlMeshCameraPosition(gl, program.locCameraPosition, camera);
|
|
27
|
+
bindGlMeshLightBlock(state, program, lights);
|
|
28
|
+
bindGlPbrStandardBlock(state, program, standard);
|
|
29
|
+
gl.uniform1f(program.locAlphaCutoff, clearcoat !== null ? clearcoat.alphaCutoff : 0.5);
|
|
30
|
+
gl.uniform1f(program.locClearcoat, clearcoat !== null ? clearcoat.clearcoat : 0);
|
|
31
|
+
gl.uniform1f(program.locClearcoatRoughness, clearcoat !== null ? clearcoat.clearcoatRoughness : 0);
|
|
32
|
+
},
|
|
33
|
+
draw(state, proxy, geometry) {
|
|
34
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
35
|
+
if (program === null)
|
|
36
|
+
return;
|
|
37
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
// Installs the built-in Clearcoat renderer for ClearcoatPbrMaterialKind on this state. Opt-in (no
|
|
41
|
+
// top-level side effect): drawScene3D only draws Clearcoat subsets once this is called.
|
|
42
|
+
export function registerClearcoatPbrGlMaterial(state) {
|
|
43
|
+
registerGlMeshMaterialRenderer(state, ClearcoatPbrMaterialKind, clearcoatPbrGlMeshMaterialRenderer);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=clearcoatPbrGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearcoatPbrGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/clearcoatPbrGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,iGAAiG;AACjG,oGAAoG;AACpG,qGAAqG;AACrG,8FAA8F;AAC9F,sGAAsG;AACtG,sGAAsG;AACtG,sGAAsG;AACtG,wGAAwG;AACxG,MAAM,CAAC,MAAM,kCAAkC,GAA2B;IACxE,IAAI,CACF,KAAoB,EACpB,QAAmC,EACnC,MAAmC,EACnC,MAA0B;QAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,QAAiD,CAAC;QACpE,MAAM,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,MAAM,GAAG,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7D,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC5B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;QAE7E,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC/D,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACjD,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvF,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,KAAmC,EAAE,QAAgC;QAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,kGAAkG;AAClG,wFAAwF;AACxF,MAAM,UAAU,8BAA8B,CAAC,KAAoB;IACjE,8BAA8B,CAAC,KAAK,EAAE,wBAAwB,EAAE,kCAAkC,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GlCustomMaterialShaderSource, GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const customShaderGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function getGlCustomMaterialShaderSource(state: GlRenderState, shaderKey: string): Readonly<GlCustomMaterialShaderSource> | null;
|
|
4
|
+
export declare function registerCustomShaderGlMaterial(state: GlRenderState): void;
|
|
5
|
+
export declare function registerGlCustomMaterialShader(state: GlRenderState, shaderKey: string, source: Readonly<GlCustomMaterialShaderSource>): void;
|
|
6
|
+
//# sourceMappingURL=customShaderGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customShaderGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/customShaderGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,4BAA4B,EAG5B,sBAAsB,EACtB,aAAa,EAOd,MAAM,iBAAiB,CAAC;AA2BzB,eAAO,MAAM,kCAAkC,EAAE,sBAkChD,CAAC;AAIF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,QAAQ,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAE/C;AAKD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE;AAcD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAC7C,IAAI,CAON"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { hasImageResourcePixels } from '@flighthq/image';
|
|
2
|
+
import { bindGlImageResourceTexture } from '@flighthq/render-gl';
|
|
3
|
+
import { CustomShaderMaterialKind } from '@flighthq/types';
|
|
4
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
5
|
+
import { beginGlMeshDraw, compileGlProgram, drawGlMeshSubset, ensureGlScene3DProgram, setGlMeshCameraPosition, setGlMeshViewProjection, } from './glMeshProgram';
|
|
6
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
7
|
+
// The built-in CustomShaderMaterial forward renderer (GlMeshMaterialRenderer for
|
|
8
|
+
// CustomShaderMaterialKind). Looks up the user-registered vertex+fragment source by shaderKey,
|
|
9
|
+
// compiles on first use, uploads the four built-in uniforms (u_viewProjection, u_model,
|
|
10
|
+
// u_normalMatrix, u_cameraPosition), then iterates the material's custom uniforms and textures.
|
|
11
|
+
// A missing shaderKey silently skips (the activeMeshProgram stays null and draw is a no-op),
|
|
12
|
+
// matching the sentinel convention used elsewhere in the material registry.
|
|
13
|
+
export const customShaderGlMeshMaterialRenderer = {
|
|
14
|
+
bind(state, material, _lights, camera) {
|
|
15
|
+
const custom = material;
|
|
16
|
+
if (custom === null || custom.shaderKey === '') {
|
|
17
|
+
getGlScene3DRuntime(state).activeMeshProgram = null;
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const source = getGlCustomMaterialShaderSource(state, custom.shaderKey);
|
|
21
|
+
if (source === null) {
|
|
22
|
+
getGlScene3DRuntime(state).activeMeshProgram = null;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const program = ensureGlCustomShaderProgram(state, custom.shaderKey, source);
|
|
26
|
+
getGlScene3DRuntime(state).customShaderGuard?.(state, program.program, custom.shaderKey);
|
|
27
|
+
beginGlMeshDraw(state, program, custom.doubleSided);
|
|
28
|
+
setGlMeshViewProjection(state.gl, program.locViewProjection, camera);
|
|
29
|
+
setGlMeshCameraPosition(state.gl, program.locCameraPosition, camera);
|
|
30
|
+
uploadCustomShaderMaterialUniforms(state.gl, program.program, custom);
|
|
31
|
+
uploadCustomShaderMaterialTextures(state, program.program, custom);
|
|
32
|
+
},
|
|
33
|
+
draw(state, proxy, geometry) {
|
|
34
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
35
|
+
if (program === null)
|
|
36
|
+
return;
|
|
37
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
// Returns the vertex+fragment source pair registered under `shaderKey` for this state, or null
|
|
41
|
+
// when no source is registered. The sentinel null drives the skip-draw path in bind.
|
|
42
|
+
export function getGlCustomMaterialShaderSource(state, shaderKey) {
|
|
43
|
+
return _customMaterialShaders.get(state)?.get(shaderKey) ?? null;
|
|
44
|
+
}
|
|
45
|
+
// Registers the built-in CustomShaderMaterial renderer for CustomShaderMaterialKind on this
|
|
46
|
+
// state. Opt-in (no top-level side effect); call once per GlRenderState before drawScene3D so
|
|
47
|
+
// meshes carrying CustomShaderMaterials draw.
|
|
48
|
+
export function registerCustomShaderGlMaterial(state) {
|
|
49
|
+
registerGlMeshMaterialRenderer(state, CustomShaderMaterialKind, customShaderGlMeshMaterialRenderer);
|
|
50
|
+
}
|
|
51
|
+
// Registers a vertex + fragment shader source pair under `shaderKey` for this state, so a
|
|
52
|
+
// CustomShaderMaterial naming that key compiles and runs it. The vertex scene2d receives the
|
|
53
|
+
// standard mesh attributes (a_position loc 0, a_normal loc 1, a_tangent loc 2, a_uv0 loc 3)
|
|
54
|
+
// and must declare the four built-in uniforms with these exact types: `mat4 u_viewProjection`,
|
|
55
|
+
// `mat4 u_model`, `mat3 u_normalMatrix` (NOT mat4 — the renderer uploads it with glUniformMatrix3fv,
|
|
56
|
+
// so a mat4 declaration raises a silent GL_INVALID_OPERATION and the mesh draws nothing;
|
|
57
|
+
// enableGlScene3DCustomShaderGuards catches this), and `vec3 u_cameraPosition`. When the material's
|
|
58
|
+
// alphaMode is 'blend', drawGlScene3D composites with glBlendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA), so
|
|
59
|
+
// the fragment scene2d must output straight (non-premultiplied) alpha. Last write wins for the source
|
|
60
|
+
// lookup, but the compiled program is cached
|
|
61
|
+
// by shaderKey, so re-registering a different source under the same key keeps running the
|
|
62
|
+
// already-compiled program. Register edited source under a new key to force a recompile.
|
|
63
|
+
export function registerGlCustomMaterialShader(state, shaderKey, source) {
|
|
64
|
+
let registry = _customMaterialShaders.get(state);
|
|
65
|
+
if (registry === undefined) {
|
|
66
|
+
registry = new Map();
|
|
67
|
+
_customMaterialShaders.set(state, registry);
|
|
68
|
+
}
|
|
69
|
+
registry.set(shaderKey, source);
|
|
70
|
+
}
|
|
71
|
+
function ensureGlCustomShaderProgram(state, shaderKey, source) {
|
|
72
|
+
return ensureGlScene3DProgram(state, `custom:${shaderKey}`, (gl) => compileGlCustomShaderProgram(gl, source));
|
|
73
|
+
}
|
|
74
|
+
function compileGlCustomShaderProgram(gl, source) {
|
|
75
|
+
const linked = compileGlProgram(gl, source.vertex, source.fragment);
|
|
76
|
+
return {
|
|
77
|
+
locCameraPosition: gl.getUniformLocation(linked, 'u_cameraPosition'),
|
|
78
|
+
locModel: gl.getUniformLocation(linked, 'u_model'),
|
|
79
|
+
locNormalMatrix: gl.getUniformLocation(linked, 'u_normalMatrix'),
|
|
80
|
+
locViewProjection: gl.getUniformLocation(linked, 'u_viewProjection'),
|
|
81
|
+
program: linked,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function uploadCustomShaderMaterialUniforms(gl, program, material) {
|
|
85
|
+
const uniforms = material.uniforms;
|
|
86
|
+
if (uniforms === null)
|
|
87
|
+
return;
|
|
88
|
+
for (const name of Object.keys(uniforms)) {
|
|
89
|
+
const location = gl.getUniformLocation(program, name);
|
|
90
|
+
if (location === null)
|
|
91
|
+
continue;
|
|
92
|
+
const value = uniforms[name];
|
|
93
|
+
if (typeof value === 'number') {
|
|
94
|
+
gl.uniform1f(location, value);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
switch (value.length) {
|
|
98
|
+
case 1:
|
|
99
|
+
gl.uniform1f(location, value[0]);
|
|
100
|
+
break;
|
|
101
|
+
case 2:
|
|
102
|
+
gl.uniform2fv(location, value);
|
|
103
|
+
break;
|
|
104
|
+
case 3:
|
|
105
|
+
gl.uniform3fv(location, value);
|
|
106
|
+
break;
|
|
107
|
+
case 4:
|
|
108
|
+
gl.uniform4fv(location, value);
|
|
109
|
+
break;
|
|
110
|
+
default:
|
|
111
|
+
gl.uniform1fv(location, value);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
function uploadCustomShaderMaterialTextures(state, program, material) {
|
|
117
|
+
const textures = material.textures;
|
|
118
|
+
if (textures === null)
|
|
119
|
+
return;
|
|
120
|
+
const gl = state.gl;
|
|
121
|
+
let unit = 0;
|
|
122
|
+
for (const name of Object.keys(textures)) {
|
|
123
|
+
const texture = textures[name];
|
|
124
|
+
if (texture.image === null || !hasImageResourcePixels(texture.image))
|
|
125
|
+
continue;
|
|
126
|
+
const location = gl.getUniformLocation(program, name);
|
|
127
|
+
if (location === null)
|
|
128
|
+
continue;
|
|
129
|
+
gl.activeTexture(gl.TEXTURE0 + unit);
|
|
130
|
+
bindGlImageResourceTexture(state, texture.image, texture.sampler);
|
|
131
|
+
gl.uniform1i(location, unit);
|
|
132
|
+
unit++;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const _customMaterialShaders = new WeakMap();
|
|
136
|
+
//# sourceMappingURL=customShaderGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customShaderGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/customShaderGlMeshMaterialRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlMeshMaterialRenderer, GlRenderState } from '@flighthq/types';
|
|
2
|
+
export declare const depthGlMeshMaterialRenderer: GlMeshMaterialRenderer;
|
|
3
|
+
export declare function registerDepthGlMaterial(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=depthGlMeshMaterialRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthGlMeshMaterialRenderer.d.ts","sourceRoot":"","sources":["../src/depthGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EACtB,aAAa,EAKd,MAAM,iBAAiB,CAAC;AAazB,eAAO,MAAM,2BAA2B,EAAE,sBAyBzC,CAAC;AAIF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAElE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DepthMaterialKind } from '@flighthq/types';
|
|
2
|
+
import { bindGlDebugRange, ensureGlDebugProgram } from './glDebugPrelude';
|
|
3
|
+
import { registerGlMeshMaterialRenderer } from './glMeshMaterialRegistry';
|
|
4
|
+
import { beginGlMeshDraw, drawGlMeshSubset, setGlMeshViewProjection } from './glMeshProgram';
|
|
5
|
+
import { getGlScene3DRuntime } from './glScene3DRuntime';
|
|
6
|
+
// The built-in Depth forward renderer (GlMeshMaterialRenderer for DepthMaterialKind). A lighting-
|
|
7
|
+
// independent debug/utility pass material: bind selects the debug program in depth mode, uploads the
|
|
8
|
+
// camera view-projection, and sets the material's [near, far] linearization range; draw issues the
|
|
9
|
+
// indexed draw. The fragment scene2d linearizes window-space depth into eye space and writes it as
|
|
10
|
+
// grayscale LINEAR color. Lights are ignored. See registerDepthGlMaterial to install it.
|
|
11
|
+
export const depthGlMeshMaterialRenderer = {
|
|
12
|
+
bind(state, material, _lights, camera) {
|
|
13
|
+
const gl = state.gl;
|
|
14
|
+
const depth = material;
|
|
15
|
+
const program = ensureGlDebugProgram(state, { hasNormalMap: false, mode: 'depth' });
|
|
16
|
+
beginGlMeshDraw(state, program, depth !== null && depth.doubleSided);
|
|
17
|
+
setGlMeshViewProjection(gl, program.locViewProjection, camera);
|
|
18
|
+
if (depth === null) {
|
|
19
|
+
bindGlDebugRange(state, program, 0, 1);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
bindGlDebugRange(state, program, depth.near, depth.far);
|
|
23
|
+
},
|
|
24
|
+
draw(state, proxy, geometry) {
|
|
25
|
+
const program = getGlScene3DRuntime(state).activeMeshProgram;
|
|
26
|
+
if (program === null)
|
|
27
|
+
return;
|
|
28
|
+
drawGlMeshSubset(state, program, proxy, geometry);
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
// Registers the built-in Depth renderer for DepthMaterialKind on this state. Opt-in (no top-level
|
|
32
|
+
// side effect); call once per GlRenderState before drawScene3D so meshes with DepthMaterials draw.
|
|
33
|
+
export function registerDepthGlMaterial(state) {
|
|
34
|
+
registerGlMeshMaterialRenderer(state, DepthMaterialKind, depthGlMeshMaterialRenderer);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=depthGlMeshMaterialRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depthGlMeshMaterialRenderer.js","sourceRoot":"","sources":["../src/depthGlMeshMaterialRenderer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,kGAAkG;AAClG,qGAAqG;AACrG,mGAAmG;AACnG,mGAAmG;AACnG,yFAAyF;AACzF,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,IAAI,CACF,KAAoB,EACpB,QAAmC,EACnC,OAAoC,EACpC,MAA0B;QAE1B,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,QAA0C,CAAC;QACzD,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QACrE,uBAAuB,CAAC,EAAE,EAAE,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAE/D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,KAAoB,EAAE,KAAmC,EAAE,QAAgC;QAC9F,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO;QAC7B,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;CACF,CAAC;AAEF,kGAAkG;AAClG,mGAAmG;AACnG,MAAM,UAAU,uBAAuB,CAAC,KAAoB;IAC1D,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Camera3D, GlScene3DForwardLightList, GlRenderState, Scene3DLightsLike, Node3D } from '@flighthq/types';
|
|
2
|
+
export declare function drawGlScene3D(state: GlRenderState, scene: Readonly<Node3D>, camera: Readonly<Camera3D>, lights: Readonly<Scene3DLightsLike>, forwardLights?: Readonly<GlScene3DForwardLightList>): void;
|
|
3
|
+
//# sourceMappingURL=drawGlScene3D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawGlScene3D.d.ts","sourceRoot":"","sources":["../src/drawGlScene3D.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,QAAQ,EACR,yBAAyB,EAEzB,aAAa,EAMb,iBAAiB,EAEjB,MAAM,EAIP,MAAM,iBAAiB,CAAC;AAuCzB,wBAAgB,aAAa,CAC3B,KAAK,EAAE,aAAa,EACpB,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,yBAAyB,CAAC,GAClD,IAAI,CA0KN"}
|