Here is a sample script. The shader simply averages the image from each pass, you will need to replace that with your own shader code.
Code:
import viz
viz.go()
FRAG = """
uniform sampler2D Pass1;
uniform sampler2D Pass2;
uniform sampler2D Pass3;
uniform sampler2D Pass4;
void main()
{
vec4 p1 = texture2D(Pass1, gl_TexCoord[0].xy);
vec4 p2 = texture2D(Pass2, gl_TexCoord[0].xy);
vec4 p3 = texture2D(Pass3, gl_TexCoord[0].xy);
vec4 p4 = texture2D(Pass4, gl_TexCoord[0].xy);
//TODO: Combine texture from each pass
gl_FragColor = (p1+p2+p3+p4) * 0.25;
}
"""
def CreateRenderPasses():
renderPass = []
uniforms = []
#Create post render pass that combines all passes
postRenderPass = viz.addRenderNode()
postRenderPass.setHUD(-1,1,-1,1,renderQuad=True)
postRenderPass.setOrder(viz.POST_RENDER,-1)
#Create each pass
for x in range(4):
#Create render texture
renderTexture = viz.addRenderTexture()
#Apply to post render pass
postRenderPass.texture(renderTexture,unit=x)
#Create uniform for texture unit
uniforms.append(viz.addUniformInt('Pass'+str(x+1),x))
#Create render node to render texture
renderNode = viz.addRenderNode()
renderNode.attachTexture(renderTexture)
renderPass.append(renderNode)
#Apply shader
shader = viz.addShader(frag=FRAG,uniforms=uniforms)
postRenderPass.apply(shader)
#Set rotation offset of each render pass
renderPass[0].setEuler(-30,0,0)
renderPass[1].setEuler(-10,0,0)
renderPass[2].setEuler(10,0,0)
renderPass[3].setEuler(30,0,0)
viz.add('gallery.ive')
CreateRenderPasses()