Source: packages/core/src/batch/ObjectRenderer.ts

import type { Renderer } from '../Renderer';

/**
 * Base for a common object renderer that can be used as a
 * system renderer plugin.
 *
 * @class
 * @extends PIXI.System
 * @memberof PIXI
 */
export class ObjectRenderer
{
    protected renderer: Renderer;
    /**
     * @param {PIXI.Renderer} renderer - The renderer this manager works for.
     */
    constructor(renderer: Renderer)
    {
        /**
         * The renderer this manager works for.
         *
         * @member {PIXI.Renderer}
         */
        this.renderer = renderer;
    }

    /**
     * Stub method that should be used to empty the current
     * batch by rendering objects now.
     */
    flush(): void
    {
        // flush!
    }

    /**
     * Generic destruction method that frees all resources. This
     * should be called by subclasses.
     */
    destroy(): void
    {
        this.renderer = null;
    }

    /**
     * Stub method that initializes any state required before
     * rendering starts. It is different from the `prerender`
     * signal, which occurs every frame, in that it is called
     * whenever an object requests _this_ renderer specifically.
     */
    start(): void
    {
        // set the shader..
    }

    /**
     * Stops the renderer. It should free up any state and
     * become dormant.
     */
    stop(): void
    {
        this.flush();
    }

    /**
     * Keeps the object to render. It doesn't have to be
     * rendered immediately.
     *
     * @param {PIXI.DisplayObject} object - The object to render.
     */
    render(_object: any): void // eslint-disable-line @typescript-eslint/explicit-module-boundary-types
    {
        // render the object
    }
}