| 67 | } |
| 68 | |
| 69 | void DebugDraw::Draw() { |
| 70 | // Can't return early for g_debug_runtime_disable_debug_draw without memory usage ramping up every frame |
| 71 | |
| 72 | bool editor_draw = true; |
| 73 | if (Graphics::Instance()->media_mode() || |
| 74 | ActiveCameras::Instance()->Get()->GetFlags() == Camera::kPreviewCamera || |
| 75 | elements.empty()) { |
| 76 | editor_draw = false; |
| 77 | } |
| 78 | |
| 79 | CHECK_GL_ERROR(); |
| 80 | GLState gl_state; |
| 81 | gl_state.blend = true; |
| 82 | gl_state.cull_face = false; |
| 83 | gl_state.depth_test = true; |
| 84 | gl_state.depth_write = false; |
| 85 | Graphics::Instance()->setGLState(gl_state); |
| 86 | |
| 87 | if (!g_debug_runtime_disable_debug_draw) { |
| 88 | delete_on_update.Draw(); |
| 89 | delete_on_draw.Draw(); |
| 90 | } |
| 91 | delete_on_draw.verts.clear(); |
| 92 | |
| 93 | int old_key = -1; |
| 94 | DebugDrawElementMap::iterator iter = elements.begin(); |
| 95 | for (; iter != elements.end();) { |
| 96 | DebugDrawElement *element = (*iter).second; |
| 97 | CHECK_GL_ERROR(); |
| 98 | if (!g_debug_runtime_disable_debug_draw && (element->type == kRibbon || editor_draw) && element->visible) { |
| 99 | PROFILER_GPU_ZONE(g_profiler_ctx, "Draw element"); |
| 100 | Graphics::Instance()->setDepthTest(true); |
| 101 | element->Draw(); |
| 102 | } |
| 103 | CHECK_GL_ERROR(); |
| 104 | if (element->GetLifespan() == _delete_on_draw) { |
| 105 | LOGS << "Removing element" << std::endl; |
| 106 | delete element; |
| 107 | elements.erase(iter); |
| 108 | if (old_key == -1) { |
| 109 | iter = elements.begin(); |
| 110 | } else { |
| 111 | iter = ++elements.find(old_key); |
| 112 | } |
| 113 | } else { |
| 114 | old_key = (*iter).first; |
| 115 | ++iter; |
| 116 | } |
| 117 | } |
| 118 | CHECK_GL_ERROR(); |
| 119 | } |
| 120 | |
| 121 | void DebugDraw::Update(float timestep) { |
| 122 | delete_on_update.verts.clear(); |
nothing calls this directly
no test coverage detected