Note:原教程来自http://iki.fi/sol/imgui/
00 – 介绍
IMGUI全称:Immediate Mode GUI。IMGUI不同于我们常见的RMGUI(MFC、QT、WPF、GTK都是RMGUI)。在典型的RMGUI的应用程序中,我们创建了一堆小部件(widgets),它们通过布局显示在窗口上,我们可以查询小部件的状态,接受系统发来消息和数据,处理、生成新的状态,最终重绘小部件,用户看到改变。
在RMGUI中,代码至少分成3部分:创建、响应消息、删除。如果考虑到多个小部件之间需要传递消息,在系统运行时我们难以预测消息的传播、小部件状态的改变。虽然RMGUI这么麻烦,但在常规的应用开发中,依然是中流砥柱。但是在游戏开发中,用户与应用的交互十分频繁,游戏逐帧更新,复杂的RMGUI难以做到60FPS。在这种情况下IMGUI就可以展示它的威力。
在IMGUI中代码是这个样子的。
if (button(GEN_ID, 15, 15))
{
button_was_pressed();
}
这段代码的奇妙之处在于每一帧都被执行一次,button();函数在屏幕的(15,15)处绘制一个按钮图片,当检测到鼠标恰好“激活”时返回true。这里使用激活是因为这段代码在一秒内会执行60次甚至更多,假如仅仅是按下鼠标就能激活按钮的话,将会在一秒内产生很多次按钮按下响应,这不是我们希望看到的。通常是鼠标在按钮内部按下又弹起作为一次激活