fix picker which crashed on resolution change, timelapse frame only when draw a stroke
This commit is contained in:
@@ -302,7 +302,7 @@ void App::update(float dt)
|
|||||||
//glViewport(0, 0, (GLsizei)width, (GLsizei)height);
|
//glViewport(0, 0, (GLsizei)width, (GLsizei)height);
|
||||||
//glClear(GL_COLOR_BUFFER_BIT);
|
//glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
if (!canvas->m_mouse_captured)
|
//if (!canvas->m_mouse_captured)
|
||||||
{
|
{
|
||||||
#if _WIN32 || __OSX__
|
#if _WIN32 || __OSX__
|
||||||
layout.reload();
|
layout.reload();
|
||||||
@@ -349,8 +349,10 @@ void App::update(float dt)
|
|||||||
if (rec_running)
|
if (rec_running)
|
||||||
{
|
{
|
||||||
rec_timer += dt;
|
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");
|
LOG("rec tick");
|
||||||
rec_timer = 0.f;
|
rec_timer = 0.f;
|
||||||
|
|
||||||
@@ -682,6 +684,7 @@ void App::rec_loop()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
rec_count++;
|
rec_count++;
|
||||||
|
redraw = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rec_frames.pop_front();
|
rec_frames.pop_front();
|
||||||
|
|||||||
@@ -126,6 +126,11 @@ glm::vec4 ui::Canvas::pick_get(glm::vec2 canvas_loc)
|
|||||||
}
|
}
|
||||||
return {0,0,0,1};
|
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}*/)
|
void ui::Canvas::clear(const glm::vec4& c/*={0,0,0,1}*/)
|
||||||
{
|
{
|
||||||
snap_history({ 0, 1, 2, 3, 4, 5 });
|
snap_history({ 0, 1, 2, 3, 4, 5 });
|
||||||
@@ -458,7 +463,9 @@ void ui::Canvas::stroke_commit()
|
|||||||
if (!m_dirty || m_layers.empty())
|
if (!m_dirty || m_layers.empty())
|
||||||
return;
|
return;
|
||||||
m_dirty = false;
|
m_dirty = false;
|
||||||
|
m_dirty_stroke = true; // new stroke ready for timelapse capture
|
||||||
|
App::I.redraw = true;
|
||||||
|
|
||||||
// save viewport and clear color states
|
// save viewport and clear color states
|
||||||
GLint vp[4];
|
GLint vp[4];
|
||||||
GLfloat cc[4];
|
GLfloat cc[4];
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public:
|
|||||||
BrushMesh m_mesh;
|
BrushMesh m_mesh;
|
||||||
bool m_dirty = false;
|
bool m_dirty = false;
|
||||||
bool m_commit_delayed = false;
|
bool m_commit_delayed = false;
|
||||||
|
bool m_dirty_stroke = false;
|
||||||
|
|
||||||
static Canvas* I;
|
static Canvas* I;
|
||||||
bool m_alpha_lock = false;
|
bool m_alpha_lock = false;
|
||||||
@@ -129,6 +130,7 @@ public:
|
|||||||
void pick_start();
|
void pick_start();
|
||||||
void pick_update(int plane);
|
void pick_update(int plane);
|
||||||
glm::vec4 pick_get(glm::vec2 canvas_loc);
|
glm::vec4 pick_get(glm::vec2 canvas_loc);
|
||||||
|
void pick_end();
|
||||||
void snapshot_save(std::string data_path);
|
void snapshot_save(std::string data_path);
|
||||||
void snapshot_restore();
|
void snapshot_restore();
|
||||||
void snap_history(const std::vector<int>& planes);
|
void snap_history(const std::vector<int>& planes);
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ void CanvasModePen::on_MouseEvent(MouseEvent* me, glm::vec2& loc)
|
|||||||
glm::vec4 pix = canvas->pick_get(loc);
|
glm::vec4 pix = canvas->pick_get(loc);
|
||||||
canvas->m_current_brush.m_tip_color = pix;
|
canvas->m_current_brush.m_tip_color = pix;
|
||||||
App::I.color->set_color(pix);
|
App::I.color->set_color(pix);
|
||||||
|
canvas->pick_end();
|
||||||
}
|
}
|
||||||
m_dragging = false;
|
m_dragging = false;
|
||||||
m_picking = false;
|
m_picking = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user