While using THREE.WebGLRenderTarget to render a scene to a texture and pass that texture to a second shader, the value received in the Shader texture uniform variable is always null.
Flow of code:
- Shader1 is used for renderingDepthMap(Working fine while being rendered on screen)
- The rendered depthMap is passed as texture uniform to shader2 that is finally rendered on screen.
Relevant Code Snippet:
//Initialize the renderTarget
var options = {
minFilter : THREE.LinearFilter,
magFilter : THREE.LinearFilter,
format : THREE.RGBAFormat,
type : /(iPad|iPhone|iPod)/g.test(navigator.userAgent) ? THREE.HalfFloatType :
THREE.FloatType
};
renderTarget1 = new THREE.WebGLRenderTarget(window.innerWidth, window.innerHeight,
options);
renderTarget1.stencilBuffer = false;
renderTarget1.texture.needsUpdate = true;
renderTarget1.texture.generateMipmaps = false;
//Define the Shader2 uniforms
uniforms = {
depthMap : { type: "t", value: renderTarget1.texture},
O_SIZE : { type: "float", value: 0.000375},
};
//Creating Material for Shader2
materialShader2 = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader : document.getElementById('vertex2_Shader').textContent,
fragmentShader : document.getElementById('fragment2_Shader').textContent
});
materialShader2.needsUpdate = true;
//Animate function
function animate()
{
// render depth map in renderTarget1
renderer.setRenderTarget(renderTarget1); //setting render target
renderer.render(sceneDepthMap, shadowCamera); // rendering depthmap to framebuffer
renderer.setRenderTarget(null);
renderer.render(scene2, shadowCamera);
requestAnimationFrame( animate );
}