185 | function DebugManager:consoleCommandOccluderToggleDebug() |
186 | self.occluderDebugEnabled = not self.occluderDebugEnabled |
187 | |
188 | if self.occluderDebugEnabled then |
189 | self.occluderDebugElements = {} |
190 | local debugMat = self:getDebugMat() |
191 | |
192 | local count = 0 |
193 | local function checkNode(node) |
194 | if getHasClassId(node, ClassIds.SHAPE) and getIsOccluderMesh(node) then |
195 | setIsNonRenderable(node, false) |
196 | setMaterial(node, debugMat, 0) |
197 | |
198 | local color = DebugUtil.getDebugColor(node) |
199 | setShaderParameter(node, "color", color[1], color[2], color[3], 0, false) |
200 | setShaderParameter(node, "alpha", 0.3, 0, 0, 0, false) |
201 | |
202 | local _, effectiveCd = getEffectiveClipDistancesWithLOD(node) |
203 | local cd = getClipDistance(node) |
204 | local text = string.format("OccluderMesh: %s (CD=%d)", getName(node), math.min(effectiveCd, cd)) |
205 | local debugElement = DebugText.new():createWithNodeToCamera(node, 0.3 + math.random(), text, 0.13):setColor(color[1], color[2], color[3]) |
206 | |
207 | self.occluderDebugElements[node] = debugElement |
208 | g_debugManager:addPermanentElement(debugElement) |
209 | |
210 | count = count + 1 |
211 | end |
212 | end |
213 | |
214 | I3DUtil.interateRecursively(getRootNode(), checkNode) |
215 | return string.format("Added debug material to %d occluders", count) |
216 | else |
217 | for node, debugElement in pairs(self.occluderDebugElements) do |
218 | if entityExists(node) then |
219 | setIsNonRenderable(node, true) |
220 | end |
221 | g_debugManager:removePermanentElement(debugElement) |
222 | end |
223 | return "Reset occluders to be non-renderable" |
224 | end |
225 | end |
132 | function DebugManager:consoleCommandSplineToggleDebug() |
133 | self.splineDebugEnabled = not self.splineDebugEnabled |
134 | |
135 | if self.splineDebugEnabled then |
136 | self.splineDebugElements = {} |
137 | local debugMat = self:getDebugMat() |
138 | |
139 | local numAffectedNodes = 0 |
140 | |
141 | local function checkNode(node) |
142 | if I3DUtil.getIsSpline(node) then |
143 | self.splineDebugElements[node] = self.splineDebugElements[node] or {} |
144 | |
145 | DebugUtil.setNodeEffectivelyVisible(node) |
146 | local r, g, b = unpack(DebugUtil.getDebugColor(node)) |
147 | setMaterial(node, debugMat, 0) |
148 | setShaderParameter(node, "color", r, g, b, 0, false) |
149 | setShaderParameter(node, "alpha", 1, 0, 0, 0, false) |
150 | |
151 | local debugElements = DebugUtil.getSplineDebugElements(node) |
152 | self.splineDebugElements[node] = debugElements |
153 | for elemName, debugElement in pairs(debugElements) do |
154 | if elemName == "splineAttributes" then |
155 | debugElement:setColor(r, g, b) |
156 | end |
157 | g_debugManager:addPermanentElement(debugElement) |
158 | end |
159 | |
160 | numAffectedNodes = numAffectedNodes + 1 |
161 | end |
162 | end |
163 | |
164 | I3DUtil.interateRecursively(getRootNode(), checkNode) |
165 | return string.format("Added debug visualization to %d splines", numAffectedNodes) |
166 | else |
167 | if self.splineDebugElements then |
168 | for node, debugElements in pairs(self.splineDebugElements) do |
169 | if entityExists(node) then |
170 | setVisibility(node, false) |
171 | end |
172 | for _, debugElement in pairs(debugElements) do |
173 | g_debugManager:removePermanentElement(debugElement) |
174 | end |
175 | end |
176 | self.splineDebugElements = nil |
177 | |
178 | return string.format("Removed spline debug elements") |
179 | end |
180 | end |
181 | end |
77 | function DebugManager:draw() |
78 | for _, element in ipairs(self.permanentElements) do |
79 | element:draw() |
80 | end |
81 | |
82 | for _, element in ipairs(self.permanentFunctions) do |
83 | element[1](unpack(element[2])) |
84 | end |
85 | |
86 | for i=#self.frameElements, 1, -1 do |
87 | self.frameElements[i]:draw() |
88 | table.remove(self.frameElements, i) |
89 | end |
90 | end |
26 | function DebugManager:initDataStructures() |
27 | self.permanentElements = {} |
28 | self.permanentFunctions = {} |
29 | self.frameElements = {} |
30 | |
31 | self.debugMaterial = nil |
32 | if self.debugMaterialNode ~= nil then |
33 | delete(self.debugMaterialNode) |
34 | self.debugMaterialNode = nil |
35 | end |
36 | |
37 | self.splineDebugEnabled = false |
38 | self.splineDebugElements = {} |
39 | self.occluderDebugEnabled = false |
40 | |
41 | if not self.initialized then |
42 | addConsoleCommand("gsDebugManagerClearElements", "Removes all permanent elements and functions from DebugManager", "consoleCommandRemovePermanentElements", self) |
43 | addConsoleCommand("gsSplineDebug", "Toggles debug visualization for all splines currently in the scene", "consoleCommandSplineToggleDebug", self) |
44 | addConsoleCommand("gsOccluderDebug", "Toggles debug visualization for all occluders currently in the scene", "consoleCommandOccluderToggleDebug", self) |
45 | self.initialized = true |
46 | end |
47 | end |