扩展指令发射器

参见<animgui/core/emitter.hpp>:

扩展指令发射器需要派生自emitter并实现以下接口:

class emitter {
public:
    // 将图元转换为绘制指令
    // size: 窗口大小,用于裁剪。
    // operations: 操作序列,操作有三种类型:
    // push_region: 将当前区域入栈,根据父区域的参数可计算得到当前区域的绘制起始偏移和裁剪矩形
    // pop_region: 将当前区域出栈
    // primitive: 在当前区域中绘制基本图元,如文本、矩形等
    // style: 风格设置
    // font_callback: 用于渲染文字时动态加载文字
    // 返回值:返回渲染后端识别的command,有point/line/triangle/quad等类型
    virtual command_queue transform(vec2 size, span<operation> operations, const style& style,
                                                const std::function<texture_region(font&, glyph_id)>& font_callback) = 0;

    // 计算图元所占的大小,用于计算布局
    // primitive: 基本图元的描述,如文本、矩形等
    // style: 风格设置
    virtual vec2 calculate_bounds(const primitive& primitive, const style& style) = 0;
};

具体示例可参考builtins/emitters.cpp。