From 38ea95f3e6a07d75f176b15c12f6ac6aff50cd08 Mon Sep 17 00:00:00 2001 From: Imanol Fernandez Date: Thu, 4 Jul 2019 21:37:55 +0200 Subject: [PATCH] Fix pointerColor changes on Wave devices (#1367) --- app/src/main/cpp/ControllerContainer.cpp | 2 +- app/src/main/cpp/Pointer.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/cpp/ControllerContainer.cpp b/app/src/main/cpp/ControllerContainer.cpp index a2cd17355..34689766d 100644 --- a/app/src/main/cpp/ControllerContainer.cpp +++ b/app/src/main/cpp/ControllerContainer.cpp @@ -55,7 +55,7 @@ struct ControllerContainer::State { } void updatePointerColor(Controller& aController) { - if (aController.beamParent) { + if (aController.beamParent && aController.beamParent->GetNodeCount() > 0) { GeometryPtr geometry = std::dynamic_pointer_cast(aController.beamParent->GetNode(0)); if (geometry) { geometry->GetRenderState()->SetMaterial(pointerColor, pointerColor, vrb::Color(0.0f, 0.0f, 0.0f), 0.0f); diff --git a/app/src/main/cpp/Pointer.cpp b/app/src/main/cpp/Pointer.cpp index 651d3650e..a47c24ea1 100644 --- a/app/src/main/cpp/Pointer.cpp +++ b/app/src/main/cpp/Pointer.cpp @@ -45,6 +45,7 @@ struct Pointer::State { vrb::TransformPtr pointerScale; vrb::GeometryPtr geometry; WidgetPtr hitWidget; + vrb::Color pointerColor; State() = default; ~State() { @@ -62,6 +63,7 @@ struct Pointer::State { transform->AddNode(pointerScale); root->AddNode(transform); root->ToggleAll(false); + pointerColor = POINTER_COLOR_INNER; } vrb::GeometryPtr createCircle(const int resolution, const float radius, const float offset) { @@ -109,7 +111,7 @@ struct Pointer::State { vrb::GeometryPtr geometryOuter = createCircle(kResolution, kOuterRadius, kOffset); vrb::RenderStatePtr state = vrb::RenderState::Create(create); - state->SetMaterial(POINTER_COLOR_INNER, POINTER_COLOR_INNER, vrb::Color(0.0f, 0.0f, 0.0f), 0.0f); + state->SetMaterial(pointerColor, pointerColor, vrb::Color(0.0f, 0.0f, 0.0f), 0.0f); geometry->SetRenderState(state); vrb::RenderStatePtr stateOuter = vrb::RenderState::Create(create); stateOuter->SetMaterial(POINTER_COLOR_OUTER, POINTER_COLOR_OUTER, vrb::Color(0.0f, 0.0f, 0.0f), 0.0f); @@ -130,6 +132,7 @@ Pointer::Load(const DeviceDelegatePtr& aDevice) { VRLayerQuadPtr layer = aDevice->CreateLayerQuad(36, 36, VRLayerQuad::SurfaceType::AndroidSurface); if (layer) { m.layer = layer; + m.layer->SetTintColor(m.pointerColor); const float size = kOuterRadius * 2.0f; layer->SetWorldSize(size, size); layer->SetSurfaceChangedDelegate([](const VRLayer& aLayer, VRLayer::SurfaceChange aChange, const std::function& aCallback) { @@ -163,6 +166,7 @@ Pointer::SetScale(const vrb::Vector& aHitPoint, const vrb::Matrix& aHeadTransfor void Pointer::SetPointerColor(const vrb::Color& aColor) { + m.pointerColor = aColor; if (m.layer) { m.layer->SetTintColor(aColor); } if (m.geometry) {