Add flag for software rendering.
This flag is currently unused. PiperOrigin-RevId: 885453938 Change-Id: Ia2112410ff12c7b18ad154f18887d4d795bafa3d
This commit is contained in:
committed by
Copybara-Service
parent
60be42e83c
commit
bc1f9513be
@@ -41,6 +41,9 @@ struct mjrFilamentConfig {
|
|||||||
|
|
||||||
// The backend graphics API to use.
|
// The backend graphics API to use.
|
||||||
int graphics_api;
|
int graphics_api;
|
||||||
|
|
||||||
|
// Use software rendering even if the platform supports hardware rendering.
|
||||||
|
bool force_software_rendering;
|
||||||
};
|
};
|
||||||
|
|
||||||
void mjrf_defaultFilamentConfig(mjrFilamentConfig* config);
|
void mjrf_defaultFilamentConfig(mjrFilamentConfig* config);
|
||||||
|
|||||||
@@ -28,14 +28,16 @@ bool IsFilament(GraphicsMode gfx_mode) {
|
|||||||
return gfx_mode == GraphicsMode::FilamentOpenGl ||
|
return gfx_mode == GraphicsMode::FilamentOpenGl ||
|
||||||
gfx_mode == GraphicsMode::FilamentVulkan ||
|
gfx_mode == GraphicsMode::FilamentVulkan ||
|
||||||
gfx_mode == GraphicsMode::FilamentWebGl ||
|
gfx_mode == GraphicsMode::FilamentWebGl ||
|
||||||
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
|
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
|
||||||
|
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsOpenGl(GraphicsMode gfx_mode) {
|
bool IsOpenGl(GraphicsMode gfx_mode) {
|
||||||
return gfx_mode == GraphicsMode::ClassicOpenGl ||
|
return gfx_mode == GraphicsMode::ClassicOpenGl ||
|
||||||
gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
|
gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
|
||||||
gfx_mode == GraphicsMode::FilamentOpenGl ||
|
gfx_mode == GraphicsMode::FilamentOpenGl ||
|
||||||
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
|
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
|
||||||
|
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsVulkan(GraphicsMode gfx_mode) {
|
bool IsVulkan(GraphicsMode gfx_mode) {
|
||||||
@@ -48,7 +50,12 @@ bool IsWebGl(GraphicsMode gfx_mode) {
|
|||||||
|
|
||||||
bool IsHeadless(GraphicsMode gfx_mode) {
|
bool IsHeadless(GraphicsMode gfx_mode) {
|
||||||
return gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
|
return gfx_mode == GraphicsMode::ClassicOpenGlHeadless ||
|
||||||
gfx_mode == GraphicsMode::FilamentOpenGlHeadless;
|
gfx_mode == GraphicsMode::FilamentOpenGlHeadless ||
|
||||||
|
gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsSoftware(GraphicsMode gfx_mode) {
|
||||||
|
return gfx_mode == GraphicsMode::FilamentOpenGlSoftware;
|
||||||
}
|
}
|
||||||
|
|
||||||
GraphicsMode GraphicsModeFromString(std::string_view str,
|
GraphicsMode GraphicsModeFromString(std::string_view str,
|
||||||
@@ -65,6 +72,8 @@ GraphicsMode GraphicsModeFromString(std::string_view str,
|
|||||||
return GraphicsMode::FilamentWebGl;
|
return GraphicsMode::FilamentWebGl;
|
||||||
} else if (str == "opengl_headless") {
|
} else if (str == "opengl_headless") {
|
||||||
return GraphicsMode::FilamentOpenGlHeadless;
|
return GraphicsMode::FilamentOpenGlHeadless;
|
||||||
|
} else if (str == "opengl_software") {
|
||||||
|
return GraphicsMode::FilamentOpenGlSoftware;
|
||||||
} else if (str.empty()) {
|
} else if (str.empty()) {
|
||||||
return default_mode;
|
return default_mode;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ enum class GraphicsMode {
|
|||||||
|
|
||||||
// Similar to FilamentOpenGl, but assumes "headless" rendering.
|
// Similar to FilamentOpenGl, but assumes "headless" rendering.
|
||||||
FilamentOpenGlHeadless,
|
FilamentOpenGlHeadless,
|
||||||
|
|
||||||
|
// Similar to FilamentOpenGl, but forces software rendering.
|
||||||
|
FilamentOpenGlSoftware,
|
||||||
};
|
};
|
||||||
|
|
||||||
bool IsClassic(GraphicsMode gfx_mode);
|
bool IsClassic(GraphicsMode gfx_mode);
|
||||||
@@ -46,6 +49,7 @@ bool IsOpenGl(GraphicsMode gfx_mode);
|
|||||||
bool IsVulkan(GraphicsMode gfx_mode);
|
bool IsVulkan(GraphicsMode gfx_mode);
|
||||||
bool IsWebGl(GraphicsMode gfx_mode);
|
bool IsWebGl(GraphicsMode gfx_mode);
|
||||||
bool IsHeadless(GraphicsMode gfx_mode);
|
bool IsHeadless(GraphicsMode gfx_mode);
|
||||||
|
bool IsSoftware(GraphicsMode gfx_mode);
|
||||||
|
|
||||||
GraphicsMode GraphicsModeFromString(std::string_view str,
|
GraphicsMode GraphicsModeFromString(std::string_view str,
|
||||||
GraphicsMode default_mode);
|
GraphicsMode default_mode);
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ void Renderer::Init(const mjModel* model) {
|
|||||||
mjrFilamentConfig render_config;
|
mjrFilamentConfig render_config;
|
||||||
mjrf_defaultFilamentConfig(&render_config);
|
mjrf_defaultFilamentConfig(&render_config);
|
||||||
render_config.native_window = native_window_;
|
render_config.native_window = native_window_;
|
||||||
|
render_config.force_software_rendering = IsSoftware(gfx_);
|
||||||
render_config.graphics_api =
|
render_config.graphics_api =
|
||||||
IsOpenGl(gfx_) || IsWebGl(gfx_) ? mjGFX_OPENGL : mjGFX_VULKAN;
|
IsOpenGl(gfx_) || IsWebGl(gfx_) ? mjGFX_OPENGL : mjGFX_VULKAN;
|
||||||
mjrf_makeFilamentContext(model, &render_context_, &render_config);
|
mjrf_makeFilamentContext(model, &render_context_, &render_config);
|
||||||
|
|||||||
@@ -1761,6 +1761,7 @@ void App::MainMenuGui() {
|
|||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
if (ImGui::BeginMenu("Graphics Mode (Experimental)")) {
|
if (ImGui::BeginMenu("Graphics Mode (Experimental)")) {
|
||||||
std::optional<platform::GraphicsMode> mode;
|
std::optional<platform::GraphicsMode> mode;
|
||||||
if (ImGui::MenuItem(
|
if (ImGui::MenuItem(
|
||||||
@@ -1783,6 +1784,11 @@ void App::MainMenuGui() {
|
|||||||
gfx_mode_ == platform::GraphicsMode::FilamentOpenGlHeadless)) {
|
gfx_mode_ == platform::GraphicsMode::FilamentOpenGlHeadless)) {
|
||||||
mode = platform::GraphicsMode::FilamentOpenGlHeadless;
|
mode = platform::GraphicsMode::FilamentOpenGlHeadless;
|
||||||
}
|
}
|
||||||
|
if (ImGui::MenuItem(
|
||||||
|
"Filament OpenGL Software", nullptr,
|
||||||
|
gfx_mode_ == platform::GraphicsMode::FilamentOpenGlSoftware)) {
|
||||||
|
mode = platform::GraphicsMode::FilamentOpenGlSoftware;
|
||||||
|
}
|
||||||
if (ImGui::MenuItem(
|
if (ImGui::MenuItem(
|
||||||
"Filament Vulkan", nullptr,
|
"Filament Vulkan", nullptr,
|
||||||
gfx_mode_ == platform::GraphicsMode::FilamentVulkan)) {
|
gfx_mode_ == platform::GraphicsMode::FilamentVulkan)) {
|
||||||
@@ -1802,6 +1808,7 @@ void App::MainMenuGui() {
|
|||||||
}
|
}
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
#endif // __linux__
|
||||||
|
|
||||||
ImGui::EndMenu();
|
ImGui::EndMenu();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user