| DefineClass.DevDSForceModeDlg = { | |
| __parents = { "XDialog" }, | |
| } | |
| if FirstLoad then | |
| DebugForceModeIdx = { | |
| gbuffers = 0, | |
| stencil = 0, | |
| misc = 0, | |
| lights = 0, | |
| } | |
| end | |
| local DebugForceModeList = { | |
| ["gbuffers"] = { "NORMAL", "GEOMETRY_NORMAL", "BASECOLOR", "COLORMAP", "ROUGHNESS", "METALLIC", "AO", "SI", "TANGENT", "ENCODED_NORMAL", "DEPTH", "NONE"}, | |
| ["stencil"] = { "STENCIL", "NONE" }, | |
| ["misc"] = { "BRDF", "ENV_IRRAD","ENV_DIFFUSE", "SUN_DIFFUSE", "DIFFUSE", | |
| "ENV_SPECULAR","SUN_SPECULAR", "SPECULAR", "SUN_SHADOW", | |
| "TRANSLUCENCY", "REFLECTION", "REFLECTION_ITERATIONS", "PRECISE_SELECTION_IDS", "NONE"}, | |
| ["lights"] = { "LIGHTS", "LIGHTS_DIFFUSE", "LIGHTS_SPECULAR", "LIGHTS_SHADOW", | |
| "LIGHTS_COUNT", "LIGHTS_ATTENUATION", "LIGHTS_CLUSTER", "NONE"} | |
| } | |
| local DebugForceModeRemap = { | |
| ["COLORMAP"] = "BASECOLOR", | |
| ["TANGENT"] = "NORMAL", | |
| } | |
| local DebugForceModeHROptions = | |
| { | |
| ["STENCIL"] = { ShowStencil = 2, ShowRT = "show_rt_buffer", ShowRTEnable = 1, }, | |
| ["COLORMAP"] = { ForceColorizationRGB = 1, DisableBaseColorMaps = 1, RenderClutter = 0, }, | |
| ["TANGENT"] = { UseTangentNormalMap = 1 }, | |
| ["REFLECTION"] = { EnableScreenSpaceReflections = 1, RenderClutter = 0, SSRDebug = 1 }, | |
| ["REFLECTION_ITERATIONS"] = { EnableScreenSpaceReflections = 1, RenderClutter = 0, SSRDebug = 2 }, | |
| ["PRECISE_SELECTION_IDS"] = { ShowPreciseSelectionIDs = 1, RenderTransparent = 1 }, | |
| } | |
| function DevDSForceModeDlg:Init() | |
| XText:new({ | |
| Id = "idText", | |
| Margins = box(100, 80, 0, 0), | |
| TextStyle= "GizmoText", | |
| HandleMouse = false, | |
| }, self) | |
| self.idText:SetText(self.context.text or "") | |
| end | |
| function DevDSForceModeDlg:Done() | |
| table.restore(hr, "ForceModeSpecific") | |
| table.restore(hr, "ForceMode") | |
| RecreateRenderObjects() | |
| end | |
| function OpenDevDSForceModeDlg(mode) | |
| CloseDialog("DevDSForceModeDlg") | |
| table.change(hr, "ForceMode", { | |
| EnablePostprocess = 0, | |
| EnableScreenSpaceReflections = 0, | |
| EnableSubsurfaceScattering = 0, | |
| RenderTransparent = 0, | |
| RenderParticles = 0, | |
| ShowStencil = 0, | |
| ShowRT = "", | |
| ShowRTEnable = 0, | |
| DeferMode = DeferModes[DebugForceModeRemap[mode] or mode], | |
| }) | |
| table.change(hr, "ForceModeSpecific", DebugForceModeHROptions[mode] or {}) | |
| RecreateRenderObjects() | |
| OpenDialog("DevDSForceModeDlg", terminal.desktop, { text = mode }) | |
| end | |
| function ToggleDebugForceMode(debug_type) | |
| if not debug_type then | |
| CloseDialog("DevDSForceModeDlg") | |
| return | |
| end | |
| local modes = DebugForceModeList[debug_type] | |
| local index = (DebugForceModeIdx[debug_type] % #modes) + (GetDialog("DevDSForceModeDlg") and 1 or 0) | |
| DebugForceModeIdx[debug_type] = index | |
| if index ~= #modes then | |
| OpenDevDSForceModeDlg(modes[index]) | |
| else | |
| CloseDialog("DevDSForceModeDlg") | |
| end | |
| PP_Rebuild() | |
| RecreateRenderObjects() | |
| end | |
| if FirstLoad then | |
| g_PostProcDebugMode = "Off" | |
| end | |
| local PostProcDebugModesIdxs = { | |
| HsvDebug = 0, | |
| } | |
| local PostProcDebugModes = { | |
| HsvDebug = { names = { "Hue", "Saturation", "Lightness", "Lighness_WO_Shadows", "Off" }, | |
| hr_vars = { {}, {}, {}, { Shadowmap = 0, EnableScreenSpaceAmbientObscurance = 0 }, {} }, | |
| debug_passes = { "debug_hue", "debug_saturation", "debug_lightness", "debug_lightness", "Off" }, | |
| } | |
| } | |
| DefineClass.PostProcDebugFeatureDlg = { | |
| __parents = { "XDialog" }, | |
| } | |
| function PostProcDebugFeatureDlg:Init() | |
| XText:new({ | |
| Id = "idText", | |
| Margins = box(20, 90, 0, 0), | |
| TextStyle= "EditorText", | |
| HandleMouse = false, | |
| }, self) | |
| self.idText:SetText(self.context.text or "") | |
| end | |
| function PostProcDebugFeatureDlg:Done() | |
| table.restore(hr, "PostProcForceMode") | |
| end | |
| function OpenPostProcDebugFeatureDlg(mode, idx) | |
| CloseDialog("PostProcDebugFeatureDlg") | |
| local hr_options = {} | |
| for op, value in pairs(PostProcDebugModes[mode].hr_vars[idx]) do | |
| hr_options[op] = value | |
| end | |
| table.change(hr, "PostProcForceMode", hr_options) | |
| OpenDialog("PostProcDebugFeatureDlg", terminal.desktop, { text = PostProcDebugModes[mode].names[idx] }) | |
| end | |
| function ToggleHsvDebugForceMode(mode) | |
| local num_modes = #PostProcDebugModes[mode].debug_passes | |
| local idx = (PostProcDebugModesIdxs[mode] % num_modes) + 1 | |
| PostProcDebugModesIdxs[mode] = idx | |
| if idx ~= num_modes then | |
| OpenPostProcDebugFeatureDlg(mode, idx) | |
| else | |
| CloseDialog("PostProcDebugFeatureDlg") | |
| end | |
| g_PostProcDebugMode = PostProcDebugModes[mode].debug_passes[idx] | |
| PP_Rebuild() | |
| end |