{"id":29204641,"url":"https://github.com/nvpro-samples/nvpro_core2","last_synced_at":"2025-07-18T10:02:35.172Z","repository":{"id":302455294,"uuid":"1012491846","full_name":"nvpro-samples/nvpro_core2","owner":"nvpro-samples","description":"A comprehensive collection of modular libraries for high-performance graphics development","archived":false,"fork":false,"pushed_at":"2025-07-10T13:18:26.000Z","size":6687,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-10T20:26:31.554Z","etag":null,"topics":["opengl","raytracing","vulkan"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nvpro-samples.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":"LICENSE","code_of_conduct":null,"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,"zenodo":null}},"created_at":"2025-07-02T12:16:00.000Z","updated_at":"2025-07-10T14:54:44.000Z","dependencies_parsed_at":"2025-07-10T15:17:06.300Z","dependency_job_id":null,"html_url":"https://github.com/nvpro-samples/nvpro_core2","commit_stats":null,"previous_names":["nvpro-samples/nvpro_core2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nvpro-samples/nvpro_core2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvpro-samples%2Fnvpro_core2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvpro-samples%2Fnvpro_core2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvpro-samples%2Fnvpro_core2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvpro-samples%2Fnvpro_core2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nvpro-samples","download_url":"https://codeload.github.com/nvpro-samples/nvpro_core2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nvpro-samples%2Fnvpro_core2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265738159,"owners_count":23820154,"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":["opengl","raytracing","vulkan"],"created_at":"2025-07-02T15:05:53.056Z","updated_at":"2025-07-18T10:02:35.152Z","avatar_url":"https://github.com/nvpro-samples.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# nvpro_core2\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\nA modular C++ framework for Vulkan 1.4+ and OpenGL 4.6 development, designed as the successor to [nvpro_core](https://github.com/nvpro-samples/nvpro_core). This framework provides a collection of static libraries that make it easier to create high-performance research and sample graphics applications.\n\n## Overview\n\n`nvpro_core2` is a collection of modular libraries that provide essential functionality for graphics development.\n\nVulkan:\n- [**nvvk**](nvvk): Vulkan helper functions and abstractions\n- [**nvvkglsl**](nvvkglsl): Vulkan GLSL compiler support (uses shaderc from Vulkan SDK)\n- [**nvvkgltf**](nvvkgltf): GLTF model loading and rendering support\n- [**nvapp**](nvapp): Application framework and window management\n- [**nvshaders**](nvshaders): Useful shaders and functions for BxDFs, skies, tonemapping, and more. Many functions can also be used from GLSL or C++ using slang_types.h\n- [**nvshaders_host**](nvshaders_host): Host code for some pre-defined shader pipelines\n\nOpenGL:\n- [**nvgl**](nvgl): OpenGL helper functions and legacy application framework\n\nGeneric:\n- [**nvutils**](nvutils): Utility functions and common data structures\n- [**nvgui**](nvgui): GUI components and ImGui integration\n- [**nvslang**](nvslang): Slang compiler support (downloads appropriate slang library)\n- [**nvimageformats**](nvimageformats): DDS and KTX2 image libraries\n- [**nvaftermath**](nvaftermath): NVIDIA Aftermath integration for crash analysis (library has additional features if NVIDIA Aftermath SDK is found, otherwise basic functionality)\n- [**nvgpu_monitor**](nvgpu_monitor): GPU performance monitoring using NVML (requires the component from CUDA Toolkit)\n\n`nvpro_core2`'s code is designed so you can extract and use functions from it in your own projects without too much modification.\n\nKey improvements in `nvpro_core2` compared to previous [nvpro_core](https://github.com/nvpro-samples/nvpro_core):\n* Vulkan `1.4` usage throughout all `nvvk` helpers\n  * Latest core functions, structs and 64-bit flags\n  * Adds support for dynamic rendering and states, timeline semaphores, and more\n* Slang support for common shading functions and a rich set of glTF-compatible materials\n* CMake: cleaner and faster system with separate static libraries, rather than a single monolithic library\n* CMake: `copy_to_runtime_and_install(AUTO)` eases dealing with DLL dependencies\n* Unified classes that had competing APIs in the past\n* `nvapp` serves as centralized structure of Vulkan applications\n\n## Requirements\n\n- [Vulkan 1.4 SDK](https://vulkan.lunarg.com/sdk/home)\n- [CMake 3.22 or higher](https://cmake.org/download/)\n- 64-bit Windows or Linux OS\n- Compiler supporting basic C++20 features \n  - On Windows, MSVC 2019 is our minimum compiler.\n  - On Linux, GCC 10.5 or Clang 14 are our minimum compilers.\n  - Other compilers supporting their features should also work.\n- On Linux, you'll also need a few system libraries and headers. The following line installs the required libraries on distros that use `apt` as their package manager; on other distros, similar commands should work:\n\n```\nsudo apt install libx11-dev libxcb1-dev libxcb-keysyms1-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libtbb-dev\n```\n\n## Building a Sample\n\n1. Install the required development tools (see [Requirements](#Requirements) above).\n\n2. Optionally, clone `nvpro_core2` next to your samples or add it as a submodule.\n\n    This is optional because samples automatically download nvpro_core2 if they can't find it. If you're building multiple samples, though, it's more efficient to clone nvpro_core2 once where samples can find it instead of downloading it multiple times.\n\n3. Configure and build:\n\n    ```bash\n    cd TheSampleFolder\n\n    # Run CMake's configure step; this will generate your build system's files\n    cmake -S . -B build\n\n    # Build the project\n    cmake --build build --config Release --parallel\n    ```\n\n4. Optionally, build a portable version by running the `install` target:\n   \n    ```bash\n    cmake --build build --parallel --target install\n    ```\n    This will be created in the `_install` folder, and includes all runtime dependencies so it can be copied to other computers.\n\n## Coding with nvpro_core2\n\n### Starting a New Sample\n\nFor new samples, the easiest way to get started is to copy the [project template](./project_template). It's set up to build right away, and is easy to customize\nto your project's needs.\n\n### Adding `nvpro_core2` to an Existing CMake Project\n\nFirst, find and include nvpro_core2. There's an easy way to do this, and a\nmanual but more customizable way.\n\n* Easy Way:\n  \n    1. Copy [`FindNvproCore2.cmake`](./project_template/FindNvproCore2.cmake) to a `cmake/` subdirectory of your project.\n\n    2. Add the following code to your `CMakeLists.txt`. This will automatically download `nvpro_core2` if not found, add its targets, and set appropriate defaults for most samples:\n\n      ```cmake\n      # Add the cmake folder to the module path\n      list(APPEND CMAKE_MODULE_PATH \"${CMAKE_CURRENT_SOURCE_DIR}/cmake\")\n      find_package(NvproCore2 REQUIRED)\n      ```\n\n* Manual Way:\n\n    1. Clone `nvpro_core2` next to your project (`git clone https://github.com/nvpro-samples/nvpro_core2.git`) or add it as a submodule (`git submodule add https://github.com/nvpro-samples/nvpro_core2.git`).\n\n    2. Manually find and include its `Setup.cmake` file:\n\n      ```cmake\n      find_path(NVPRO_CORE2_DIR\n        NAMES cmake/Setup.cmake\n        PATHS ${CMAKE_CURRENT_LIST_DIR}/nvpro_core2\n              ${CMAKE_CURRENT_LIST_DIR}/../nvpro_core2\n              ${CMAKE_CURRENT_LIST_DIR}/../../nvpro_core2\n        REQUIRED\n        DOC \"Path to nvpro_core2\"\n      )\n      include(${NVPRO_CORE2_DIR}/cmake/Setup.cmake)\n      ```\n      \n      If you find the defaults in Setup.cmake cause issues, you can instead call `add_subdirectory(${NVPRO_CORE2_DIR})` to only add `nvpro_core2`'s targets.\n\nWhichever option you choose, you'll then need to link against the libraries you\nuse:\n\n```cmake\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n  nvpro2::nvapp\n  nvpro2::nvutils\n  nvpro2::nvvk\n  # Add other libraries as needed\n)\n```\n\nFinally, if you're using libraries that rely on DLLs like nvslang, you'll need\nto copy them to the bin and install directories.\n\n1. If you didn't use `FindNvproCore2` or `Setup.cmake`, add a call to `include(${NVPRO_CORE2_DIR}/cmake/Setup.cmake)` before the next statement. \n\n2. Then at the end of your script, call:\n\n```cmake\ncopy_to_runtime_and_install(${PROJECT_NAME} AUTO)\n```\n\n## License\n\n`nvpro_core2` is licensed under [Apache 2.0](LICENSE).\n\n## Third-Party Libraries\n\nThis project embeds or includes (as filtered [third_party](third_party) subfolders) several open-source libraries and/or code derived from them. All such libraries' licenses are included in the [PACKAGE-LICENSES](PACKAGE-LICENSES) folder.\n\nKey third-party dependencies include:\n- [{fmt}](https://github.com/fmtlib/fmt) - Formatting library\n- [Dear ImGui](https://github.com/ocornut/imgui) - Immediate mode GUI\n- [GLFW](https://github.com/glfw/glfw) - Window management\n- [GLM](https://github.com/g-truc/glm) - GLSL-style mathematics library\n- [OffsetAllocator](https://github.com/sebbbi/OffsetAllocator) - Realtime O(1) offset allocator\n- [stb](https://github.com/NBickford-NV/stb) - Multiple utilities including image loading\n- [tinygltf](https://github.com/syoyo/tinygltf) - GLTF loading\n- [volk](https://github.com/zeux/volk) - Vulkan loader\n- [Vulkan Memory Allocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator) - Vulkan memory management\n- [zstd](https://github.com/facebook/zstd) - Compression library\n\n## Contributing\n\nMerge requests to `nvpro_core2` are welcome, and use the Developer Certificate of Origin (https://developercertificate.org; included in [CONTRIBUTING](CONTRIBUTING)). When committing, please certify that your contribution adheres to the DCO and use `git commit --sign-off`. Thank you!\n\n## Support\n\n- For bug reports and feature requests, please use the [GitHub Issues](https://github.com/nvpro-samples/nvpro_core2/issues) page.\n- For general questions and discussions, please use the [GitHub Discussions](https://github.com/nvpro-samples/nvpro_core2/discussions) page.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvpro-samples%2Fnvpro_core2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnvpro-samples%2Fnvpro_core2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnvpro-samples%2Fnvpro_core2/lists"}