mixer brush partially working, still wip
This commit is contained in:
@@ -222,11 +222,11 @@ void ui::Canvas::stroke_cancel()
|
||||
void ui::Canvas::stroke_draw_mix()
|
||||
{
|
||||
m_mixer.bindFramebuffer();
|
||||
m_mixer.clear({ 0, 1, 1, 1 });
|
||||
m_mixer.clear({ 1, 1, 1, 1 });
|
||||
|
||||
glViewport(m_vp.x, m_vp.y, m_vp.z, m_vp.w);
|
||||
glDisable(GL_BLEND);
|
||||
glViewport(0, 0, m_mixer.getWidth(), m_mixer.getHeight());
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
m_sampler_bg.bind(0);
|
||||
auto layer_index = m_current_layer_idx;
|
||||
@@ -237,24 +237,25 @@ void ui::Canvas::stroke_draw_mix()
|
||||
|
||||
auto plane_mvp_z = m_proj * m_mv *
|
||||
m_plane_transform[plane_index] *
|
||||
//glm::scale(glm::vec3(1, -1, 1)) *
|
||||
glm::translate(glm::vec3(0, 0, -1));
|
||||
{
|
||||
ui::ShaderManager::use(kShader::TextureAlpha);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index].m_opacity);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Highlight, false);
|
||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
// m_layers[layer_index].m_rtt[plane_index].bindTexture();
|
||||
// m_node->m_face_plane.draw_fill();
|
||||
// m_layers[layer_index].m_rtt[plane_index].unbindTexture();
|
||||
|
||||
m_tmp[plane_index].bindTexture();
|
||||
m_node->m_face_plane.draw_fill();
|
||||
m_tmp[plane_index].unbindTexture();
|
||||
}
|
||||
ui::ShaderManager::use(kShader::TextureAlpha);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index].m_opacity);
|
||||
ui::ShaderManager::u_int(kShaderUniform::Highlight, false);
|
||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z);
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
|
||||
//glDisable(GL_BLEND);
|
||||
m_layers[layer_index].m_rtt[plane_index].bindTexture();
|
||||
m_node->m_face_plane.draw_fill();
|
||||
m_layers[layer_index].m_rtt[plane_index].unbindTexture();
|
||||
|
||||
m_tmp[plane_index].bindTexture();
|
||||
m_node->m_face_plane.draw_fill();
|
||||
m_tmp[plane_index].unbindTexture();
|
||||
}
|
||||
m_sampler_bg.unbind();
|
||||
m_mixer.unbindFramebuffer();
|
||||
@@ -342,12 +343,15 @@ void ui::Canvas::stroke_draw()
|
||||
+ dx - dy, // D - bottom-right
|
||||
};
|
||||
static glm::vec4 P[4];
|
||||
static glm::vec2 UV2[4];
|
||||
int intersected = 0;
|
||||
int inside = 0;
|
||||
for (int j = 0; j < 4; j++)
|
||||
{
|
||||
glm::vec3 ray_origin, ray_dir;
|
||||
point_unproject(s.pos + off[j] * glm::orientate2(-s.angle), { 0, 0, zw(m_box) }, m_mv, m_proj, ray_origin, ray_dir);
|
||||
UV2[j] = (s.pos + off[j]) / glm::vec2(m_mixer.getWidth(), m_mixer.getHeight());
|
||||
UV2[j].y = 1 - UV2[j].y;
|
||||
glm::vec3 hit;
|
||||
if (ray_intersect(ray_origin, ray_dir, m_plane_origin[i], m_plane_normal[i], m_plane_tangent[i], hit))
|
||||
{
|
||||
@@ -401,7 +405,7 @@ void ui::Canvas::stroke_draw()
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, ortho_proj);
|
||||
ShaderManager::u_vec4(kShaderUniform::Col, glm::vec4(s.col, m_brush.m_tip_color.a));
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, s.flow);
|
||||
m_plane_brush.update_vertices(P);
|
||||
m_plane_brush.update_vertices(P, nullptr, UV2);
|
||||
m_plane_brush.draw_fill();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user