From 6043857ad88d5175daa6eb70d8e0ebda382375f1 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sun, 4 Aug 2019 14:30:56 +0200 Subject: [PATCH] fix vr stroke preview --- src/app_vr.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/app_vr.cpp b/src/app_vr.cpp index 4fe555c..61cc832 100644 --- a/src/app_vr.cpp +++ b/src/app_vr.cpp @@ -179,10 +179,6 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat glm::vec3 origin = glm::vec3(0, 0, -1) * glm::transpose(glm::mat3(pose)); vr_rot = glm::lookAt({ 0, 0, 0 }, origin, { 0, 1, 0 }); - sampler.bind(0); - sampler.bind(1); - sampler.bind(2); - sampler_stencil.bind(3); auto blend = glIsEnabled(GL_BLEND); auto depth = glIsEnabled(GL_DEPTH_TEST); @@ -228,6 +224,9 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat if (canvas->m_canvas->m_current_mode == kCanvasMode::Erase && canvas->m_canvas->m_show_tmp && canvas->m_canvas->m_current_layer_idx == layer_index) { sampler.bind(0); + sampler.bind(1); + sampler.bind(2); + ShaderManager::use(kShader::CompErase); ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_int(kShaderUniform::TexStroke, 1); @@ -253,7 +252,11 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat { const auto& b = canvas->m_canvas->m_current_stroke->m_brush; sampler.bind(0); - + sampler.bind(1); + sampler.bind(2); + sampler.bind(3); + sampler_stencil.bind(4); + glm::vec2 patt_scale = glm::vec2(b->m_pattern_scale); if (b->m_pattern_flipx) patt_scale.x *= -1.f; if (b->m_pattern_flipy) patt_scale.y *= -1.f; @@ -262,16 +265,19 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_int(kShaderUniform::TexStroke, 1); ShaderManager::u_int(kShaderUniform::TexMask, 2); + ShaderManager::u_int(kShaderUniform::TexDual, 3); + ShaderManager::u_int(kShaderUniform::TexPattern, 4); ShaderManager::u_vec2(kShaderUniform::Resolution, canvas->m_canvas->m_size); - ShaderManager::u_int(kShaderUniform::TexPattern, 3); ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity); - ShaderManager::u_int(kShaderUniform::Lock, canvas->m_canvas->m_layers[layer_index]->m_alpha_locked); ShaderManager::u_int(kShaderUniform::Mask, canvas->m_canvas->m_smask_active); + ShaderManager::u_int(kShaderUniform::Lock, canvas->m_canvas->m_layers[layer_index]->m_alpha_locked); ShaderManager::u_int(kShaderUniform::UseFragcoord, false); ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode); - ShaderManager::u_int(kShaderUniform::UseDual, false); - ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample); ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + ShaderManager::u_int(kShaderUniform::UseDual, b->m_dual_enabled); + ShaderManager::u_int(kShaderUniform::DualBlendMode, b->m_dual_blend_mode); + ShaderManager::u_float(kShaderUniform::DualAlpha, b->m_dual_opacity); + ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample); ShaderManager::u_vec2(kShaderUniform::PatternScale, patt_scale); ShaderManager::u_float(kShaderUniform::PatternInvert, b->m_pattern_invert); ShaderManager::u_float(kShaderUniform::PatternBright, b->m_pattern_brightness); @@ -287,10 +293,16 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat glActiveTexture(GL_TEXTURE2); canvas->m_canvas->m_smask.m_rtt[plane_index].bindTexture(); glActiveTexture(GL_TEXTURE3); + if (b->m_dual_enabled) + canvas->m_canvas->m_tmp_dual[plane_index].bindTexture(); + glActiveTexture(GL_TEXTURE4); b->m_pattern_texture ? b->m_pattern_texture->bind() : glBindTexture(GL_TEXTURE_2D, 0); m_face_plane.draw_fill(); + glActiveTexture(GL_TEXTURE3); + if (b->m_dual_enabled) + canvas->m_canvas->m_tmp_dual[plane_index].unbindTexture(); glActiveTexture(GL_TEXTURE2); canvas->m_canvas->m_smask.m_rtt[plane_index].unbindTexture(); glActiveTexture(GL_TEXTURE1); @@ -301,7 +313,6 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat else { sampler.bind(0); - sampler_linear.bind(1); ShaderManager::use(kShader::TextureAlpha); ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity);