improve vr

This commit is contained in:
2019-05-20 10:23:02 +02:00
parent ad9ada7884
commit 0e22e9918a
2 changed files with 16 additions and 4 deletions

View File

@@ -69,9 +69,10 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
auto layer_index = canvas->m_canvas->m_order[i]; auto layer_index = canvas->m_canvas->m_order[i];
for (int plane_index = 0; plane_index < 6; plane_index++) for (int plane_index = 0; plane_index < 6; plane_index++)
{ {
if (!canvas->m_canvas->m_layers[layer_index]->m_visible || if (!(canvas->m_canvas->m_show_tmp && canvas->m_canvas->m_current_layer_idx == layer_index) &&
(!canvas->m_canvas->m_layers[layer_index]->m_visible ||
canvas->m_canvas->m_layers[layer_index]->m_opacity == .0f || canvas->m_canvas->m_layers[layer_index]->m_opacity == .0f ||
!canvas->m_canvas->m_layers[layer_index]->m_dirty_face[plane_index]) !canvas->m_canvas->m_layers[layer_index]->m_dirty_face[plane_index]))
continue; continue;
int z = (int)(canvas->m_canvas->m_order.size() - i); int z = (int)(canvas->m_canvas->m_order.size() - i);
@@ -184,6 +185,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
glm::vec3 aspect = { (float)uirtt.getWidth() / (float)uirtt.getHeight(), 1.f, 1.f }; glm::vec3 aspect = { (float)uirtt.getWidth() / (float)uirtt.getHeight(), 1.f, 1.f };
// draw the frame // draw the frame
if (ui_visible)
{ {
auto mvp = proj * camera * auto mvp = proj * camera *
glm::scale(glm::vec3(100)) * glm::scale(glm::vec3(100)) *
@@ -197,7 +199,8 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
} }
// draw the brush // draw the brush
if (auto mode = dynamic_cast<CanvasModePen*>(canvas->m_canvas->modes[(int)canvas->m_canvas->m_current_mode][0])) auto mode = dynamic_cast<CanvasModePen*>(canvas->m_canvas->modes[(int)canvas->m_canvas->m_current_mode][0]);
if (ui_visible && mode)
{ {
auto pos = mode->m_resizing ? mode->m_size_pos_start : mode->m_cur_pos; auto pos = mode->m_resizing ? mode->m_size_pos_start : mode->m_cur_pos;
if (App::I.keys[(int)kKey::KeyAlt] && !mode->m_resizing) if (App::I.keys[(int)kKey::KeyAlt] && !mode->m_resizing)
@@ -207,6 +210,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
ShaderManager::use(kShader::StrokePreview); ShaderManager::use(kShader::StrokePreview);
ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_current_brush->m_tip_flow); ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_current_brush->m_tip_flow);
ShaderManager::u_int(kShaderUniform::DrawOutline, false);
auto tip_color = glm::vec4(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_color), 1); auto tip_color = glm::vec4(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_color), 1);
ShaderManager::u_vec4(kShaderUniform::Col, tip_color); ShaderManager::u_vec4(kShaderUniform::Col, tip_color);
ShaderManager::u_mat4(kShaderUniform::MVP, ShaderManager::u_mat4(kShaderUniform::MVP,
@@ -245,6 +249,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
} }
// draw the cursor // draw the cursor
if (ui_visible)
{ {
auto cur = (glm::vec2(cursor.x / width * zoom, 1.f - cursor.y / height * zoom) - 0.5f) * 2.f; auto cur = (glm::vec2(cursor.x / width * zoom, 1.f - cursor.y / height * zoom) - 0.5f) * 2.f;
auto mvp = proj * camera * auto mvp = proj * camera *
@@ -260,6 +265,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
m_face_plane.draw_fill(); m_face_plane.draw_fill();
} }
/*
// draw the motion controller sphere // draw the motion controller sphere
{ {
auto mvp = proj * camera * glm::translate(glm::normalize(vr_controller_pos)); auto mvp = proj * camera * glm::translate(glm::normalize(vr_controller_pos));
@@ -268,6 +274,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
ShaderManager::u_mat4(kShaderUniform::MVP, mvp * glm::scale(glm::vec3(.025))); ShaderManager::u_mat4(kShaderUniform::MVP, mvp * glm::scale(glm::vec3(.025)));
sphere.draw_fill(); sphere.draw_fill();
} }
*/
// draw the motion controller brush // draw the motion controller brush
{ {
@@ -275,6 +282,7 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat
ShaderManager::use(kShader::StrokePreview); ShaderManager::use(kShader::StrokePreview);
ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_int(kShaderUniform::Tex, 0);
ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_current_brush->m_tip_flow); ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_current_brush->m_tip_flow);
ShaderManager::u_int(kShaderUniform::DrawOutline, false);
auto tip_color = glm::vec4(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_color), 1); auto tip_color = glm::vec4(glm::vec3(canvas->m_canvas->m_current_brush->m_tip_color), 1);
ShaderManager::u_vec4(kShaderUniform::Col, tip_color); ShaderManager::u_vec4(kShaderUniform::Col, tip_color);
ShaderManager::u_mat4(kShaderUniform::MVP, ShaderManager::u_mat4(kShaderUniform::MVP,

View File

@@ -504,6 +504,10 @@ bool win32_vr_start()
async_unlock(); async_unlock();
} }
} }
if (b == ViveController::kButton::Pad && a == ViveController::kAction::Press)
{
App::I.toggle_ui();
}
}; };
const float target_tick_rate = 90; const float target_tick_rate = 90;
@@ -534,7 +538,7 @@ bool win32_vr_start()
{ {
controller_points.add(App::I.vr_controller_pos * 800.f); controller_points.add(App::I.vr_controller_pos * 800.f);
auto p = controller_points.average(); auto p = controller_points.average();
if (glm::distance(p, controller_last_point) > 1) if (glm::distance(p, controller_last_point) > 10)
{ {
async_lock(); async_lock();
Canvas::I->stroke_update(p, vive->m_controllers[0].axis(ViveController::kButton::Trigger).x); Canvas::I->stroke_update(p, vive->m_controllers[0].axis(ViveController::kButton::Trigger).x);