         # but eventually we'll order it in the constructor evaluating dependencies
         for {material, output} in @filters
             prog = material.use()
+            # Bind textures
+            i = 0
+            # Note: relying on having the same order in "for .. of"
+            for name, {buffer, texture} of @buffers
+                # It may be a Texture instance, a WebGL texture or a buffer
+                if output.buffer != buffer
+                    texture = texture?.gl_tex or texture or buffer.texture
+                    gl.activeTexture gl.TEXTURE0 + i
+                    gl.bindTexture gl.TEXTURE_2D, texture
+                i++
             # Configure attributes
             @context.render_manager.change_enabled_attributes 1<<material.a_vertex
             gl.vertexAttribPointer material.a_vertex, 3.0, gl.FLOAT, false, 0, 0

            size = output.size or [output.buffer.size_x, output.buffer.size_y]
            output.buffer.enable([0, 0, size[0], size[1]])
            gl.drawArrays gl.TRIANGLE_STRIP, 0, 4
        return



    
    compose: ->
        {gl, uniform_functions} = @context.render_manager
        gl.disable gl.DEPTH_TEST
        # Bind quad mesh
        gl.bindBuffer gl.ARRAY_BUFFER, @context.render_manager.quad
                
