lazy stroke preview rendering
This commit is contained in:
@@ -38,6 +38,8 @@ void NodeStrokePreview::empty_queue()
|
||||
s_queue.q.clear();
|
||||
}
|
||||
|
||||
int NodeStrokePreview::instances = 0;
|
||||
|
||||
Node* NodeStrokePreview::clone_instantiate() const
|
||||
{
|
||||
return new NodeStrokePreview();
|
||||
@@ -271,7 +273,10 @@ void NodeStrokePreview::draw_stroke_immediate()
|
||||
m_sampler_linear.bind(4);
|
||||
|
||||
const auto& b = m_brush;
|
||||
|
||||
|
||||
Stroke m_stroke;
|
||||
Stroke m_dual_stroke;
|
||||
|
||||
m_stroke.m_filter_points = false;
|
||||
m_stroke.m_max_size = m_max_size > 0 ? m_max_size : m_size.y * .75f;
|
||||
m_stroke.m_camera.fov = Canvas::I->m_cam_fov;
|
||||
@@ -518,10 +523,13 @@ void NodeStrokePreview::draw_stroke()
|
||||
node->m_brush->preload();
|
||||
|
||||
node->async_start();
|
||||
|
||||
gl_state gl;
|
||||
gl.save();
|
||||
|
||||
auto new_size = node->m_tex_preview.size();
|
||||
auto new_size = node->m_preview_size;
|
||||
if (!node->m_tex_preview.ready() || node->m_tex_preview.size() != new_size)
|
||||
node->m_tex_preview.create((int)new_size.x, (int)new_size.y);
|
||||
if (m_tex.size() != new_size)
|
||||
{
|
||||
m_rtt.create((int)new_size.x, (int)new_size.y);
|
||||
@@ -558,7 +566,6 @@ void NodeStrokePreview::draw_stroke()
|
||||
|
||||
void NodeStrokePreview::draw()
|
||||
{
|
||||
//glEnable(GL_BLEND);
|
||||
ShaderManager::use(kShader::Texture);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
@@ -574,11 +581,10 @@ void NodeStrokePreview::handle_resize(glm::vec2 old_size, glm::vec2 new_size)
|
||||
if (m_tex_preview.size() == new_size || !m_brush)
|
||||
return;
|
||||
|
||||
new_size *= root()->m_zoom;
|
||||
m_preview_size = new_size * root()->m_zoom;
|
||||
|
||||
m_tex_preview.create((int)new_size.x, (int)new_size.y);
|
||||
|
||||
draw_stroke();
|
||||
if (m_on_screen)
|
||||
draw_stroke();
|
||||
}
|
||||
|
||||
void NodeStrokePreview::destroy_immediate()
|
||||
@@ -586,3 +592,17 @@ void NodeStrokePreview::destroy_immediate()
|
||||
Node::destroy_immediate();
|
||||
m_tex_preview.destroy();
|
||||
}
|
||||
|
||||
void NodeStrokePreview::handle_on_screen(bool old_visibility, bool new_visibility)
|
||||
{
|
||||
parent::handle_on_screen(old_visibility, new_visibility);
|
||||
if (new_visibility)
|
||||
{
|
||||
draw_stroke();
|
||||
}
|
||||
else
|
||||
{
|
||||
s_queue.Remove(std::static_pointer_cast<NodeStrokePreview>(shared_from_this()));
|
||||
m_tex_preview.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user