尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

ImGui和Retained GUI的区别

ImGui和Retained GUI的区别
📅 发布时间:2026/6/19 20:30:29

背景

内容

使用上的区别

ImGui是每一帧告诉GPU现在UI的样子。
Retained GUI是构造一次GUI,然后有需要的时候修改它。

Mental model shortcut
ImGui: “Every frame, tell the UI what it looks like right now.”
Retained GUI: “Build a UI once, then modify it over time.”

技术实现的区别

ImGui的drawCall没有合批, Retained GUI 会尽量合批。

ImGui

Unity中我们无法绕过的ImGui接口是GUIStyle.Draw,基本上所有EditorGUI的接口都依赖这个函数。
这个函数对应到C++代码,就是GUIStyle.cpp的GUIStyle::Draw函数。里面会分别调用DrawBackground和DrawContent,这两个接口最终会调用GUITexture.CPP文件内的DrawGUITexture函数。

DrawGUITexture函数中的FillGUITextureVBOChunkInverted会将上层的参数转化为GPU所需的VBO相关数据(顶点数据),最后通过GfxDevice发起DrawCall。

可以说 Unity的ImGui是对底层渲染接口的简单封装,一次GUIStyle.Draw函数对应了一个SetPass和一个Draw。

Retained GUI

C#
Camera.Render->
CPP
Camera::StandaloneRender->Camera::Render->Camera::DoRender->

或者是

WinMain.cpp里面的PlayerMainWndProc->RenderManager::RenderCameras->Camera::Render->

Camera::DoRender-> DoRenderLoop ->ForwardShaderRenderLoop.cpp里面的DoForwardShaderRenderLoop(或者DoForwardVertexRenderLoop)
->ForwardShaderRenderLoop::PerformRendering->BatchRenderer::Add->BatchRenderer::Flush
MeshRenderer::RenderMultiple会调用MeshRenderer.cpp里的RenderDynamicBatch
RenderDynamicBatch 会分别调用GfxDevice.BeginDynamicBatching GfxDevice.DynamicBatchMesh GfxDevice.EndDynamicBatching

RenderManager的 InvokeOnRenderObjectCallbacks 会调用 MonoBehavior.OnRenderObject

综合对比

Aspect ImGui Retained GUI
GPU calls per frame Yes Yes
Rebuild vertex data Every frame Only when dirty
GPU buffer reuse Rare Common
Draw call batching Limited Strong
CPU cost Higher Lower (steady UI)

参考

https://chatgpt.com/

相关新闻

  • 2025美国投资移民中介TOP5权威推荐:深度测评移民公司 - mypinpai
  • 揭秘C++26契约编程:如何用Contracts实现零容忍错误校验
  • Markdown脚注解释TensorFlow专业术语含义

最新新闻

  • KETTLE日志记录、任务巡检、邮件发送
  • FluentTerminal全屏模式技术深度解析:沉浸式终端体验的架构实现
  • 3.gemini336相机在ubuntu22.04的ros2下运行
  • 成本不到 5000 欧元!Matthias Plappert 公开在办公桌旁搭建机器人研究装置的研究过程
  • 三线制SPI驱动GC9306:从模拟到硬件DMA的性能跃迁
  • 2026成都空调维修实测:不制冷、漏水、异响故障诊断+平台对比 - 一步到家

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号