From f17dba8ecf479ca949d8bb83b132b93b94a0eee8 Mon Sep 17 00:00:00 2001 From: MathemanFlo Date: Tue, 19 Apr 2022 11:02:06 +0200 Subject: [PATCH] Shortcut for viewport mode --- Sources/arm/Context.hx | 22 +++++++++++++++++++ Sources/arm/ui/UIMenu.hx | 20 +---------------- Sources/arm/ui/UISidebar.hx | 43 +++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 19 deletions(-) diff --git a/Sources/arm/Context.hx b/Sources/arm/Context.hx index c76a7107..5acc30e1 100644 --- a/Sources/arm/Context.hx +++ b/Sources/arm/Context.hx @@ -288,6 +288,28 @@ class Context { setMaterial(Project.materials[i]); } + public static function setViewportMode(mode : ViewportMode) { + if (mode == viewportMode) return; + + viewportMode = mode; + var deferred = Context.renderMode != RenderForward && (Context.viewportMode == ViewLit || Context.viewportMode == ViewPathTrace); + if (deferred) { + RenderPath.active.commands = RenderPathDeferred.commands; + } + // else if (Context.viewportMode == ViewPathTrace) { + // } + else { + if (RenderPathForward.path == null) { + RenderPathForward.init(RenderPath.active); + } + RenderPath.active.commands = RenderPathForward.commands; + } + var _workspace = UIHeader.inst.worktab.position; + UIHeader.inst.worktab.position = SpacePaint; + MakeMaterial.parseMeshMaterial(); + UIHeader.inst.worktab.position = _workspace; + } + public static function setMaterial(m: MaterialSlot) { if (Project.materials.indexOf(m) == -1) return; material = m; diff --git a/Sources/arm/ui/UIMenu.hx b/Sources/arm/ui/UIMenu.hx index 6ea45059..637f38ef 100644 --- a/Sources/arm/ui/UIMenu.hx +++ b/Sources/arm/ui/UIMenu.hx @@ -270,25 +270,7 @@ class UIMenu { ui.radio(modeHandle, i, modes[i]); } - Context.viewportMode = modeHandle.position; - if (modeHandle.changed) { - var deferred = Context.renderMode != RenderForward && (Context.viewportMode == ViewLit || Context.viewportMode == ViewPathTrace); - if (deferred) { - RenderPath.active.commands = RenderPathDeferred.commands; - } - // else if (Context.viewportMode == ViewPathTrace) { - // } - else { - if (RenderPathForward.path == null) { - RenderPathForward.init(RenderPath.active); - } - RenderPath.active.commands = RenderPathForward.commands; - } - var _workspace = UIHeader.inst.worktab.position; - UIHeader.inst.worktab.position = SpacePaint; - MakeMaterial.parseMeshMaterial(); - UIHeader.inst.worktab.position = _workspace; - } + if (modeHandle.changed) Context.setViewportMode(modeHandle.position); } else if (menuCategory == MenuCamera) { if (menuButton(ui, tr("Reset"), Config.keymap.view_reset)) { diff --git a/Sources/arm/ui/UISidebar.hx b/Sources/arm/ui/UISidebar.hx index e6d7fd63..c7a681d4 100644 --- a/Sources/arm/ui/UISidebar.hx +++ b/Sources/arm/ui/UISidebar.hx @@ -3,6 +3,7 @@ package arm.ui; import haxe.io.Bytes; import kha.Image; import kha.System; +import kha.input.KeyCode; import zui.Zui; import zui.Id; import iron.data.Data; @@ -364,6 +365,48 @@ class UISidebar { else if (Operator.shortcut(Config.keymap.view_orbit_opposite)) Viewport.orbitOpposite(); else if (Operator.shortcut(Config.keymap.view_zoom_in, ShortcutRepeat)) Viewport.zoom(0.2); else if (Operator.shortcut(Config.keymap.view_zoom_out, ShortcutRepeat)) Viewport.zoom(-0.2); + else if (Operator.shortcut("ctrl+m")) { + UIMenu.draw(function(ui: Zui) { + var modeHandle = Id.handle(); + modeHandle.position = Context.viewportMode; + ui.text(tr("Viewport mode"), Right, ui.t.HIGHLIGHT_COL); + var modes = [ + tr("Lit"), + tr("Base Color"), + tr("Normal"), + tr("Occlusion"), + tr("Roughness"), + tr("Metallic"), + tr("Opacity"), + tr("Height"), + tr("TexCoord"), + tr("Object Normal"), + tr("Material ID"), + tr("Object ID"), + tr("Mask") + ]; + var shortcuts = [ "l", "b", "n", "o", "r", "m", "a", "h", "t", "1", "2", "3", "4" ]; + #if (kha_direct3d12 || kha_vulkan) + modes.push(tr("Path Traced")); + shortcuts.push("p"); + #end + for (i in 0...modes.length) { + ui.radio(modeHandle, i, modes[i], shortcuts[i]); + } + + var index = shortcuts.indexOf(Keyboard.keyCode(ui.key)); + if (ui.isKeyPressed && index != -1) { + modeHandle.position = index; + ui.changed = true; + Context.setViewportMode(modeHandle.position); + } + else if (modeHandle.changed) { + Context.setViewportMode(modeHandle.position); + ui.changed = true; + } + }, 14 #if (kha_direct3d12 || kha_vulkan) + 1 #end ); + } + } }