新闻详情

新闻详情

首页 / 资讯中心 / 详情

Pyrite64编辑器架构剖析:基于ImGui的pages/parts/window UI组织方式

发布时间:2026/9/20 9:36:43来源:尧图网络
Pyrite64编辑器架构剖析:基于ImGui的pages/parts/window UI组织方式
Pyrite64编辑器架构剖析基于ImGui的pages/parts/window UI组织方式【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64Pyrite64 是一款基于 libdragon 与 tiny3d 构建的N64 游戏引擎和编辑器其编辑器 UI 完全由 Dear ImGui 实现。本文带你用 10 分钟看懂 Pyrite64 编辑器pages / parts / window 三层 UI 架构从主窗口管理、两级页面启动页/场景页到十几个可停靠面板的组织方式并附源码路径索引适合想读懂或二次开发这款开源编辑器的新手。一、总体结构三层分离的 UI 架构Pyrite64 编辑器把界面代码清晰地切分为三层各层职责如下层级目录职责windowsrc/editor/window.h主窗口创建、几何尺寸记忆、状态存取pagessrc/editor/pages/顶层页面启动页 Launcher 与主编辑页 Scenepartssrc/editor/pages/parts/具体面板视口、场景图、检查器、日志等这种窗口 → 页面 → 面板的分层让每部分都只管自己的事是整个编辑器可扩展性的关键。二、window 层主窗口如何管理主窗口由 src/editor/window.h 中的Window类封装核心很简单WindowState记录 x/y 坐标、宽高默认 1280×800和最大化状态saveState()/loadState()窗口几何信息持久化到配置文件下次启动自动还原窗口位置大小trackGeometry()在窗口移动、缩放事件时同步跟踪尺寸。启动流程写在 src/main.cpp先初始化 SDL3 与 SDL_GPU 设备再创建 ImGui 上下文开启DockingEnable停靠支持最后进入主循环——每帧在已打开项目与未打开项目之间切换页面打开项目 → ctx.editorScene-draw() // 主编辑页 未打开 → editorMain.draw() // 启动页也就是说页面切换只发生在主循环的一行判断里页面之间互不感知这是解耦做得很彻底的体现。三、pages 层两个顶层页面pages 目录下只有两个顶层页面结构一目了然1. 启动页Launchersrc/editor/pages/launcher.h 负责应用首屏展示最近项目卡片、新建项目按钮。它持有一组Renderer::Texture标题、按钮图标、背景卡片缩略图通过cardImageCache缓存对应素材在 data/img/如cardAdd.svg、splashBG.png。2. 场景页Scenesrc/editor/pages/editorScene.h 是编辑器的大脑它持有所有 parts 面板实例std::vectorstd::shared_ptrViewport3D viewports{}; std::vectorstd::shared_ptrNodeEditor nodeEditors{}; AssetsBrowser assetsBrowser{}; AssetInspector assetInspector{}; SceneGraph sceneGraph{}; LogWindow logWindow{}; // …更多面板成员draw()方法每帧完成三件事搭建停靠布局 → 绘制所有面板 → 处理关闭与脏数据弹窗。四、parts 层可停靠面板群每个面板都是一个独立类放在 src/editor/pages/parts/统一遵循持有状态 draw()方法的模式。按停靠区域分组如下中央区3D 视口viewport3D.h 是最复杂的 part内部持有独立的Camera、Framebuffer、网格/线框/Sprite 网格支持多视口viewports是 vector可自由增减还有 Gizmo 拖拽、对象拾取、导航锁定等交互状态。视口标题用###vpid后缀保证重命名后停靠状态不丢失——这是 ImGui 停靠的一个实用技巧。左侧区场景管理sceneGraph.h —— 场景对象树sceneInspector.h —— 场景属性layerInspector.h —— 图层管理。右侧区检查器objectInspector.h —— 选中对象组件编辑assetInspector.h —— 资产属性parts/assets/modelEditor.h —— 模型编辑器含同目录的textureEditor.h、matInstanceEditor.h。底部区工具面板assetsBrowser.h —— 资产文件浏览器logWindow.h —— 日志输出memoryDashboard.h —— ROM 内存仪表盘。浮动窗口与覆盖层preferenceOverlay.h —— 偏好设置居中模态窗projectSettings.h —— 项目设置toolchainOverlay.h —— 工具链安装引导nodeEditor.h —— 节点图编辑关闭未保存图时会弹出保存/丢弃/取消确认弹窗。五、停靠布局一次搭好用户可自由拖动Editor::Scene::draw()首次运行时用DockBuilder一次性搭建四区布局见 editorScene.cpp区域停靠窗口中央3D-Viewport左 15%Scene、Graph、Layers右 25%Asset、Object、Model底 25%Files、Log、ROM之后用户可以自由拖拽分栏、换区布局由 ImGui 自行记忆菜单里的Reset Layout则清空所有视口并重建默认布局。六、会话持久化每个项目记住自己打开的窗口编辑器把会话状态写入editorScene.jsonloadSession()/saveSession()视口每个Viewport3D的saveState()序列化为 JSON项目窗口集WindowSet按项目路径为 key记录该项目打开过的模型编辑器和节点图 UUID。巧妙之处在于restoredForProject判断切换项目时先closeAllEditors()再restoreWindows()保证A 项目不会残留 B 项目的窗口——对多项目工作流非常友好。七、横向系统Actions、主题与快捷键面板之外还有三个横切模块动作系统src/editor/actions.hregisterAction/Actions::call解耦 UI 与业务如OPEN_NODE_GRAPH动作可在任意面板触发打开节点图主题系统src/editor/imgui/theme.h主题 JSON 数据在 data/themes/dark、retro-95、highcontrast 等 6 套支持菜单切换与缩放快捷键与撤销src/editor/keymap.h、src/editor/undoRedo.hCtrlZ/Y 撤销重做、CtrlShiftF 对齐对象到相机等状态栏实时显示 FPS 与撤销历史占用。八、小结如何照着这个架构扩展一个面板在 src/editor/pages/parts/ 新建myPanel.h/.cpp写一个带draw()的类在 editorScene.h 的Scene中加一个成员并#include头文件在Scene::draw()中用ImGui::Begin(MyPanel)包裹myPanel.draw()并按需加入DockBuilderDockWindow布局若需记忆开关状态把 UUID 加进WindowSet的 JSON 即可。三层架构 统一draw()约定让 Pyrite64 编辑器的 UI 既整洁又易扩展——这正是它能持续加入节点图、模型编辑器等复杂功能而不显臃肿的原因。【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于树莓派打造开源平板:Diskio Pi硬件选型与系统配置指南 2026/9/20 10:36:55

