Methane Kit v0.7.1 #115
egorodet
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
This is a refactoring release which replaces monolithic "Graphics Core" module with modular RHI (Rendering Hardware Interface) consisting of interfaces, base implementation, DirectX, Vulkan, Metal and Null backend modules and new "Impl" module with PIMPL classes providing convenient way to use RHI with an extra performance boost from inlining API calls directly to final implementation, instead of virtual calls made through abstract interfaces. See performance comparison of FPS in Methane Asteroids benchmark with 3 implementations (all compiled with the same updated compiler optimization flags): v0.7.0 RHI virtual interfaces, v0.7.1 RHI PIMPL classes without inlining and with inline calls to final implementation. All tutorials, graphics primitives and user interface classes were rewritten to use RHI PIMPL classes, which allow to reduce code complexity and improve readability.
Graphics libraries
Modules/Graphics/RHI/Impl). PIMPL classes are more convenient to use since they allow to write code without smart pointers and allow to get more performance with final implementation inlining. CMake optionMETHANE_RHI_PIMPL_INLINE_ENABLEDenables RHI final implementation inlining for PIMPL classes and allows to make direct calls to final RHI implementation without virtual call overhead. PIMPL inlining can gives up to 5% of extra performance in highly loaded rendering scenario.Graphics Coremodule was renamed toGraphics RHI(RHI is a common acronym for Rendering Hardware Interface) and split into several CMake modulesInterface,Base,DirectX,Vulkan,MetalandImpl- this makes architecture even more modular and extensible.Iprefix in file and struct names and put underMethane::Graphics::Rhinamespace, for exampleGraphics::Device->Graphics::Rhi::IDevice.Graphics::DeviceBase->Graphics::Base::Device,Graphics::DeviceDX->Graphics::DirectX::Device. Source files were renamed accordingly:Graphics/DeviceBase.h->Graphics/Base/Device.h,Graphics/DeviceDX.h->Graphics/DirectX/Device.h. This allows to mirror RHI implementations for different APIs with completely symmetrical classes and files naming inside different namespaces.Createstatic factory functions ofITextureandIBufferinterfaces using custom setting initialisers.CreateXvirtual methods in RHI interfaces and use them in implementation ofX::Createstatic factory functions.BLITCommandListwas renamed toTransferCommandList.QueryBufferwas renamed toQueryPool.std::stringwithstd::string_viewinIObject::SetNameandGetNamemethods.BufferandTextureclasses for Vulkan and DirectX APIs by replacing template class variants with common class implementation.ImageLoader,ScreenQuadandSkyBoxto use RHI PIMPL classes instead abstract interfaces and implemented themself in PIMPL style.Primitivesmodules were moved insideRHIsubmodules:Windows/DirectXErrorHandling.htoRHI/DirectXmodule and renamed toErrorHandling.h.FpsCounter.hand split to interface and implementation toRHI/InterfacesandRHI/Basemodules.User Interface
Font,TextandBadgeclasses to RHI PIMPL classes instead of abstract interfaces and implemented themself in PIMPL style.Platform libraries
Platform/Inputmodule was split into to submodules:Keyboard,Mouse,ControllersandActionControllers. All classes from this modules were moved underPlatform::Inputnamespace.Data libraries
Data::EnumMask<EnumType>template class implementing bit-mask operations on enum values used as bits.EnumMasktype is used in Methane Kit public interfaces instead ofmagic_enum::bitwise_operators.Data::Transmitter<ICallbackType>class which implementsData::IEmitterby transmitting callback connections to some other emitter instance.External libraries
d3dx12.hin DirectX RHI.Tutorials applications
Tests
Data/EnumMask.hpp.Data/EnumMaskUtils.hpp.Data/Transmitter.hppBuilds
sonarcloud-github-c-cppto install scanner binaries.build-wrappertool is not used anymore, it was replaced with Ninja compilation data base generated by CMake.Documentation
Release CI Runs
This discussion was created from the release Methane Kit v0.7.1.
Beta Was this translation helpful? Give feedback.
All reactions