{"id":17798914,"url":"https://github.com/agrael1/wisdom","last_synced_at":"2025-03-17T05:32:00.034Z","repository":{"id":154873475,"uuid":"621496563","full_name":"Agrael1/Wisdom","owner":"Agrael1","description":"Low-level thin multiplatform Graphics API layer","archived":false,"fork":false,"pushed_at":"2024-10-29T22:16:21.000Z","size":4267,"stargazers_count":8,"open_issues_count":9,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-29T23:46:39.427Z","etag":null,"topics":["cpp20","directx12","graphics","linux","multiplatform","uwp","vulkan","windows","winrt"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Agrael1.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-30T19:31:24.000Z","updated_at":"2024-10-26T20:57:21.000Z","dependencies_parsed_at":"2024-04-23T14:10:50.822Z","dependency_job_id":"043b7e8d-3ece-45e5-86bb-8310b0e27abd","html_url":"https://github.com/Agrael1/Wisdom","commit_stats":{"total_commits":337,"total_committers":8,"mean_commits":42.125,"dds":0.456973293768546,"last_synced_commit":"6cdd2042b263f21620ee22250ba28002ea0d80f4"},"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Agrael1%2FWisdom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Agrael1%2FWisdom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Agrael1%2FWisdom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Agrael1%2FWisdom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Agrael1","download_url":"https://codeload.github.com/Agrael1/Wisdom/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243846976,"owners_count":20357294,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp20","directx12","graphics","linux","multiplatform","uwp","vulkan","windows","winrt"],"created_at":"2024-10-27T12:02:52.694Z","updated_at":"2025-03-17T05:32:00.024Z","avatar_url":"https://github.com/Agrael1.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wisdom\n\n![CMake Windows](https://github.com/Agrael1/Wisdom/actions/workflows/cmake.yml/badge.svg)\n\n**Low-level Direct Translation Graphics API. Easy to learn, easy to extend, highly performant, multiplatform!**\n\n## NuGet Link\n\nhttps://www.nuget.org/packages/Wisdom/\n\n# Features\n\n- [x] Raytracing support\n- [x] Compute pipeline, Basic rendering and Multiview\n- [x] Embedded DXC shader compiler and standard HLSL language\n- [x] Inline API with no virtual functions.\n- [x] Extensibility with internal state access\n- [x] Advanced memory allocations\n- [x] DMA copy support and ability to share memory between APIs\n\n# Why?\n\nA lot of old OpenGL solutions are scratching the ceiling of OpenGL potential, and Vulkan is too low-level for most of the tasks. DirectX 12 is a good alternative, but it's not cross-platform.\nWisdom is designed to be a direct translation layer on top of DirectX 12 and Vulkan, with a simple API, that is easy to learn and extend.\nIt is still low level, yet more user friendly. It uses a lot of advanced graphics features, like Descriptor Buffer and Direct GPU Upload.\n\nYou can use it even partially, for example initialize device and swapchain, get internals of library objects and use it with your own rendering engine, or use it fully, with all the extensions and features.\n\nLibrary transparency makes it a good choice for gradual API replacement. This is further enhanced by the interoperability with other APIs through platform extensions.\n\n# Details\n\nThe API is structured like this:\n\n- The basic types are defined, depending on platform of choice. They are **Factory**, **Adapter**, **Device** etc. They are directly implemented, this eliminates memory indirection and potential cache misses.\n- The platform selects the most suitable implemetation to the system: Windows - DirectX 12, Linux - Vulkan. This is done in compile time.\n- You can override the implementation selection with `WISDOM_FORCE_VULKAN` option on CMake configuration. This will force the library to use Vulkan as a base API. This is useful for debugging Vulkan extensions.\n- All calls are done directly, without usage of interfaces/virtual functions. This eliminates call indirection and the code is inlined as if you wrote the code directly inside your functions.\n- Underlying accessibility, all of the internals are accessible using `GetInternal()` and can be used to bridge functionality or to create extensions. All the internal state is immutable for the stability of work between library and extensions. However it's not advised to use internal state directly, since it is platform dependent.\n\nVulkan is compiled on compatible systems and used as default only if there is no other alternative. Vulkan can still be used under supported operating system with explicit types `wis::VKFactory`, `wis::VKDevice` etc.\n\n[Changelog](Changelog.md)\n\n# Platforms\n\nSupported platforms are:\n\n- Windows API (Win32) - DirectX 12 and Vulkan\n- Windows Store (UWP) - Microsoft Store applications. DirectX 12 only.\n- Linux (X11, XCB and Wayland) - Vulkan only\n\n# Build\n\nThis is a CMake project, all the plugins are ensured to download beforehand, so it's enough to just configure the project, everything is going to be downloaded with respect to platform.\nThe later reconfigurations are not reloading the plugins for easy expansion of the library, but if the plugin reload is required, the cache deletion should be done, or change `PLUGINS_LOADED` CMakeCache entry to `FALSE`.\n\nThe library does not contain any extra dependencies, except for the ones required by the underlying APIs, such as DX12 Agility SDK and memory allocators.\n\nIf you don't have Vulkan SDK installed on Windows the library will still provide you with DX12 implementation, that comes with Windows system. No administrative rights are required to build or use the library.\n\n# CMake Options\n\n- `WISDOM_LOG_LEVEL=debug/warn` set the log level for the library, values are `debug,trace,info,warn,error,critical` log calls under current level are not compiled\n- `WISDOM_RUNTIME_ASSERTS=ON` enable/disable runtime validation checks from compile time\n- `WISDOM_USE_SYSTEM_DXC=OFF` use system DXC compiler instead of the one provided with the library (default uses the one provided)\n- `WISDOM_FORCE_VULKAN=OFF` if set `ON` forces base types to be Vulkan, useful for debugging Vulkan extensions\n- `WISDOM_BUILD_EXAMPLES=ON` enable/disable example compilation\n- `WISDOM_BUILD_TESTS=ON` enable/disable test compilation\n- `WISDOM_USE_FMT=ON/OFF` use fmt instead of `std::format` (`ON` for Linux build for GCC\u003c13 and Clang\u003c16)\n- `WISDOM_BUILD_DOCS=ON/OFF` build documentation with Doxygen, default is dependent on wether you are building the library as a top project (ON) or as a part/dep for other (OFF)\n- `WISDOM_BUILD_BINARIES=ON/OFF` build static lib. If turned off, the header only version will be the main target.\n\n# Consumption\n\nYou may use FetchContent, provided by cmake, to download the library and use it in your project. The library is designed to be header-only, so you can also just copy the header folder at `wisdom/include` and use it. Install script with Vcpkg is coming next updates.\n\nThere is also a NuPkg available for NuGet consumption in release artifacts.\n\nTo link library simply use `target_link_libraries(${YOUR_TARGET} PUBLIC wis::wisdom)`. Alternatively if you wish for header only target, there is also `target_link_libraries(${YOUR_TARGET} PUBLIC wis::wisdom-headers)`.\n\nAvailable targets are:\n\n- `wis::wisdom | wis::headers | wis::wisdom-headers` - functional library\n- `wis::debug | wis::debug-headers` - debug extension\n- `wis::extended-allocation | wis::extended-allocation-headers` - extended allocation extension (direct GPU Upload)\n- `wis::platform | wis::platform-headers` - platform specific extensions (Swapchain and Interop exports)\n- `wis::raytracing | wis::raytracing-headers` - raytracing\n- `wis::descriptor-buffer | wis::descriptor-buffer-headers` - descriptor buffer support, requires Vulkan 1.3 and GPU support for `VK_(EXT|VALVE)_mutable_descriptor_type` if used with Vulkan\n\n# System Requirements\n\n**Windows:**\n\n- Windows 10/11\n- CMake 3.22+\n\nTested on MSVC v143, Visual Studio 2022.\nVideo card must support DirectX 12.1+ and Enchanced Barriers.\n\nfor Vulkan:\n\n- Vulkan 1.3.2xx+\n\nFunctionality is tested on NVIDIA GeForce GTX 1070 and RTX A4000 with latest drivers. AMD cards were tested, but with limited functionality.\n\nBest performance is achieved with NVIDIA cards later than GTX 1650 series, because of the descriptor buffer support.\n\nTested on Windows with NVIDIA GeForce GTX 1070 and Linux with RTX A4000 with latest drivers.\n\n**Windows Store:**\n\nYou can install a NuGet package to any Visual studio project.\n\nAfter the first launch, the project can be launched from the Start Menu.\n\nThis type of project does not support Vulkan, since Vulkan does not have UWP surface, but the API is the same as for any other platform. Useful when you want to deploy your application to Microsoft Store without too much code rewriting.\n\n**Linux**\n\n- CMake 3.22+\n- Vulkan 1.3.2xx+\n\nVideo card driver should have Descriptor buffer support. Tested on NVIDIA RTX A4000.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagrael1%2Fwisdom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagrael1%2Fwisdom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagrael1%2Fwisdom/lists"}