基于树莓派打造开源平板:Diskio Pi硬件选型与系统配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
超声相控阵R-Θ线性插值扫描转换与双线性插值实现 2026/9/20 10:36:55

超声相控阵R-Θ线性插值扫描转换与双线性插值实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
大模型双雄对决:Grok 4.6 vs DeepSeek V4 Pro选型与搭配指南 2026/9/20 10:36:55

大模型双雄对决:Grok 4.6 vs DeepSeek V4 Pro选型与搭配指南

上周信息流被同一件事刷屏:Grok 4.6 和 DeepSeek V4 Pro 选择了同一天上线。对于像我这种每天要跟大模型打交道的人来说,这种“撞车”反而难得——正好可以在同一时间段内把两个新模型放在同一批任务里横向对比,不用来回切换时间窗口。我这两…

阅读更多 →
苹果激活锁原理与合法解除方式详解 2026/9/20 10:36:55

苹果激活锁原理与合法解除方式详解

我不能提供任何绕过设备激活锁(Activation Lock)的技术方案或教程。激活锁是苹果公司为保护用户设备安全而设计的核心防盗机制,其技术实现深度集成于iOS/macOS系统底层、iCloud服务架构与硬件安全模块(Secure Enclave)…

阅读更多 →
中文唇语识别实战:Python+TensorFlow端到端实现 2026/9/20 10:36:54

中文唇语识别实战:Python+TensorFlow端到端实现

简介:这是一套面向人工智能与计算机视觉方向学习者、研究者的中文唇语识别开源项目,聚焦于解决嘈杂环境下的语音辅助识别及聋哑人群无障碍交流问题。资源基于Python与TensorFlow构建端到端识别流程,涵盖唇部视频预处理、特征提取、神经网络建…

阅读更多 →
base_url 写死火山方舟?TaoToken 这样改豆包调 FastMCP 的 OpenAI client 2026/9/20 10:33:54

base_url 写死火山方舟?TaoToken 这样改豆包调 FastMCP 的 OpenAI client

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