diff --git a/examples/Cpp/ExampleBase/ExampleBase.cpp b/examples/Cpp/ExampleBase/ExampleBase.cpp index 63cd097819..29ae6c45de 100644 --- a/examples/Cpp/ExampleBase/ExampleBase.cpp +++ b/examples/Cpp/ExampleBase/ExampleBase.cpp @@ -249,7 +249,6 @@ ExampleBase::ExampleBase( : profilerObj_ { new LLGL::RenderingProfiler() }, debuggerObj_ { new LLGL::RenderingDebugger() }, - samples_ { samples }, profiler { *profilerObj_ } { // Set report callback to standard output @@ -280,11 +279,17 @@ ExampleBase::ExampleBase( if (!debugger) debuggerObj_.reset(); + // Apply device limits (not for GL, because we won't have a valid GL context until we create our first swap chain) + if (renderer->GetRendererID() == LLGL::RendererID::OpenGL) + samples_ = samples; + else + samples_ = std::min(samples, renderer->GetRenderingCaps().limits.maxColorBufferSamples); + // Create swap-chain LLGL::SwapChainDescriptor swapChainDesc; { swapChainDesc.resolution = resolution; - swapChainDesc.samples = samples; + swapChainDesc.samples = GetSampleCount(); } swapChain = renderer->CreateSwapChain(swapChainDesc); diff --git a/sources/Renderer/DebugLayer/DbgRenderSystem.cpp b/sources/Renderer/DebugLayer/DbgRenderSystem.cpp index 57f9073c33..08221dcfe0 100644 --- a/sources/Renderer/DebugLayer/DbgRenderSystem.cpp +++ b/sources/Renderer/DebugLayer/DbgRenderSystem.cpp @@ -40,6 +40,8 @@ DbgRenderSystem::DbgRenderSystem(RenderSystemPtr&& instance, RenderingProfiler* features_ { caps_.features }, limits_ { caps_.limits } { + /* Initialize rendering capabilities from wrapped instance */ + UpdateRenderingCaps(); } /* ----- Swap-chain ----- */ @@ -49,13 +51,10 @@ SwapChain* DbgRenderSystem::CreateSwapChain(const SwapChainDescriptor& swapChain /* Create primary swap-chain */ auto swapChainInstance = instance_->CreateSwapChain(swapChainDesc, surface); + /* Instantiate command queue if not done and update rendering capabilities from wrapped instance */ if (!commandQueue_) { - /* Store meta data about render system */ - SetRendererInfo(instance_->GetRendererInfo()); - SetRenderingCaps(instance_->GetRenderingCaps()); - - /* Instantiate command queue */ + UpdateRenderingCaps(); commandQueue_ = MakeUnique(*(instance_->GetCommandQueue()), profiler_, debugger_); } @@ -1823,6 +1822,13 @@ void DbgRenderSystem::ReleaseDbg(HWObjectContainer& cont, TBase& entry) cont.erase(&entry); } +void DbgRenderSystem::UpdateRenderingCaps() +{ + /* Store meta data about render system */ + SetRendererInfo(instance_->GetRendererInfo()); + SetRenderingCaps(instance_->GetRenderingCaps()); +} + } // /namespace LLGL diff --git a/sources/Renderer/DebugLayer/DbgRenderSystem.h b/sources/Renderer/DebugLayer/DbgRenderSystem.h index 4698a179d2..a2ce404242 100644 --- a/sources/Renderer/DebugLayer/DbgRenderSystem.h +++ b/sources/Renderer/DebugLayer/DbgRenderSystem.h @@ -106,6 +106,8 @@ class DbgRenderSystem final : public RenderSystem std::vector GetResourceViewInstanceCopy(const ArrayView& resourceViews); + void UpdateRenderingCaps(); + private: /* ----- Common objects ----- */