lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
41 lines • 1.63 kB
JavaScript
import { BackSide, DoubleSide, FrontSide, ShaderChunk, ShaderMaterial } from "three";
import computeOnce from "./utils/computeOnce";
const materialCache = [];
export default computeOnce((object) => {
const material = object.material;
const useSkinning = object.type === "SkinnedMesh" ? 1 : 0;
const useInstancing = object.type === "InstancedMesh" ? 1 : 0;
const frontSide = material.side === FrontSide ? 1 : 0;
const backSide = material.side === BackSide ? 1 : 0;
const doubleSide = material.side === DoubleSide ? 1 : 0;
const sprite = material.type === "SpriteMaterial" ? 1 : 0;
const sizeAttenuation = material.sizeAttenuation ? 1 : 0;
const index = (useSkinning << 1) |
(useInstancing << 2) |
(frontSide << 3) |
(backSide << 4) |
(doubleSide << 5) |
(sprite << 6) |
(sizeAttenuation << 7);
if (materialCache[index])
return materialCache[index];
let vertexShader = ShaderChunk.meshbasic_vert;
if (sprite) {
vertexShader = ShaderChunk.sprite_vert;
if (sizeAttenuation)
vertexShader = "#define USE_SIZEATTENUATION\n\n" + vertexShader;
}
const renderMaterial = (materialCache[index] = new ShaderMaterial({
vertexShader: vertexShader,
fragmentShader: `
uniform vec4 objectId;
void main() {
gl_FragColor = objectId;
}
`,
side: material.side
}));
renderMaterial.uniforms = { objectId: { value: [1.0, 1.0, 1.0, 1.0] } };
return renderMaterial;
});
//# sourceMappingURL=getOcclusionMaterial.js.map