imgui的控件采用immediate模式的,传入数据指针,且每帧绘制
基于反射的编辑器,可以简单归纳为“基于类型的控件,基于结构的面板”,它需要一套强大的反射系统去归纳所有类型:
- 基本类型:逻辑,数值,枚举,字符串
- 复合类型:类,结构体
- 容器类型:连续(sequential)容器[list,array,vector,set,queue...],组合(associative)容器[map,hashmap...]
一般情况下,开发者只需要为基本类型和部分复合类型制作控件,为大部分复合类型组织属性面板布局,而容器类型的编辑面板,往往是通过元素类型自动生成和组合的
综上,为什么不用imgui去实现基于反射的编辑器,主要是因为:
- imgui的原生控件是直接将控件咬合在数据指针上,而基于反射的编辑器需要将控件咬合在反射接口上,以此来快速实现一些用户体验的优化,比如撤销重做,元信息扩展等。
- Imgui的优势在于轻量便捷,而基于反射的编辑器,需要使用一套健壮的反射框架,目前主流使用反射框架的平台有UE和Qt,开源的有RTTR,虽然RTTR是一个非嵌入的反射框架,但一套操作下来,还是需要组织大量的代码结构,增加整体代码的复杂度,从长远上来看,确实能省很多事情,但对大部分开发者来说,他们的目标往往是渲染,模拟...,而不是编辑器架构,因此imgui已经够用且很好用了
可以说,imgui只是一个轻量的UI工具包,涉及到反射相关的编辑器架构,它的位置就显得有些尴尬了
编辑于 2023-06-26 15:42・IP 属地云南