Set default document res to 6K. Implement blending on canvas, mixer and export equirect.
This commit is contained in:
@@ -244,7 +244,9 @@ void Canvas::stroke_draw_mix(const glm::vec2& bb_min, const glm::vec2& bb_sz)
|
||||
auto layer_index = m_current_layer_idx;
|
||||
for (int plane_index = 0; plane_index < 6; plane_index++)
|
||||
{
|
||||
if (!m_layers[layer_index].m_visible || m_layers[layer_index].m_opacity == .0f)
|
||||
if (!m_layers[layer_index].m_visible ||
|
||||
m_layers[layer_index].m_opacity == .0f ||
|
||||
!m_layers[layer_index].m_dirty_face)
|
||||
continue;
|
||||
|
||||
glm::mat4 proj = glm::perspective(glm::radians(m_cam_fov), (float)m_mixer.getWidth() / m_mixer.getHeight(), 0.1f, 1000.f);
|
||||
@@ -1018,7 +1020,7 @@ void Canvas::layer_merge(int source_idx, int dest_idx) // m_layer index
|
||||
ShaderManager::u_float(kShaderUniform::StrokeAlpha, 1);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, m_layers[source_idx].m_opacity);
|
||||
ShaderManager::u_int(kShaderUniform::Lock, false);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, 0); // TODO: defaulted to normal, change to layer blend mode when implemented
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, m_layers[source_idx].m_blend_mode);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
@@ -1273,32 +1275,60 @@ void Canvas::export_equirectangular_thread(std::string file_path)
|
||||
int progress = 0;
|
||||
int total = 6 + 2;
|
||||
|
||||
Texture2D face;
|
||||
face.create(m_width, m_height);
|
||||
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
// prepare common states
|
||||
glViewport(0, 0, m_width, m_height);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
ShaderManager::use(kShader::TextureAlpha);
|
||||
ShaderManager::u_int(kShaderUniform::Highlight, false);
|
||||
ShaderManager::use(kShader::TextureBlend);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ShaderManager::u_int(kShaderUniform::TexA, 1);
|
||||
ShaderManager::u_int(kShaderUniform::TexBG, 2);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
|
||||
m_tmp[i].bindFramebuffer();
|
||||
m_tmp[i].clear({ 1, 1, 1, 1 });
|
||||
m_tmp[i].clear({ 1, 1, 1, 0 });
|
||||
|
||||
glActiveTexture(GL_TEXTURE0); // TODO: maybe remove this line
|
||||
m_sampler_mask.bind(0);
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
face.bind();
|
||||
m_sampler_bg.bind(0); // nearest
|
||||
m_sampler_mask.bind(1); // linear
|
||||
m_sampler_bg.bind(2);
|
||||
for (auto layer_index : m_order)
|
||||
{
|
||||
if (!m_layers[layer_index].m_visible || m_layers[layer_index].m_opacity == 0.f)
|
||||
continue;
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, m_width, m_height);
|
||||
ShaderManager::u_int(kShaderUniform::BlendMode, m_layers[layer_index].m_blend_mode);
|
||||
ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index].m_opacity);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_layers[layer_index].m_rtt[i].bindTexture();
|
||||
glActiveTexture(GL_TEXTURE1);
|
||||
m_layers[layer_index].m_rtt[i].bindTexture();
|
||||
m_plane.draw_fill();
|
||||
m_layers[layer_index].m_rtt[i].unbindTexture();
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
m_layers[layer_index].m_rtt[i].unbindTexture();
|
||||
}
|
||||
m_sampler_mask.unbind();
|
||||
glActiveTexture(GL_TEXTURE2);
|
||||
face.unbind();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
ShaderManager::use(kShader::Texture);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f));
|
||||
m_sampler_mask.bind(0); // linear
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
face.bind();
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, m_width, m_height);
|
||||
m_tmp[i].clear({ 1, 1, 1, 1 });
|
||||
m_plane.draw_fill();
|
||||
face.unbind();
|
||||
|
||||
// copy result to cubemap
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, cube_id);
|
||||
@@ -1320,6 +1350,8 @@ void Canvas::export_equirectangular_thread(std::string file_path)
|
||||
}
|
||||
}
|
||||
|
||||
face.destroy();
|
||||
|
||||
//auto data = std::make_unique<uint8_t[]>(m_tmp[0].bytes());
|
||||
//for (int i = 0; i < 1; i++)
|
||||
//{
|
||||
|
||||
Reference in New Issue
Block a user