/**
 * 渲染器被添加到场景中并处理所有对RenderableComponent的实际调用
 */
abstract class Renderer {
    /** 
     * 渲染器用于渲染的摄像机(实际上是用于剔除的变换矩阵和边界)
     * 不是必须的
     * Renderer子类可以选择调用beginRender时使用的摄像头
     */
    public camera: Camera;

    /**
     * 当渲染器被添加到场景时调用
     * @param scene 
     */
    public onAddedToScene(scene: Scene){}

    protected beginRender(cam: Camera){
        
    }

    /**
     * 
     * @param scene 
     */
    public abstract render(scene: Scene);

    public unload(){ }
    
    /**
     * 
     * @param renderable 
     * @param cam 
     */
    protected renderAfterStateCheck(renderable: IRenderable, cam: Camera){
        renderable.render(cam);
    }
}