码迷,mamicode.com
首页 > 其他好文 > 详细

使用SDL开发IMGUI(一)

时间:2018-05-04 01:44:08      阅读:2749      评论:0      收藏:0      [点我收藏+]

标签:html   media   帧率   www   mfc   href   删除   http   button   

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次甚至更多,假如仅仅是按下鼠标就能激活按钮的话,将会在一秒内产生很多次按钮按下响应,这不是我们希望看到的。通常是鼠标在按钮内部按下又弹起作为一次激活。立即模式GUI不保存状态,这句话的意思是如果一个小部件需要一些数据显示它的状态,这些数据不保存在小部件内部,而是从外部传递给小部件,所以通常一个小部件可以看作一个函数,而不是一个类。虽然小部件不保存他自己状态,但是状态并没有消失,而且需要编程人员主动处理状态,GUI库变得简单、高速,开发过程对程序员的要求就变高了。保存状态数据有很多种思路,简单的就是技术分享图片全局变量技术分享图片,复杂的UI可能需要KVDB。除此之外IMGUI还有其他缺点,比如在低帧率下表现很难看,自动布局困难,键盘焦点难以确认(UI仅仅是一个图像,不存在内存中的对象)。

本教程使用SDL2开发一个IMGUI库,代码公布在GITHUB(仓库创建中),欢迎star。

IMGUI不仅仅使用在游戏中做UI。unity3D使用IMGUI制作编辑器。当需要设计UI的响应方式时可以打开unity3D实验一下。

FF - 目录

使用SDL开发IMGUI(一)

使用SDL开发IMGUI(一)

标签:html   media   帧率   www   mfc   href   删除   http   button   

原文地址:https://www.cnblogs.com/suwyq/p/8988377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!