diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt index 8bd9fb3..e660f2a 100644 --- a/android/CMakeLists.txt +++ b/android/CMakeLists.txt @@ -58,6 +58,7 @@ add_library( ../src/app_events.cpp ../src/app_layout.cpp ../src/app_shaders.cpp + ../src/app_vr.cpp ../src/brush.cpp ../src/canvas.cpp ../src/canvas_modes.cpp @@ -89,6 +90,7 @@ add_library( ../src/node_panel_brush.cpp ../src/node_panel_color.cpp ../src/node_panel_grid.cpp + ../src/node_panel_floating.cpp ../src/node_panel_layer.cpp ../src/node_panel_stroke.cpp ../src/node_panel_quick.cpp @@ -105,6 +107,7 @@ add_library( ../src/abr.cpp ../src/binary_stream.cpp ../src/serializer.cpp + ../src/settings.cpp ) target_include_directories(native-lib PRIVATE diff --git a/src/canvas.cpp b/src/canvas.cpp index 6d3f94c..cc7c134 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -903,6 +903,7 @@ void Canvas::stroke_commit() void Canvas::draw_merge(std::array faces /*= SIXPLETTE(false)*/) { + return; gl_state gl; gl.save(); glViewport(0, 0, m_width, m_height); diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index 2a992f4..93aba51 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -66,9 +66,6 @@ void NodeCanvas::draw() float zoom = root()->m_zoom; auto box = m_clip * zoom; glm::ivec4 c = (glm::ivec4)glm::vec4(box.x, (int)(vp[3] - box.y - box.w), box.z, box.w); - glClearColor(1, 1, 1, 0); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(c.x + App::I.off_x, c.y + App::I.off_y, c.z, c.w); //m_canvas->m_cam_rot = m_pan * 0.003f; @@ -111,6 +108,12 @@ void NodeCanvas::draw() } bool draw_merged = !(m_canvas->m_current_mode == kCanvasMode::Camera); + draw_merged = false; + + m_rtt.bindFramebuffer(); + glClearColor(1, 1, 1, 0); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(0, 0, m_rtt.getWidth(), m_rtt.getHeight()); if (draw_merged) { @@ -401,18 +404,18 @@ void NodeCanvas::draw() glEnable(GL_BLEND); //draw the grid - for (int plane_index = 0; plane_index < 6; plane_index++) - { - auto plane_mvp = proj * camera * - glm::scale(glm::vec3(m_canvas->m_order.size() + 500.f)) * - m_canvas->m_plane_transform[plane_index] * - glm::translate(glm::vec3(0, 0, -1.f)); + //for (int plane_index = 0; plane_index < 6; plane_index++) + //{ + // auto plane_mvp = proj * camera * + // glm::scale(glm::vec3(m_canvas->m_order.size() + 500.f)) * + // m_canvas->m_plane_transform[plane_index] * + // glm::translate(glm::vec3(0, 0, -1.f)); - ShaderManager::use(kShader::Checkerboard); - ShaderManager::u_int(kShaderUniform::Colorize, false); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp); - m_face_plane.draw_fill(); - } + // ShaderManager::use(kShader::Checkerboard); + // ShaderManager::u_int(kShaderUniform::Colorize, false); + // ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp); + // m_face_plane.draw_fill(); + //} // draw the layers m_sampler.bind(0); @@ -426,6 +429,23 @@ void NodeCanvas::draw() } } + m_rtt.unbindFramebuffer(); + + glClearColor(1, 1, 1, 0); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(c.x + App::I.off_x, c.y + App::I.off_y, c.z, c.w); + + // draw the canvas + m_sampler_linear.bind(0); + glActiveTexture(GL_TEXTURE0); + m_rtt.bindTexture(); + ShaderManager::use(kShader::Texture); + ShaderManager::u_int(kShaderUniform::Tex, 0); + ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-1, 1, -1, 1)); + m_face_plane.draw_fill(); + m_rtt.unbindTexture(); + + glDisable(GL_DEPTH_TEST); if (m_canvas->m_smask_active || m_canvas->m_current_mode == kCanvasMode::Copy || m_canvas->m_current_mode == kCanvasMode::Cut) { @@ -457,7 +477,7 @@ void NodeCanvas::handle_resize(glm::vec2 old_size, glm::vec2 new_size) if (new_size.x != m_canvas->m_width || new_size.y != m_canvas->m_height) { // actual screen size - new_size = new_size * root()->m_zoom; + //new_size = new_size * root()->m_zoom; #if defined(__IOS__) || defined(__ANDROID__) m_canvas->m_mixer.create((int)new_size.x * m_canvas->m_mixer_scale, (int)new_size.y * m_canvas->m_mixer_scale, -1, GL_RGBA16F); @@ -467,6 +487,7 @@ void NodeCanvas::handle_resize(glm::vec2 old_size, glm::vec2 new_size) #endif m_blender_rtt.create((int)new_size.x, (int)new_size.y, -1, GL_RGBA8); m_cache_rtt.create((int)new_size.x, (int)new_size.y, -1, GL_RGBA8); + m_rtt.create((int)new_size.x, (int)new_size.y, -1, GL_RGBA8); m_blender_bg.create((int)new_size.x, (int)new_size.y, GL_RGBA8); if (auto img = root()->find("tex-debug")) img->tex.assign(m_canvas->m_mixer.getTextureID()); @@ -594,6 +615,7 @@ void NodeCanvas::destroy_immediate() Node::destroy_immediate(); m_blender_rtt.destroy(); m_cache_rtt.destroy(); + m_rtt.destroy(); m_blender_bg.destroy(); m_face_plane.destroy(); m_line.destroy(); diff --git a/src/node_canvas.h b/src/node_canvas.h index b0e467f..b84d869 100644 --- a/src/node_canvas.h +++ b/src/node_canvas.h @@ -8,6 +8,7 @@ public: std::unique_ptr m_canvas; RTT m_blender_rtt; RTT m_cache_rtt; + RTT m_rtt; Texture2D m_blender_bg; Sampler m_sampler; Sampler m_sampler_linear;