diff --git a/examples/actor_animation/Main.cc b/examples/actor_animation/Main.cc index 70a3546fa..42d54a658 100644 --- a/examples/actor_animation/Main.cc +++ b/examples/actor_animation/Main.cc @@ -188,7 +188,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/boundingbox_camera/Main.cc b/examples/boundingbox_camera/Main.cc index b19815bec..1cf00c590 100644 --- a/examples/boundingbox_camera/Main.cc +++ b/examples/boundingbox_camera/Main.cc @@ -217,10 +217,11 @@ void buildScene(ScenePtr _scene, BoundingBoxType _type) ////////////////////////////////////////////////// std::vector createCameras(const std::string &_engineName, + const std::map& _params, BoundingBoxType _type) { // create and populate scene - RenderEngine *engine = rendering::engine(_engineName); + RenderEngine *engine = rendering::engine(_engineName, _params); if (!engine) { gzwarn << "Engine '" << _engineName @@ -271,6 +272,12 @@ int main(int _argc, char** _argv) } } + GraphicsAPI graphicsApi = defaultGraphicsAPI(); + if (_argc > 2) + { + graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); + } + common::Console::SetVerbosity(4); std::vector engineNames; std::vector cameras; @@ -281,7 +288,14 @@ int main(int _argc, char** _argv) { try { - cameras = createCameras(engineName, bboxType); + std::map params; + if (engineName.compare("ogre2") == 0 + && graphicsApi == GraphicsAPI::METAL) + { + params["metal"] = "1"; + } + + cameras = createCameras(engineName, params, bboxType); } catch (...) { diff --git a/examples/camera_tracking/Main.cc b/examples/camera_tracking/Main.cc index 398b73b31..03279a92e 100644 --- a/examples/camera_tracking/Main.cc +++ b/examples/camera_tracking/Main.cc @@ -127,7 +127,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -139,7 +139,6 @@ int main(int _argc, char** _argv) std::vector nodes; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/custom_scene_viewer/ManualSceneDemo.cc b/examples/custom_scene_viewer/ManualSceneDemo.cc index 072f698a6..5af164988 100644 --- a/examples/custom_scene_viewer/ManualSceneDemo.cc +++ b/examples/custom_scene_viewer/ManualSceneDemo.cc @@ -192,7 +192,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/custom_shaders_uniforms/Main.cc b/examples/custom_shaders_uniforms/Main.cc index 009681621..093de95b2 100644 --- a/examples/custom_shaders_uniforms/Main.cc +++ b/examples/custom_shaders_uniforms/Main.cc @@ -167,7 +167,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/depth_camera/Main.cc b/examples/depth_camera/Main.cc index 08bf8a8f9..ff90e5f87 100644 --- a/examples/depth_camera/Main.cc +++ b/examples/depth_camera/Main.cc @@ -115,7 +115,7 @@ void buildScene(ScenePtr _scene) camera->SetImageFormat(PixelFormat::PF_FLOAT32_RGBA); camera->SetNearClipPlane(0.15); camera->SetFarClipPlane(10.0); - camera->SetAntiAliasing(2); + camera->SetAntiAliasing(2); camera->CreateDepthTexture(); root->AddChild(camera); @@ -154,7 +154,7 @@ int main(int _argc, char** _argv) engineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/heightmap/Main.cc b/examples/heightmap/Main.cc index 6aaf6e143..82db73326 100644 --- a/examples/heightmap/Main.cc +++ b/examples/heightmap/Main.cc @@ -324,7 +324,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2 && buildDemScene != 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/lidar_visual/Main.cc b/examples/lidar_visual/Main.cc index 340394171..af5aebeb7 100644 --- a/examples/lidar_visual/Main.cc +++ b/examples/lidar_visual/Main.cc @@ -272,7 +272,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/mesh_viewer/Main.cc b/examples/mesh_viewer/Main.cc index 32d9f0f51..a0c32a156 100644 --- a/examples/mesh_viewer/Main.cc +++ b/examples/mesh_viewer/Main.cc @@ -142,7 +142,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -153,7 +153,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/mouse_picking/Main.cc b/examples/mouse_picking/Main.cc index 589839fc2..d94bc4d1e 100644 --- a/examples/mouse_picking/Main.cc +++ b/examples/mouse_picking/Main.cc @@ -135,7 +135,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -146,7 +146,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/ogre2_demo/Main.cc b/examples/ogre2_demo/Main.cc index 337cf1d12..999b00252 100644 --- a/examples/ogre2_demo/Main.cc +++ b/examples/ogre2_demo/Main.cc @@ -317,7 +317,7 @@ int main(int _argc, char** _argv) std::vector engineNames; std::vector cameras; - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/particles_demo/Main.cc b/examples/particles_demo/Main.cc index 03dbca5b6..9ed66c568 100644 --- a/examples/particles_demo/Main.cc +++ b/examples/particles_demo/Main.cc @@ -168,7 +168,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/projector/Main.cc b/examples/projector/Main.cc index a991c98dd..f78224b16 100644 --- a/examples/projector/Main.cc +++ b/examples/projector/Main.cc @@ -180,7 +180,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -191,7 +191,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { try diff --git a/examples/render_pass/Main.cc b/examples/render_pass/Main.cc index a3a1c86bc..21863d807 100644 --- a/examples/render_pass/Main.cc +++ b/examples/render_pass/Main.cc @@ -198,7 +198,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -209,7 +209,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { try diff --git a/examples/segmentation_camera/Main.cc b/examples/segmentation_camera/Main.cc index 46a07f0c0..0dda4ecd7 100644 --- a/examples/segmentation_camera/Main.cc +++ b/examples/segmentation_camera/Main.cc @@ -150,7 +150,7 @@ int main(int _argc, char** _argv) engineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/simple_demo/Main.cc b/examples/simple_demo/Main.cc index 3a32e1391..1ea6e0f67 100644 --- a/examples/simple_demo/Main.cc +++ b/examples/simple_demo/Main.cc @@ -218,7 +218,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -229,7 +229,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/simple_demo_qml/ThreadRenderer.cpp b/examples/simple_demo_qml/ThreadRenderer.cpp index 91731ef5f..4aff4dee6 100644 --- a/examples/simple_demo_qml/ThreadRenderer.cpp +++ b/examples/simple_demo_qml/ThreadRenderer.cpp @@ -129,7 +129,7 @@ void RenderThread::Print(const QSurfaceFormat &_format) return "CompatibilityProfile"; default: return "Invalid OpenGLContextProfile"; - } + } }; auto renderableTypeToString = [] (QSurfaceFormat::RenderableType _value) -> std::string @@ -146,7 +146,7 @@ void RenderThread::Print(const QSurfaceFormat &_format) return "OpenVG"; default: return "Invalid RenderableType"; - } + } }; auto swapBehaviorToString = [] (QSurfaceFormat::SwapBehavior _value) -> std::string @@ -161,7 +161,7 @@ void RenderThread::Print(const QSurfaceFormat &_format) return "DoubleBuffer"; default: return "Invalid SwapBehavior"; - } + } }; // surface format info @@ -200,7 +200,7 @@ QSurfaceFormat RenderThread::CreateSurfaceFormat() format.setProfile(QSurfaceFormat::CoreProfile); format.setRenderableType(QSurfaceFormat::OpenGL); - return format; + return format; } //-------------------------------------------------------------------------- @@ -272,8 +272,25 @@ TextureNode::TextureNode(QQuickWindow *_window) , window(_window) { // Our texture node must have a texture, so use the default 0 texture. - // createTextureFromNativeObject() +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) +# ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# endif this->texture = this->window->createTextureFromId(0, QSize(1, 1)); +# ifndef _WIN32 +# pragma GCC diagnostic pop +# endif +#else + int texId = 0; + this->texture = + this->window->createTextureFromNativeObject( + QQuickWindow::NativeObjectTexture, + static_cast(&texId), + 0, + QSize(1, 1)); +#endif + this->setTexture(this->texture); this->setFiltering(QSGTexture::Linear); } @@ -314,8 +331,23 @@ void TextureNode::PrepareNode() this->texture = nullptr; // note: include QQuickWindow::TextureHasAlphaChannel if the rendered content // has alpha. - // createTextureFromNativeObject +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) +# ifndef _WIN32 +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# endif this->texture = this->window->createTextureFromId(newId, size); +# ifndef _WIN32 +# pragma GCC diagnostic pop +# endif +#else + this->texture = + this->window->createTextureFromNativeObject( + QQuickWindow::NativeObjectTexture, + static_cast(&newId), + 0, + size); +#endif this->setTexture(this->texture); this->markDirty(DirtyMaterial); @@ -342,7 +374,7 @@ void ThreadRenderer::Ready() this->renderThread->surface->setFormat(this->renderThread->context->format()); this->renderThread->surface->create(); - // carry out any initialisation before moving to thread + // carry out any initialisation before moving to thread this->renderThread->InitialiseOnMainThread(); // Move to Render thread diff --git a/examples/text_geom/Main.cc b/examples/text_geom/Main.cc index 26033be35..7149d1df0 100644 --- a/examples/text_geom/Main.cc +++ b/examples/text_geom/Main.cc @@ -126,7 +126,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back("ogre"); - engineNames.push_back("optix"); for (auto engineName : engineNames) { try diff --git a/examples/thermal_camera/Main.cc b/examples/thermal_camera/Main.cc index 5e7fe2701..68157a0c9 100644 --- a/examples/thermal_camera/Main.cc +++ b/examples/thermal_camera/Main.cc @@ -138,7 +138,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/transform_control/Main.cc b/examples/transform_control/Main.cc index 79a0b8e7e..22dec4d3b 100644 --- a/examples/transform_control/Main.cc +++ b/examples/transform_control/Main.cc @@ -121,7 +121,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -132,7 +132,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/view_control/Main.cc b/examples/view_control/Main.cc index a501e3cff..5d12fc365 100644 --- a/examples/view_control/Main.cc +++ b/examples/view_control/Main.cc @@ -167,7 +167,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -178,7 +178,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { try diff --git a/examples/visualization_demo/Main.cc b/examples/visualization_demo/Main.cc index 23ace7294..104ef4250 100644 --- a/examples/visualization_demo/Main.cc +++ b/examples/visualization_demo/Main.cc @@ -248,7 +248,7 @@ int main(int _argc, char** _argv) engine = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); @@ -259,7 +259,6 @@ int main(int _argc, char** _argv) std::vector cameras; engineNames.push_back(engine); - engineNames.push_back("optix"); for (auto engineName : engineNames) { diff --git a/examples/waves/Main.cc b/examples/waves/Main.cc index 14d04e39a..44889751e 100644 --- a/examples/waves/Main.cc +++ b/examples/waves/Main.cc @@ -164,7 +164,7 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } - GraphicsAPI graphicsApi = GraphicsAPI::OPENGL; + GraphicsAPI graphicsApi = defaultGraphicsAPI(); if (_argc > 2) { graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); diff --git a/examples/wide_angle_camera/Main.cc b/examples/wide_angle_camera/Main.cc index 02da36123..63d6d7073 100644 --- a/examples/wide_angle_camera/Main.cc +++ b/examples/wide_angle_camera/Main.cc @@ -137,10 +137,11 @@ void buildScene(ScenePtr _scene) } ////////////////////////////////////////////////// -CameraPtr createCamera(const std::string &_engineName) +CameraPtr createCamera(const std::string &_engineName, + const std::map& _params) { // create and populate scene - RenderEngine *engine = rendering::engine(_engineName); + RenderEngine *engine = rendering::engine(_engineName, _params); if (!engine) { gzwarn << "Engine '" << _engineName @@ -168,18 +169,30 @@ int main(int _argc, char** _argv) ogreEngineName = _argv[1]; } + GraphicsAPI graphicsApi = defaultGraphicsAPI(); + if (_argc > 2) + { + graphicsApi = GraphicsAPIUtils::Set(std::string(_argv[2])); + } + common::Console::SetVerbosity(4); std::vector engineNames; std::vector cameras; engineNames.push_back(ogreEngineName); - engineNames.push_back("optix"); for (auto engineName : engineNames) { try { - CameraPtr camera = createCamera(engineName); + std::map params; + if (engineName.compare("ogre2") == 0 + && graphicsApi == GraphicsAPI::METAL) + { + params["metal"] = "1"; + } + + CameraPtr camera = createCamera(engineName, params); if (camera) { cameras.push_back(camera); diff --git a/include/gz/rendering/Utils.hh b/include/gz/rendering/Utils.hh index 4d53fe2c9..65a50b820 100644 --- a/include/gz/rendering/Utils.hh +++ b/include/gz/rendering/Utils.hh @@ -29,6 +29,7 @@ #include "gz/rendering/Camera.hh" #include "gz/rendering/config.hh" #include "gz/rendering/Export.hh" +#include "gz/rendering/GraphicsAPI.hh" #include "gz/rendering/RayQuery.hh" #include "gz/rendering/Image.hh" @@ -120,6 +121,12 @@ namespace gz /// \return Image in bayer format GZ_RENDERING_VISIBLE Image convertRGBToBayer(const Image &_image, PixelFormat _bayerFormat); + + /// \brief Convenience function to get the default graphics API based on + /// current platform + /// \return Graphics API, i.e. METAL, OPENGL, VULKAN + GZ_RENDERING_VISIBLE + GraphicsAPI defaultGraphicsAPI(); } } } diff --git a/src/Utils.cc b/src/Utils.cc index f6ddcf396..a5ff03ea8 100644 --- a/src/Utils.cc +++ b/src/Utils.cc @@ -25,8 +25,9 @@ #include "gz/math/Vector3.hh" #include "gz/rendering/Camera.hh" -#include "gz/rendering/RayQuery.hh" +#include "gz/rendering/GraphicsAPI.hh" #include "gz/rendering/PixelFormat.hh" +#include "gz/rendering/RayQuery.hh" #include "gz/rendering/Utils.hh" @@ -393,6 +394,16 @@ Image convertRGBToBayer(const Image &_image, PixelFormat _bayerFormat) return destImage; } +///////////////////////////////////////////////// +GraphicsAPI defaultGraphicsAPI() +{ +#ifdef __APPLE__ + return GraphicsAPI::METAL; +#else + return GraphicsAPI::OPENGL; +#endif +} + } } }