threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
31 lines (29 loc) • 1.3 kB
text/typescript
import {UniformsUtils} from 'three'
import {CopyShader} from 'three/examples/jsm/shaders/CopyShader.js'
import {getOrCall, glsl, ValOrFunc} from 'ts-browser-helpers'
import {ExtendedShaderPass} from './ExtendedShaderPass'
export class ExtendedCopyPass extends ExtendedShaderPass {
constructor(snippet?: ValOrFunc<string, [string]>, respectColorSpace = true) {
super({
uniforms: UniformsUtils.clone(CopyShader.uniforms),
vertexShader: CopyShader.vertexShader,
fragmentShader: glsl`
uniform float opacity;
#include <alphatest_pars_fragment>
varying vec2 vUv;
void main() {
${respectColorSpace ?
'vec4 diffuseColor = tDiffuseTexelToLinear(texture2D(tDiffuse, vUv)) * opacity;' :
'vec4 diffuseColor = texture2D(tDiffuse, vUv) * opacity;'}
#include <alphatest_fragment>
${snippet ? getOrCall(snippet, 'diffuseColor') : ''}
#ifdef OPAQUE
diffuseColor.a = 1.0;
#endif
gl_FragColor = diffuseColor;
${respectColorSpace ? '#include <colorspace_fragment>' : ''}
}
`,
}, 'tDiffuse')
}
}