From 4b4ee27f645d85bc58d47c1405c587dc028a5e7f Mon Sep 17 00:00:00 2001 From: Saran Tunyasuvunakool Date: Wed, 25 Jan 2023 11:32:38 -0800 Subject: [PATCH] Turn off reflection and shadow in simulate when a GPU is not present. Note that The GLFW adapter currently assumes that a GPU is always present, so this new code path is never reached at the moment. PiperOrigin-RevId: 504617048 Change-Id: I04a323c33d9cff73686d39e4a6676ca6a4484c98 --- simulate/glfw_adapter.cc | 4 ++++ simulate/glfw_adapter.h | 1 + simulate/platform_ui_adapter.h | 1 + simulate/simulate.cc | 10 ++++++++++ 4 files changed, 16 insertions(+) diff --git a/simulate/glfw_adapter.cc b/simulate/glfw_adapter.cc index 2651af27..368a3e4c 100644 --- a/simulate/glfw_adapter.cc +++ b/simulate/glfw_adapter.cc @@ -129,6 +129,10 @@ std::pair GlfwAdapter::GetWindowSize() const { return {width, height}; } +bool GlfwAdapter::IsGPUAccelerated() const { + return true; +} + void GlfwAdapter::PollEvents() { Glfw().glfwPollEvents(); } diff --git a/simulate/glfw_adapter.h b/simulate/glfw_adapter.h index 188091df..23342dd5 100644 --- a/simulate/glfw_adapter.h +++ b/simulate/glfw_adapter.h @@ -31,6 +31,7 @@ class GlfwAdapter : public PlatformUIAdapter { double GetDisplayPixelsPerInch() const override; std::pair GetFramebufferSize() const override; std::pair GetWindowSize() const override; + bool IsGPUAccelerated() const override; void PollEvents() override; void SetClipboardString(const char* text) override; void SetVSync(bool enabled) override; diff --git a/simulate/platform_ui_adapter.h b/simulate/platform_ui_adapter.h index e1810986..7a63dd0b 100644 --- a/simulate/platform_ui_adapter.h +++ b/simulate/platform_ui_adapter.h @@ -46,6 +46,7 @@ class PlatformUIAdapter { virtual double GetDisplayPixelsPerInch() const = 0; virtual std::pair GetFramebufferSize() const = 0; virtual std::pair GetWindowSize() const = 0; + virtual bool IsGPUAccelerated() const = 0; virtual void PollEvents() = 0; virtual void SetClipboardString(const char* text) = 0; virtual void SetVSync(bool enabled) = 0; diff --git a/simulate/simulate.cc b/simulate/simulate.cc index f4de7e8d..4bf4be7c 100644 --- a/simulate/simulate.cc +++ b/simulate/simulate.cc @@ -26,6 +26,7 @@ #include #include "lodepng.h" +#include #include #include #include "platform_ui_adapter.h" @@ -1606,6 +1607,11 @@ void Simulate::loadmodel() { mjv_makeScene(this->m, &this->scn, maxgeom); this->platform_ui->RefreshMjrContext(this->m, 50*(this->font+1)); + if (!this->platform_ui->IsGPUAccelerated()) { + this->scn.flags[mjRND_SHADOW] = 0; + this->scn.flags[mjRND_REFLECTION] = 0; + } + // clear perturbation state this->pert.active = 0; this->pert.select = 0; @@ -1896,6 +1902,10 @@ void Simulate::renderloop() { // make empty scene mjv_defaultScene(&this->scn); mjv_makeScene(nullptr, &this->scn, maxgeom); + if (!this->platform_ui->IsGPUAccelerated()) { + this->scn.flags[mjRND_SHADOW] = 0; + this->scn.flags[mjRND_REFLECTION] = 0; + } // select default font int fontscale = ComputeFontScale(*this->platform_ui);