UNPKG

gpu-curtains

Version:

gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.

58 lines (53 loc) 2.33 kB
const getSpecular = ({ specularTexture = null, specularFactorTexture = null, specularColorTexture = null } = {}) => { let specular = ""; if (specularTexture) { specular += /* wgsl */ ` var specularUV: vec2f = ${specularTexture.texCoordAttributeName ?? "uv"};`; if ("useTransform" in specularTexture.texture.options && specularTexture.texture.options.useTransform) { specular += /* wgsl */ ` specularUV = (${specularTexture.texture.options.name}Matrix * vec3(specularUV, 1.0)).xy;`; } specular += /* wgsl */ ` let specularSample: vec4f = textureSample(${specularTexture.texture.options.name}, ${specularTexture.sampler?.name ?? "defaultSampler"}, specularUV); specularIntensity = specularIntensity * specularSample.a; specularColor = specularColor * specularSample.rgb;`; } else { if (specularFactorTexture) { specular += /* wgsl */ ` var specularFactorUV: vec2f = ${specularFactorTexture.texCoordAttributeName ?? "uv"};`; if ("useTransform" in specularFactorTexture.texture.options && specularFactorTexture.texture.options.useTransform) { specular += /* wgsl */ ` specularFactorUV = (${specularFactorTexture.texture.options.name}Matrix * vec3(specularFactorUV, 1.0)).xy;`; } specular += /* wgsl */ ` let specularFactorSample: vec4f = textureSample(${specularFactorTexture.texture.options.name}, ${specularFactorTexture.sampler?.name ?? "defaultSampler"}, specularFactorUV); specularIntensity = specularIntensity * specularSample.a;`; } if (specularColorTexture) { specular += /* wgsl */ ` var specularColorUV: vec2f = ${specularColorTexture.texCoordAttributeName ?? "uv"};`; if ("useTransform" in specularColorTexture.texture.options && specularColorTexture.texture.options.useTransform) { specular += /* wgsl */ ` specularColorUV = (${specularColorTexture.texture.options.name}Matrix * vec3(specularColorUV, 1.0)).xy;`; } specular += /* wgsl */ ` let specularColorSample: vec4f = textureSample(${specularColorTexture.texture.options.name}, ${specularColorTexture.sampler?.name ?? "defaultSampler"}, specularColorUV); specularColor = specularColor * specularSample.rgb;`; } } return specular; }; export { getSpecular };