From 361374deb002fb14598dd63429cedd49df4d0461 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 5 Jun 2018 19:40:27 +0200 Subject: [PATCH] fix picker which crashed on resolution change, timelapse frame only when draw a stroke --- engine/app.cpp | 7 +++++-- engine/canvas.cpp | 9 ++++++++- engine/canvas.h | 2 ++ engine/canvas_modes.cpp | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/engine/app.cpp b/engine/app.cpp index 146607d..924acd7 100644 --- a/engine/app.cpp +++ b/engine/app.cpp @@ -302,7 +302,7 @@ void App::update(float dt) //glViewport(0, 0, (GLsizei)width, (GLsizei)height); //glClear(GL_COLOR_BUFFER_BIT); - if (!canvas->m_mouse_captured) + //if (!canvas->m_mouse_captured) { #if _WIN32 || __OSX__ layout.reload(); @@ -349,8 +349,10 @@ void App::update(float dt) if (rec_running) { rec_timer += dt; - if (rec_timer > 1.f) + if (rec_timer > 1.f && canvas->m_canvas->m_dirty_stroke) { + canvas->m_canvas->m_dirty_stroke = false; + LOG("rec tick"); rec_timer = 0.f; @@ -682,6 +684,7 @@ void App::rec_loop() else { rec_count++; + redraw = true; } } rec_frames.pop_front(); diff --git a/engine/canvas.cpp b/engine/canvas.cpp index 33e5464..81ac5ed 100644 --- a/engine/canvas.cpp +++ b/engine/canvas.cpp @@ -126,6 +126,11 @@ glm::vec4 ui::Canvas::pick_get(glm::vec2 canvas_loc) } return {0,0,0,1}; } +void ui::Canvas::pick_end() +{ + for (int i = 0; i < 6; i++) + m_pick_data[i].release(); +} void ui::Canvas::clear(const glm::vec4& c/*={0,0,0,1}*/) { snap_history({ 0, 1, 2, 3, 4, 5 }); @@ -458,7 +463,9 @@ void ui::Canvas::stroke_commit() if (!m_dirty || m_layers.empty()) return; m_dirty = false; - + m_dirty_stroke = true; // new stroke ready for timelapse capture + App::I.redraw = true; + // save viewport and clear color states GLint vp[4]; GLfloat cc[4]; diff --git a/engine/canvas.h b/engine/canvas.h index bdc1cc7..669f329 100644 --- a/engine/canvas.h +++ b/engine/canvas.h @@ -50,6 +50,7 @@ public: BrushMesh m_mesh; bool m_dirty = false; bool m_commit_delayed = false; + bool m_dirty_stroke = false; static Canvas* I; bool m_alpha_lock = false; @@ -129,6 +130,7 @@ public: void pick_start(); void pick_update(int plane); glm::vec4 pick_get(glm::vec2 canvas_loc); + void pick_end(); void snapshot_save(std::string data_path); void snapshot_restore(); void snap_history(const std::vector& planes); diff --git a/engine/canvas_modes.cpp b/engine/canvas_modes.cpp index 90cdc03..9c18550 100644 --- a/engine/canvas_modes.cpp +++ b/engine/canvas_modes.cpp @@ -99,6 +99,7 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc) glm::vec4 pix = canvas->pick_get(loc); canvas->m_current_brush.m_tip_color = pix; App::I.color->set_color(pix); + canvas->pick_end(); } m_dragging = false; m_picking = false;