fix picker which crashed on resolution change, timelapse frame only when draw a stroke

This commit is contained in:
2018-06-05 19:40:27 +02:00
parent 376c6097d2
commit 361374deb0
4 changed files with 16 additions and 3 deletions

View File

@@ -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();

View File

@@ -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,6 +463,8 @@ 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];

View File

@@ -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<int>& planes);

View File

@@ -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;