From 2e66b5ea552130e98319321032e278146d4e3b37 Mon Sep 17 00:00:00 2001 From: Harlen Date: Tue, 12 Sep 2023 17:26:14 -0300 Subject: [PATCH] Release 3.1.0 --- .github/workflows/{linux.yml => build.yml} | 98 +- .github/workflows/macos.yml | 46 - .github/workflows/wasm.yml | 38 - .github/workflows/windows.yml | 40 - CHANGELOG.md | 85 +- Dockerfile | 2 +- README.md | 55 +- abcg/CMakeLists.txt | 4 +- abcg/abcg.hpp | 2 +- abcg/abcgApplication.cpp | 41 +- abcg/abcgApplication.hpp | 42 +- abcg/abcgException.cpp | 12 +- abcg/abcgException.hpp | 53 +- abcg/abcgExternal.hpp | 2 +- abcg/abcgImage.cpp | 53 +- abcg/abcgImage.hpp | 9 +- abcg/abcgOpenGL.hpp | 2 +- abcg/abcgOpenGLError.cpp | 31 +- abcg/abcgOpenGLError.hpp | 13 +- abcg/abcgOpenGLExternal.hpp | 2 +- abcg/abcgOpenGLFunction.cpp | 2 +- abcg/abcgOpenGLFunction.hpp | 2 +- abcg/abcgOpenGLImage.cpp | 30 +- abcg/abcgOpenGLImage.hpp | 12 +- abcg/abcgOpenGLShader.cpp | 22 +- abcg/abcgOpenGLShader.hpp | 15 +- abcg/abcgOpenGLWindow.cpp | 46 +- abcg/abcgOpenGLWindow.hpp | 2 +- abcg/abcgShader.hpp | 4 +- abcg/abcgTimer.cpp | 2 +- abcg/abcgTimer.hpp | 2 +- abcg/abcgTrackball.cpp | 22 +- abcg/abcgTrackball.hpp | 21 +- abcg/abcgUtil.cpp | 57 + abcg/abcgUtil.hpp | 7 +- abcg/abcgVulkan.hpp | 2 +- abcg/abcgVulkanBuffer.cpp | 25 +- abcg/abcgVulkanBuffer.hpp | 23 +- abcg/abcgVulkanDevice.cpp | 58 +- abcg/abcgVulkanDevice.hpp | 61 +- abcg/abcgVulkanError.cpp | 15 +- abcg/abcgVulkanError.hpp | 11 +- abcg/abcgVulkanExternal.hpp | 2 +- abcg/abcgVulkanImage.cpp | 64 +- abcg/abcgVulkanImage.hpp | 63 +- abcg/abcgVulkanInstance.cpp | 44 +- abcg/abcgVulkanInstance.hpp | 9 +- abcg/abcgVulkanPhysicalDevice.cpp | 60 +- abcg/abcgVulkanPhysicalDevice.hpp | 56 +- abcg/abcgVulkanPipeline.cpp | 26 +- abcg/abcgVulkanPipeline.hpp | 23 +- abcg/abcgVulkanShader.cpp | 45 +- abcg/abcgVulkanShader.hpp | 25 +- abcg/abcgVulkanSwapchain.cpp | 114 +- abcg/abcgVulkanSwapchain.hpp | 108 +- abcg/abcgVulkanWindow.cpp | 53 +- abcg/abcgVulkanWindow.hpp | 33 +- abcg/abcgWindow.cpp | 19 +- abcg/abcgWindow.hpp | 6 +- abcg/doc/Doxyfile | 2 +- abcg/doc/html/CHANGELOG_8md.html | 2 +- abcg/doc/html/README_8md.html | 2 +- abcg/doc/html/abcgApplication_8cpp.html | 7 +- abcg/doc/html/abcgApplication_8cpp__incl.map | 27 +- abcg/doc/html/abcgApplication_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgApplication_8cpp__incl.svg | 223 +- abcg/doc/html/abcgApplication_8hpp.html | 10 +- .../html/abcgApplication_8hpp__dep__incl.map | 10 +- .../html/abcgApplication_8hpp__dep__incl.md5 | 2 +- .../html/abcgApplication_8hpp__dep__incl.svg | 112 +- .../doc/html/abcgApplication_8hpp_source.html | 49 +- abcg/doc/html/abcgEmbeddedFonts_8hpp.html | 2 +- .../html/abcgEmbeddedFonts_8hpp_source.html | 2 +- abcg/doc/html/abcgException_8cpp.html | 8 +- abcg/doc/html/abcgException_8cpp__incl.map | 7 +- abcg/doc/html/abcgException_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgException_8cpp__incl.svg | 69 +- abcg/doc/html/abcgException_8hpp.html | 6 +- .../html/abcgException_8hpp__dep__incl.map | 43 +- .../html/abcgException_8hpp__dep__incl.md5 | 2 +- .../html/abcgException_8hpp__dep__incl.svg | 356 +- abcg/doc/html/abcgException_8hpp_source.html | 182 +- abcg/doc/html/abcgExternal_8hpp.html | 6 +- .../doc/html/abcgExternal_8hpp__dep__incl.map | 35 +- .../doc/html/abcgExternal_8hpp__dep__incl.md5 | 2 +- .../doc/html/abcgExternal_8hpp__dep__incl.svg | 382 +- abcg/doc/html/abcgExternal_8hpp_source.html | 2 +- abcg/doc/html/abcgImage_8cpp.html | 12 +- abcg/doc/html/abcgImage_8cpp__incl.map | 17 +- abcg/doc/html/abcgImage_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgImage_8cpp__incl.svg | 129 +- abcg/doc/html/abcgImage_8hpp.html | 23 +- abcg/doc/html/abcgImage_8hpp.js | 4 +- abcg/doc/html/abcgImage_8hpp__dep__incl.map | 4 +- abcg/doc/html/abcgImage_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgImage_8hpp__dep__incl.svg | 4 +- abcg/doc/html/abcgImage_8hpp__incl.map | 5 +- abcg/doc/html/abcgImage_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgImage_8hpp__incl.svg | 35 +- abcg/doc/html/abcgImage_8hpp_source.html | 21 +- abcg/doc/html/abcgOpenGLError_8cpp.html | 7 +- abcg/doc/html/abcgOpenGLError_8cpp__incl.map | 18 +- abcg/doc/html/abcgOpenGLError_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgOpenGLError_8cpp__incl.svg | 106 +- abcg/doc/html/abcgOpenGLError_8hpp.html | 4 +- .../doc/html/abcgOpenGLError_8hpp_source.html | 41 +- abcg/doc/html/abcgOpenGLExternal_8hpp.html | 4 +- .../html/abcgOpenGLExternal_8hpp_source.html | 2 +- abcg/doc/html/abcgOpenGLFunction_8cpp.html | 4 +- abcg/doc/html/abcgOpenGLFunction_8hpp.html | 4 +- .../html/abcgOpenGLFunction_8hpp_source.html | 2 +- abcg/doc/html/abcgOpenGLImage_8cpp.html | 8 +- abcg/doc/html/abcgOpenGLImage_8cpp__incl.map | 21 +- abcg/doc/html/abcgOpenGLImage_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgOpenGLImage_8cpp__incl.svg | 195 +- abcg/doc/html/abcgOpenGLImage_8hpp.html | 10 +- .../doc/html/abcgOpenGLImage_8hpp_source.html | 14 +- abcg/doc/html/abcgOpenGLShader_8cpp.html | 39 +- abcg/doc/html/abcgOpenGLShader_8cpp__incl.map | 33 +- abcg/doc/html/abcgOpenGLShader_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgOpenGLShader_8cpp__incl.svg | 229 +- abcg/doc/html/abcgOpenGLShader_8hpp.html | 4 +- .../html/abcgOpenGLShader_8hpp_source.html | 21 +- abcg/doc/html/abcgOpenGLWindow_8cpp.html | 8 +- abcg/doc/html/abcgOpenGLWindow_8cpp__incl.map | 6 +- abcg/doc/html/abcgOpenGLWindow_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgOpenGLWindow_8cpp__incl.svg | 28 +- abcg/doc/html/abcgOpenGLWindow_8hpp.html | 4 +- .../html/abcgOpenGLWindow_8hpp_source.html | 2 +- abcg/doc/html/abcgOpenGL_8hpp.html | 6 +- abcg/doc/html/abcgOpenGL_8hpp__incl.map | 44 +- abcg/doc/html/abcgOpenGL_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgOpenGL_8hpp__incl.svg | 290 +- abcg/doc/html/abcgOpenGL_8hpp_source.html | 2 +- abcg/doc/html/abcgShader_8hpp.html | 4 +- abcg/doc/html/abcgShader_8hpp__dep__incl.map | 9 +- abcg/doc/html/abcgShader_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgShader_8hpp__dep__incl.svg | 74 +- abcg/doc/html/abcgShader_8hpp_source.html | 4 +- abcg/doc/html/abcgTimer_8cpp.html | 4 +- abcg/doc/html/abcgTimer_8hpp.html | 6 +- abcg/doc/html/abcgTimer_8hpp__dep__incl.map | 34 +- abcg/doc/html/abcgTimer_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgTimer_8hpp__dep__incl.svg | 342 +- abcg/doc/html/abcgTimer_8hpp_source.html | 2 +- abcg/doc/html/abcgTrackball_8cpp.html | 4 +- abcg/doc/html/abcgTrackball_8hpp.html | 6 +- .../html/abcgTrackball_8hpp__dep__incl.map | 5 +- .../html/abcgTrackball_8hpp__dep__incl.md5 | 2 +- .../html/abcgTrackball_8hpp__dep__incl.svg | 44 +- abcg/doc/html/abcgTrackball_8hpp_source.html | 48 +- abcg/doc/html/abcgUtil_8cpp.html | 130 + abcg/doc/html/abcgUtil_8cpp__incl.map | 6 + abcg/doc/html/abcgUtil_8cpp__incl.md5 | 1 + abcg/doc/html/abcgUtil_8cpp__incl.svg | 67 + abcg/doc/html/abcgUtil_8hpp.html | 18 +- abcg/doc/html/abcgUtil_8hpp.js | 5 +- abcg/doc/html/abcgUtil_8hpp__dep__incl.map | 8 +- abcg/doc/html/abcgUtil_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgUtil_8hpp__dep__incl.svg | 88 +- abcg/doc/html/abcgUtil_8hpp__incl.map | 5 +- abcg/doc/html/abcgUtil_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgUtil_8hpp__incl.svg | 33 +- abcg/doc/html/abcgUtil_8hpp_source.html | 56 +- abcg/doc/html/abcgVulkanBuffer_8cpp.html | 6 +- abcg/doc/html/abcgVulkanBuffer_8cpp__incl.map | 33 +- abcg/doc/html/abcgVulkanBuffer_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanBuffer_8cpp__incl.svg | 271 +- abcg/doc/html/abcgVulkanBuffer_8hpp.html | 6 +- .../html/abcgVulkanBuffer_8hpp__dep__incl.map | 9 +- .../html/abcgVulkanBuffer_8hpp__dep__incl.md5 | 2 +- .../html/abcgVulkanBuffer_8hpp__dep__incl.svg | 84 +- abcg/doc/html/abcgVulkanBuffer_8hpp__incl.map | 19 +- abcg/doc/html/abcgVulkanBuffer_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanBuffer_8hpp__incl.svg | 155 +- .../html/abcgVulkanBuffer_8hpp_source.html | 38 +- abcg/doc/html/abcgVulkanDevice_8cpp.html | 7 +- abcg/doc/html/abcgVulkanDevice_8cpp__incl.map | 25 +- abcg/doc/html/abcgVulkanDevice_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanDevice_8cpp__incl.svg | 209 +- abcg/doc/html/abcgVulkanDevice_8hpp.html | 12 +- .../html/abcgVulkanDevice_8hpp__dep__incl.map | 33 +- .../html/abcgVulkanDevice_8hpp__dep__incl.md5 | 2 +- .../html/abcgVulkanDevice_8hpp__dep__incl.svg | 418 +- abcg/doc/html/abcgVulkanDevice_8hpp__incl.map | 15 +- abcg/doc/html/abcgVulkanDevice_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanDevice_8hpp__incl.svg | 129 +- .../html/abcgVulkanDevice_8hpp_source.html | 150 +- abcg/doc/html/abcgVulkanError_8cpp.html | 4 +- abcg/doc/html/abcgVulkanError_8hpp.html | 4 +- .../doc/html/abcgVulkanError_8hpp_source.html | 19 +- abcg/doc/html/abcgVulkanExternal_8hpp.html | 6 +- .../abcgVulkanExternal_8hpp__dep__incl.map | 40 +- .../abcgVulkanExternal_8hpp__dep__incl.md5 | 2 +- .../abcgVulkanExternal_8hpp__dep__incl.svg | 632 +- .../html/abcgVulkanExternal_8hpp_source.html | 2 +- abcg/doc/html/abcgVulkanImage_8cpp.html | 6 +- abcg/doc/html/abcgVulkanImage_8cpp__incl.map | 37 +- abcg/doc/html/abcgVulkanImage_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanImage_8cpp__incl.svg | 319 +- abcg/doc/html/abcgVulkanImage_8hpp.html | 6 +- .../html/abcgVulkanImage_8hpp__dep__incl.map | 22 +- .../html/abcgVulkanImage_8hpp__dep__incl.md5 | 2 +- .../html/abcgVulkanImage_8hpp__dep__incl.svg | 246 +- abcg/doc/html/abcgVulkanImage_8hpp__incl.map | 19 +- abcg/doc/html/abcgVulkanImage_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanImage_8hpp__incl.svg | 155 +- .../doc/html/abcgVulkanImage_8hpp_source.html | 91 +- abcg/doc/html/abcgVulkanInstance_8cpp.html | 7 +- .../html/abcgVulkanInstance_8cpp__incl.map | 65 +- .../html/abcgVulkanInstance_8cpp__incl.md5 | 2 +- .../html/abcgVulkanInstance_8cpp__incl.svg | 445 +- abcg/doc/html/abcgVulkanInstance_8hpp.html | 6 +- .../abcgVulkanInstance_8hpp__dep__incl.map | 38 +- .../abcgVulkanInstance_8hpp__dep__incl.md5 | 2 +- .../abcgVulkanInstance_8hpp__dep__incl.svg | 384 +- .../html/abcgVulkanInstance_8hpp_source.html | 24 +- .../html/abcgVulkanPhysicalDevice_8cpp.html | 8 +- .../abcgVulkanPhysicalDevice_8cpp__incl.map | 50 +- .../abcgVulkanPhysicalDevice_8cpp__incl.md5 | 2 +- .../abcgVulkanPhysicalDevice_8cpp__incl.svg | 612 +- .../html/abcgVulkanPhysicalDevice_8hpp.html | 6 +- ...cgVulkanPhysicalDevice_8hpp__dep__incl.map | 36 +- ...cgVulkanPhysicalDevice_8hpp__dep__incl.md5 | 2 +- ...cgVulkanPhysicalDevice_8hpp__dep__incl.svg | 458 +- .../abcgVulkanPhysicalDevice_8hpp_source.html | 95 +- abcg/doc/html/abcgVulkanPipeline_8cpp.html | 6 +- .../html/abcgVulkanPipeline_8cpp__incl.map | 36 +- .../html/abcgVulkanPipeline_8cpp__incl.md5 | 2 +- .../html/abcgVulkanPipeline_8cpp__incl.svg | 316 +- abcg/doc/html/abcgVulkanPipeline_8hpp.html | 11 +- .../abcgVulkanPipeline_8hpp__dep__incl.map | 7 +- .../abcgVulkanPipeline_8hpp__dep__incl.md5 | 2 +- .../abcgVulkanPipeline_8hpp__dep__incl.svg | 64 +- .../html/abcgVulkanPipeline_8hpp__incl.map | 32 +- .../html/abcgVulkanPipeline_8hpp__incl.md5 | 2 +- .../html/abcgVulkanPipeline_8hpp__incl.svg | 298 +- .../html/abcgVulkanPipeline_8hpp_source.html | 124 +- abcg/doc/html/abcgVulkanShader_8cpp.html | 49 +- abcg/doc/html/abcgVulkanShader_8cpp.js | 2 - abcg/doc/html/abcgVulkanShader_8cpp__incl.map | 50 +- abcg/doc/html/abcgVulkanShader_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanShader_8cpp__incl.svg | 526 +- abcg/doc/html/abcgVulkanShader_8hpp.html | 8 +- .../html/abcgVulkanShader_8hpp__dep__incl.map | 11 +- .../html/abcgVulkanShader_8hpp__dep__incl.md5 | 2 +- .../html/abcgVulkanShader_8hpp__dep__incl.svg | 124 +- abcg/doc/html/abcgVulkanShader_8hpp__incl.map | 21 +- abcg/doc/html/abcgVulkanShader_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanShader_8hpp__incl.svg | 167 +- .../html/abcgVulkanShader_8hpp_source.html | 35 +- abcg/doc/html/abcgVulkanSwapchain_8cpp.html | 114 +- .../html/abcgVulkanSwapchain_8cpp__incl.map | 50 +- .../html/abcgVulkanSwapchain_8cpp__incl.md5 | 2 +- .../html/abcgVulkanSwapchain_8cpp__incl.svg | 450 +- abcg/doc/html/abcgVulkanSwapchain_8hpp.html | 8 +- .../abcgVulkanSwapchain_8hpp__dep__incl.map | 18 +- .../abcgVulkanSwapchain_8hpp__dep__incl.md5 | 2 +- .../abcgVulkanSwapchain_8hpp__dep__incl.svg | 182 +- .../html/abcgVulkanSwapchain_8hpp__incl.map | 24 +- .../html/abcgVulkanSwapchain_8hpp__incl.md5 | 2 +- .../html/abcgVulkanSwapchain_8hpp__incl.svg | 170 +- .../html/abcgVulkanSwapchain_8hpp_source.html | 174 +- abcg/doc/html/abcgVulkanWindow_8cpp.html | 9 +- abcg/doc/html/abcgVulkanWindow_8cpp__incl.map | 61 +- abcg/doc/html/abcgVulkanWindow_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanWindow_8cpp__incl.svg | 635 +- abcg/doc/html/abcgVulkanWindow_8hpp.html | 12 +- .../html/abcgVulkanWindow_8hpp__dep__incl.map | 10 +- .../html/abcgVulkanWindow_8hpp__dep__incl.md5 | 2 +- .../html/abcgVulkanWindow_8hpp__dep__incl.svg | 100 +- abcg/doc/html/abcgVulkanWindow_8hpp__incl.map | 37 +- abcg/doc/html/abcgVulkanWindow_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkanWindow_8hpp__incl.svg | 355 +- .../html/abcgVulkanWindow_8hpp_source.html | 178 +- abcg/doc/html/abcgVulkan_8hpp.html | 8 +- abcg/doc/html/abcgVulkan_8hpp__dep__incl.map | 3 +- abcg/doc/html/abcgVulkan_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgVulkan_8hpp__dep__incl.svg | 30 +- abcg/doc/html/abcgVulkan_8hpp__incl.map | 61 +- abcg/doc/html/abcgVulkan_8hpp__incl.md5 | 2 +- abcg/doc/html/abcgVulkan_8hpp__incl.svg | 467 +- abcg/doc/html/abcgVulkan_8hpp_source.html | 2 +- abcg/doc/html/abcgWindow_8cpp.html | 9 +- abcg/doc/html/abcgWindow_8cpp__incl.map | 5 +- abcg/doc/html/abcgWindow_8cpp__incl.md5 | 2 +- abcg/doc/html/abcgWindow_8cpp__incl.svg | 41 +- abcg/doc/html/abcgWindow_8hpp.html | 6 +- abcg/doc/html/abcgWindow_8hpp__dep__incl.map | 26 +- abcg/doc/html/abcgWindow_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcgWindow_8hpp__dep__incl.svg | 262 +- abcg/doc/html/abcgWindow_8hpp_source.html | 26 +- abcg/doc/html/abcg_8hpp.html | 8 +- abcg/doc/html/abcg_8hpp__dep__incl.map | 3 +- abcg/doc/html/abcg_8hpp__dep__incl.md5 | 2 +- abcg/doc/html/abcg_8hpp__dep__incl.svg | 30 +- abcg/doc/html/abcg_8hpp__incl.map | 22 +- abcg/doc/html/abcg_8hpp__incl.md5 | 2 +- abcg/doc/html/abcg_8hpp__incl.svg | 132 +- abcg/doc/html/abcg_8hpp_source.html | 2 +- abcg/doc/html/annotated.html | 6 +- .../classabcg_1_1Application-members.html | 6 +- abcg/doc/html/classabcg_1_1Application.html | 32 +- .../html/classabcg_1_1Exception-members.html | 4 +- abcg/doc/html/classabcg_1_1Exception.html | 20 +- abcg/doc/html/classabcg_1_1Exception.js | 2 +- .../classabcg_1_1OpenGLError-members.html | 4 +- abcg/doc/html/classabcg_1_1OpenGLError.html | 12 +- .../classabcg_1_1OpenGLWindow-members.html | 2 +- abcg/doc/html/classabcg_1_1OpenGLWindow.html | 4 +- .../classabcg_1_1RuntimeError-members.html | 4 +- abcg/doc/html/classabcg_1_1RuntimeError.html | 12 +- .../html/classabcg_1_1SDLError-members.html | 4 +- abcg/doc/html/classabcg_1_1SDLError.html | 12 +- .../classabcg_1_1SDLImageError-members.html | 4 +- abcg/doc/html/classabcg_1_1SDLImageError.html | 12 +- abcg/doc/html/classabcg_1_1Timer-members.html | 2 +- abcg/doc/html/classabcg_1_1Timer.html | 2 +- .../html/classabcg_1_1TrackBall-members.html | 6 +- abcg/doc/html/classabcg_1_1TrackBall.html | 30 +- abcg/doc/html/classabcg_1_1TrackBall.js | 4 +- .../classabcg_1_1VulkanBuffer-members.html | 6 +- abcg/doc/html/classabcg_1_1VulkanBuffer.html | 18 +- abcg/doc/html/classabcg_1_1VulkanBuffer.js | 2 +- .../classabcg_1_1VulkanDevice-members.html | 10 +- abcg/doc/html/classabcg_1_1VulkanDevice.html | 46 +- abcg/doc/html/classabcg_1_1VulkanDevice.js | 6 +- .../classabcg_1_1VulkanError-members.html | 4 +- abcg/doc/html/classabcg_1_1VulkanError.html | 10 +- .../classabcg_1_1VulkanImage-members.html | 12 +- abcg/doc/html/classabcg_1_1VulkanImage.html | 48 +- abcg/doc/html/classabcg_1_1VulkanImage.js | 6 +- .../classabcg_1_1VulkanInstance-members.html | 4 +- .../doc/html/classabcg_1_1VulkanInstance.html | 4 +- ...sabcg_1_1VulkanPhysicalDevice-members.html | 12 +- .../classabcg_1_1VulkanPhysicalDevice.html | 48 +- .../html/classabcg_1_1VulkanPhysicalDevice.js | 6 +- .../classabcg_1_1VulkanPipeline-members.html | 6 +- .../doc/html/classabcg_1_1VulkanPipeline.html | 18 +- abcg/doc/html/classabcg_1_1VulkanPipeline.js | 2 +- .../classabcg_1_1VulkanShader-members.html | 6 +- abcg/doc/html/classabcg_1_1VulkanShader.html | 30 +- abcg/doc/html/classabcg_1_1VulkanShader.js | 4 +- .../classabcg_1_1VulkanSwapchain-members.html | 18 +- .../html/classabcg_1_1VulkanSwapchain.html | 102 +- abcg/doc/html/classabcg_1_1VulkanSwapchain.js | 14 +- .../classabcg_1_1VulkanWindow-members.html | 8 +- abcg/doc/html/classabcg_1_1VulkanWindow.html | 54 +- abcg/doc/html/classabcg_1_1VulkanWindow.js | 6 +- .../doc/html/classabcg_1_1Window-members.html | 2 +- abcg/doc/html/classabcg_1_1Window.html | 4 +- abcg/doc/html/classes.html | 2 +- abcg/doc/html/files.html | 57 +- abcg/doc/html/files_dup.js | 5 +- abcg/doc/html/functions.html | 58 +- abcg/doc/html/functions_func.html | 58 +- abcg/doc/html/functions_rela.html | 2 +- abcg/doc/html/functions_vars.html | 2 +- abcg/doc/html/globals.html | 20 +- abcg/doc/html/globals_defs.html | 2 +- abcg/doc/html/globals_func.html | 20 +- abcg/doc/html/graph_legend.html | 2 +- abcg/doc/html/hierarchy.html | 6 +- abcg/doc/html/index.html | 10 +- abcg/doc/html/inherit_graph_2.map | 2 +- abcg/doc/html/inherit_graph_2.md5 | 2 +- abcg/doc/html/inherit_graph_2.svg | 2 +- abcg/doc/html/inherit_graph_5.map | 2 +- abcg/doc/html/inherit_graph_5.md5 | 2 +- abcg/doc/html/inherit_graph_5.svg | 2 +- abcg/doc/html/inherits.html | 2 +- .../md__home_harlen_dev_abcg3_CHANGELOG.html | 213 + .../md__home_harlen_dev_abcg_CHANGELOG.html | 40 +- abcg/doc/html/namespaceabcg.html | 163 +- abcg/doc/html/namespaceabcg.js | 7 +- abcg/doc/html/namespacemembers.html | 2 +- abcg/doc/html/namespacemembers_enum.html | 2 +- abcg/doc/html/namespacemembers_f.html | 6 +- abcg/doc/html/namespacemembers_func.html | 2 +- abcg/doc/html/namespacemembers_func_f.html | 6 +- abcg/doc/html/namespacemembers_func_g.html | 2 +- abcg/doc/html/namespacemembers_func_h.html | 2 +- abcg/doc/html/namespacemembers_func_l.html | 2 +- abcg/doc/html/namespacemembers_func_r.html | 2 +- abcg/doc/html/namespacemembers_func_t.html | 11 +- abcg/doc/html/namespacemembers_g.html | 2 +- abcg/doc/html/namespacemembers_h.html | 2 +- abcg/doc/html/namespacemembers_l.html | 2 +- abcg/doc/html/namespacemembers_o.html | 2 +- abcg/doc/html/namespacemembers_r.html | 2 +- abcg/doc/html/namespacemembers_s.html | 2 +- abcg/doc/html/namespacemembers_t.html | 11 +- abcg/doc/html/namespacemembers_type.html | 2 +- abcg/doc/html/namespaces.html | 6 +- abcg/doc/html/navtreedata.js | 25 +- abcg/doc/html/navtreeindex0.js | 4 +- abcg/doc/html/navtreeindex1.js | 160 +- abcg/doc/html/navtreeindex2.js | 32 +- abcg/doc/html/navtreeindex3.js | 4 +- abcg/doc/html/pages.html | 2 +- abcg/doc/html/search/all_0.js | 68 +- abcg/doc/html/search/all_1.js | 2 +- abcg/doc/html/search/all_10.js | 2 +- abcg/doc/html/search/all_11.js | 46 +- abcg/doc/html/search/all_12.js | 10 +- abcg/doc/html/search/all_13.js | 2 +- abcg/doc/html/search/all_2.js | 48 +- abcg/doc/html/search/all_3.js | 12 +- abcg/doc/html/search/all_4.js | 6 +- abcg/doc/html/search/all_5.js | 16 +- abcg/doc/html/search/all_6.js | 580 +- abcg/doc/html/search/all_7.js | 8 +- abcg/doc/html/search/all_8.js | 8 +- abcg/doc/html/search/all_9.js | 6 +- abcg/doc/html/search/all_a.js | 16 +- abcg/doc/html/search/all_b.js | 44 +- abcg/doc/html/search/all_c.js | 16 +- abcg/doc/html/search/all_d.js | 22 +- abcg/doc/html/search/all_e.js | 46 +- abcg/doc/html/search/all_f.js | 23 +- abcg/doc/html/search/classes_0.js | 2 +- abcg/doc/html/search/classes_1.js | 2 +- abcg/doc/html/search/classes_2.js | 12 +- abcg/doc/html/search/classes_3.js | 2 +- abcg/doc/html/search/classes_4.js | 6 +- abcg/doc/html/search/classes_5.js | 4 +- abcg/doc/html/search/classes_6.js | 36 +- abcg/doc/html/search/classes_7.js | 4 +- abcg/doc/html/search/defines_0.js | 8 +- abcg/doc/html/search/defines_1.js | 2 +- abcg/doc/html/search/defines_2.js | 2 +- abcg/doc/html/search/enums_0.js | 2 +- abcg/doc/html/search/enums_1.js | 2 +- abcg/doc/html/search/enumvalues_0.js | 2 +- abcg/doc/html/search/enumvalues_1.js | 10 +- abcg/doc/html/search/enumvalues_2.js | 2 +- abcg/doc/html/search/enumvalues_3.js | 2 +- abcg/doc/html/search/enumvalues_4.js | 2 +- abcg/doc/html/search/enumvalues_5.js | 2 +- abcg/doc/html/search/enumvalues_6.js | 4 +- abcg/doc/html/search/enumvalues_7.js | 2 +- abcg/doc/html/search/enumvalues_8.js | 6 +- abcg/doc/html/search/enumvalues_9.js | 2 +- abcg/doc/html/search/files_0.js | 103 +- abcg/doc/html/search/files_1.js | 2 +- abcg/doc/html/search/files_2.js | 2 +- abcg/doc/html/search/functions_0.js | 5 +- abcg/doc/html/search/functions_1.js | 21 +- abcg/doc/html/search/functions_10.js | 2 +- abcg/doc/html/search/functions_2.js | 2 +- abcg/doc/html/search/functions_3.js | 4 +- abcg/doc/html/search/functions_4.js | 6 +- abcg/doc/html/search/functions_5.js | 572 +- abcg/doc/html/search/functions_6.js | 6 +- abcg/doc/html/search/functions_7.js | 6 +- abcg/doc/html/search/functions_8.js | 6 +- abcg/doc/html/search/functions_9.js | 32 +- abcg/doc/html/search/functions_a.js | 4 +- abcg/doc/html/search/functions_b.js | 12 +- abcg/doc/html/search/functions_c.js | 18 +- abcg/doc/html/search/functions_d.js | 9 +- abcg/doc/html/search/functions_e.js | 2 +- abcg/doc/html/search/functions_f.js | 6 +- abcg/doc/html/search/namespaces_0.js | 2 +- abcg/doc/html/search/pages_0.js | 2 +- abcg/doc/html/search/pages_1.js | 2 +- abcg/doc/html/search/related_0.js | 2 +- abcg/doc/html/search/typedefs_0.js | 2 +- abcg/doc/html/search/variables_0.js | 2 +- abcg/doc/html/search/variables_1.js | 2 +- abcg/doc/html/search/variables_2.js | 14 +- abcg/doc/html/search/variables_3.js | 10 +- abcg/doc/html/search/variables_4.js | 8 +- abcg/doc/html/search/variables_5.js | 4 +- abcg/doc/html/search/variables_6.js | 2 +- abcg/doc/html/search/variables_7.js | 6 +- abcg/doc/html/search/variables_8.js | 6 +- abcg/doc/html/search/variables_9.js | 14 +- abcg/doc/html/search/variables_a.js | 4 +- abcg/doc/html/search/variables_b.js | 22 +- abcg/doc/html/search/variables_c.js | 4 +- abcg/doc/html/search/variables_d.js | 2 +- abcg/doc/html/search/variables_e.js | 6 +- abcg/doc/html/search/variables_f.js | 2 +- ...cg_1_1OpenGLCubemapCreateInfo-members.html | 2 +- ...structabcg_1_1OpenGLCubemapCreateInfo.html | 10 +- .../structabcg_1_1OpenGLSettings-members.html | 2 +- .../html/structabcg_1_1OpenGLSettings.html | 2 +- .../structabcg_1_1OpenGLShader-members.html | 2 +- abcg/doc/html/structabcg_1_1OpenGLShader.html | 2 +- ...cg_1_1OpenGLTextureCreateInfo-members.html | 2 +- ...structabcg_1_1OpenGLTextureCreateInfo.html | 10 +- .../structabcg_1_1ShaderSource-members.html | 2 +- abcg/doc/html/structabcg_1_1ShaderSource.html | 2 +- ...bcg_1_1VulkanBufferCreateInfo-members.html | 2 +- .../structabcg_1_1VulkanBufferCreateInfo.html | 2 +- ...uctabcg_1_1VulkanCommandPools-members.html | 2 +- .../structabcg_1_1VulkanCommandPools.html | 14 +- .../structabcg_1_1VulkanFrame-members.html | 2 +- abcg/doc/html/structabcg_1_1VulkanFrame.html | 26 +- ...abcg_1_1VulkanImageCreateInfo-members.html | 2 +- .../structabcg_1_1VulkanImageCreateInfo.html | 2 +- ...g_1_1VulkanPipelineCreateInfo-members.html | 2 +- ...tructabcg_1_1VulkanPipelineCreateInfo.html | 2 +- .../structabcg_1_1VulkanQueues-members.html | 2 +- abcg/doc/html/structabcg_1_1VulkanQueues.html | 18 +- ...tabcg_1_1VulkanQueuesFamilies-members.html | 2 +- .../structabcg_1_1VulkanQueuesFamilies.html | 2 +- .../structabcg_1_1VulkanSettings-members.html | 2 +- .../html/structabcg_1_1VulkanSettings.html | 2 +- .../structabcg_1_1WindowSettings-members.html | 2 +- .../html/structabcg_1_1WindowSettings.html | 2 +- abcg/external/fmt/core.h | 2253 +++---- abcg/external/fmt/format-inl.h | 2629 +++----- abcg/external/fmt/format.cc | 111 +- abcg/external/fmt/format.h | 3703 +++++++---- abcg/external/imgui/CMakeLists.txt | 2 +- abcg/external/imgui/LICENSE.txt | 2 +- abcg/external/imgui/imconfig.h | 33 +- abcg/external/imgui/imgui.cpp | 5522 +++++++++++------ abcg/external/imgui/imgui.h | 968 +-- abcg/external/imgui/imgui_demo.cpp | 1067 ++-- abcg/external/imgui/imgui_draw.cpp | 316 +- abcg/external/imgui/imgui_impl_opengl3.cpp | 222 +- abcg/external/imgui/imgui_impl_opengl3.h | 8 +- .../imgui/imgui_impl_opengl3_loader.h | 270 +- abcg/external/imgui/imgui_impl_sdl.cpp | 449 -- abcg/external/imgui/imgui_impl_sdl2.cpp | 634 ++ .../{imgui_impl_sdl.h => imgui_impl_sdl2.h} | 10 +- abcg/external/imgui/imgui_impl_vulkan.cpp | 143 +- abcg/external/imgui/imgui_impl_vulkan.h | 12 +- abcg/external/imgui/imgui_internal.h | 1059 +++- abcg/external/imgui/imgui_tables.cpp | 306 +- abcg/external/imgui/imgui_widgets.cpp | 1636 ++--- abcg/external/imgui/imstb_rectpack.h | 42 +- abcg/external/imgui/imstb_textedit.h | 50 +- abcg/external/imgui/imstb_truetype.h | 824 ++- abcg/external/volk/CMakeLists.txt | 26 +- abcg/external/volk/LICENSE.md | 2 +- abcg/external/volk/README.md | 2 +- abcg/external/volk/generate.py | 37 +- abcg/external/volk/volk.c | 547 +- abcg/external/volk/volk.h | 373 +- cmake/ABCg.cmake | 1 + cmake/Common.cmake | 51 +- 545 files changed, 23625 insertions(+), 20478 deletions(-) rename .github/workflows/{linux.yml => build.yml} (54%) delete mode 100644 .github/workflows/macos.yml delete mode 100644 .github/workflows/wasm.yml delete mode 100644 .github/workflows/windows.yml create mode 100644 abcg/abcgUtil.cpp create mode 100644 abcg/doc/html/abcgUtil_8cpp.html create mode 100644 abcg/doc/html/abcgUtil_8cpp__incl.map create mode 100644 abcg/doc/html/abcgUtil_8cpp__incl.md5 create mode 100644 abcg/doc/html/abcgUtil_8cpp__incl.svg create mode 100644 abcg/doc/html/md__home_harlen_dev_abcg3_CHANGELOG.html delete mode 100644 abcg/external/imgui/imgui_impl_sdl.cpp create mode 100644 abcg/external/imgui/imgui_impl_sdl2.cpp rename abcg/external/imgui/{imgui_impl_sdl.h => imgui_impl_sdl2.h} (79%) diff --git a/.github/workflows/linux.yml b/.github/workflows/build.yml similarity index 54% rename from .github/workflows/linux.yml rename to .github/workflows/build.yml index daaba4d2d..fa3636021 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: Linux CI +name: build on: [push] @@ -24,9 +24,9 @@ jobs: run: | sudo apt-get install cmake pkg-config sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev - sudo apt-get install libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev + sudo apt-get install libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxcb-cursor-dev sudo apt-get install python3 pip - pip install conan + pip install "conan<2.0" - name: Install dependencies (ENABLE_CONAN=OFF) if: matrix.cmake-var == 'ENABLE_CONAN=OFF' @@ -37,28 +37,28 @@ jobs: - name: Install GCC if: matrix.compiler == 'GCC' run: | - echo "CC=/usr/bin/gcc-11" >> $GITHUB_ENV - echo "CXX=/usr/bin/g++-11" >> $GITHUB_ENV + echo "CC=/usr/bin/gcc-12" >> $GITHUB_ENV + echo "CXX=/usr/bin/g++-12" >> $GITHUB_ENV sudo update-alternatives --remove-all cc sudo update-alternatives --remove-all c++ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt-get install -y gcc-11 g++-11 - sudo update-alternatives --install /usr/bin/cc gcc /usr/bin/gcc-11 1000 \ - --slave /usr/bin/c++ g++ /usr/bin/g++-11 + sudo apt-get install -y gcc-12 g++-12 + sudo update-alternatives --install /usr/bin/cc gcc /usr/bin/gcc-12 1000 \ + --slave /usr/bin/c++ g++ /usr/bin/g++-12 - name: Install Clang if: matrix.compiler == 'Clang' run: | - echo "CC=/usr/bin/clang-13" >> $GITHUB_ENV - echo "CXX=/usr/bin/clang++-13" >> $GITHUB_ENV + echo "CC=/usr/bin/clang-16" >> $GITHUB_ENV + echo "CXX=/usr/bin/clang++-16" >> $GITHUB_ENV sudo update-alternatives --remove-all cc sudo update-alternatives --remove-all c++ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - sudo apt-add-repository -y "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-13 main" - sudo apt-get install -y clang-13 lld-13 - sudo update-alternatives --install /usr/bin/cc clang /usr/bin/clang-13 1000 \ - --slave /usr/bin/ld lld /usr/bin/lld-13 - sudo update-alternatives --install /usr/bin/c++ clang++ /usr/bin/clang++-13 1000 + sudo apt-add-repository -y "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-16 main" + sudo apt-get install -y clang-16 lld-16 + sudo update-alternatives --install /usr/bin/cc clang /usr/bin/clang-16 1000 \ + --slave /usr/bin/ld lld /usr/bin/lld-16 + sudo update-alternatives --install /usr/bin/c++ clang++ /usr/bin/clang++-16 1000 - name: Configure CMake run: | @@ -71,3 +71,71 @@ jobs: - name: Test working-directory: ${{github.workspace}}/build run: ctest -C ${{env.BUILD_TYPE}} + windows-build: + strategy: + fail-fast: false + matrix: + build-type: [Release] + + runs-on: windows-latest + env: + BUILD_TYPE: ${{matrix.build-type}} + + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + - run: | + python -m pip install --upgrade pip + pip install wheel + + - name: Install Conan + run: pip install "conan<2.0" + + - name: Configure CMake + run: | + cmake -B ${{github.workspace}}/build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_CONAN=ON + + - name: Build + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Test + working-directory: ${{github.workspace}}/build + run: ctest -C ${{env.BUILD_TYPE}} + wasm-build: + runs-on: ubuntu-latest + env: + BUILD_TYPE: Release + + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Install Emscripten + run: | + sudo apt-get install git cmake + sudo apt-get install python3 pip + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + git pull + ./emsdk install latest + ./emsdk activate latest + source ./emsdk_env.sh + + - name: Configure CMake + run: | + source ./emsdk/emsdk_env.sh + emcmake cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + + - name: Build + run: | + source ./emsdk/emsdk_env.sh + cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -- -j $(nproc) + + - name: Test + working-directory: ${{github.workspace}}/build + run: ctest -C ${{env.BUILD_TYPE}} \ No newline at end of file diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml deleted file mode 100644 index 9870e9609..000000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: macOS CI - -on: [push] - -jobs: - macOS-build: - strategy: - fail-fast: false - matrix: - build-type: [Release] - cmake-var: [ENABLE_CONAN=ON, ENABLE_CONAN=OFF] - - runs-on: macos-latest - env: - BUILD_TYPE: ${{matrix.build-type}} - - steps: - - uses: actions/checkout@v3 - - - name: Install dependencies (ENABLE_CONAN=ON) - if: matrix.cmake-var == 'ENABLE_CONAN=ON' - run: | - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - brew update - brew install conan - - - name: Install dependencies (ENABLE_CONAN=OFF) - if: matrix.cmake-var == 'ENABLE_CONAN=OFF' - run: | - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - brew update - brew install glew sdl2 sdl2_image - - - name: Configure CMake - run: | - cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \ - -D${{matrix.cmake-var}} - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -- -j $(sysctl -n hw.ncpu) - - - name: Test - working-directory: ${{github.workspace}}/build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: ctest -C ${{env.BUILD_TYPE}} diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml deleted file mode 100644 index 7c16e96da..000000000 --- a/.github/workflows/wasm.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: WASM CI - -on: [push] - -jobs: - wasm-build: - runs-on: ubuntu-latest - env: - BUILD_TYPE: Release - - steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - name: Install Emscripten - run: | - sudo apt-get install git cmake - sudo apt-get install python3 pip - git clone https://github.com/emscripten-core/emsdk.git - cd emsdk - git pull - ./emsdk install latest - ./emsdk activate latest - source ./emsdk_env.sh - - - name: Configure CMake - run: | - source ./emsdk/emsdk_env.sh - emcmake cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - - - name: Build - run: | - source ./emsdk/emsdk_env.sh - cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -- -j $(nproc) - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{env.BUILD_TYPE}} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index dddc64eb2..000000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Windows CI - -on: [push] - -jobs: - windows-build: - strategy: - fail-fast: false - matrix: - build-type: [Release] - - runs-on: windows-latest - env: - BUILD_TYPE: ${{matrix.build-type}} - - steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - name: Set up Python - uses: actions/setup-python@v3 - with: - python-version: '3.10' - - run: | - python -m pip install --upgrade pip - pip install wheel - - - name: Install Conan - run: pip install conan - - - name: Configure CMake - run: | - cmake -B ${{github.workspace}}/build -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_CONAN=ON - - - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} - - - name: Test - working-directory: ${{github.workspace}}/build - run: ctest -C ${{env.BUILD_TYPE}} diff --git a/CHANGELOG.md b/CHANGELOG.md index a5d71ea40..c88a53e87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,21 @@ # Release notes +## v3.1.0 + +* Use extra stack space when building for WASM. +* Updated external libraries (Dear ImGui v1.89.4; {fmt} 10.0.0; volk 1.3.250). +* Force flush to stdout after each invocation of fmt::print to make it work with MSYS2. +* `abcg::flipHorizontally` and `abcg::flipVertically` now accepts an l-value reference to a SDL surface instead of a non-null pointer. +* Moved `abcg::toRedString`, `abcg::toYellowString` and `abcg::toBlueString` to `abcgUtil.hpp`. +* General improvements (fixed typos, code style, etc). + ## v3.0.0 ### New features -- Added support for building in Visual Studio with MSVC. For that to work, GLEW, SDL2 and SDL2_image development libraries must be installed and set up as follows: the GLEW installation directory must be added to the system \_Path_ variable; the environment variables `SDL2DIR` and `SDL2IMAGEDIR` must be set to the installation directory of SDL2 and SDL2_image, respectively. Debugging is also supported. However, **building multiple executables is not supported in VS**. Thus, make sure to use a single `add_subdirectory()` command in the `CMakeLists.txt` of the root directory. Also notice that the default output directory will be `out/build` instead of `build` if the project is built in the IDE. +* Added support for building in Visual Studio with MSVC. For that to work, GLEW, SDL2 and SDL2\_image development libraries must be installed and set up as follows: the GLEW installation directory must be added to the system \_Path\_ variable; the environment variables `SDL2DIR` and `SDL2IMAGEDIR` must be set to the installation directory of SDL2 and SDL2\_image, respectively. Debugging is also supported. However, **building multiple executables is not supported in VS**. Thus, make sure to use a single `add_subdirectory()` command in the `CMakeLists.txt` of the root directory. Also notice that the default output directory will be `out/build` instead of `build` if the project is built in the IDE. -- Added support for building with MSVC in VS Code. Multiple executables are supported, as well as debugging. Below is an example of a `launch.json` for debugging the "Hello, World!" project: +* Added support for building with MSVC in VS Code. Multiple executables are supported, as well as debugging. Below is an example of a `launch.json` for debugging the "Hello, World!" project: { "version": "0.2.0", @@ -24,67 +33,67 @@ ] } -- Updated `abcg::createOpenGLProgram` with support for additional shader types and no dependance on `abcg::OpenGLWindow`. The function now accepts an object of type `abcg::ShaderSource` containing the paths or codes of any combination of shaders supported by OpenGL (vertex, fragment, geometry, tess control/evaluation, and compute shaders). The function also accepts a boolean as a second argument to toggle on/off exceptions on build errors. By default, exception throwing is enabled. +* Updated `abcg::createOpenGLProgram` with support for additional shader types and no dependance on `abcg::OpenGLWindow`. The function now accepts an object of type `abcg::ShaderSource` containing the paths or codes of any combination of shaders supported by OpenGL (vertex, fragment, geometry, tess control/evaluation, and compute shaders). The function also accepts a boolean as a second argument to toggle on/off exceptions on build errors. By default, exception throwing is enabled. -- As an alternative to `abcg::createOpenGLProgram`, it is possible to split the build process into smaller parts by calling `abcg::triggerOpenGLShaderCompile`, `abcg::checkOpenGLShaderCompile`, `abcg::triggerOpenGLShaderLink`, and `abcg::checkOpenGLShaderLink` in sequence. This can be useful to prevent halting the application when building complex programs. +* As an alternative to `abcg::createOpenGLProgram`, it is possible to split the build process into smaller parts by calling `abcg::triggerOpenGLShaderCompile`, `abcg::checkOpenGLShaderCompile`, `abcg::triggerOpenGLShaderLink`, and `abcg::checkOpenGLShaderLink` in sequence. This can be useful to prevent halting the application when building complex programs. -- Added `abcg::Application::getBasePath` and `abcg::Application::getAssetsPath` as static member functions. +* Added `abcg::Application::getBasePath` and `abcg::Application::getAssetsPath` as static member functions. -- The HTML element ID used for registering the fullscreen callback function can now be set with `abcg::WindowSettings::fullscreenElementID` (default is `#canvas`). +* The HTML element ID used for registering the fullscreen callback function can now be set with `abcg::WindowSettings::fullscreenElementID` (default is `#canvas`). -- `abcg::loadOpenGLTexture` and `abcg::loadOpenGLCubemap` now accepts creation info structures `abcg::OpenGLTextureCreateInfo` and `abcg::OpenGLCubemapCreateInfo`, respectively. +* `abcg::loadOpenGLTexture` and `abcg::loadOpenGLCubemap` now accepts creation info structures `abcg::OpenGLTextureCreateInfo` and `abcg::OpenGLCubemapCreateInfo`, respectively. -- Added `abcg::hashCombine` and `abcg::hashCombineSeed` functions to easily combine hash values. +* Added `abcg::hashCombine` and `abcg::hashCombineSeed` functions to easily combine hash values. -- Added support for Vulkan. +* Added support for Vulkan. ### Breaking changes -- ABCg filenames changed to camel case. -- `abcg::OpenGLWindow::getAssetsPath` replaced with `abcg::Application::getAssetsPath`. -- `abcg::OpenGLWindow::createProgramFromFile` and `abcg::OpenGLWindow::createProgramFromString` removed. Use `abcg::createOpenGLProgram` instead. -- `abcg::OpenGLWindow::handleEvent` renamed to `abcg::OpenGLWindow::onEvent`. -- `abcg::OpenGLWindow::initializeGL` renamed to `abcg::OpenGLWindow::onCreate`. -- `abcg::OpenGLWindow::paintGL` renamed to `abcg::OpenGLWindow::onPaint`. -- `abcg::OpenGLWindow::paintUI` renamed to `abcg::OpenGLWindow::onPaintUI`. -- `abcg::OpenGLWindow::resizeGL` renamed to `abcg::OpenGLWindow::onResize`. -- `abcg::OpenGLWindow::terminateGL` renamed to `abcg::OpenGLWindow::onDestroy`. -- Namespace `abcg::opengl` removed. -- `abcg::opengl::loadTexture` renamed to `abcg::loadOpenGLTexture`. -- `abcg::opengl::loadCubemap` renamed to `abcg::loadOpenGLCubemap`. -- `abcg::Application` does not take ownership of `abcg::OpenGLWindow` anymore. `abcg::Application::run` now accepts an lvalue reference to `abcg::OpenGLWindow`. -- `abcg_string.hpp` and `abcg_string.cpp` removed. -- The static member functions of `abcg::Exception`, namely `Runtime`, `OpenGL`, `SDL`, and `SDLImage`, are now classes of their own: `abcg::RuntimeError`, `abcg::OpenGLError`, `abcg::SDLError`, and `abcg::SDLImageError`. This simplifies the syntax for throwing ABCg exceptions. For instance, `throw abcg::Exception{abcg::Exception::runtime(...)}` now becomes `throw abcg::RuntimeError(...)`. -- Default value of `abcg::OpenGLSettings::stencilBufferSize` changed from 8 to 0. -- `abcg::OpenGLSettings::vsync` renamed to `abcg::OpenGLSettings::vSync`. -- `abcg::OpenGLWindow::onResize` parameters changed from `int width, int height` to `glm::ivec2 size`. +* ABCg filenames changed to camel case. +* `abcg::OpenGLWindow::getAssetsPath` replaced with `abcg::Application::getAssetsPath`. +* `abcg::OpenGLWindow::createProgramFromFile` and `abcg::OpenGLWindow::createProgramFromString` removed. Use `abcg::createOpenGLProgram` instead. +* `abcg::OpenGLWindow::handleEvent` renamed to `abcg::OpenGLWindow::onEvent`. +* `abcg::OpenGLWindow::initializeGL` renamed to `abcg::OpenGLWindow::onCreate`. +* `abcg::OpenGLWindow::paintGL` renamed to `abcg::OpenGLWindow::onPaint`. +* `abcg::OpenGLWindow::paintUI` renamed to `abcg::OpenGLWindow::onPaintUI`. +* `abcg::OpenGLWindow::resizeGL` renamed to `abcg::OpenGLWindow::onResize`. +* `abcg::OpenGLWindow::terminateGL` renamed to `abcg::OpenGLWindow::onDestroy`. +* Namespace `abcg::opengl` removed. +* `abcg::opengl::loadTexture` renamed to `abcg::loadOpenGLTexture`. +* `abcg::opengl::loadCubemap` renamed to `abcg::loadOpenGLCubemap`. +* `abcg::Application` does not take ownership of `abcg::OpenGLWindow` anymore. `abcg::Application::run` now accepts an lvalue reference to `abcg::OpenGLWindow`. +* `abcg_string.hpp` and `abcg_string.cpp` removed. +* The static member functions of `abcg::Exception`, namely `Runtime`, `OpenGL`, `SDL`, and `SDLImage`, are now classes of their own: `abcg::RuntimeError`, `abcg::OpenGLError`, `abcg::SDLError`, and `abcg::SDLImageError`. This simplifies the syntax for throwing ABCg exceptions. For instance, `throw abcg::Exception{abcg::Exception::runtime(...)}` now becomes `throw abcg::RuntimeError(...)`. +* Default value of `abcg::OpenGLSettings::stencilBufferSize` changed from 8 to 0. +* `abcg::OpenGLSettings::vsync` renamed to `abcg::OpenGLSettings::vSync`. +* `abcg::OpenGLWindow::onResize` parameters changed from `int width, int height` to `glm::ivec2 size`. ### Other changes -- Updated external libraries (Dear ImGui v1.86; {fmt} 8.1.1; GSL 4.0.0). -- Minimum required version for CMake increased to 3.21. -- `abcg::OpenGLWindow::getDeltaTime()` marked `noexcept`. +* Updated external libraries (Dear ImGui v1.86; {fmt} 8.1.1; GSL 4.0.0). +* Minimum required version for CMake increased to 3.21. +* `abcg::OpenGLWindow::getDeltaTime()` marked `noexcept`. ## v2.0.1 ### Bug Fixes -- Fixed flickering effect when `glClear` is not called for each frame. For this fix to work, `abcg::OpenGLSettings::preserveWebGLDrawingBuffer` must be `true` even when building for desktop. +* Fixed flickering effect when `glClear` is not called for each frame. For this fix to work, `abcg::OpenGLSettings::preserveWebGLDrawingBuffer` must be `true` even when building for desktop. ## v2.0.0 ### Breaking changes -- `abcg::Application::run` now takes by value a unique pointer to `abcg::OpenGLWindow`. Since `std::unique_ptr` cannot be copied, the caller must either use `std::move` or pass the pointer as an rvalue. This makes clear the intent of transferring ownership of the pointer, which was not explicit in the previous version that takes an lvalue reference. -- Support for running multiple windows has been dropped. Multiple windows weren't working properly on Emscripten builds and aren't used in the course. -- `abcg::opengl::loadCubemap` now transforms the cube map textures to a right-handed coordinate system by default. A small loading overhead is incurred because some of the bitmaps are flipped vertically and horizontally. This behavior can be disabled by setting the (new) parameter `rightHandedSystem` to `false`. +* `abcg::Application::run` now takes by value a unique pointer to `abcg::OpenGLWindow`. Since `std::unique_ptr` cannot be copied, the caller must either use `std::move` or pass the pointer as an rvalue. This makes clear the intent of transferring ownership of the pointer, which was not explicit in the previous version that takes an lvalue reference. +* Support for running multiple windows has been dropped. Multiple windows weren't working properly on Emscripten builds and aren't used in the course. +* `abcg::opengl::loadCubemap` now transforms the cube map textures to a right-handed coordinate system by default. A small loading overhead is incurred because some of the bitmaps are flipped vertically and horizontally. This behavior can be disabled by setting the (new) parameter `rightHandedSystem` to `false`. ### Other changes -- `abcg::Exception::OpenGL` now generates a string describing all OpenGL error messages returned by `glGetError` when there are multiple errors. -- All OpenGL functions from OpenGL ES 2.0 and ES 3.0 can now be qualified with the `abcg` namespace (e.g. `abcg::glActiveTexture(0)`) for automatic error handling in debug builds. This is an alternative to the `GL_CHECK` macro used in many engines to check for errors before and after each GL call. -- Updated external libraries (Dear ImGui v1.84; cppitertools v2.1; {fmt} 8.0.1). +* `abcg::Exception::OpenGL` now generates a string describing all OpenGL error messages returned by `glGetError` when there are multiple errors. +* All OpenGL functions from OpenGL ES 2.0 and ES 3.0 can now be qualified with the `abcg` namespace (e.g. `abcg::glActiveTexture(0)`) for automatic error handling in debug builds. This is an alternative to the `GL_CHECK` macro used in many engines to check for errors before and after each GL call. +* Updated external libraries (Dear ImGui v1.84; cppitertools v2.1; {fmt} 8.0.1). ## v1.0.0 -- Initial release, used during the first academic term of 2021. +* Initial release, used during the first academic term of 2021. diff --git a/Dockerfile b/Dockerfile index ffebebbf9..35431b5f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ RUN apt-get update && apt-get install -y \ libsdl2-image-dev \ # glvnd and X dependencies for interop with NVIDIA Container Toolkit libglx0 \ - libxext6 libx11-6 \ + libxext6 libx11-6 \ libglvnd0 libglvnd-dev \ libgl1 libgl1-mesa-dev \ libegl1 libegl1-mesa-dev \ diff --git a/README.md b/README.md index 354152b38..6fa50006a 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,51 @@ # ABCg -![linux workflow](https://github.com/hbatagelo/abcg/actions/workflows/linux.yml/badge.svg) -![macOS workflow](https://github.com/hbatagelo/abcg/actions/workflows/macos.yml/badge.svg) -![Windows workflow](https://github.com/hbatagelo/abcg/actions/workflows/windows.yml/badge.svg) -![WASM workflow](https://github.com/hbatagelo/abcg/actions/workflows/wasm.yml/badge.svg) +![build workflow](https://github.com/hbatagelo/abcg/actions/workflows/build.yml/badge.svg) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/hbatagelo/abcg)](https://github.com/hbatagelo/abcg/releases/latest) Development framework accompanying the course [MCTA008-17 Computer Graphics](http://professor.ufabc.edu.br/~harlen.batagelo/cg/) at [UFABC](https://www.ufabc.edu.br/). -[Documentation](https://hbatagelo.github.io/abcg/abcg/doc/html/) \| [Release notes](CHANGELOG.md) +[Documentation](https://hbatagelo.github.io/abcg/abcg/doc/html/) | [Release notes](CHANGELOG.md) ABCg is a lightweight C++ framework that simplifies the development of 3D graphics applications based on [OpenGL](https://www.opengl.org), [OpenGL ES](https://www.khronos.org), [WebGL](https://www.khronos.org/webgl/), and [Vulkan](https://www.vulkan.org). It is designed for the tutorials and assignments of the course "MCTA008-17 Computer Graphics" taught at Federal University of ABC (UFABC). -* * * +*** ## Main features -- Supported platforms: Linux, mac OS, Windows, WebAssembly. -- Supported backends: OpenGL 3.3+, OpenGL ES 3.0+, WebGL 2.0 (via Emscripten), Vulkan 1.3. -- Applications that use the common subset of functions between OpenGL 3.3 and OpenGL ES 3.0 can be built for WebGL 2.0 using the same source code. -- OpenGL functions can be qualified with the `abcg::` namespace to enable throwing exceptions with descriptive GL error messages that include the source code location. -- Includes helper classes and functions for loading textures (using [SDL_image](https://www.libsdl.org/projects/SDL_image/)), loading OBJ 3D models (using [tinyobjloader](https://github.com/tinyobjloader/tinyobjloader)), and compiling GLSL shaders to SPIR-V with [glslang](https://github.com/KhronosGroup/glslang). +* Supported platforms: Linux, macOS, Windows, WebAssembly. +* Supported backends: OpenGL 3.3+, OpenGL ES 3.0+, WebGL 2.0 (via Emscripten), Vulkan 1.3. +* Applications that use the common subset of functions between OpenGL 3.3 and OpenGL ES 3.0 can be built for WebGL 2.0 using the same source code. +* OpenGL functions can be qualified with the `abcg::` namespace to enable throwing exceptions with descriptive GL error messages that include the source code location. +* Includes helper classes and functions for loading textures (using [SDL\_image](https://www.libsdl.org/projects/SDL_image/)), loading OBJ 3D models (using [tinyobjloader](https://github.com/tinyobjloader/tinyobjloader)), and compiling GLSL shaders to SPIR-V with [glslang](https://github.com/KhronosGroup/glslang). -* * * +*** ## Requirements The following minimum requirements are shared among all platforms: -- [CMake](https://cmake.org/) 3.21. -- A C++ compiler with at least partial support for C++20 (tested with GCC 11, Clang 13, MSVC 17, and emcc 3.1). -- A system with support for OpenGL 3.3 (OpenGL backend) or Vulkan 1.3 (Vulkan backend). Conformant software rasterizers such as Mesa's [Gallium llvmpipe](https://docs.mesa3d.org/drivers/llvmpipe.html) and lavapipe (post Jun 2022) are supported. Mesa's [D3D12](https://devblogs.microsoft.com/directx/directx-heart-linux/) backend on [WSL 2.0](https://docs.microsoft.com/en-us/windows/wsl/install) is supported as well. +* [CMake](https://cmake.org/) 3.21. +* A C++ compiler with at least partial support for C++20 (tested with GCC 12, Clang 16, MSVC 17, and emcc 3.1.42). +* A system with support for OpenGL 3.3 (OpenGL backend) or Vulkan 1.3 (Vulkan backend). Conformant software rasterizers such as Mesa's [Gallium llvmpipe](https://docs.mesa3d.org/drivers/llvmpipe.html) and lavapipe (post Jun 2022) are supported. Mesa's [D3D12](https://devblogs.microsoft.com/directx/directx-heart-linux/) backend on [WSL 2.0](https://docs.microsoft.com/en-us/windows/wsl/install) is supported as well. For WebAssembly: -- [Emscripten](https://emscripten.org/). -- A browser with support for WebGL 2.0. +* [Emscripten](https://emscripten.org/). +* A browser with support for WebGL 2.0. For building desktop applications: -- [SDL](https://www.libsdl.org/) 2.0. -- [SDL_image](https://www.libsdl.org/projects/SDL_image/) 2.0. -- [GLEW](http://glew.sourceforge.net/) 2.2.0 (required for OpenGL-based applications). -- [Vulkan](https://www.lunarg.com/vulkan-sdk/) 1.3 (required for Vulkan-based applications). +* [SDL](https://www.libsdl.org/) 2.0. +* [SDL\_image](https://www.libsdl.org/projects/SDL_image/) 2.0. +* [GLEW](http://glew.sourceforge.net/) 2.2.0 (required for OpenGL-based applications). +* [Vulkan](https://www.lunarg.com/vulkan-sdk/) 1.3 (required for Vulkan-based applications). -Desktop dependencies can be resolved automatically with [Conan](https://conan.io/). It is disabled by default. To use it, install Conan 1.47 or later and then configure CMake with `-DENABLE_CONAN=ON`. +Desktop dependencies can be resolved automatically with [Conan](https://conan.io/), but it is disabled by default. To use Conan, install Conan 1.47 or a later 1.\* version (ABCg is not compatible with Conan 2.0!) and then configure CMake with `-DENABLE_CONAN=ON`. The default renderer backend is OpenGL (CMake option `GRAPHICS_API=OpenGL`). To use the Vulkan backend, configure CMake with `-DGRAPHICS_API=Vulkan`. -* * * +*** ## Installation and usage @@ -64,10 +61,10 @@ Follow the instructions below to build the "Hello, World!" sample located in `ab ### Windows -- Run `build-vs.bat` for building with the Visual Studio 2022 toolchain. -- Run `build.bat` for building with GCC (MinGW-w64). +* Run `build-vs.bat` for building with the Visual Studio 2022 toolchain. +* Run `build.bat` for building with GCC (MinGW-w64). -`build-vs.bat` and `build.bat` accept two optional arguments: (1) the build type, which is `Release` by default, and (2) an extra CMake option. For example, for a `Debug` build with `-DENABLE_CONAN=ON` using VS 2022, run +`build-vs.bat` and `build.bat` accept two optional arguments: (1) the build type, which is `Release` by default, and (2) an extra CMake option. For example, for a `Debug` build with `-DENABLE_CONAN=ON` using VS 2022, run build-vs.bat Debug -DENABLE_CONAN=ON @@ -75,7 +72,7 @@ Follow the instructions below to build the "Hello, World!" sample located in `ab Run `./build.sh`. -The script accepts two optional arguments: (1) the build type, which is `Release` by default, and (2) an extra CMake option. For example, for a `Debug` build with `-DENABLE_CONAN=ON`, run +The script accepts two optional arguments: (1) the build type, which is `Release` by default, and (2) an extra CMake option. For example, for a `Debug` build with `-DENABLE_CONAN=ON`, run ./build.sh Debug -DENABLE_CONAN=ON @@ -85,7 +82,7 @@ The script accepts two optional arguments: (1) the build type, which is `Release 2. Run `runweb.bat` (Windows) or `./runweb.sh` (Linux/macOS) for setting up a local web server. 3. Open . -* * * +*** ## Docker setup @@ -109,7 +106,7 @@ ABCg can be built in a [Docker](https://www.docker.com/) container. The Dockerfi On NVIDIA GPUs, install the [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-docker) to allow the container to use the host's NVIDIA driver and X server. Expose the X server with `sudo xhost +local:root` before starting the container. -* * * +*** ## License diff --git a/abcg/CMakeLists.txt b/abcg/CMakeLists.txt index 677a3fcb0..5f1bfb59c 100644 --- a/abcg/CMakeLists.txt +++ b/abcg/CMakeLists.txt @@ -6,7 +6,7 @@ project(abcg) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/") set(ABCG_FILES abcgApplication.cpp abcgTimer.cpp abcgException.cpp - abcgImage.cpp abcgTrackball.cpp abcgWindow.cpp) + abcgImage.cpp abcgTrackball.cpp abcgWindow.cpp abcgUtil.cpp) if(${GRAPHICS_API} MATCHES "OpenGL") set(ABCG_FILES ${ABCG_FILES} abcgOpenGLError.cpp abcgOpenGLFunction.cpp @@ -54,7 +54,7 @@ else() set(IMGUI_BINDINGS_DIR "${CMAKE_SOURCE_DIR}/bindings") set(ABCG_FILES_WITH_IMGUI ${ABCG_FILES} - ${IMGUI_BINDINGS_DIR}/imgui_impl_sdl.cpp) + ${IMGUI_BINDINGS_DIR}/imgui_impl_sdl2.cpp) if(${GRAPHICS_API} MATCHES "OpenGL") set(ABCG_FILES_WITH_IMGUI ${ABCG_FILES_WITH_IMGUI} diff --git a/abcg/abcg.hpp b/abcg/abcg.hpp index 9df8a2732..61a1c1209 100644 --- a/abcg/abcg.hpp +++ b/abcg/abcg.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgApplication.cpp b/abcg/abcgApplication.cpp index f18369d6b..fdd74e738 100644 --- a/abcg/abcgApplication.cpp +++ b/abcg/abcgApplication.cpp @@ -4,14 +4,13 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgApplication.hpp" #include -#include #include @@ -25,6 +24,7 @@ // @cond Skipped by Doxygen #define TINYOBJLOADER_IMPLEMENTATION // @endcond + #include "tiny_obj_loader.h" #if defined(__EMSCRIPTEN__) @@ -99,7 +99,7 @@ void abcg::Application::run(Window &window) { auto done{false}; while (!done) { mainLoopIterator(done); - }; + } #endif m_window->templateDestroy(); @@ -110,6 +110,41 @@ void abcg::Application::run(Window &window) { SDL_Quit(); } +/** + * @brief Returns the path to the application's assets directory, relative to + * the directory the executable is launched from. + * + * @return Path to the application's `assets` directory, relative to the + * location from which the application was launched. For example, the assets + * path will be `./app/assets/` if the application is located in `./app` and + * is launched from its parent directory. The assets path will be `./assets/` + * if the application is launched from the same directory of the executable. + * + * @remark The assets path is appended with the base path and ends with a + * forward slash. + * + * @sa abcg::Application::getBasePath + */ +std::string const &abcg::Application::getAssetsPath() noexcept { + return m_assetsPath; +} + +/** + * @brief Returns the path to the application's directory, relative to the + * directory the executable is launched in. + * + * @return Path to the directory that contains the application executable, + * relative to the directory the executable is launched. For example, the base + * path will be `./app` if the executable is located in `./app` and is called + * from the parent directory. The base path will be `.` if the application is + * launched from the same directory of the executable. + * + * @remark The returned path does not end with a slash. + */ +std::string const &abcg::Application::getBasePath() noexcept { + return m_basePath; +} + void abcg::Application::mainLoopIterator([[maybe_unused]] bool &done) const { SDL_Event event{}; while (SDL_PollEvent(&event) != 0) { diff --git a/abcg/abcgApplication.hpp b/abcg/abcgApplication.hpp index a6a91f567..61862d01a 100644 --- a/abcg/abcgApplication.hpp +++ b/abcg/abcgApplication.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -14,7 +14,7 @@ #include #define ABCG_VERSION_MAJOR 3 -#define ABCG_VERSION_MINOR 0 +#define ABCG_VERSION_MINOR 1 #define ABCG_VERSION_PATCH 0 /** @@ -40,38 +40,8 @@ class abcg::Application { void run(Window &window); - /** - * @brief Returns the path to the application's assets directory, relative to - * the directory the executable is launched from. - * - * @return Path to the application's `assets` directory, relative to the - * location from which the application was launched. For example, the assets - * path will be `./app/assets/` if the application is located in `./app` and - * is launched from its parent directory. The assets path will be `./assets/` - * if the application is launched from the same directory of the executable. - * - * @remark The assets path is appended with the base path and ends with a - * forward slash. - * - * @sa abcg::Application::getBasePath - */ - [[nodiscard]] static std::string const &getAssetsPath() { - return m_assetsPath; - } - - /** - * @brief Returns the path to the application's directory, relative to the - * directory the executable is launched in. - * - * @return Path to the directory that contains the application executable, - * relative to the directory the executable is launched. For example, the base - * path will be `./app` if the executable is located in `./app` and is called - * from the parent directory. The base path will be `.` if the application is - * launched from the same directory of the executable. - * - * @remark The returned path does not end with a slash. - */ - [[nodiscard]] static std::string const &getBasePath() { return m_basePath; } + static std::string const &getAssetsPath() noexcept; + static std::string const &getBasePath() noexcept; private: void mainLoopIterator(bool &done) const; @@ -84,8 +54,8 @@ class abcg::Application { // NOLINTBEGIN(cppcoreguidelines-avoid-non-const-global-variables) // See https://bugs.llvm.org/show_bug.cgi?id=48040 - static inline std::string m_assetsPath{}; - static inline std::string m_basePath{}; + static inline std::string m_assetsPath; + static inline std::string m_basePath; // NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables) }; diff --git a/abcg/abcgException.cpp b/abcg/abcgException.cpp index e2c95ae68..d111c5d8b 100644 --- a/abcg/abcgException.cpp +++ b/abcg/abcgException.cpp @@ -4,16 +4,15 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgException.hpp" +#include "abcgUtil.hpp" #include -#include "abcgExternal.hpp" - /** * @brief Constructs an abcg::Exception object. * @@ -23,6 +22,13 @@ */ abcg::Exception::Exception(std::string_view what) : m_what{what} {} +/** + * @brief Returns the explanatory string. + * + * @return Pointer to a null-terminated string with explanatory information. + */ +char const *abcg::Exception::what() const noexcept { return m_what.data(); }; + #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__) /** * @brief Constructs an abcg::RuntimeError object. diff --git a/abcg/abcgException.hpp b/abcg/abcgException.hpp index 3ba62ea0a..c5d101158 100644 --- a/abcg/abcgException.hpp +++ b/abcg/abcgException.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -39,47 +39,18 @@ class Exception; class RuntimeError; class SDLError; class SDLImageError; - -// @cond Skipped by Doxygen -constexpr inline auto codeBoldRed{"\033[1;31m"}; -constexpr inline auto codeBoldYellow{"\033[1;33m"}; -constexpr inline auto codeBoldBlue{"\033[1;34m"}; -constexpr inline auto codeReset{"\033[0m"}; - -[[maybe_unused]] [[nodiscard]] inline std::string -toRedString(std::string_view str) { - return std::string{codeBoldRed} + str.data() + std::string{codeReset}; -} - -[[maybe_unused]] [[nodiscard]] inline std::string -toYellowString(std::string_view str) { - return std::string{codeBoldYellow} + str.data() + std::string{codeReset}; -} - -[[maybe_unused]] [[nodiscard]] inline std::string -toBlueString(std::string_view str) { - return std::string{codeBoldBlue} + str.data() + std::string{codeReset}; -} -// @endcond } // namespace abcg /** * @brief Base class for ABCg exception objects. * - * This is the base exception class used for exception objects thrown by ABCg. + * Base exception class used for exception objects thrown by ABCg. */ class abcg::Exception : public std::exception { public: explicit Exception(std::string_view what); - /** - * @brief Returns the explanatory string. - * - * @return Pointer to a null-terminated string with explanatory information. - */ - [[nodiscard]] const char *what() const noexcept override { - return m_what.data(); - }; + [[nodiscard]] char const *what() const noexcept override; private: std::string m_what{}; @@ -101,14 +72,14 @@ class abcg::RuntimeError : public abcg::Exception { source_location const &sourceLocation = source_location::current()); private: - [[nodiscard]] static std::string - prettyPrint(std::string_view what, source_location const &sourceLocation); + static std::string prettyPrint(std::string_view what, + source_location const &sourceLocation); #else public: explicit RuntimeError(std::string_view what); private: - [[nodiscard]] static std::string prettyPrint(std::string_view what); + static std::string prettyPrint(std::string_view what); #endif }; @@ -129,14 +100,14 @@ class abcg::SDLError : public abcg::Exception { source_location const &sourceLocation = source_location::current()); private: - [[nodiscard]] static std::string - prettyPrint(std::string_view what, source_location const &sourceLocation); + static std::string prettyPrint(std::string_view what, + source_location const &sourceLocation); #else public: explicit SDLError(std::string_view what); private: - [[nodiscard]] static std::string prettyPrint(std::string_view what); + static std::string prettyPrint(std::string_view what); #endif }; @@ -157,14 +128,14 @@ class abcg::SDLImageError : public abcg::Exception { source_location const &sourceLocation = source_location::current()); private: - [[nodiscard]] static std::string - prettyPrint(std::string_view what, source_location const &sourceLocation); + static std::string prettyPrint(std::string_view what, + source_location const &sourceLocation); #else public: explicit SDLImageError(std::string_view what); private: - [[nodiscard]] static std::string prettyPrint(std::string_view what); + static std::string prettyPrint(std::string_view what); #endif }; diff --git a/abcg/abcgExternal.hpp b/abcg/abcgExternal.hpp index 370f298d0..3b5c2724f 100644 --- a/abcg/abcgExternal.hpp +++ b/abcg/abcgExternal.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgImage.cpp b/abcg/abcgImage.cpp index a9619447c..cc2abbac4 100644 --- a/abcg/abcgImage.cpp +++ b/abcg/abcgImage.cpp @@ -1,20 +1,18 @@ /** * @file abcgImage.cpp - * @brief Definition of texture loading helper functions. + * @brief Definition of image manipulation helper functions. * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgImage.hpp" -#include #include #include -#include #include #include @@ -23,20 +21,19 @@ * * Reverses each row of the image, in place. * - * @param surface Pointer to the SDL surface of a RGB or RGBA image. + * @param surface SDL surface of a RGB or RGBA image. */ -void abcg::flipHorizontally(gsl::not_null const surface) { - auto const bytesPerPixel{gsl::narrow(surface->format->BytesPerPixel)}; - auto const widthInBytes{gsl::narrow(surface->w * bytesPerPixel)}; - auto const height{gsl::narrow(surface->h)}; - std::span const pixels{static_cast(surface->pixels), +void abcg::flipHorizontally(SDL_Surface &surface) { + auto const bytesPerPixel{gsl::narrow(surface.format->BytesPerPixel)}; + auto const widthInBytes{gsl::narrow(surface.w * bytesPerPixel)}; + auto const height{gsl::narrow(surface.h)}; + std::span const pixels{static_cast(surface.pixels), widthInBytes * height}; - // Row of pixels for the swap - std::vector pixelRow(gsl::narrow(widthInBytes), - std::byte{}); + // Temporary row of pixels for the swap + std::vector pixelRow(gsl::narrow(widthInBytes), {}); - SDL_LockSurface(surface); + SDL_LockSurface(&surface); // For each row for (auto const rowIndex : iter::range(height)) { @@ -45,17 +42,18 @@ void abcg::flipHorizontally(gsl::not_null const surface) { // For each pixel (RGB/RGA) of current row auto srcBegin{pixels.begin() + gsl::narrow(rowEnd)}; auto dstBegin{pixelRow.begin()}; - for ([[maybe_unused]] auto const pixelIndex : iter::range(surface->w)) { + for ([[maybe_unused]] auto const pixelIndex : iter::range(surface.w)) { srcBegin -= bytesPerPixel; std::copy(srcBegin, srcBegin + bytesPerPixel, dstBegin); dstBegin += bytesPerPixel; } + // std::ranges::copy(pixelRow, pixels.subspan(rowStart).begin()); std::copy(pixelRow.begin(), pixelRow.begin() + gsl::narrow(widthInBytes), pixels.subspan(rowStart).begin()); } - SDL_UnlockSurface(surface); + SDL_UnlockSurface(&surface); } /** @@ -63,21 +61,21 @@ void abcg::flipHorizontally(gsl::not_null const surface) { * * Reverses each column of the image, in place. * - * @param surface Pointer to the SDL surface of a RGB or RGBA image. + * @param surface SDL surface of a RGB or RGBA image. */ -void abcg::flipVertically(gsl::not_null const surface) { - auto const bytesPerPixel{gsl::narrow(surface->format->BytesPerPixel)}; - auto const widthInBytes{gsl::narrow(surface->w * bytesPerPixel)}; - auto const height{gsl::narrow(surface->h)}; - std::span const pixels{static_cast(surface->pixels), +void abcg::flipVertically(SDL_Surface &surface) { + auto const bytesPerPixel{gsl::narrow(surface.format->BytesPerPixel)}; + auto const widthInBytes{gsl::narrow(surface.w * bytesPerPixel)}; + auto const height{gsl::narrow(surface.h)}; + std::span const pixels{static_cast(surface.pixels), gsl::narrow(widthInBytes * height)}; - // Row of pixels for the swap + // Temporary row of pixels for the swap std::vector pixelRow(widthInBytes, std::byte{}); - SDL_LockSurface(surface); + SDL_LockSurface(&surface); - // If height is odd, it doesn't need to swap the middle row + // If height is odd, won't swap the middle row for (auto const halfHeight{height / 2}; auto const rowIndex : iter::range(halfHeight)) { auto const rowStartFromTop{widthInBytes * rowIndex}; @@ -86,6 +84,9 @@ void abcg::flipVertically(gsl::not_null const surface) { auto const &topSpan{pixels.subspan(rowStartFromTop)}; auto const &bottomSpan{pixels.subspan(rowStartFromBottom)}; + // std::ranges::copy(topSpan.subspan(0, widthInBytes), pixelRow.begin()); + // std::ranges::copy(bottomSpan.subspan(0, widthInBytes), topSpan.begin()); + // std::ranges::copy(pixelRow, bottomSpan.begin()); std::copy(topSpan.begin(), topSpan.begin() + gsl::narrow(widthInBytes), pixelRow.begin()); @@ -97,5 +98,5 @@ void abcg::flipVertically(gsl::not_null const surface) { bottomSpan.begin()); } - SDL_UnlockSurface(surface); + SDL_UnlockSurface(&surface); } \ No newline at end of file diff --git a/abcg/abcgImage.hpp b/abcg/abcgImage.hpp index 0053d85f3..190a3eddf 100644 --- a/abcg/abcgImage.hpp +++ b/abcg/abcgImage.hpp @@ -1,10 +1,10 @@ /** * @file abcgImage.hpp - * @brief Declaration of texture loading helper functions. + * @brief Declaration of image manipulation helper functions. * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -12,11 +12,10 @@ #define ABCG_IMAGE_HPP_ #include -#include namespace abcg { -void flipHorizontally(gsl::not_null surface); -void flipVertically(gsl::not_null surface); +void flipHorizontally(SDL_Surface &surface); +void flipVertically(SDL_Surface &surface); } // namespace abcg #endif diff --git a/abcg/abcgOpenGL.hpp b/abcg/abcgOpenGL.hpp index ed6b1653f..439219e89 100644 --- a/abcg/abcgOpenGL.hpp +++ b/abcg/abcgOpenGL.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgOpenGLError.cpp b/abcg/abcgOpenGLError.cpp index 4d6a7c7e5..bb2f5895e 100644 --- a/abcg/abcgOpenGLError.cpp +++ b/abcg/abcgOpenGLError.cpp @@ -4,13 +4,14 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgOpenGLError.hpp" #include "abcgExternal.hpp" #include "abcgOpenGLExternal.hpp" +#include "abcgUtil.hpp" #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__) /** @@ -35,12 +36,14 @@ abcg::OpenGLError::prettyPrint(std::string_view what, unsigned int errorCode, if (SDL_GL_GetCurrentContext() == nullptr) { errorMessage += " (invalid OpenGL context)"; } else { - do { - errorMessage += " ("; - errorMessage += getGLErrorString(errorCode).data(); - errorMessage += ")"; - // Clear remaining errors - } while (glGetError() != GL_NO_ERROR); + auto appendGLErrorString{[&errorMessage, &errorCode]() { + errorMessage += fmt::format(" ({})", getGLErrorString(errorCode).data()); + }}; + appendGLErrorString(); + // Clear remaining errors + while (glGetError() != GL_NO_ERROR) { + appendGLErrorString(); + } } return errorMessage + " in " + sourceLocation.file_name() + ":" + std::to_string(sourceLocation.line()) + ", " + @@ -56,12 +59,14 @@ std::string abcg::OpenGLError::prettyPrint(std::string_view what, if (SDL_GL_GetCurrentContext() == nullptr) { errorMessage += " (invalid OpenGL context)"; } else { - do { - errorMessage += " ("; - errorMessage += getGLErrorString(errorCode).data(); - errorMessage += ")"; - // Clear remaining error flags - } while (glGetError() != GL_NO_ERROR); + auto appendGLErrorString{[&errorMessage, &errorCode]() { + errorMessage += fmt::format(" ({})", getGLErrorString(errorCode).data()); + }}; + appendGLErrorString(); + // Clear remaining errors + while (glGetError() != GL_NO_ERROR) { + appendGLErrorString(); + } } return errorMessage; } diff --git a/abcg/abcgOpenGLError.hpp b/abcg/abcgOpenGLError.hpp index 97f99481b..7fa0105ff 100644 --- a/abcg/abcgOpenGLError.hpp +++ b/abcg/abcgOpenGLError.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -50,20 +50,17 @@ class abcg::OpenGLError : public abcg::Exception { source_location const &sourceLocation = source_location::current()); private: - [[nodiscard]] static std::string - prettyPrint(std::string_view what, unsigned int errorCode, - source_location const &sourceLocation); + static std::string prettyPrint(std::string_view what, unsigned int errorCode, + source_location const &sourceLocation); #else public: explicit OpenGLError(std::string_view what, unsigned int errorCode); private: - [[nodiscard]] static std::string prettyPrint(std::string_view what, - unsigned int errorCode); + static std::string prettyPrint(std::string_view what, unsigned int errorCode); #endif - [[nodiscard]] static std::string_view - getGLErrorString(unsigned int errorCode); + static std::string_view getGLErrorString(unsigned int errorCode); }; #endif diff --git a/abcg/abcgOpenGLExternal.hpp b/abcg/abcgOpenGLExternal.hpp index 39952f9e0..78d67e940 100644 --- a/abcg/abcgOpenGLExternal.hpp +++ b/abcg/abcgOpenGLExternal.hpp @@ -7,7 +7,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgOpenGLFunction.cpp b/abcg/abcgOpenGLFunction.cpp index 64f6e9fe7..4f51a980a 100644 --- a/abcg/abcgOpenGLFunction.cpp +++ b/abcg/abcgOpenGLFunction.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgOpenGLFunction.hpp b/abcg/abcgOpenGLFunction.hpp index 909304e9e..ce566d657 100644 --- a/abcg/abcgOpenGLFunction.hpp +++ b/abcg/abcgOpenGLFunction.hpp @@ -7,7 +7,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgOpenGLImage.cpp b/abcg/abcgOpenGLImage.cpp index 4d49f305f..6c4608005 100644 --- a/abcg/abcgOpenGLImage.cpp +++ b/abcg/abcgOpenGLImage.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -13,12 +13,20 @@ #include #include -#include #include -#include #include "abcgException.hpp" +/** + * @brief Creates an OpenGL 2D texture from an image loaded from a filesystem + * path. + * + * @param createInfo Texture creation settings. + * + * @throw abcg::RuntimeError if the image could not be loaded. + * + * @return ID of the texture, as generated by glGenTextures. + */ GLuint abcg::loadOpenGLTexture(OpenGLTextureCreateInfo const &createInfo) { GLuint textureID{}; @@ -42,7 +50,7 @@ GLuint abcg::loadOpenGLTexture(OpenGLTextureCreateInfo const &createInfo) { // Flip upside down if (createInfo.flipUpsideDown) { - flipVertically(formattedSurface); + flipVertically(*formattedSurface); } // Generate the texture @@ -80,6 +88,16 @@ GLuint abcg::loadOpenGLTexture(OpenGLTextureCreateInfo const &createInfo) { return textureID; } +/** + * @brief Creates an OpenGL cubemap texture from a set of images loaded from + * filesystem paths. + * + * @param createInfo Texture creation settings. + * + * @throw abcg::RuntimeError if any image could not be loaded. + * + * @return ID of the texture, as generated by glGenTextures. + */ GLuint abcg::loadOpenGLCubemap(OpenGLCubemapCreateInfo const &createInfo) { GLuint textureID{}; glGenTextures(1, &textureID); @@ -100,9 +118,9 @@ GLuint abcg::loadOpenGLCubemap(OpenGLCubemapCreateInfo const &createInfo) { if (target == GL_TEXTURE_CUBE_MAP_POSITIVE_Y || target == GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) { // Flip upside down - flipVertically(formattedSurface); + flipVertically(*formattedSurface); } else { - flipHorizontally(formattedSurface); + flipHorizontally(*formattedSurface); } // Swap -z and +z diff --git a/abcg/abcgOpenGLImage.hpp b/abcg/abcgOpenGLImage.hpp index b75f29228..6403c9a07 100644 --- a/abcg/abcgOpenGLImage.hpp +++ b/abcg/abcgOpenGLImage.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -27,10 +27,10 @@ loadOpenGLCubemap(OpenGLCubemapCreateInfo const &createInfo); } // namespace abcg /** - * @brief Configuration settings for creating an OpenGL 2D texture. + * @brief Configuration settings for creating a 2D texture for OpenGL. */ struct abcg::OpenGLTextureCreateInfo { - /** @brief Path to the texture file. */ + /** @brief Path to the image file (PNG or JPEG). */ std::string_view path{}; /** @brief Whether to generate mipmap levels. */ bool generateMipmaps{true}; @@ -42,11 +42,11 @@ struct abcg::OpenGLTextureCreateInfo { }; /** - * @brief Configuration settings for creating an OpenGL 2D texture. + * @brief Configuration settings for creating a cubemap texture for OpenGL. */ struct abcg::OpenGLCubemapCreateInfo { - /** @brief Array of paths to the texture files containing the sides of the - * cube map, given in the order +x, -y, +y, -y, +z, -z. */ + /** @brief Array of paths to the image files (PNG or JPEG) containing the + * sides of the cube map, given in the order +x, -y, +y, -y, +z, -z. */ std::array paths{}; /** @brief Whether to generate mipmap levels. */ bool generateMipmaps{true}; diff --git a/abcg/abcgOpenGLShader.cpp b/abcg/abcgOpenGLShader.cpp index 79a16e523..569644515 100644 --- a/abcg/abcgOpenGLShader.cpp +++ b/abcg/abcgOpenGLShader.cpp @@ -4,12 +4,11 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgOpenGLShader.hpp" -#include "abcgApplication.hpp" #include #include @@ -17,13 +16,13 @@ #include #include -#include #include #include #include "abcgException.hpp" -static void printShaderInfoLog(GLuint const shader, std::string_view prefix) { +namespace { +void printShaderInfoLog(GLuint const shader, std::string_view prefix) { GLint infoLogLength{}; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength); @@ -36,7 +35,7 @@ static void printShaderInfoLog(GLuint const shader, std::string_view prefix) { } } -static void printProgramInfoLog(GLuint const program) { +void printProgramInfoLog(GLuint const program) { GLint infoLogLength{}; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLogLength); @@ -48,7 +47,7 @@ static void printProgramInfoLog(GLuint const program) { } } -[[nodiscard]] static char const *shaderStageToText(GLuint stage) { +[[nodiscard]] char const *shaderStageToText(GLuint stage) { switch (stage) { case GL_VERTEX_SHADER: return "vertex"; @@ -75,11 +74,11 @@ static void printProgramInfoLog(GLuint const program) { default: return "unknown"; } -}; +} // If filenameOrText is a filename, returns the contents of the file (assumed // to be in text format). Otherwise, returns filenameOrText. -[[nodiscard]] static std::string toSource(std::string_view filenameOrText) { +[[nodiscard]] std::string toSource(std::string_view filenameOrText) { static const std::size_t maxPathSize{260}; if (filenameOrText.size() > maxPathSize || !std::filesystem::exists(filenameOrText)) { @@ -98,8 +97,8 @@ static void printProgramInfoLog(GLuint const program) { // Compiles a shader and returns immediately (i.e. don't wait until completion). // Returns the shader ID of the compiled shader. -[[nodiscard]] static abcg::OpenGLShader -compileHelper(std::string_view shaderSource, GLuint shaderStage) { +[[nodiscard]] abcg::OpenGLShader compileHelper(std::string_view shaderSource, + GLuint shaderStage) { auto shaderID{glCreateShader(shaderStage)}; auto const *source{shaderSource.data()}; glShaderSource(shaderID, 1, &source, nullptr); @@ -108,7 +107,7 @@ compileHelper(std::string_view shaderSource, GLuint shaderStage) { } // Deletes the OpenGL shader objects in `shaderIDs` -static void deleteShaders(std::vector const &shaderIDs) { +void deleteShaders(std::vector const &shaderIDs) { for (auto const &shaderID : shaderIDs) { glDeleteShader(shaderID.shader); } @@ -142,6 +141,7 @@ static void deleteShaders(std::vector const &shaderIDs) { throw abcg::RuntimeError("Unknown shader stage"); } } +} // namespace /** * @brief Creates a program object from a group of shader paths or source codes. diff --git a/abcg/abcgOpenGLShader.hpp b/abcg/abcgOpenGLShader.hpp index 7c0c1698a..9c3143899 100644 --- a/abcg/abcgOpenGLShader.hpp +++ b/abcg/abcgOpenGLShader.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -36,14 +36,11 @@ createOpenGLProgram(std::vector const &pathsOrSources, bool throwOnError = true); [[nodiscard]] std::vector triggerOpenGLShaderCompile(std::vector const &pathsOrSources); -[[nodiscard]] bool -checkOpenGLShaderCompile(std::vector const &shaders, - bool throwOnError = true); -[[nodiscard]] GLuint -triggerOpenGLShaderLink(std::vector const &shaders, - bool throwOnError = true); -[[nodiscard]] bool checkOpenGLShaderLink(GLuint shaderProgram, - bool throwOnError = true); +bool checkOpenGLShaderCompile(std::vector const &shaders, + bool throwOnError = true); +GLuint triggerOpenGLShaderLink(std::vector const &shaders, + bool throwOnError = true); +bool checkOpenGLShaderLink(GLuint shaderProgram, bool throwOnError = true); } // namespace abcg #endif diff --git a/abcg/abcgOpenGLWindow.cpp b/abcg/abcgOpenGLWindow.cpp index ea6bb4df1..7d0fe23e5 100644 --- a/abcg/abcgOpenGLWindow.cpp +++ b/abcg/abcgOpenGLWindow.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include "abcgEmbeddedFonts.hpp" #include "abcgException.hpp" @@ -126,8 +126,8 @@ void abcg::OpenGLWindow::onPaint() { * This is not called when the window is minimized. * * Override it for custom behavior. By default, it shows a FPS counter if - * abcg::WindowSettings::showFPS is set to `true`, and a toggle fullscren button - * if abcg::WindowSettings::showFullscreenButton is set to `true`. + * abcg::WindowSettings::showFPS is set to `true`, and a toggle fullscreen + * button if abcg::WindowSettings::showFullscreenButton is set to `true`. */ void abcg::OpenGLWindow::onPaintUI() { // FPS counter @@ -344,7 +344,7 @@ void abcg::OpenGLWindow::create() { } else { break; } - }; + } if (abcg::Window::getSDLWindow() == nullptr) { throw abcg::SDLError("SDL_CreateWindow failed"); @@ -362,26 +362,32 @@ void abcg::OpenGLWindow::create() { #if !defined(__EMSCRIPTEN__) if (auto const err{glewInit()}; GLEW_OK != err) { - throw abcg::Exception{fmt::format("Failed to initialize OpenGL loader: {}", - glewGetErrorString(err))}; + throw abcg::Exception{ + fmt::format("Failed to initialize OpenGL loader: {}", + reinterpret_cast(glewGetErrorString(err)))}; } - fmt::print("Using GLEW.....: {}\n", glewGetString(GLEW_VERSION)); + fmt::print("Using GLEW.....: {}\n", + reinterpret_cast(glewGetString(GLEW_VERSION))); #endif - fmt::print("OpenGL vendor..: {}\n", glGetString(GL_VENDOR)); - fmt::print("OpenGL renderer: {}\n", glGetString(GL_RENDERER)); - fmt::print("OpenGL version.: {}\n", glGetString(GL_VERSION)); - fmt::print("GLSL version...: {}\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); + fmt::print("OpenGL vendor..: {}\n", + reinterpret_cast(glGetString(GL_VENDOR))); + fmt::print("OpenGL renderer: {}\n", + reinterpret_cast(glGetString(GL_RENDERER))); + fmt::print("OpenGL version.: {}\n", + reinterpret_cast(glGetString(GL_VERSION))); + fmt::print( + "GLSL version...: {}\n", + reinterpret_cast(glGetString(GL_SHADING_LANGUAGE_VERSION))); - /* // Print out extensions - GLint numExtensions{}; - glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); - for (std::size_t posStart{}; auto const index : iter::range(numExtensions)) { - fmt::print("GL extension {}: {}\n", index, - glGetStringi(GL_EXTENSIONS, index)); - } - */ + // GLint numExtensions{}; + // glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions); + // for (auto const index : iter::range(gsl::narrow(numExtensions))) { + // fmt::print( + // "GL extension {}: {}\n", index, + // reinterpret_cast(glGetStringi(GL_EXTENSIONS, index))); + // } // Setup Dear ImGui context IMGUI_CHECKVERSION(); diff --git a/abcg/abcgOpenGLWindow.hpp b/abcg/abcgOpenGLWindow.hpp index c5c7c0ae9..41ad9c528 100644 --- a/abcg/abcgOpenGLWindow.hpp +++ b/abcg/abcgOpenGLWindow.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgShader.hpp b/abcg/abcgShader.hpp index 18fbdfb6c..a3620b288 100644 --- a/abcg/abcgShader.hpp +++ b/abcg/abcgShader.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -17,7 +17,7 @@ namespace abcg { struct ShaderSource; enum class ShaderStage; -}; // namespace abcg +} // namespace abcg /** * @brief Enumeration of shader stages. diff --git a/abcg/abcgTimer.cpp b/abcg/abcgTimer.cpp index ef424d1a9..0cfdd6a2f 100644 --- a/abcg/abcgTimer.cpp +++ b/abcg/abcgTimer.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgTimer.hpp b/abcg/abcgTimer.hpp index ea1df19d5..cbc8dc80b 100644 --- a/abcg/abcgTimer.hpp +++ b/abcg/abcgTimer.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgTrackball.cpp b/abcg/abcgTrackball.cpp index b5f2171cd..44f2e0370 100644 --- a/abcg/abcgTrackball.cpp +++ b/abcg/abcgTrackball.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -105,6 +105,26 @@ glm::quat abcg::TrackBall::getRotation() const { return glm::angleAxis(angle, m_axis) * m_rotation; } +/** + * @brief Sets the trackball's axis of rotation. + * + * @param axis Axis of rotation. + * + * The axis is expected to be a normalized vector. + */ +void abcg::TrackBall::setAxis(glm::vec3 axis) noexcept { m_axis = axis; } + +/** + * @brief Sets the trackball's rotation velocity. + * + * @param velocity Velocity in radians per second. + * + * The velocity is not bound checked. + */ +void abcg::TrackBall::setVelocity(float velocity) noexcept { + m_velocity = velocity; +} + glm::vec3 abcg::TrackBall::project(const glm::vec2 &position) const { // Convert from window coordinates to NDC auto projected{glm::vec3( diff --git a/abcg/abcgTrackball.hpp b/abcg/abcgTrackball.hpp index 0ecdbdb60..5a4d51281 100644 --- a/abcg/abcgTrackball.hpp +++ b/abcg/abcgTrackball.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -33,23 +33,8 @@ class abcg::TrackBall { [[nodiscard]] glm::quat getRotation() const; - /** - * @brief Sets the trackball's axis of rotation. - * - * @param axis Axis of rotation. - * - * The axis is expected to be a normalized vector. - */ - void setAxis(glm::vec3 const axis) noexcept { m_axis = axis; } - - /** - * @brief Sets the trackball's rotation velocity. - * - * @param velocity Velocity in radians per second. - * - * The velocity is not bound checked. - */ - void setVelocity(float const velocity) noexcept { m_velocity = velocity; } + void setAxis(glm::vec3 axis) noexcept; + void setVelocity(float velocity) noexcept; private: constexpr static float m_maxVelocity{glm::radians(720.0f / 1000.0f)}; diff --git a/abcg/abcgUtil.cpp b/abcg/abcgUtil.cpp new file mode 100644 index 000000000..b0fd9bea0 --- /dev/null +++ b/abcg/abcgUtil.cpp @@ -0,0 +1,57 @@ +/** + * @file abcgUtil.cpp + * @brief General utility functions. + * + * This file is part of ABCg (https://github.com/hbatagelo/abcg). + * + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. + * This project is released under the MIT License. + */ + +#include "abcgUtil.hpp" + +namespace { +auto const codeBoldRed{"\033[1;31m"}; +auto const codeBoldYellow{"\033[1;33m"}; +auto const codeBoldBlue{"\033[1;34m"}; +auto const codeReset{"\033[0m"}; +} // namespace + +/** + * @brief Creates a string prefixed with the ANSI color code that corresponds to + * foreground bold red. + * + * The reset color code is appended to the end of the string. + * + * @param str View of the input string. + * @return New string surrounded by the color and reset codes. + */ +std::string abcg::toRedString(std::string_view str) { + return std::string{codeBoldRed} + str.data() + std::string{codeReset}; +} + +/** + * @brief Creates a string prefixed with the ANSI color code that corresponds to + * foreground bold yellow. + * + * The reset color code is appended to the end of the string. + * + * @param str View of the input string. + * @return New string surrounded by the color and reset codes. + */ +std::string abcg::toYellowString(std::string_view str) { + return std::string{codeBoldYellow} + str.data() + std::string{codeReset}; +} + +/** + * @brief Creates a string prefixed with the ANSI color code that corresponds to + * foreground bold blue. + * + * The reset color code is appended to the end of the string. + * + * @param str View of the input string. + * @return New string surrounded by the color and reset codes. + */ +std::string abcg::toBlueString(std::string_view str) { + return std::string{codeBoldBlue} + str.data() + std::string{codeReset}; +} \ No newline at end of file diff --git a/abcg/abcgUtil.hpp b/abcg/abcgUtil.hpp index 3fdc465dd..d07e39d52 100644 --- a/abcg/abcgUtil.hpp +++ b/abcg/abcgUtil.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -12,6 +12,7 @@ #define ABCG_UTIL_HPP_ #include +#include namespace abcg { @@ -68,6 +69,10 @@ std::size_t hashCombine(const TFirst &value, const TRest &...rest) { return seed; } +std::string toRedString(std::string_view str); +std::string toYellowString(std::string_view str); +std::string toBlueString(std::string_view str); + } // namespace abcg #endif \ No newline at end of file diff --git a/abcg/abcgVulkan.hpp b/abcg/abcgVulkan.hpp index a394ab63e..c4c155a05 100644 --- a/abcg/abcgVulkan.hpp +++ b/abcg/abcgVulkan.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgVulkanBuffer.cpp b/abcg/abcgVulkanBuffer.cpp index 067c21ae5..0aea0302b 100644 --- a/abcg/abcgVulkanBuffer.cpp +++ b/abcg/abcgVulkanBuffer.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -28,14 +28,14 @@ void abcg::VulkanBuffer::create(VulkanDevice const &device, loadData(createInfo.data.value(), createInfo.size); } } else if (createInfo.data.has_value()) { - // Use a staging buffer for mapping, and a device local buffer as final + // Use a staging buffer for mapping, and a device local buffer as the final // destination auto [stagingBuffer, stagingBufferMemory]{createBuffer( device, createInfo.size, vk::BufferUsageFlagBits::eTransferSrc, vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent)}; - // Copy data to mapped stagging buffer + // Copy data to mapped staging buffer // Transfer of data to the GPU will happen in the background before the next // call to vkQueueSubmit void *data{m_device.mapMemory(stagingBufferMemory, vk::DeviceSize{0}, @@ -51,7 +51,7 @@ void abcg::VulkanBuffer::create(VulkanDevice const &device, // Copy from staging buffer to device local buffer device.withCommandBuffer( - [&](const auto &commandBuffer) { + [this, &stagingBuffer, &createInfo](const auto &commandBuffer) { commandBuffer.copyBuffer(stagingBuffer, m_buffer, {{.size = createInfo.size}}); }, @@ -128,4 +128,21 @@ std::pair abcg::VulkanBuffer::createBuffer( m_device.bindBufferMemory(buffer, bufferMemory, 0); return {buffer, bufferMemory}; +} + +/** + * @brief Conversion to vk::Buffer. + */ +abcg::VulkanBuffer::operator vk::Buffer const &() const noexcept { + return m_buffer; +} + +/** + * @brief Returns the opaque handle to the device memory object associated + * with the buffer. + * + * @return Device memory object. + */ +vk::DeviceMemory const &abcg::VulkanBuffer::getDeviceMemory() const noexcept { + return m_deviceMemory; } \ No newline at end of file diff --git a/abcg/abcgVulkanBuffer.hpp b/abcg/abcgVulkanBuffer.hpp index f2285c6f0..45cf6f2a7 100644 --- a/abcg/abcgVulkanBuffer.hpp +++ b/abcg/abcgVulkanBuffer.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -46,20 +46,9 @@ class abcg::VulkanBuffer { void loadData(gsl::not_null data, vk::DeviceSize size, vk::DeviceSize offset = 0UL); - /** - * @brief Conversion to vk::Buffer. - */ - explicit operator vk::Buffer const &() const noexcept { return m_buffer; } + explicit operator vk::Buffer const &() const noexcept; - /** - * @brief Returns the opaque handle to the device memory object associated - * with the buffer. - * - * @return Device memory object. - */ - [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept { - return m_deviceMemory; - } + [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept; private: [[nodiscard]] std::pair @@ -67,9 +56,9 @@ class abcg::VulkanBuffer { vk::BufferUsageFlags usage, vk::MemoryPropertyFlags properties) const; - vk::Buffer m_buffer{}; - vk::DeviceMemory m_deviceMemory{}; - vk::Device m_device{}; + vk::Buffer m_buffer; + vk::DeviceMemory m_deviceMemory; + vk::Device m_device; }; #endif \ No newline at end of file diff --git a/abcg/abcgVulkanDevice.cpp b/abcg/abcgVulkanDevice.cpp index 3d9106065..8e78a633f 100644 --- a/abcg/abcgVulkanDevice.cpp +++ b/abcg/abcgVulkanDevice.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -14,15 +14,14 @@ #include -#include "abcgException.hpp" - void abcg::VulkanDevice::create(VulkanPhysicalDevice const &physicalDevice, std::vector const &extensions) { m_physicalDevice = physicalDevice; auto const &queuesFamilies{m_physicalDevice.getQueuesFamilies()}; + auto const graphicsQueueFamily{queuesFamilies.graphics.value_or(0)}; + auto const presentQueueFamily{queuesFamilies.present.value_or(0)}; - std::set uniqueQueueFamilies{queuesFamilies.graphics.value(), - queuesFamilies.present.value()}; + std::set uniqueQueueFamilies{graphicsQueueFamily, presentQueueFamily}; if (queuesFamilies.compute.has_value()) { uniqueQueueFamilies.insert(queuesFamilies.compute.value()); } @@ -53,11 +52,11 @@ void abcg::VulkanDevice::create(VulkanPhysicalDevice const &physicalDevice, .ppEnabledExtensionNames = extensions.data(), .pEnabledFeatures = &deviceFeatures}); - // Load device-related entrypoints directly from the driver + // Load device-related entry points directly from the driver volkLoadDevice(m_device); - m_queues.graphics = m_device.getQueue(queuesFamilies.graphics.value(), 0); - m_queues.present = m_device.getQueue(queuesFamilies.present.value(), 0); + m_queues.graphics = m_device.getQueue(graphicsQueueFamily, 0); + m_queues.present = m_device.getQueue(presentQueueFamily, 0); if (queuesFamilies.compute.has_value()) { m_queues.compute = m_device.getQueue(queuesFamilies.compute.value(), 0); @@ -74,6 +73,42 @@ void abcg::VulkanDevice::destroy() { m_device.destroy(); } +/** + * @brief Conversion to vk::Device. + */ +abcg::VulkanDevice::operator vk::Device const &() const noexcept { + return m_device; +} + +/** + * @brief Access to abcg::VulkanPhysicalDevice. + * + * @return Instance of vulkan physical device associated with this device. + */ +abcg::VulkanPhysicalDevice const & +abcg::VulkanDevice::getPhysicalDevice() const noexcept { + return m_physicalDevice; +} + +/** + * @brief Returns the queues associated with this device. + * + * @return Queues structure. + */ +abcg::VulkanQueues const &abcg::VulkanDevice::getQueues() const noexcept { + return m_queues; +} + +/** + * @brief Returns the command pools associated with this device. + * + * @return Command pools structure. + */ +abcg::VulkanCommandPools const & +abcg::VulkanDevice::getCommandPools() const noexcept { + return m_commandPools; +} + /** * @brief Allocates and creates a command buffer to be immediately submitted and * released. @@ -133,14 +168,15 @@ void abcg::VulkanDevice::withCommandBuffer( void abcg::VulkanDevice::createCommandPools() { auto const &queuesFamilies{m_physicalDevice.getQueuesFamilies()}; + auto const graphicsQueueFamily{queuesFamilies.graphics.value_or(0)}; // Always create a command pool for the graphics queue m_commandPools.graphics = m_device.createCommandPool( {.flags = vk::CommandPoolCreateFlagBits::eTransient, - .queueFamilyIndex = queuesFamilies.graphics.value()}); + .queueFamilyIndex = graphicsQueueFamily}); if (queuesFamilies.compute.has_value()) { - if (queuesFamilies.compute.value() == queuesFamilies.graphics.value()) { + if (queuesFamilies.compute.value() == graphicsQueueFamily) { // Reuse command pool from graphics queue m_commandPools.compute = m_commandPools.graphics; } else { @@ -153,7 +189,7 @@ void abcg::VulkanDevice::createCommandPools() { } if (queuesFamilies.transfer.has_value()) { - if (queuesFamilies.transfer.value() == queuesFamilies.graphics.value()) { + if (queuesFamilies.transfer.value() == graphicsQueueFamily) { // Reuse command pool from graphics queue m_commandPools.transfer = m_commandPools.graphics; } else { diff --git a/abcg/abcgVulkanDevice.hpp b/abcg/abcgVulkanDevice.hpp index ea5bfe3fb..c0b0053a7 100644 --- a/abcg/abcgVulkanDevice.hpp +++ b/abcg/abcgVulkanDevice.hpp @@ -6,16 +6,17 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #ifndef ABCG_VULKAN_DEVICE_HPP_ #define ABCG_VULKAN_DEVICE_HPP_ -#include "abcgVulkanExternal.hpp" #include "abcgVulkanPhysicalDevice.hpp" +#include + namespace abcg { struct VulkanCommandPools; struct VulkanQueues; @@ -29,19 +30,19 @@ class VulkanWindow; * @brief Command pools associated with a Vulkan device. */ struct abcg::VulkanCommandPools { - vk::CommandPool compute{}; - vk::CommandPool graphics{}; - vk::CommandPool transfer{}; + vk::CommandPool compute; + vk::CommandPool graphics; + vk::CommandPool transfer; }; /** * @brief Queues associated with a Vulkan device. */ struct abcg::VulkanQueues { - vk::Queue compute{}; - vk::Queue graphics{}; - vk::Queue present{}; - vk::Queue transfer{}; + vk::Queue compute; + vk::Queue graphics; + vk::Queue present; + vk::Queue transfer; }; /** @@ -57,37 +58,11 @@ class abcg::VulkanDevice { std::vector const &extensions = {}); void destroy(); - /** - * @brief Conversion to vk::Device. - */ - explicit operator vk::Device const &() const noexcept { return m_device; } - - /** - * @brief Access to abcg::VulkanPhysicalDevice. - * - * @return Instance of vulkan physical device associated with this device. - */ - [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept { - return m_physicalDevice; - } - - /** - * @brief Returns the queues associated with this device. - * - * @return Queues structure. - */ - [[nodiscard]] VulkanQueues const &getQueues() const noexcept { - return m_queues; - } + explicit operator vk::Device const &() const noexcept; - /** - * @brief Returns the command pools associated with this device. - * - * @return Command pools structure. - */ - [[nodiscard]] VulkanCommandPools const &getCommandPools() const noexcept { - return m_commandPools; - } + [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept; + [[nodiscard]] VulkanQueues const &getQueues() const noexcept; + [[nodiscard]] VulkanCommandPools const &getCommandPools() const noexcept; void withCommandBuffer( std::function const &fun, @@ -98,10 +73,10 @@ class abcg::VulkanDevice { void createCommandPools(); void destroyCommandPools(); - vk::Device m_device{}; - VulkanPhysicalDevice m_physicalDevice{}; - VulkanCommandPools m_commandPools{}; - VulkanQueues m_queues{}; + vk::Device m_device; + VulkanPhysicalDevice m_physicalDevice; + VulkanCommandPools m_commandPools; + VulkanQueues m_queues; }; #endif \ No newline at end of file diff --git a/abcg/abcgVulkanError.cpp b/abcg/abcgVulkanError.cpp index b205fbae1..9ca88af52 100644 --- a/abcg/abcgVulkanError.cpp +++ b/abcg/abcgVulkanError.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -69,7 +69,7 @@ void abcg::checkVkResult(VkResult retCode, "compilation to not be performed"; break; default: - result = fmt::format("Unknown success code {}", retCode); + result = fmt::format("Unknown success code {}", static_cast(retCode)); break; } @@ -94,7 +94,7 @@ abcg::VulkanError::prettyPrint(VkResult errorCode, source_location const &sourceLocation) { auto errorMessage{toRedString("Vulkan error ")}; errorMessage += " ("; - errorMessage += getVulkanErrorString(errorCode).data(); + errorMessage += getVulkanErrorString(errorCode); errorMessage += ")"; return errorMessage + " in " + sourceLocation.file_name() + ":" + std::to_string(sourceLocation.line()) + ", " + @@ -106,12 +106,12 @@ void abcg::checkVkResult([[maybe_unused]] VkResult retCode) {} abcg::VulkanError::VulkanError(VkResult errorCode) : Exception(prettyPrint(errorCode)) {} -abcg::VulkanError::VulkanError(vk::Result errorCode) : Exception("TODO") {} +abcg::VulkanError::VulkanError(vk::Result /*errorCode*/) : Exception("TODO") {} std::string abcg::VulkanError::prettyPrint(VkResult errorCode) { auto errorMessage{toRedString("Vulkan error ")}; errorMessage += " ("; - errorMessage += getVulkanErrorString(errorCode).data(); + errorMessage += getVulkanErrorString(errorCode); errorMessage += ")"; return errorMessage; } @@ -119,7 +119,6 @@ std::string abcg::VulkanError::prettyPrint(VkResult errorCode) { // https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkResult.html) std::string_view abcg::VulkanError::getVulkanErrorString(VkResult errorCode) { - using namespace std::string_literals; std::string_view result; switch (errorCode) { case VK_ERROR_OUT_OF_HOST_MEMORY: @@ -229,7 +228,7 @@ std::string_view abcg::VulkanError::getVulkanErrorString(VkResult errorCode) { result = "VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT: an operation on a " "swapchain created with " "VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT failed as it " - "did not have exlusive full-screen access. This may occur due to " + "did not have exclusive full-screen access. This may occur due to " "implementation-dependent reasons, outside of the application's " "control"; break; @@ -239,7 +238,7 @@ std::string_view abcg::VulkanError::getVulkanErrorString(VkResult errorCode) { "failure has occurred"; break; default: - result = fmt::format("Unknown error code {}", errorCode); + result = fmt::format("Unknown error code {}", static_cast(errorCode)); } return result; } diff --git a/abcg/abcgVulkanError.hpp b/abcg/abcgVulkanError.hpp index 99d735804..2b90cf988 100644 --- a/abcg/abcgVulkanError.hpp +++ b/abcg/abcgVulkanError.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -58,19 +58,18 @@ class abcg::VulkanError : public abcg::Exception { source_location const &sourceLocation = source_location::current()); private: - [[nodiscard]] static std::string - prettyPrint(VkResult errorCode, source_location const &sourceLocation); + static std::string prettyPrint(VkResult errorCode, + source_location const &sourceLocation); #else public: explicit VulkanError(VkResult errorCode); explicit VulkanError(vk::Result errorCode); private: - [[nodiscard]] static std::string prettyPrint(VkResult errorCode); + static std::string prettyPrint(VkResult errorCode); #endif - [[nodiscard]] static std::string_view - getVulkanErrorString(VkResult errorCode); + static std::string_view getVulkanErrorString(VkResult errorCode); }; #endif diff --git a/abcg/abcgVulkanExternal.hpp b/abcg/abcgVulkanExternal.hpp index 0e9c28adf..11cebe267 100644 --- a/abcg/abcgVulkanExternal.hpp +++ b/abcg/abcgVulkanExternal.hpp @@ -7,7 +7,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ diff --git a/abcg/abcgVulkanImage.cpp b/abcg/abcgVulkanImage.cpp index 5963a4ff1..fd97cc102 100644 --- a/abcg/abcgVulkanImage.cpp +++ b/abcg/abcgVulkanImage.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -85,7 +85,8 @@ void abcg::VulkanImage::create(VulkanDevice const &device, // Execute the layout transition device.withCommandBuffer( - [&](vk::CommandBuffer const &commandBuffer) { + [&stagingBuffer, this, + ®ion](vk::CommandBuffer const &commandBuffer) { commandBuffer.copyBufferToImage( static_cast(stagingBuffer), m_image, vk::ImageLayout::eTransferDstOptimal, region); @@ -189,6 +190,57 @@ void abcg::VulkanImage::destroy() { } } +/** + * @brief Conversion to vk::Image. + */ +abcg::VulkanImage::operator vk::Image const &() const noexcept { + return m_image; +} + +/** + * @brief Returns the opaque handle to the device memory object associated + * with this image. + * + * @return Device memory object. + */ +vk::DeviceMemory const &abcg::VulkanImage::getDeviceMemory() const noexcept { + return m_deviceMemory; +} + +/** + * @brief Returns the opaque handle to the image view object associated with + * this image. + * + * @return Image view object. + */ +vk::ImageView const &abcg::VulkanImage::getView() const noexcept { + return m_imageView; +} + +/** + * @brief Returns the descriptor image information associated with this image. + * + * @return Descriptor image information. + */ +vk::DescriptorImageInfo const & +abcg::VulkanImage::getDescriptorImageInfo() const noexcept { + return m_descriptorImageInfo; +} + +/** + * @brief Returns the number of mipmap levels generated for this image. + * + * If the image is created with `generateMipmaps = false`, the number of + * mipmap levels is always 1. Otherwise, it is computed as \f$\lfloor + * \log_2(\max(w, h)) \rfloor + 1\f$, where \f$w\f$ and \f$h\f$ are the + * texture width and height. + * + * @return Number of mipmap levels. + */ +uint32_t abcg::VulkanImage::getMipLevels() const noexcept { + return m_mipLevels; +} + std::pair abcg::VulkanImage::createImage(VulkanDevice const &device, vk::ImageCreateInfo const &imageInfo, @@ -312,8 +364,8 @@ void abcg::VulkanImage::createMipmaps(VulkanDevice const &device, auto mipWidth{gsl::narrow(texWidth)}; auto mipHeight{gsl::narrow(texHeight)}; - for (auto const i : iter::range(1U, mipLevels)) { - barrier.subresourceRange.baseMipLevel = i - 1; + for (auto const mipLevel : iter::range(1U, mipLevels)) { + barrier.subresourceRange.baseMipLevel = mipLevel - 1; barrier.oldLayout = vk::ImageLayout::eTransferDstOptimal; barrier.newLayout = vk::ImageLayout::eTransferSrcOptimal; barrier.srcAccessMask = vk::AccessFlagBits::eTransferWrite; @@ -328,7 +380,7 @@ void abcg::VulkanImage::createMipmaps(VulkanDevice const &device, blit.srcOffsets[0] = vk::Offset3D{0, 0, 0}; blit.srcOffsets[1] = vk::Offset3D{mipWidth, mipHeight, 1}; blit.srcSubresource.aspectMask = vk::ImageAspectFlagBits::eColor; - blit.srcSubresource.mipLevel = i - 1; + blit.srcSubresource.mipLevel = mipLevel - 1; blit.srcSubresource.baseArrayLayer = 0; blit.srcSubresource.layerCount = 1; blit.dstOffsets[0] = vk::Offset3D{0, 0, 0}; @@ -336,7 +388,7 @@ void abcg::VulkanImage::createMipmaps(VulkanDevice const &device, vk::Offset3D{mipWidth > 1 ? mipWidth / 2 : 1, mipHeight > 1 ? mipHeight / 2 : 1, 1}; blit.dstSubresource.aspectMask = vk::ImageAspectFlagBits::eColor; - blit.dstSubresource.mipLevel = i; + blit.dstSubresource.mipLevel = mipLevel; blit.dstSubresource.baseArrayLayer = 0; blit.dstSubresource.layerCount = 1; diff --git a/abcg/abcgVulkanImage.hpp b/abcg/abcgVulkanImage.hpp index 02d2d65c1..033c61830 100644 --- a/abcg/abcgVulkanImage.hpp +++ b/abcg/abcgVulkanImage.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -45,52 +45,13 @@ class abcg::VulkanImage { VulkanImageCreateInfo const &createInfo); void destroy(); - /** - * @brief Conversion to vk::Image. - */ - explicit operator vk::Image const &() const noexcept { return m_image; } + explicit operator vk::Image const &() const noexcept; - /** - * @brief Returns the opaque handle to the device memory object associated - * with this image. - * - * @return Device memory object. - */ - [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept { - return m_deviceMemory; - } - - /** - * @brief Returns the opaque handle to the image view object associated with - * this image. - * - * @return Image view object. - */ - [[nodiscard]] vk::ImageView const &getView() const noexcept { - return m_imageView; - } - - /** - * @brief Returns the descriptor image information associated with this image. - * - * @return Descriptor image information. - */ + [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept; + [[nodiscard]] vk::ImageView const &getView() const noexcept; [[nodiscard]] vk::DescriptorImageInfo const & - getDescriptorImageInfo() const noexcept { - return m_descriptorImageInfo; - } - - /** - * @brief Returns the number of mipmap levels generated for this image. - * - * If the image is created with `generateMipmaps = false`, the number of - * mipmap levels is always 1. Otherwise, it is computed as \f$\lfloor - * \log_2(\max(w, h)) \rfloor + 1\f$, where \f$w\f$ and \f$h\f$ are the - * texture width and height. - * - * @return Number of mipmap levels. - */ - [[nodiscard]] uint32_t getMipLevels() const noexcept { return m_mipLevels; } + getDescriptorImageInfo() const noexcept; + [[nodiscard]] uint32_t getMipLevels() const noexcept; private: [[nodiscard]] std::pair @@ -108,13 +69,13 @@ class abcg::VulkanImage { vk::Format imageFormat, uint32_t texWidth, uint32_t texHeight, uint32_t mipLevels); - vk::Image m_image{}; - vk::DeviceMemory m_deviceMemory{}; - vk::ImageView m_imageView{}; - vk::Sampler m_sampler{}; - vk::DescriptorImageInfo m_descriptorImageInfo{}; + vk::Image m_image; + vk::DeviceMemory m_deviceMemory; + vk::ImageView m_imageView; + vk::Sampler m_sampler; + vk::DescriptorImageInfo m_descriptorImageInfo; uint32_t m_mipLevels{1U}; - vk::Device m_device{}; + vk::Device m_device; }; #endif \ No newline at end of file diff --git a/abcg/abcgVulkanInstance.cpp b/abcg/abcgVulkanInstance.cpp index 6e66fef0b..4f398a466 100644 --- a/abcg/abcgVulkanInstance.cpp +++ b/abcg/abcgVulkanInstance.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -15,11 +15,11 @@ #include "abcgApplication.hpp" #include "abcgException.hpp" #include "abcgVulkan.hpp" -#include "abcgWindow.hpp" #if defined(ABCG_VULKAN_DEBUG_REPORT) -static VKAPI_ATTR VkBool32 VKAPI_CALL +namespace { +VKAPI_ATTR VkBool32 VKAPI_CALL debugReportCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, VkDebugUtilsMessengerCallbackDataEXT const *pCallbackData, @@ -69,7 +69,7 @@ debugReportCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, return VK_FALSE; } -[[nodiscard]] static vk::DebugUtilsMessengerCreateInfoEXT +[[nodiscard]] vk::DebugUtilsMessengerCreateInfoEXT getDebugMessengerCreateInfo() { auto severityFlags{// vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose | // vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo | @@ -83,13 +83,11 @@ getDebugMessengerCreateInfo() { .pfnUserCallback = debugReportCallback}; } -static void -destroyDebugUtilsMessengerEXT(vk::Instance instance, - vk::DebugUtilsMessengerEXT debugMessenger, - const vk::AllocationCallbacks *pAllocator) { - auto func{reinterpret_cast( - instance.getProcAddr("vkDestroyDebugUtilsMessengerEXT"))}; - if (func != nullptr) { +void destroyDebugUtilsMessengerEXT(vk::Instance instance, + vk::DebugUtilsMessengerEXT debugMessenger, + vk::AllocationCallbacks const *pAllocator) { + if (auto func{reinterpret_cast( + instance.getProcAddr("vkDestroyDebugUtilsMessengerEXT"))}) { if (pAllocator != nullptr) { auto allocator{static_cast(*pAllocator)}; func(instance, debugMessenger, &allocator); @@ -98,17 +96,19 @@ destroyDebugUtilsMessengerEXT(vk::Instance instance, } } } +} // namespace #endif // ABCG_VULKAN_DEBUG_REPORT -[[nodiscard]] static std::vector +namespace { +[[nodiscard]] std::vector checkLayersSupport(std::vector const &layers) { std::vector unsupportedLayers; auto supportedLayers{vk::enumerateInstanceLayerProperties()}; for (auto const &layerName : layers) { auto const hasLayer{[&](auto supportedLayer) { - std::span nameSpan{supportedLayer.layerName}; + std::span const nameSpan{supportedLayer.layerName}; return std::string{nameSpan.data()} == layerName; }}; if (std::ranges::none_of(supportedLayers, hasLayer)) { @@ -119,14 +119,14 @@ checkLayersSupport(std::vector const &layers) { return unsupportedLayers; } -[[nodiscard]] static std::vector +[[nodiscard]] std::vector checkExtensionsSupport(std::vector const &extensions) { std::vector unsupportedExtensions; auto supportedExtensions{vk::enumerateInstanceExtensionProperties()}; for (auto const &extensionName : extensions) { auto const hasExtension{[&](auto supportedExtension) { - std::span nameSpan{supportedExtension.extensionName}; + std::span const nameSpan{supportedExtension.extensionName}; return std::string{nameSpan.data()} == extensionName; }}; if (std::ranges::none_of(supportedExtensions, hasExtension)) { @@ -135,6 +135,7 @@ checkExtensionsSupport(std::vector const &extensions) { } return unsupportedExtensions; } +} // namespace void abcg::VulkanInstance::create(std::vector const &layers, std::vector const &extensions, @@ -169,7 +170,7 @@ void abcg::VulkanInstance::create(std::vector const &layers, #endif // Create application info to be passed to instance create info - vk::ApplicationInfo applicationInfo{ + vk::ApplicationInfo const applicationInfo{ .pApplicationName = applicationName.data(), .applicationVersion = VK_MAKE_VERSION(1, 0, 0), .pEngineName = "ABCg", @@ -189,7 +190,7 @@ void abcg::VulkanInstance::create(std::vector const &layers, .ppEnabledExtensionNames = extensions.data() }); - // Load all required Vulkan entrypoints and extensions + // Load all required Vulkan entry points and extensions volkLoadInstanceOnly(m_instance); #if defined(ABCG_VULKAN_DEBUG_REPORT) @@ -202,4 +203,11 @@ void abcg::VulkanInstance::destroy() { destroyDebugUtilsMessengerEXT(m_instance, m_debugMessenger, nullptr); #endif m_instance.destroy(); -} \ No newline at end of file +} + +/** + * @brief Conversion to vk::Instance. + */ +abcg::VulkanInstance::operator vk::Instance const &() const noexcept { + return m_instance; +} diff --git a/abcg/abcgVulkanInstance.hpp b/abcg/abcgVulkanInstance.hpp index a69b5b988..2f13f0897 100644 --- a/abcg/abcgVulkanInstance.hpp +++ b/abcg/abcgVulkanInstance.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -29,13 +29,10 @@ class abcg::VulkanInstance { std::string_view applicationName = {}); void destroy(); - /** - * @brief Conversion to vk::Instance. - */ - explicit operator vk::Instance const &() const noexcept { return m_instance; } + explicit operator vk::Instance const &() const noexcept; private: - vk::Instance m_instance{}; + vk::Instance m_instance; #if defined(ABCG_VULKAN_DEBUG_REPORT) vk::DebugUtilsMessengerEXT m_debugMessenger{}; diff --git a/abcg/abcgVulkanPhysicalDevice.cpp b/abcg/abcgVulkanPhysicalDevice.cpp index 764551559..9d5acd578 100644 --- a/abcg/abcgVulkanPhysicalDevice.cpp +++ b/abcg/abcgVulkanPhysicalDevice.cpp @@ -4,18 +4,18 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgVulkanPhysicalDevice.hpp" #include +#include #include #include #include "abcgException.hpp" -#include "abcgVulkan.hpp" #include "abcgVulkanInstance.hpp" void abcg::VulkanPhysicalDevice::create( @@ -75,6 +75,54 @@ std::optional abcg::VulkanPhysicalDevice::findMemoryType( return std::nullopt; } +/** + * @brief Conversion to vk::PhysicalDevice. + */ +abcg::VulkanPhysicalDevice::operator vk::PhysicalDevice const &() + const noexcept { + return m_physicalDevice; +} + +/** + * @brief Access to abcg::VulkanInstance. + * + * @return Vulkan instance associated with this physical device. + */ +abcg::VulkanInstance const & +abcg::VulkanPhysicalDevice::getInstance() const noexcept { + return m_instance; +} + +/** + * @brief Access to queues families. + * + * @return Queues families available to this physical device. + */ +abcg::VulkanQueuesFamilies const & +abcg::VulkanPhysicalDevice::getQueuesFamilies() const noexcept { + return m_queuesFamilies; +} + +/** + * @brief Access to the surface. + * + * @return Surface associated with this physical device. + */ +vk::SurfaceKHR const & +abcg::VulkanPhysicalDevice::getSurfaceKHR() const noexcept { + return m_surfaceKHR; +} + +/** + * @brief Access to number of samples. + * + * @return Sample count associated with this physical device. + */ +vk::SampleCountFlagBits +abcg::VulkanPhysicalDevice::getSampleCount() const noexcept { + return m_sampleCount; +} + void abcg::VulkanPhysicalDevice::checkQueueFamily( vk::QueueFamilyProperties const &properties, uint32_t queueFamilyIndex, bool useSeparateTransferQueue) { @@ -87,7 +135,7 @@ void abcg::VulkanPhysicalDevice::checkQueueFamily( // Check for compute queue if (properties.queueFlags & vk::QueueFlagBits::eCompute) { - // Take the last index so we can favor families that are not the same of + // Take the last index, so we can favor families that are not the same of // the graphics queue m_queuesFamilies.compute = queueFamilyIndex; } @@ -176,7 +224,7 @@ vk::SampleCountFlagBits abcg::VulkanPhysicalDevice::getMaxUsableSampleCount() { bool abcg::VulkanPhysicalDevice::isDeviceSuitable( std::vector const &extensions, bool useSeparateTransferQueue) { - auto swapchainAdequate{false}; + auto swapchainIsAdequate{false}; findQueueFamilies(useSeparateTransferQueue); auto const &queueFamilyAdequate{m_queuesFamilies.graphics.has_value() && @@ -184,7 +232,7 @@ bool abcg::VulkanPhysicalDevice::isDeviceSuitable( auto const &extensionsSupported{checkExtensionsSupport(extensions).empty()}; if (extensionsSupported) { - swapchainAdequate = + swapchainIsAdequate = !m_physicalDevice.getSurfaceFormatsKHR(m_surfaceKHR).empty() && !m_physicalDevice.getSurfacePresentModesKHR(m_surfaceKHR).empty(); } @@ -196,7 +244,7 @@ bool abcg::VulkanPhysicalDevice::isDeviceSuitable( auto const hasSamplerAnisotropy{VK_TRUE == supportedFeatures.samplerAnisotropy}; - return queueFamilyAdequate && extensionsSupported && swapchainAdequate && + return queueFamilyAdequate && extensionsSupported && swapchainIsAdequate && isDiscrete && hasSamplerAnisotropy; } diff --git a/abcg/abcgVulkanPhysicalDevice.hpp b/abcg/abcgVulkanPhysicalDevice.hpp index fe6ba95af..59999d960 100644 --- a/abcg/abcgVulkanPhysicalDevice.hpp +++ b/abcg/abcgVulkanPhysicalDevice.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -48,53 +48,15 @@ class abcg::VulkanPhysicalDevice { bool useSeparateTransferQueue = false); void destroy(); - /** - * @brief Conversion to vk::PhysicalDevice. - */ - explicit operator vk::PhysicalDevice const &() const noexcept { - return m_physicalDevice; - } + explicit operator vk::PhysicalDevice const &() const noexcept; [[nodiscard]] std::optional findMemoryType(uint32_t memoryTypeBitsRequirement, vk::MemoryPropertyFlags requiredProperties) const; - - /** - * @brief Access to abcg::VulkanInstance. - * - * @return Vulkan instance associated with this physical device. - */ - [[nodiscard]] VulkanInstance const &getInstance() const noexcept { - return m_instance; - } - - /** - * @brief Access to queues families. - * - * @return Queues families available to this physical device. - */ - [[nodiscard]] VulkanQueuesFamilies const &getQueuesFamilies() const noexcept { - return m_queuesFamilies; - } - - /** - * @brief Access to the surface. - * - * @return Surface associated with this physical device. - */ - [[nodiscard]] vk::SurfaceKHR const &getSurfaceKHR() const noexcept { - return m_surfaceKHR; - } - - /** - * @brief Access to number of samples. - * - * @return Sample count associated with this physical device. - */ - [[nodiscard]] vk::SampleCountFlagBits getSampleCount() const noexcept { - return m_sampleCount; - } - + [[nodiscard]] VulkanInstance const &getInstance() const noexcept; + [[nodiscard]] VulkanQueuesFamilies const &getQueuesFamilies() const noexcept; + [[nodiscard]] vk::SurfaceKHR const &getSurfaceKHR() const noexcept; + [[nodiscard]] vk::SampleCountFlagBits getSampleCount() const noexcept; [[nodiscard]] std::optional getFirstSupportedFormat(std::vector const &candidates, vk::ImageTiling tiling, @@ -112,9 +74,9 @@ class abcg::VulkanPhysicalDevice { [[nodiscard]] std::vector checkExtensionsSupport(std::vector const &extensions); - vk::PhysicalDevice m_physicalDevice{}; - VulkanInstance m_instance{}; - vk::SurfaceKHR m_surfaceKHR{}; + vk::PhysicalDevice m_physicalDevice; + VulkanInstance m_instance; + vk::SurfaceKHR m_surfaceKHR; vk::SampleCountFlagBits m_sampleCount{}; VulkanQueuesFamilies m_queuesFamilies; }; diff --git a/abcg/abcgVulkanPipeline.cpp b/abcg/abcgVulkanPipeline.cpp index 46104a5f2..c8f761180 100644 --- a/abcg/abcgVulkanPipeline.cpp +++ b/abcg/abcgVulkanPipeline.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -27,7 +27,7 @@ void abcg::VulkanPipeline::create(VulkanSwapchain const &swapchain, } // Vertex binding and attributes - vk::PipelineVertexInputStateCreateInfo vertexInputState{ + vk::PipelineVertexInputStateCreateInfo const vertexInputState{ .vertexBindingDescriptionCount = gsl::narrow(createInfo.bindingDescriptions.size()), .pVertexBindingDescriptions = createInfo.bindingDescriptions.data(), @@ -43,7 +43,7 @@ void abcg::VulkanPipeline::create(VulkanSwapchain const &swapchain, .maxDepth = 1}})}; auto scissors{createInfo.scissors.value_or( std::vector{{.extent = swapchain.getExtent()}})}; - vk::PipelineViewportStateCreateInfo viewportState{ + vk::PipelineViewportStateCreateInfo const viewportState{ .viewportCount = gsl::narrow(viewports.size()), .pViewports = viewports.data(), .scissorCount = gsl::narrow(scissors.size()), @@ -94,7 +94,7 @@ void abcg::VulkanPipeline::create(VulkanSwapchain const &swapchain, .pAttachments = &colorBlendAttachment})}; // Dynamic state - vk::PipelineDynamicStateCreateInfo dynamicState{ + vk::PipelineDynamicStateCreateInfo const dynamicState{ .dynamicStateCount = gsl::narrow(createInfo.dynamicStates.size()), .pDynamicStates = createInfo.dynamicStates.data()}; @@ -102,7 +102,7 @@ void abcg::VulkanPipeline::create(VulkanSwapchain const &swapchain, // Pipeline layout m_pipelineLayout = m_device.createPipelineLayout(createInfo.pipelineLayout); - vk::GraphicsPipelineCreateInfo pipelineCreateInfo{ + vk::GraphicsPipelineCreateInfo const pipelineCreateInfo{ .stageCount = gsl::narrow(shaderStages.size()), .pStages = shaderStages.data(), .pVertexInputState = &vertexInputState, @@ -134,3 +134,19 @@ void abcg::VulkanPipeline::destroy() { m_device.destroyPipeline(m_pipeline); m_device.destroyPipelineLayout(m_pipelineLayout); } + +/** + * @brief Conversion to vk::Pipeline. + */ +abcg::VulkanPipeline::operator vk::Pipeline const &() const noexcept { + return m_pipeline; +} + +/** + * @brief Access to vk::PipelineLayout. + * + * @return Pipeline layout of the pipeline. + */ +vk::PipelineLayout const &abcg::VulkanPipeline::getLayout() const noexcept { + return m_pipelineLayout; +} diff --git a/abcg/abcgVulkanPipeline.hpp b/abcg/abcgVulkanPipeline.hpp index 037af5387..99134c94d 100644 --- a/abcg/abcgVulkanPipeline.hpp +++ b/abcg/abcgVulkanPipeline.hpp @@ -6,14 +6,13 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #ifndef ABCG_VULKAN_PIPELINE_HPP_ #define ABCG_VULKAN_PIPELINE_HPP_ -#include "abcgVulkanDevice.hpp" #include "abcgVulkanShader.hpp" #include "abcgVulkanSwapchain.hpp" @@ -54,24 +53,14 @@ class abcg::VulkanPipeline { VulkanPipelineCreateInfo const &createInfo); void destroy(); - /** - * @brief Conversion to vk::Pipeline. - */ - explicit operator vk::Pipeline const &() const noexcept { return m_pipeline; } + explicit operator vk::Pipeline const &() const noexcept; - /** - * @brief Access to vk::PipelineLayout. - * - * @return Pipeline layout of the pipeline. - */ - [[nodiscard]] vk::PipelineLayout const &getLayout() const noexcept { - return m_pipelineLayout; - } + [[nodiscard]] vk::PipelineLayout const &getLayout() const noexcept; private: - vk::Pipeline m_pipeline{}; - vk::PipelineLayout m_pipelineLayout{}; - vk::Device m_device{}; + vk::Pipeline m_pipeline; + vk::PipelineLayout m_pipelineLayout; + vk::Device m_device; }; #endif \ No newline at end of file diff --git a/abcg/abcgVulkanShader.cpp b/abcg/abcgVulkanShader.cpp index 20e1ee665..64779339d 100644 --- a/abcg/abcgVulkanShader.cpp +++ b/abcg/abcgVulkanShader.cpp @@ -4,23 +4,23 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgVulkanShader.hpp" -#include "abcgApplication.hpp" #include "abcgException.hpp" -#include "abcgVulkanWindow.hpp" #include #include +#include #include #include -static TBuiltInResource InitResources() { +namespace { +TBuiltInResource InitResources() { TBuiltInResource Resources{ .maxLights = 32, .maxClipPlanes = 6, @@ -114,6 +114,7 @@ static TBuiltInResource InitResources() { .maxTaskWorkGroupSizeY_NV = 1, .maxTaskWorkGroupSizeZ_NV = 1, .maxMeshViewCountNV = 4, + .maxDualSourceDrawBuffersEXT = 1, .limits = {.nonInductiveForLoops = true, .whileLoops = true, .doWhileLoops = true, @@ -198,7 +199,7 @@ abcgStageToVulkanStage(abcg::ShaderStage stage) { } } -[[nodiscard]] static char const *glslangStageToText(EShLanguage stage) { +[[nodiscard]] char const *glslangStageToText(EShLanguage stage) { switch (stage) { case EShLangVertex: return "vertex"; @@ -231,11 +232,11 @@ abcgStageToVulkanStage(abcg::ShaderStage stage) { default: return "unknown"; } -}; +} // If filenameOrText is a filename, returns the contents of the file (assumed // to be in text format). Otherwise, returns filenameOrText. -[[nodiscard]] static std::string toSource(std::string_view filenameOrText) { +[[nodiscard]] std::string toSource(std::string_view filenameOrText) { static const std::size_t maxPathSize{260}; if (filenameOrText.size() > maxPathSize || !std::filesystem::exists(filenameOrText)) { @@ -251,6 +252,7 @@ abcgStageToVulkanStage(abcg::ShaderStage stage) { } return source.str(); } +} // namespace // Compiles the given GLSL shader source into Vulkan SPIR-V. std::vector GLSLtoSPV(abcg::ShaderSource shaderSource) { @@ -270,11 +272,12 @@ std::vector GLSLtoSPV(abcg::ShaderSource shaderSource) { shader.setStrings(&data, 1); // Enable SPIR-V and Vulkan rules when parsing GLSL - auto messages{gsl::narrow(EShMsgSpvRules | EShMsgVulkanRules | - EShMsgEnhanced)}; + auto messages{gsl::narrow(EShMsgSpvRules | + EShMsgVulkanRules /* | + EShMsgEnhanced*/)}; // Compiles - TBuiltInResource resources{InitResources()}; + TBuiltInResource const resources{InitResources()}; if (!shader.parse(&resources, 100, false, messages)) { auto const *shaderStage{glslangStageToText(stage)}; printLog(shader, shaderStage); @@ -312,8 +315,8 @@ void abcg::VulkanShader::create(VulkanDevice const &device, ShaderSource const &pathOrSource) { m_device = static_cast(device); - ShaderSource source{.source = toSource(pathOrSource.source), - .stage = pathOrSource.stage}; + ShaderSource const source{.source = toSource(pathOrSource.source), + .stage = pathOrSource.stage}; glslang::InitializeProcess(); std::vector shader{GLSLtoSPV(source)}; @@ -333,4 +336,22 @@ void abcg::VulkanShader::destroy() { } m_device.destroyShaderModule(m_module); +} + +/** + * @brief Returns the shader stage bitmask. + * + * @return Shader stage bitmask. + */ +vk::ShaderStageFlagBits const &abcg::VulkanShader::getStage() const noexcept { + return m_stage; +} + +/** + * @brief Returns the opaque handle to the shader module object. + * + * @return Shader module. + */ +vk::ShaderModule const &abcg::VulkanShader::getModule() const noexcept { + return m_module; } \ No newline at end of file diff --git a/abcg/abcgVulkanShader.hpp b/abcg/abcgVulkanShader.hpp index 66c41e299..2ba4d8d41 100644 --- a/abcg/abcgVulkanShader.hpp +++ b/abcg/abcgVulkanShader.hpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -29,28 +29,13 @@ class abcg::VulkanShader { void create(VulkanDevice const &device, ShaderSource const &pathOrSource); void destroy(); - /** - * @brief Returns the shader stage bitmask. - * - * @return Shader stage bitmask. - */ - [[nodiscard]] vk::ShaderStageFlagBits const &getStage() const noexcept { - return m_stage; - } - - /** - * @brief Returns the opaque handle to the shader module object. - * - * @return Shader module. - */ - [[nodiscard]] vk::ShaderModule const &getModule() const noexcept { - return m_module; - } + [[nodiscard]] vk::ShaderStageFlagBits const &getStage() const noexcept; + [[nodiscard]] vk::ShaderModule const &getModule() const noexcept; private: vk::ShaderStageFlagBits m_stage{}; - vk::ShaderModule m_module{}; - vk::Device m_device{}; + vk::ShaderModule m_module; + vk::Device m_device; }; #endif diff --git a/abcg/abcgVulkanSwapchain.cpp b/abcg/abcgVulkanSwapchain.cpp index 3ca29d712..ef44194ed 100644 --- a/abcg/abcgVulkanSwapchain.cpp +++ b/abcg/abcgVulkanSwapchain.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -14,12 +14,12 @@ #include #include -#include "abcgApplication.hpp" #include "abcgException.hpp" #include "abcgVulkanDevice.hpp" #include "abcgVulkanPhysicalDevice.hpp" #include "abcgVulkanWindow.hpp" +namespace { struct SurfaceSupport { vk::SurfaceKHR surfaceKHR{}; vk::SurfaceCapabilitiesKHR capabilities{}; @@ -50,7 +50,7 @@ chooseSwapPresentMode(std::vector const &requestModes, SurfaceSupport const &surfaceSupport) { // #if defined(ABCG_VULKAN_DEBUG_REPORT) // fmt::print("Supported presentation modes:\n"); - // for (auto const &mode : supportedDetails.presentModes) { + // for (auto const &mode : surfaceSupport.presentModes) { // fmt::print("\t{}\n", vk::to_string(mode)); // } // #endif @@ -65,7 +65,7 @@ chooseSwapPresentMode(std::vector const &requestModes, return vk::PresentModeKHR::eFifo; // Always supported } -[[nodiscard]] static uint32_t +[[nodiscard]] uint32_t getMinImageCountFromPresentMode(vk::PresentModeKHR presentMode) { switch (presentMode) { case vk::PresentModeKHR::eMailbox: @@ -99,6 +99,7 @@ chooseSwapExtent(vk::SurfaceCapabilitiesKHR capabilities, capabilities.minImageExtent.height, capabilities.maxImageExtent.height)}; } +} // namespace void abcg::VulkanSwapchain::create(VulkanDevice const &device, VulkanSettings const &settings, @@ -322,9 +323,16 @@ bool abcg::VulkanSwapchain::checkRebuild(VulkanSettings const &settings, .clipped = VK_TRUE, .oldSwapchain = oldSwapchain}; - if (auto const &queuesFamilies{ - m_device.getPhysicalDevice().getQueuesFamilies()}; - queuesFamilies.graphics != queuesFamilies.present) { + auto const &queuesFamilies{m_device.getPhysicalDevice().getQueuesFamilies()}; + if (!queuesFamilies.graphics.has_value()) { + throw abcg::RuntimeError("Graphics queue family not found"); + } + + if (!queuesFamilies.present.has_value()) { + throw abcg::RuntimeError("Present queue family not found"); + } + + if (queuesFamilies.graphics.value() != queuesFamilies.present.value()) { // If the graphics and present queues are from different queue families, we // either have to explicitly transfer ownership of images between the // queues, or we have to create the swapchain with imageSharingMode as @@ -364,6 +372,79 @@ bool abcg::VulkanSwapchain::checkRebuild(VulkanSettings const &settings, return true; } +/** + * @brief Conversion to vk::SwapchainKHR. + */ +abcg::VulkanSwapchain::operator vk::SwapchainKHR const &() const noexcept { + return m_swapchainKHR; +} + +/** + * @brief Access to abcg::VulkanDevice. + * + * @return Instance of vulkan device associated with this swapchain. + */ +abcg::VulkanDevice const &abcg::VulkanSwapchain::getDevice() const noexcept { + return m_device; +} + +/** + * @brief Returns the in-flight frames. + * + * @return Container of in-flight frames. + */ +std::vector const & +abcg::VulkanSwapchain::getFrames() const noexcept { + return m_frames; +} + +/** + * @brief Returns the current in-flight frame. + * + * @return Current frame being rendered to. + */ +abcg::VulkanFrame const & +abcg::VulkanSwapchain::getCurrentFrame() const noexcept { + return m_frames[m_currentFrame]; +} + +/** + * @brief Returns the main render pass. + * + * @return Instance of the main render pass. + */ +vk::RenderPass const & +abcg::VulkanSwapchain::getMainRenderPass() const noexcept { + return m_renderPassMain; +} + +/** + * @brief Returns the UI render pass. + * + * @return Instance of the UI render pass. + */ +vk::RenderPass const &abcg::VulkanSwapchain::getUIRenderPass() const noexcept { + return m_renderPassUI; +} + +/** + * @brief Returns the swapchain extent. + * + * @return Extent of the swapchain. + */ +vk::Extent2D const &abcg::VulkanSwapchain::getExtent() const noexcept { + return m_swapchainExtent; +} + +/** + * @brief Returns the depth image object. + * + * @return Depth image object. + */ +abcg::VulkanImage const &abcg::VulkanSwapchain::getDepthImage() const noexcept { + return m_depthImage; +} + void abcg::VulkanSwapchain::createFrames() { auto const swapchainImages{ static_cast(m_device).getSwapchainImagesKHR(m_swapchainKHR)}; @@ -376,7 +457,7 @@ void abcg::VulkanSwapchain::createFrames() { for (auto &&[frame, image, index] : iter::zip(m_frames, swapchainImages, iter::range(m_frames.size()))) { - frame.index = index; + frame.index = gsl::narrow(index); frame.colorImage.create( m_device, {.viewInfo = { @@ -490,11 +571,11 @@ abcg::VulkanSwapchain::getDepthFormat(VulkanSettings const &settings) { void abcg::VulkanSwapchain::createDepthResources( VulkanSettings const &settings) { - auto hasStencilComponent{[](vk::Format format) { - return format == vk::Format::eD32SfloatS8Uint || - format == vk::Format::eD24UnormS8Uint || - format == vk::Format::eD16UnormS8Uint; - }}; + // auto hasStencilComponent{[](vk::Format format) { + // return format == vk::Format::eD32SfloatS8Uint || + // format == vk::Format::eD24UnormS8Uint || + // format == vk::Format::eD16UnormS8Uint; + // }}; auto const depthFormat{getDepthFormat(settings)}; @@ -707,11 +788,16 @@ void abcg::VulkanSwapchain::createFramebuffers(VulkanSettings const &settings) { auto const &queuesFamilies{m_device.getPhysicalDevice().getQueuesFamilies()}; auto const sampleCount{m_device.getPhysicalDevice().getSampleCount()}; + if (!queuesFamilies.graphics.has_value()) { + throw abcg::RuntimeError("Graphics queue family not found"); + } + auto const graphicsQueueFamily{queuesFamilies.graphics.value()}; + for (auto &frame : m_frames) { // Each frame has its own transient graphics command pool frame.commandPool = device.createCommandPool( {.flags = vk::CommandPoolCreateFlagBits::eTransient, - .queueFamilyIndex = queuesFamilies.graphics.value()}); + .queueFamilyIndex = graphicsQueueFamily}); // Create a primary command buffer frame.commandBuffer = diff --git a/abcg/abcgVulkanSwapchain.hpp b/abcg/abcgVulkanSwapchain.hpp index d4ef53989..762c4fd81 100644 --- a/abcg/abcgVulkanSwapchain.hpp +++ b/abcg/abcgVulkanSwapchain.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -33,12 +33,12 @@ class VulkanWindow; */ struct abcg::VulkanFrame { uint32_t index{}; - vk::CommandPool commandPool{}; - vk::CommandBuffer commandBuffer{}; - vk::CommandBuffer commandBufferUI{}; - vk::Fence fence{}; - VulkanImage colorImage{}; - vk::Framebuffer framebufferMain{}; + vk::CommandPool commandPool; + vk::CommandBuffer commandBuffer; + vk::CommandBuffer commandBufferUI; + vk::Fence fence; + VulkanImage colorImage; + vk::Framebuffer framebufferMain; }; /** @@ -57,75 +57,15 @@ class abcg::VulkanSwapchain { bool checkRebuild(VulkanSettings const &settings, glm::ivec2 const &windowSize); - /** - * @brief Conversion to vk::SwapchainKHR. - */ - explicit operator vk::SwapchainKHR const &() const noexcept { - return m_swapchainKHR; - } - - /** - * @brief Access to abcg::VulkanDevice. - * - * @return Instance of vulkan device associated with this swapchain. - */ - [[nodiscard]] VulkanDevice const &getDevice() const noexcept { - return m_device; - } - - /** - * @brief Returns the in-flight frames. - * - * @return Container of in-flight frames. - */ - [[nodiscard]] std::vector const &getFrames() const noexcept { - return m_frames; - } - - /** - * @brief Returns the current in-flight frame. - * - * @return Current frame being rendered to. - */ - [[nodiscard]] VulkanFrame const &getCurrentFrame() const noexcept { - return m_frames[m_currentFrame]; - } - - /** - * @brief Returns the main render pass. - * - * @return Instance of the main render pass. - */ - [[nodiscard]] vk::RenderPass const &getMainRenderPass() const noexcept { - return m_renderPassMain; - } - - /** - * @brief Returns the UI render pass. - * - * @return Instance of the UI render pass. - */ - [[nodiscard]] vk::RenderPass const &getUIRenderPass() const noexcept { - return m_renderPassUI; - } - - /** - * @brief Returns the swapchain extent. - * - * @return Extent of the swapchain. - */ - [[nodiscard]] vk::Extent2D const &getExtent() const noexcept { - return m_swapchainExtent; - } - - /** - * @brief Returns the depth image object. - * - * @return Depth image object. - */ - [[nodiscard]] VulkanImage const &getDepthImage() const noexcept { - return m_depthImage; - } + explicit operator vk::SwapchainKHR const &() const noexcept; + + [[nodiscard]] VulkanDevice const &getDevice() const noexcept; + [[nodiscard]] std::vector const &getFrames() const noexcept; + [[nodiscard]] VulkanFrame const &getCurrentFrame() const noexcept; + [[nodiscard]] vk::RenderPass const &getMainRenderPass() const noexcept; + [[nodiscard]] vk::RenderPass const &getUIRenderPass() const noexcept; + [[nodiscard]] vk::Extent2D const &getExtent() const noexcept; + [[nodiscard]] VulkanImage const &getDepthImage() const noexcept; private: void createFrames(); @@ -152,23 +92,23 @@ class abcg::VulkanSwapchain { // Data for swapchain synchronization struct FrameSemaphores { - vk::Semaphore presentComplete{}; - vk::Semaphore renderComplete{}; + vk::Semaphore presentComplete; + vk::Semaphore renderComplete; }; uint32_t m_currentFrame{}; - std::vector m_frames{}; + std::vector m_frames; // Current set of swapchain wait semaphores we're using (needs to be distinct // from per frame data) uint32_t m_currentSemaphore{}; - std::vector m_frameSemaphores{}; + std::vector m_frameSemaphores; - VulkanImage m_depthImage{}; - VulkanImage m_MSAAImage{}; + VulkanImage m_depthImage; + VulkanImage m_MSAAImage; // Render passes - vk::RenderPass m_renderPassMain{}; - vk::RenderPass m_renderPassUI{}; + vk::RenderPass m_renderPassMain; + vk::RenderPass m_renderPassUI; }; #endif \ No newline at end of file diff --git a/abcg/abcgVulkanWindow.cpp b/abcg/abcgVulkanWindow.cpp index 11edbeba5..537211815 100644 --- a/abcg/abcgVulkanWindow.cpp +++ b/abcg/abcgVulkanWindow.cpp @@ -4,7 +4,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -12,9 +12,8 @@ #include #include -#include #include -#include +#include #include #include "abcgEmbeddedFonts.hpp" @@ -23,7 +22,8 @@ #include "abcgVulkanInstance.hpp" #include "abcgWindow.hpp" -[[nodiscard]] static std::vector +namespace { +[[nodiscard]] std::vector getRequiredExtensions(gsl::not_null window) { uint32_t extensionCount{}; if (SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr) != @@ -48,7 +48,7 @@ getRequiredExtensions(gsl::not_null window) { extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); // fmt::print("Required extensions:\n"); - // for (const auto &extension : extensionData.names) { + // for (const auto &extension : extensions) { // fmt::print("\t{}\n", extension); // } #endif @@ -56,9 +56,8 @@ getRequiredExtensions(gsl::not_null window) { return extensions; } -static void checkVkResultSingleArg(VkResult retCode) { - abcg::checkVkResult(retCode); -} +void checkVkResultSingleArg(VkResult retCode) { abcg::checkVkResult(retCode); } +} // namespace /** * @brief Returns the configuration settings of the Vulkan instance. @@ -85,6 +84,32 @@ void abcg::VulkanWindow::setVulkanSettings( m_vulkanSettings = vulkanSettings; } +/** + * @brief Access to abcg::VulkanPhysicalDevice. + * + * @return Instance of vulkan physical device associated with this window. + */ +abcg::VulkanPhysicalDevice const & +abcg::VulkanWindow::getPhysicalDevice() const noexcept { + return m_physicalDevice; +} +/** + * @brief Access to abcg::VulkanDevice. + * + * @return Instance of vulkan device associated with this window. + */ +abcg::VulkanDevice const &abcg::VulkanWindow::getDevice() const noexcept { + return m_device; +} +/** + * @brief Access to abcg::VulkanSwapchain. + * + * @return Instance of swapchain associated with this window. + */ +abcg::VulkanSwapchain const &abcg::VulkanWindow::getSwapchain() const noexcept { + return m_swapchain; +} + /** * @brief Custom event handler. * @@ -130,8 +155,8 @@ void abcg::VulkanWindow::onPaint([[maybe_unused]] VulkanFrame const &frame) {} * This is not called when the window is minimized. * * Override it for custom behavior. By default, it shows a FPS counter if - * abcg::WindowSettings::showFPS is set to `true`, and a toggle fullscren button - * if abcg::WindowSettings::showFullscreenButton is set to `true`. + * abcg::WindowSettings::showFPS is set to `true`, and a toggle fullscreen + * button if abcg::WindowSettings::showFullscreenButton is set to `true`. */ void abcg::VulkanWindow::onPaintUI() { // FPS counter @@ -282,7 +307,7 @@ void abcg::VulkanWindow::create() { // Create swapchain m_swapchain.create(m_device, m_vulkanSettings, getWindowSize()); - // Create descriptol pool + // Create descriptor pool std::vector const poolSizes{ {{vk::DescriptorType::eSampler, 100}, {vk::DescriptorType::eCombinedImageSampler, 100}, @@ -325,7 +350,7 @@ void abcg::VulkanWindow::create() { .Instance = static_cast(m_instance), .PhysicalDevice = static_cast(m_physicalDevice), .Device = static_cast(m_device), - .QueueFamily = m_physicalDevice.getQueuesFamilies().graphics.value(), + .QueueFamily = m_physicalDevice.getQueuesFamilies().graphics.value_or(0), .Queue = m_device.getQueues().graphics, .PipelineCache = VK_NULL_HANDLE, .DescriptorPool = m_UIdescriptorPool, @@ -415,10 +440,10 @@ void abcg::VulkanWindow::destroy() { m_instance.destroy(); } -[[nodiscard]] glm::ivec2 abcg::VulkanWindow::getWindowSize() const { +glm::ivec2 abcg::VulkanWindow::getWindowSize() const { glm::ivec2 size{}; - if (auto *window{abcg::Window::getSDLWindow()}; window != nullptr) { + if (auto *window{abcg::Window::getSDLWindow()}) { SDL_Vulkan_GetDrawableSize(window, &size.x, &size.y); } return size; diff --git a/abcg/abcgVulkanWindow.hpp b/abcg/abcgVulkanWindow.hpp index 491419471..3b627ed91 100644 --- a/abcg/abcgVulkanWindow.hpp +++ b/abcg/abcgVulkanWindow.hpp @@ -6,16 +6,13 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #ifndef ABCG_VULKAN_WINDOW_HPP_ #define ABCG_VULKAN_WINDOW_HPP_ -#include -#include - #include "abcgVulkanDevice.hpp" #include "abcgVulkanInstance.hpp" #include "abcgVulkanPhysicalDevice.hpp" @@ -84,16 +81,9 @@ class abcg::VulkanWindow : public Window { [[nodiscard]] VulkanSettings const &getVulkanSettings() const noexcept; void setVulkanSettings(VulkanSettings const &vulkanSettings) noexcept; // void saveScreenshotPNG(std::string_view filename) const; - - [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept { - return m_physicalDevice; - } - [[nodiscard]] VulkanDevice const &getDevice() const noexcept { - return m_device; - } - [[nodiscard]] VulkanSwapchain const &getSwapchain() noexcept { - return m_swapchain; - } + [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept; + [[nodiscard]] VulkanDevice const &getDevice() const noexcept; + [[nodiscard]] VulkanSwapchain const &getSwapchain() const noexcept; protected: virtual void onEvent(SDL_Event const &event); @@ -112,20 +102,19 @@ class abcg::VulkanWindow : public Window { [[nodiscard]] glm::ivec2 getWindowSize() const final; VulkanSettings m_vulkanSettings; - std::vector const m_deviceExtensions{ - VK_KHR_SWAPCHAIN_EXTENSION_NAME}; + std::vector m_deviceExtensions{VK_KHR_SWAPCHAIN_EXTENSION_NAME}; std::vector m_layers { #if defined(ABCG_VULKAN_DEBUG_REPORT) "VK_LAYER_KHRONOS_validation" #endif }; - VulkanInstance m_instance{}; - VulkanPhysicalDevice m_physicalDevice{}; - VulkanDevice m_device{}; - VulkanSwapchain m_swapchain{}; - vk::SurfaceKHR m_surface{}; - vk::DescriptorPool m_UIdescriptorPool{}; + VulkanInstance m_instance; + VulkanPhysicalDevice m_physicalDevice; + VulkanDevice m_device; + VulkanSwapchain m_swapchain; + vk::SurfaceKHR m_surface; + vk::DescriptorPool m_UIdescriptorPool; bool m_hidden{}; bool m_minimized{}; }; diff --git a/abcg/abcgWindow.cpp b/abcg/abcgWindow.cpp index c25a1f887..a0913f91c 100644 --- a/abcg/abcgWindow.cpp +++ b/abcg/abcgWindow.cpp @@ -4,18 +4,18 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ #include "abcgWindow.hpp" #include -#include -#include +#include -static ImVec4 ColorAlpha(ImVec4 const &color, float const alpha) { +namespace { +ImVec4 ColorAlpha(ImVec4 const &color, float const alpha) { return {color.x, color.y, color.z, alpha}; } @@ -25,7 +25,7 @@ static ImVec4 ColorAlpha(ImVec4 const &color, float const alpha) { * @param darkTheme Whether to use a dark theme. * @param alpha Transparency factor (0=totally transparent, 1=totally opaque). */ -static void setupImGuiStyle(bool const darkTheme, float const alpha) { +void setupImGuiStyle(bool const darkTheme, float const alpha) { auto &style{ImGui::GetStyle()}; ImVec4 const black{0.00f, 0.00f, 0.00f, 1.00f}; @@ -122,6 +122,7 @@ static void setupImGuiStyle(bool const darkTheme, float const alpha) { } } } +} // namespace int abcg::resizingEventWatcher(void *data, SDL_Event *event) { if (event->type == SDL_WINDOWEVENT && @@ -290,7 +291,7 @@ void abcg::Window::toggleFullscreen() { constexpr Uint32 windowFlags{SDL_WINDOW_FULLSCREEN | SDL_WINDOW_FULLSCREEN_DESKTOP}; bool const fullscreen{(SDL_GetWindowFlags(m_window) & windowFlags) != 0U}; - enum class WindowType { Windowed, Fullscreen, FullscreenExclusive }; + enum class WindowType { Windowed, Fullscreen /*, FullscreenExclusive*/ }; switch (auto const desiredWindowType{fullscreen ? WindowType::Windowed : WindowType::Fullscreen}; @@ -300,9 +301,9 @@ void abcg::Window::toggleFullscreen() { SDL_SetWindowSize(m_window, m_windowSettings.width, m_windowSettings.height); break; - case WindowType::FullscreenExclusive: - SDL_SetWindowFullscreen(m_window, SDL_WINDOW_FULLSCREEN); - break; + // case WindowType::FullscreenExclusive: + // SDL_SetWindowFullscreen(m_window, SDL_WINDOW_FULLSCREEN); + // break; case WindowType::Fullscreen: SDL_SetWindowFullscreen(m_window, SDL_WINDOW_FULLSCREEN_DESKTOP); break; diff --git a/abcg/abcgWindow.hpp b/abcg/abcgWindow.hpp index 29a14c48f..fc958c625 100644 --- a/abcg/abcgWindow.hpp +++ b/abcg/abcgWindow.hpp @@ -6,7 +6,7 @@ * * This file is part of ABCg (https://github.com/hbatagelo/abcg). * - * @copyright (c) 2021--2022 Harlen Batagelo. All rights reserved. + * @copyright (c) 2021--2023 Harlen Batagelo. All rights reserved. * This project is released under the MIT License. */ @@ -122,7 +122,7 @@ class abcg::Window { /** * @brief Custom handler for window initialization tasks. * - * This is called only once after SDL initializetion. + * This is called only once after SDL initialization. */ virtual void create() = 0; @@ -156,8 +156,8 @@ class abcg::Window { [[nodiscard]] double getElapsedTime() const; [[nodiscard]] SDL_Window *getSDLWindow() const noexcept; [[nodiscard]] Uint32 getSDLWindowID() const noexcept; - [[nodiscard]] bool createSDLWindow(SDL_WindowFlags extraFlags); + bool createSDLWindow(SDL_WindowFlags extraFlags); void setEnableResizingEventWatcher(bool enabled) noexcept; void toggleFullscreen(); diff --git a/abcg/doc/Doxyfile b/abcg/doc/Doxyfile index 152c34511..8d4a601c8 100644 --- a/abcg/doc/Doxyfile +++ b/abcg/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "ABCg" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "v3.0.0" +PROJECT_NUMBER = "v3.1.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/abcg/doc/html/CHANGELOG_8md.html b/abcg/doc/html/CHANGELOG_8md.html index 1470e592c..bd0eda213 100644 --- a/abcg/doc/html/CHANGELOG_8md.html +++ b/abcg/doc/html/CHANGELOG_8md.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/README_8md.html b/abcg/doc/html/README_8md.html index 916d9dbff..9d61dbf17 100644 --- a/abcg/doc/html/README_8md.html +++ b/abcg/doc/html/README_8md.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgApplication_8cpp.html b/abcg/doc/html/abcgApplication_8cpp.html index a71f38242..557977cc9 100644 --- a/abcg/doc/html/abcgApplication_8cpp.html +++ b/abcg/doc/html/abcgApplication_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,6 @@ More...

#include "abcgApplication.hpp"
#include <SDL_image.h>
-#include <SDL_thread.h>
#include <span>
#include "abcgException.hpp"
#include "abcgWindow.hpp"
@@ -116,13 +115,13 @@
Include dependency graph for abcgApplication.cpp:
-
+

Detailed Description

Definition of abcg::Application members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgApplication_8cpp__incl.map b/abcg/doc/html/abcgApplication_8cpp__incl.map index 0e1aad3f8..6b71fcb2d 100644 --- a/abcg/doc/html/abcgApplication_8cpp__incl.map +++ b/abcg/doc/html/abcgApplication_8cpp__incl.map @@ -1,16 +1,15 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgApplication_8cpp__incl.md5 b/abcg/doc/html/abcgApplication_8cpp__incl.md5 index b10417f36..747867c61 100644 --- a/abcg/doc/html/abcgApplication_8cpp__incl.md5 +++ b/abcg/doc/html/abcgApplication_8cpp__incl.md5 @@ -1 +1 @@ -736fd25f4481728be1e6d7918556d73f \ No newline at end of file +dece3eb5e5d861dd43e03b01d7a7a488 \ No newline at end of file diff --git a/abcg/doc/html/abcgApplication_8cpp__incl.svg b/abcg/doc/html/abcgApplication_8cpp__incl.svg index a255fe689..51ebbb81f 100644 --- a/abcg/doc/html/abcgApplication_8cpp__incl.svg +++ b/abcg/doc/html/abcgApplication_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgApplication.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgApplication.cpp + +/home/harlen/dev/abcg +/abcg/abcgApplication.cpp @@ -22,208 +22,193 @@ Node2 - -abcgApplication.hpp + +abcgApplication.hpp Node1->Node2 - - + + Node4 - -SDL_image.h + +SDL_image.h Node1->Node4 - - + + Node5 - -SDL_thread.h + +span Node1->Node5 - - + + Node6 - - -span + + +abcgException.hpp Node1->Node6 - - + + - - -Node7 - - -abcgException.hpp + + +Node9 + + +abcgWindow.hpp - - -Node1->Node7 - - - - - -Node10 - - -abcgWindow.hpp - - + + +Node1->Node9 + + - - -Node1->Node10 - - - - - -Node14 - - -tiny_obj_loader.h + + +Node13 + + +tiny_obj_loader.h - - -Node1->Node14 - - + + +Node1->Node13 + + Node3 - -string + +string Node2->Node3 - - + + - - -Node7->Node3 - - + + +Node6->Node3 + + - - -Node8 - + + +Node7 + source_location - - -Node7->Node8 - - + + +Node6->Node7 + + - - -Node9 - + + +Node8 + stdexcept - - -Node7->Node9 - - + + +Node6->Node8 + + + + + +Node9->Node3 + + + + + +Node10 + + +abcgExternal.hpp + - + + -Node10->Node3 - - +Node9->Node10 + + Node11 - - -abcgExternal.hpp + + +abcgTimer.hpp - + -Node10->Node11 - - +Node9->Node11 + + Node12 - - -abcgTimer.hpp + + +chrono - + -Node10->Node12 - - - - - -Node13 - - -chrono - - - - - -Node12->Node13 - - +Node11->Node12 + + diff --git a/abcg/doc/html/abcgApplication_8hpp.html b/abcg/doc/html/abcgApplication_8hpp.html index 4d8237e86..5af2d3484 100644 --- a/abcg/doc/html/abcgApplication_8hpp.html +++ b/abcg/doc/html/abcgApplication_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,7 +120,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -142,7 +142,7 @@ Macros #define ABCG_VERSION_MAJOR   3   -#define ABCG_VERSION_MINOR   0 +#define ABCG_VERSION_MINOR   1   #define ABCG_VERSION_PATCH   0   @@ -150,7 +150,7 @@

Detailed Description

Header file of abcg::Application.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +

Macro Definition Documentation

◆ ABCG_VERSION_MAJOR

@@ -173,7 +173,7 @@

- +
#define ABCG_VERSION_MINOR   0#define ABCG_VERSION_MINOR   1

diff --git a/abcg/doc/html/abcgApplication_8hpp__dep__incl.map b/abcg/doc/html/abcgApplication_8hpp__dep__incl.map index ce3494dcc..7d011df97 100644 --- a/abcg/doc/html/abcgApplication_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgApplication_8hpp__dep__incl.map @@ -1,12 +1,8 @@ - + - - - - - + + - diff --git a/abcg/doc/html/abcgApplication_8hpp__dep__incl.md5 b/abcg/doc/html/abcgApplication_8hpp__dep__incl.md5 index fc87741f5..749ec811d 100644 --- a/abcg/doc/html/abcgApplication_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgApplication_8hpp__dep__incl.md5 @@ -1 +1 @@ -04a24cc45f3a953e823307d668101cd1 \ No newline at end of file +e7bd1900b260028ed05486899b9f9346 \ No newline at end of file diff --git a/abcg/doc/html/abcgApplication_8hpp__dep__incl.svg b/abcg/doc/html/abcgApplication_8hpp__dep__incl.svg index 09e4c54a9..8742008b4 100644 --- a/abcg/doc/html/abcgApplication_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgApplication_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgApplication.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgApplication.hpp + +/home/harlen/dev/abcg +/abcg/abcgApplication.hpp @@ -31,88 +31,40 @@ Node1->Node2 - - + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp - + Node1->Node5 - - + + - - -Node7 - + + +Node6 + /home/harlen/dev/abcg /abcg/abcgApplication.cpp - - -Node1->Node7 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLShader.cpp - - - - - -Node1->Node8 - - - - - -Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - - - - - -Node1->Node9 - - - - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp - - - - - -Node1->Node10 - - + + +Node1->Node6 + + @@ -149,24 +101,8 @@ Node4->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node4->Node6 - - + + diff --git a/abcg/doc/html/abcgApplication_8hpp_source.html b/abcg/doc/html/abcgApplication_8hpp_source.html index 442111d45..12510b630 100644 --- a/abcg/doc/html/abcgApplication_8hpp_source.html +++ b/abcg/doc/html/abcgApplication_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -110,7 +110,7 @@
14 #include <string>
15 
16 #define ABCG_VERSION_MAJOR 3
-
17 #define ABCG_VERSION_MINOR 0
+
17 #define ABCG_VERSION_MINOR 1
18 #define ABCG_VERSION_PATCH 0
19 
23 namespace abcg {
@@ -127,34 +127,31 @@
40 
41  void run(Window &window);
42 
-
58  [[nodiscard]] static std::string const &getAssetsPath() {
-
59  return m_assetsPath;
-
60  }
+
43  static std::string const &getAssetsPath() noexcept;
+
44  static std::string const &getBasePath() noexcept;
+
45 
+
46 private:
+
47  void mainLoopIterator(bool &done) const;
+
48 
+
49  Window *m_window{};
+
50 
+
51 #if defined(__EMSCRIPTEN__)
+
52  friend void mainLoopCallback(void *userData);
+
53 #endif
+
54 
+
55  // NOLINTBEGIN(cppcoreguidelines-avoid-non-const-global-variables)
+
56  // See https://bugs.llvm.org/show_bug.cgi?id=48040
+
57  static inline std::string m_assetsPath;
+
58  static inline std::string m_basePath;
+
59  // NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables)
+
60 };
61 
-
74  [[nodiscard]] static std::string const &getBasePath() { return m_basePath; }
-
75 
-
76 private:
-
77  void mainLoopIterator(bool &done) const;
-
78 
-
79  Window *m_window{};
-
80 
-
81 #if defined(__EMSCRIPTEN__)
-
82  friend void mainLoopCallback(void *userData);
-
83 #endif
-
84 
-
85  // NOLINTBEGIN(cppcoreguidelines-avoid-non-const-global-variables)
-
86  // See https://bugs.llvm.org/show_bug.cgi?id=48040
-
87  static inline std::string m_assetsPath{};
-
88  static inline std::string m_basePath{};
-
89  // NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables)
-
90 };
-
91 
-
92 #endif
+
62 #endif
Manages the application's control flow.
Definition: abcgApplication.hpp:37
-
static std::string const & getBasePath()
Returns the path to the application's directory, relative to the directory the executable is launched...
Definition: abcgApplication.hpp:74
+
static std::string const & getAssetsPath() noexcept
Returns the path to the application's assets directory, relative to the directory the executable is l...
Definition: abcgApplication.cpp:128
+
static std::string const & getBasePath() noexcept
Returns the path to the application's directory, relative to the directory the executable is launched...
Definition: abcgApplication.cpp:144
void run(Window &window)
Runs the application for the given window.
Definition: abcgApplication.cpp:77
Application(int argc, char **argv)
Constructs an abcg::Application object.
Definition: abcgApplication.cpp:48
-
static std::string const & getAssetsPath()
Returns the path to the application's assets directory, relative to the directory the executable is l...
Definition: abcgApplication.hpp:58
Base abstract class that represents a SDL window.
Definition: abcgWindow.hpp:86
Root namespace.
Definition: abcgApplication.hpp:23
diff --git a/abcg/doc/html/abcgEmbeddedFonts_8hpp.html b/abcg/doc/html/abcgEmbeddedFonts_8hpp.html index 3a053810b..9d924c7bb 100644 --- a/abcg/doc/html/abcgEmbeddedFonts_8hpp.html +++ b/abcg/doc/html/abcgEmbeddedFonts_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgEmbeddedFonts_8hpp_source.html b/abcg/doc/html/abcgEmbeddedFonts_8hpp_source.html index 11f0a0e99..8bf8a3907 100644 --- a/abcg/doc/html/abcgEmbeddedFonts_8hpp_source.html +++ b/abcg/doc/html/abcgEmbeddedFonts_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgException_8cpp.html b/abcg/doc/html/abcgException_8cpp.html index cace394d9..01c13a823 100644 --- a/abcg/doc/html/abcgException_8cpp.html +++ b/abcg/doc/html/abcgException_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,18 +107,18 @@

Definition of abcg::Exception members. More...

#include "abcgException.hpp"
+#include "abcgUtil.hpp"
#include <SDL_image.h>
-#include "abcgExternal.hpp"
Include dependency graph for abcgException.cpp:
-
+

Detailed Description

Definition of abcg::Exception members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgException_8cpp__incl.map b/abcg/doc/html/abcgException_8cpp__incl.map index c7e17e4e0..ccef1a209 100644 --- a/abcg/doc/html/abcgException_8cpp__incl.map +++ b/abcg/doc/html/abcgException_8cpp__incl.map @@ -1,9 +1,10 @@ - + - - + + + diff --git a/abcg/doc/html/abcgException_8cpp__incl.md5 b/abcg/doc/html/abcgException_8cpp__incl.md5 index 0b99790c2..5595dea13 100644 --- a/abcg/doc/html/abcgException_8cpp__incl.md5 +++ b/abcg/doc/html/abcgException_8cpp__incl.md5 @@ -1 +1 @@ -a98b7ede8fbc9ea3071733e5e022c7a3 \ No newline at end of file +95a461bf8e201fec34de41dc5541bed5 \ No newline at end of file diff --git a/abcg/doc/html/abcgException_8cpp__incl.svg b/abcg/doc/html/abcgException_8cpp__incl.svg index 0d91dd923..a6a5c98ab 100644 --- a/abcg/doc/html/abcgException_8cpp__incl.svg +++ b/abcg/doc/html/abcgException_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgException.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgException.cpp + +/home/harlen/dev/abcg +/abcg/abcgException.cpp @@ -30,38 +30,38 @@ Node1->Node2 - - + + Node6 - - -SDL_image.h + + +abcgUtil.hpp Node1->Node6 - - - - - -Node7 - - -abcgExternal.hpp + + + + + +Node8 + + +SDL_image.h - - -Node1->Node7 - - + + +Node1->Node8 + + @@ -108,5 +108,26 @@ + + +Node6->Node5 + + + + + +Node7 + + +functional + + + + + +Node6->Node7 + + + diff --git a/abcg/doc/html/abcgException_8hpp.html b/abcg/doc/html/abcgException_8hpp.html index b1829ebc5..2777b6831 100644 --- a/abcg/doc/html/abcgException_8hpp.html +++ b/abcg/doc/html/abcgException_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -121,7 +121,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -152,7 +152,7 @@

Header file of abcg::Exception and derived classes.

Declaration of abcg::Exception and derived classes.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgException_8hpp__dep__incl.map b/abcg/doc/html/abcgException_8hpp__dep__incl.map index e3aa04dd6..6c5b3db03 100644 --- a/abcg/doc/html/abcgException_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgException_8hpp__dep__incl.map @@ -1,24 +1,23 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgException_8hpp__dep__incl.md5 b/abcg/doc/html/abcgException_8hpp__dep__incl.md5 index babf3f992..f95940e03 100644 --- a/abcg/doc/html/abcgException_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgException_8hpp__dep__incl.md5 @@ -1 +1 @@ -c46fa5b00a51be4c8bbe98ae8e3788f1 \ No newline at end of file +8ed23a40da4f3934ed6a71cfa651f7bf \ No newline at end of file diff --git a/abcg/doc/html/abcgException_8hpp__dep__incl.svg b/abcg/doc/html/abcgException_8hpp__dep__incl.svg index f4641c5d0..b3b9eb96c 100644 --- a/abcg/doc/html/abcgException_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgException_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgException.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgException.hpp + +/home/harlen/dev/abcg +/abcg/abcgException.hpp @@ -22,355 +22,333 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcg.hpp + +/home/harlen/dev/abcg +/abcg/abcg.hpp Node1->Node2 - - + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp - + Node1->Node5 - - + + Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + + +/home/harlen/dev/abcg +/abcg/abcgApplication.cpp - + Node1->Node6 - - + + Node7 - - -/home/harlen/dev/abcg -/abcg/abcgApplication.cpp + + +/home/harlen/dev/abcg +/abcg/abcgException.cpp Node1->Node7 - - + + Node8 - - -/home/harlen/dev/abcg -/abcg/abcgException.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLError.hpp Node1->Node8 - - + + - - -Node9 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLError.hpp + + +Node11 + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLImage.cpp - - -Node1->Node9 - - + + +Node1->Node11 + + Node12 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLImage.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLShader.cpp Node1->Node12 - - + + Node13 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLShader.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.cpp Node1->Node13 - - + + Node14 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp Node1->Node14 - - + + Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanError.hpp Node1->Node15 - - - - - -Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp - - - - - -Node1->Node16 - - + + Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanError.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - + Node1->Node17 - - + + + + + +Node18 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp + + + + + +Node1->Node18 + + Node19 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.cpp - + Node1->Node19 - - + + Node20 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp - + Node1->Node20 - - + + Node21 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - + Node1->Node21 - - - - - -Node22 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp - - - - - -Node1->Node22 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgOpenGL.hpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGL.hpp Node2->Node3 - - + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node2->Node4 - - + + Node4->Node5 - - + + + + + +Node9 + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLError.cpp + - - -Node4->Node6 - - + + + +Node8->Node9 + + Node10 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLError.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLFunction.cpp - + -Node9->Node10 - - - - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLFunction.cpp - - +Node8->Node10 + + - - -Node9->Node11 - - - - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanError.cpp + + +Node16 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanError.cpp - - -Node17->Node18 - - + + +Node15->Node16 + + - - -Node17->Node19 - - + + +Node15->Node17 + + diff --git a/abcg/doc/html/abcgException_8hpp_source.html b/abcg/doc/html/abcgException_8hpp_source.html index 47437362e..dca103246 100644 --- a/abcg/doc/html/abcgException_8hpp_source.html +++ b/abcg/doc/html/abcgException_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -133,109 +133,85 @@
39 class RuntimeError;
40 class SDLError;
41 class SDLImageError;
-
42 
-
43 // @cond Skipped by Doxygen
-
44 constexpr inline auto codeBoldRed{"\033[1;31m"};
-
45 constexpr inline auto codeBoldYellow{"\033[1;33m"};
-
46 constexpr inline auto codeBoldBlue{"\033[1;34m"};
-
47 constexpr inline auto codeReset{"\033[0m"};
-
48 
-
49 [[maybe_unused]] [[nodiscard]] inline std::string
-
50 toRedString(std::string_view str) {
-
51  return std::string{codeBoldRed} + str.data() + std::string{codeReset};
-
52 }
-
53 
-
54 [[maybe_unused]] [[nodiscard]] inline std::string
-
55 toYellowString(std::string_view str) {
-
56  return std::string{codeBoldYellow} + str.data() + std::string{codeReset};
-
57 }
+
42 } // namespace abcg
+
43 
+
49 class abcg::Exception : public std::exception {
+
50 public:
+
51  explicit Exception(std::string_view what);
+
52 
+
53  [[nodiscard]] char const *what() const noexcept override;
+
54 
+
55 private:
+
56  std::string m_what{};
+
57 };
58 
-
59 [[maybe_unused]] [[nodiscard]] inline std::string
-
60 toBlueString(std::string_view str) {
-
61  return std::string{codeBoldBlue} + str.data() + std::string{codeReset};
-
62 }
-
63 // @endcond
-
64 } // namespace abcg
-
65 
-
71 class abcg::Exception : public std::exception {
-
72 public:
-
73  explicit Exception(std::string_view what);
-
74 
-
80  [[nodiscard]] const char *what() const noexcept override {
-
81  return m_what.data();
-
82  };
-
83 
-
84 private:
-
85  std::string m_what{};
-
86 };
-
87 
- -
97 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
-
98 public:
-
99  explicit RuntimeError(
-
100  std::string_view what,
-
101  source_location const &sourceLocation = source_location::current());
-
102 
-
103 private:
-
104  [[nodiscard]] static std::string
-
105  prettyPrint(std::string_view what, source_location const &sourceLocation);
-
106 #else
-
107 public:
-
108  explicit RuntimeError(std::string_view what);
-
109 
-
110 private:
-
111  [[nodiscard]] static std::string prettyPrint(std::string_view what);
-
112 #endif
-
113 };
-
114 
- -
125 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
-
126 public:
-
127  explicit SDLError(
-
128  std::string_view what,
-
129  source_location const &sourceLocation = source_location::current());
-
130 
-
131 private:
-
132  [[nodiscard]] static std::string
-
133  prettyPrint(std::string_view what, source_location const &sourceLocation);
-
134 #else
-
135 public:
-
136  explicit SDLError(std::string_view what);
-
137 
-
138 private:
-
139  [[nodiscard]] static std::string prettyPrint(std::string_view what);
-
140 #endif
-
141 };
-
142 
- -
153 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
-
154 public:
-
155  explicit SDLImageError(
-
156  std::string_view what,
-
157  source_location const &sourceLocation = source_location::current());
-
158 
-
159 private:
-
160  [[nodiscard]] static std::string
-
161  prettyPrint(std::string_view what, source_location const &sourceLocation);
-
162 #else
-
163 public:
-
164  explicit SDLImageError(std::string_view what);
-
165 
-
166 private:
-
167  [[nodiscard]] static std::string prettyPrint(std::string_view what);
-
168 #endif
-
169 };
-
170 
-
171 #endif
-
Base class for ABCg exception objects.
Definition: abcgException.hpp:71
-
Exception(std::string_view what)
Constructs an abcg::Exception object.
Definition: abcgException.cpp:24
-
const char * what() const noexcept override
Returns the explanatory string.
Definition: abcgException.hpp:80
-
Represents an exception object for runtime errors.
Definition: abcgException.hpp:96
-
RuntimeError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::RuntimeError object.
Definition: abcgException.cpp:36
-
Represents an exception object for SDL errors.
Definition: abcgException.hpp:124
-
SDLError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::SDLError object.
Definition: abcgException.cpp:57
-
Represents an exception object for SDL_image errors.
Definition: abcgException.hpp:152
-
SDLImageError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::SDLError object.
Definition: abcgException.cpp:78
+ +
68 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
+
69 public:
+
70  explicit RuntimeError(
+
71  std::string_view what,
+
72  source_location const &sourceLocation = source_location::current());
+
73 
+
74 private:
+
75  static std::string prettyPrint(std::string_view what,
+
76  source_location const &sourceLocation);
+
77 #else
+
78 public:
+
79  explicit RuntimeError(std::string_view what);
+
80 
+
81 private:
+
82  static std::string prettyPrint(std::string_view what);
+
83 #endif
+
84 };
+
85 
+ +
96 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
+
97 public:
+
98  explicit SDLError(
+
99  std::string_view what,
+
100  source_location const &sourceLocation = source_location::current());
+
101 
+
102 private:
+
103  static std::string prettyPrint(std::string_view what,
+
104  source_location const &sourceLocation);
+
105 #else
+
106 public:
+
107  explicit SDLError(std::string_view what);
+
108 
+
109 private:
+
110  static std::string prettyPrint(std::string_view what);
+
111 #endif
+
112 };
+
113 
+ +
124 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
+
125 public:
+
126  explicit SDLImageError(
+
127  std::string_view what,
+
128  source_location const &sourceLocation = source_location::current());
+
129 
+
130 private:
+
131  static std::string prettyPrint(std::string_view what,
+
132  source_location const &sourceLocation);
+
133 #else
+
134 public:
+
135  explicit SDLImageError(std::string_view what);
+
136 
+
137 private:
+
138  static std::string prettyPrint(std::string_view what);
+
139 #endif
+
140 };
+
141 
+
142 #endif
+
Base class for ABCg exception objects.
Definition: abcgException.hpp:49
+
char const * what() const noexcept override
Returns the explanatory string.
Definition: abcgException.cpp:30
+
Exception(std::string_view what)
Constructs an abcg::Exception object.
Definition: abcgException.cpp:23
+
Represents an exception object for runtime errors.
Definition: abcgException.hpp:67
+
RuntimeError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::RuntimeError object.
Definition: abcgException.cpp:42
+
Represents an exception object for SDL errors.
Definition: abcgException.hpp:95
+
SDLError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::SDLError object.
Definition: abcgException.cpp:63
+
Represents an exception object for SDL_image errors.
Definition: abcgException.hpp:123
+
SDLImageError(std::string_view what, source_location const &sourceLocation=source_location::current())
Constructs an abcg::SDLError object.
Definition: abcgException.cpp:84
Root namespace.
Definition: abcgApplication.hpp:23
std::source_location source_location
Definition: abcgOpenGLError.hpp:25
diff --git a/abcg/doc/html/abcgExternal_8hpp.html b/abcg/doc/html/abcgExternal_8hpp.html index 9b8d55762..cea63d93f 100644 --- a/abcg/doc/html/abcgExternal_8hpp.html +++ b/abcg/doc/html/abcgExternal_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,7 +109,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -118,7 +118,7 @@

Header file for including third-party dependencies.

Preprocessor definitions and includes of third-party dependencies.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgExternal_8hpp__dep__incl.map b/abcg/doc/html/abcgExternal_8hpp__dep__incl.map index 73840ac85..3390527d6 100644 --- a/abcg/doc/html/abcgExternal_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgExternal_8hpp__dep__incl.map @@ -1,21 +1,18 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgExternal_8hpp__dep__incl.md5 b/abcg/doc/html/abcgExternal_8hpp__dep__incl.md5 index c6415a7d3..fa555865f 100644 --- a/abcg/doc/html/abcgExternal_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgExternal_8hpp__dep__incl.md5 @@ -1 +1 @@ -c042650ad764420461f748b16610e9f5 \ No newline at end of file +d009d42d1b25fc100970bf0833593827 \ No newline at end of file diff --git a/abcg/doc/html/abcgExternal_8hpp__dep__incl.svg b/abcg/doc/html/abcgExternal_8hpp__dep__incl.svg index 90e9fa453..573896905 100644 --- a/abcg/doc/html/abcgExternal_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgExternal_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgExternal.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgExternal.hpp + +/home/harlen/dev/abcg +/abcg/abcgExternal.hpp @@ -22,337 +22,283 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcg.hpp + +/home/harlen/dev/abcg +/abcg/abcg.hpp Node1->Node2 - - + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLError.cpp + + + + + +Node1->Node6 + + Node7 - - -/home/harlen/dev/abcg -/abcg/abcgException.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.hpp Node1->Node7 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLError.cpp - - - - - -Node1->Node8 - - + + Node9 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.hpp + + +/home/harlen/dev/abcg +/abcg/abcgTrackball.hpp - + Node1->Node9 - - + + Node11 - - -/home/harlen/dev/abcg -/abcg/abcgTrackball.hpp + + +/home/harlen/dev/abcg +/abcg/abcgWindow.hpp - + Node1->Node11 - - - - - -Node13 - - -/home/harlen/dev/abcg -/abcg/abcgWindow.hpp - - - - - -Node1->Node13 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgOpenGL.hpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGL.hpp Node2->Node3 - - + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node2->Node4 - - + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node4->Node5 - - + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + + +Node7->Node3 + + + + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.cpp - - -Node4->Node6 - - + + +Node7->Node8 + + - - -Node9->Node3 - - + + +Node9->Node2 + + Node10 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgTrackball.cpp - + Node9->Node10 - - + + - + Node11->Node2 - - + + + + + +Node11->Node7 + + + + + +Node11->Node8 + + Node12 - - -/home/harlen/dev/abcg -/abcg/abcgTrackball.cpp + + +/home/harlen/dev/abcg +/abcg/abcgApplication.cpp - + Node11->Node12 - - + + - - -Node13->Node2 - - - - - -Node13->Node5 - - + + +Node13 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp + - - -Node13->Node9 - - - + -Node13->Node10 - - +Node11->Node13 + + Node14 - - -/home/harlen/dev/abcg -/abcg/abcgApplication.cpp - - - - - -Node13->Node14 - - - - - -Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - - -Node13->Node15 - - + + +Node11->Node14 + + Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp - - - - - -Node13->Node16 - - - - - -Node19 - - -/home/harlen/dev/abcg -/abcg/abcgWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgWindow.cpp - - -Node13->Node19 - - - - + -Node16->Node4 - - - - - -Node16->Node15 - - - - - -Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - +Node11->Node16 + + + + +Node14->Node4 + + - - -Node16->Node17 - - + + +Node14->Node13 + + - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +Node15 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node16->Node18 - - + + +Node14->Node15 + + diff --git a/abcg/doc/html/abcgExternal_8hpp_source.html b/abcg/doc/html/abcgExternal_8hpp_source.html index 7676e1a2e..c28d9eacb 100644 --- a/abcg/doc/html/abcgExternal_8hpp_source.html +++ b/abcg/doc/html/abcgExternal_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgImage_8cpp.html b/abcg/doc/html/abcgImage_8cpp.html index 6e0f825d3..2c503121e 100644 --- a/abcg/doc/html/abcgImage_8cpp.html +++ b/abcg/doc/html/abcgImage_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -104,25 +104,23 @@
-

Definition of texture loading helper functions. +

Definition of image manipulation helper functions. More...

#include "abcgImage.hpp"
-#include <cmath>
#include <cppitertools/itertools.hpp>
#include <gsl/gsl>
-#include <iterator>
#include <span>
#include <vector>
Include dependency graph for abcgImage.cpp:
-
+

Detailed Description

-

Definition of texture loading helper functions.

+

Definition of image manipulation helper functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgImage_8cpp__incl.map b/abcg/doc/html/abcgImage_8cpp__incl.map index 95b8fde0d..755d9f4b3 100644 --- a/abcg/doc/html/abcgImage_8cpp__incl.map +++ b/abcg/doc/html/abcgImage_8cpp__incl.map @@ -1,12 +1,9 @@ - - - - - - - - - - + + + + + + + diff --git a/abcg/doc/html/abcgImage_8cpp__incl.md5 b/abcg/doc/html/abcgImage_8cpp__incl.md5 index 488996364..78dff93f6 100644 --- a/abcg/doc/html/abcgImage_8cpp__incl.md5 +++ b/abcg/doc/html/abcgImage_8cpp__incl.md5 @@ -1 +1 @@ -13a23507d7e663a9e023e10d1e70f19a \ No newline at end of file +7e0a277d03c46d4ef668f093e756341f \ No newline at end of file diff --git a/abcg/doc/html/abcgImage_8cpp__incl.svg b/abcg/doc/html/abcgImage_8cpp__incl.svg index 1a77c46ad..840a3dadb 100644 --- a/abcg/doc/html/abcgImage_8cpp__incl.svg +++ b/abcg/doc/html/abcgImage_8cpp__incl.svg @@ -4,154 +4,109 @@ - + /home/harlen/dev/abcg/abcg/abcgImage.cpp Node1 - - -/home/harlen/dev/abcg -/abcg/abcgImage.cpp + + +/home/harlen/dev/abcg +/abcg/abcgImage.cpp Node2 - - -abcgImage.hpp + + +abcgImage.hpp Node1->Node2 - - + + + + + +Node4 + + +cppitertools/itertools.hpp + + + + + +Node1->Node4 + + Node5 - -cmath + +gsl/gsl Node1->Node5 - - + + Node6 - -cppitertools/itertools.hpp + +span Node1->Node6 - - + + Node7 - -gsl/gsl + +vector Node1->Node7 - - - - - -Node8 - - -iterator - - - - - -Node1->Node8 - - - - - -Node9 - - -span - - - - - -Node1->Node9 - - - - - -Node10 - - -vector - - - - - -Node1->Node10 - - + + Node3 - -SDL_image.h + +SDL_image.h Node2->Node3 - - - - - -Node4 - - -gsl/pointers - - - - - -Node2->Node4 - - + + diff --git a/abcg/doc/html/abcgImage_8hpp.html b/abcg/doc/html/abcgImage_8hpp.html index 12521fbe6..a758386db 100644 --- a/abcg/doc/html/abcgImage_8hpp.html +++ b/abcg/doc/html/abcgImage_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,14 +107,13 @@
-

Declaration of texture loading helper functions. +

Declaration of image manipulation helper functions. More...

#include <SDL_image.h>
-#include <gsl/pointers>
Include dependency graph for abcgImage.hpp:
-
+
@@ -134,17 +133,17 @@ - - - - - - + + + + + +

Functions

void abcg::flipHorizontally (gsl::not_null< SDL_Surface * > surface)
 Flips an image horizontally. More...
 
void abcg::flipVertically (gsl::not_null< SDL_Surface * > surface)
 Flips an image vertically. More...
 
void abcg::flipHorizontally (SDL_Surface &surface)
 Flips an image horizontally. More...
 
void abcg::flipVertically (SDL_Surface &surface)
 Flips an image vertically. More...
 

Detailed Description

-

Declaration of texture loading helper functions.

+

Declaration of image manipulation helper functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgImage_8hpp.js b/abcg/doc/html/abcgImage_8hpp.js index e23041892..96fc758f8 100644 --- a/abcg/doc/html/abcgImage_8hpp.js +++ b/abcg/doc/html/abcgImage_8hpp.js @@ -1,5 +1,5 @@ var abcgImage_8hpp = [ - [ "flipHorizontally", "abcgImage_8hpp.html#a0d46e744a39225a18d381362cea62104", null ], - [ "flipVertically", "abcgImage_8hpp.html#abc2b77e7547e5e73f00d7167f7a2f6b9", null ] + [ "flipHorizontally", "abcgImage_8hpp.html#a070a6d04f8ddd3f8ffc85556822ad9b9", null ], + [ "flipVertically", "abcgImage_8hpp.html#afbf3c358b10f7ef9aef38acb758e12ca", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/abcgImage_8hpp__dep__incl.map b/abcg/doc/html/abcgImage_8hpp__dep__incl.map index 5ef991306..70ce1b41f 100644 --- a/abcg/doc/html/abcgImage_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgImage_8hpp__dep__incl.map @@ -1,5 +1,5 @@ - - + + diff --git a/abcg/doc/html/abcgImage_8hpp__dep__incl.md5 b/abcg/doc/html/abcgImage_8hpp__dep__incl.md5 index e896499d1..835493536 100644 --- a/abcg/doc/html/abcgImage_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgImage_8hpp__dep__incl.md5 @@ -1 +1 @@ -78f572547000ca3a61d6ff908b8658e0 \ No newline at end of file +27af4522ff672b07829d1ab388d56812 \ No newline at end of file diff --git a/abcg/doc/html/abcgImage_8hpp__dep__incl.svg b/abcg/doc/html/abcgImage_8hpp__dep__incl.svg index 5a8fb1dcf..79f7d5e1f 100644 --- a/abcg/doc/html/abcgImage_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgImage_8hpp__dep__incl.svg @@ -11,7 +11,7 @@ Node1 - + /home/harlen/dev/abcg /abcg/abcgImage.hpp @@ -21,7 +21,7 @@ Node2 - + /home/harlen/dev/abcg /abcg/abcgImage.cpp diff --git a/abcg/doc/html/abcgImage_8hpp__incl.map b/abcg/doc/html/abcgImage_8hpp__incl.map index 468368557..124b5d21a 100644 --- a/abcg/doc/html/abcgImage_8hpp__incl.map +++ b/abcg/doc/html/abcgImage_8hpp__incl.map @@ -1,5 +1,4 @@ - - - + + diff --git a/abcg/doc/html/abcgImage_8hpp__incl.md5 b/abcg/doc/html/abcgImage_8hpp__incl.md5 index 8f7f67a87..dc6afc497 100644 --- a/abcg/doc/html/abcgImage_8hpp__incl.md5 +++ b/abcg/doc/html/abcgImage_8hpp__incl.md5 @@ -1 +1 @@ -0b38689638a327a18e1c9ea6f47432ca \ No newline at end of file +dc998fd3c71215ae1a348b0d146fa81f \ No newline at end of file diff --git a/abcg/doc/html/abcgImage_8hpp__incl.svg b/abcg/doc/html/abcgImage_8hpp__incl.svg index c354b9de6..92ede1958 100644 --- a/abcg/doc/html/abcgImage_8hpp__incl.svg +++ b/abcg/doc/html/abcgImage_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgImage.hpp Node1 - - -/home/harlen/dev/abcg -/abcg/abcgImage.hpp + + +/home/harlen/dev/abcg +/abcg/abcgImage.hpp @@ -22,31 +22,16 @@ Node2 - -SDL_image.h + +SDL_image.h Node1->Node2 - - - - - -Node3 - - -gsl/pointers - - - - - -Node1->Node3 - - + + diff --git a/abcg/doc/html/abcgImage_8hpp_source.html b/abcg/doc/html/abcgImage_8hpp_source.html index ac9373c24..d62977b11 100644 --- a/abcg/doc/html/abcgImage_8hpp_source.html +++ b/abcg/doc/html/abcgImage_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,17 +108,16 @@
12 #define ABCG_IMAGE_HPP_
13 
14 #include <SDL_image.h>
-
15 #include <gsl/pointers>
-
16 
-
17 namespace abcg {
-
18 void flipHorizontally(gsl::not_null<SDL_Surface *> surface);
-
19 void flipVertically(gsl::not_null<SDL_Surface *> surface);
-
20 } // namespace abcg
-
21 
-
22 #endif
+
15 
+
16 namespace abcg {
+
17 void flipHorizontally(SDL_Surface &surface);
+
18 void flipVertically(SDL_Surface &surface);
+
19 } // namespace abcg
+
20 
+
21 #endif
Root namespace.
Definition: abcgApplication.hpp:23
-
void flipHorizontally(gsl::not_null< SDL_Surface * > surface)
Flips an image horizontally.
Definition: abcgImage.cpp:28
-
void flipVertically(gsl::not_null< SDL_Surface * > surface)
Flips an image vertically.
Definition: abcgImage.cpp:68
+
void flipHorizontally(SDL_Surface &surface)
Flips an image horizontally.
Definition: abcgImage.cpp:26
+
void flipVertically(SDL_Surface &surface)
Flips an image vertically.
Definition: abcgImage.cpp:66
diff --git a/abcg/doc/html/abcgOpenGLError_8cpp.html b/abcg/doc/html/abcgOpenGLError_8cpp.html index 7909bbf1e..1a68dd6bc 100644 --- a/abcg/doc/html/abcgOpenGLError_8cpp.html +++ b/abcg/doc/html/abcgOpenGLError_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,16 +109,17 @@
#include "abcgOpenGLError.hpp"
#include "abcgExternal.hpp"
#include "abcgOpenGLExternal.hpp"
+#include "abcgUtil.hpp"
Include dependency graph for abcgOpenGLError.cpp:
-
+

Detailed Description

Definition of abcg::OpenGLError members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLError_8cpp__incl.map b/abcg/doc/html/abcgOpenGLError_8cpp__incl.map index c872511c9..b79b8d5a4 100644 --- a/abcg/doc/html/abcgOpenGLError_8cpp__incl.map +++ b/abcg/doc/html/abcgOpenGLError_8cpp__incl.map @@ -1,10 +1,12 @@ - - - - - - - - + + + + + + + + + + diff --git a/abcg/doc/html/abcgOpenGLError_8cpp__incl.md5 b/abcg/doc/html/abcgOpenGLError_8cpp__incl.md5 index 25a5931e7..2ea6d8114 100644 --- a/abcg/doc/html/abcgOpenGLError_8cpp__incl.md5 +++ b/abcg/doc/html/abcgOpenGLError_8cpp__incl.md5 @@ -1 +1 @@ -e5924eea95d805fe7eef87fcf9b1ae02 \ No newline at end of file +a13dbc5fb09db22a5734aab1aa8c9b6b \ No newline at end of file diff --git a/abcg/doc/html/abcgOpenGLError_8cpp__incl.svg b/abcg/doc/html/abcgOpenGLError_8cpp__incl.svg index 401d77c6b..e3e68098e 100644 --- a/abcg/doc/html/abcgOpenGLError_8cpp__incl.svg +++ b/abcg/doc/html/abcgOpenGLError_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgOpenGLError.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgOpenGLError.cpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGLError.cpp @@ -22,112 +22,148 @@ Node2 - -abcgOpenGLError.hpp + +abcgOpenGLError.hpp Node1->Node2 - - + + Node7 - -abcgExternal.hpp + +abcgExternal.hpp Node1->Node7 - - + + Node8 - -abcgOpenGLExternal.hpp + +abcgOpenGLExternal.hpp Node1->Node8 - - + + + + + +Node9 + + +abcgUtil.hpp + + + + + +Node1->Node9 + + Node3 - -source_location + +source_location Node2->Node3 - - + + Node4 - -abcgException.hpp + +abcgException.hpp Node2->Node4 - - + + Node4->Node3 - - + + Node5 - -stdexcept + +stdexcept Node4->Node5 - - + + Node6 - -string + +string Node4->Node6 - - + + + + + +Node9->Node6 + + + + + +Node10 + + +functional + + + + + +Node9->Node10 + + diff --git a/abcg/doc/html/abcgOpenGLError_8hpp.html b/abcg/doc/html/abcgOpenGLError_8hpp.html index 4e28d5bab..cf9866dda 100644 --- a/abcg/doc/html/abcgOpenGLError_8hpp.html +++ b/abcg/doc/html/abcgOpenGLError_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -148,7 +148,7 @@

Header file of abcg::OpenGLError and derived classes.

Declaration of abcg::OpenGLError and derived classes.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLError_8hpp_source.html b/abcg/doc/html/abcgOpenGLError_8hpp_source.html index 8eb201b0f..3e7f3fbc2 100644 --- a/abcg/doc/html/abcgOpenGLError_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLError_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -131,32 +131,29 @@
46 #if !defined(NDEBUG) && !defined(__EMSCRIPTEN__) && !defined(__APPLE__)
47 public:
48  explicit OpenGLError(
-
49  std::string_view what, unsigned int errorCode,
+
49  std::string_view what, unsigned int errorCode,
50  source_location const &sourceLocation = source_location::current());
51 
52 private:
-
53  [[nodiscard]] static std::string
-
54  prettyPrint(std::string_view what, unsigned int errorCode,
-
55  source_location const &sourceLocation);
-
56 #else
-
57 public:
-
58  explicit OpenGLError(std::string_view what, unsigned int errorCode);
-
59 
-
60 private:
-
61  [[nodiscard]] static std::string prettyPrint(std::string_view what,
-
62  unsigned int errorCode);
-
63 #endif
-
64 
-
65  [[nodiscard]] static std::string_view
-
66  getGLErrorString(unsigned int errorCode);
-
67 };
-
68 
-
69 #endif
+
53  static std::string prettyPrint(std::string_view what, unsigned int errorCode,
+
54  source_location const &sourceLocation);
+
55 #else
+
56 public:
+
57  explicit OpenGLError(std::string_view what, unsigned int errorCode);
+
58 
+
59 private:
+
60  static std::string prettyPrint(std::string_view what, unsigned int errorCode);
+
61 #endif
+
62 
+
63  static std::string_view getGLErrorString(unsigned int errorCode);
+
64 };
+
65 
+
66 #endif
Header file of abcg::Exception and derived classes.
-
Base class for ABCg exception objects.
Definition: abcgException.hpp:71
-
const char * what() const noexcept override
Returns the explanatory string.
Definition: abcgException.hpp:80
+
Base class for ABCg exception objects.
Definition: abcgException.hpp:49
+
char const * what() const noexcept override
Returns the explanatory string.
Definition: abcgException.cpp:30
Represents an exception object for OpenGL errors.
Definition: abcgOpenGLError.hpp:45
-
OpenGLError(std::string_view what, unsigned int errorCode, source_location const &sourceLocation=source_location::current())
Constructs an abcg::OpenGLError object.
Definition: abcgOpenGLError.cpp:27
+
OpenGLError(std::string_view what, unsigned int errorCode, source_location const &sourceLocation=source_location::current())
Constructs an abcg::OpenGLError object.
Definition: abcgOpenGLError.cpp:28
Root namespace.
Definition: abcgApplication.hpp:23
std::source_location source_location
Definition: abcgOpenGLError.hpp:25
diff --git a/abcg/doc/html/abcgOpenGLExternal_8hpp.html b/abcg/doc/html/abcgOpenGLExternal_8hpp.html index f6e3996bc..8736f8707 100644 --- a/abcg/doc/html/abcgOpenGLExternal_8hpp.html +++ b/abcg/doc/html/abcgOpenGLExternal_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -118,7 +118,7 @@

Header file for including OpenGL-related third-party dependencies.

Preprocessor definitions and includes of OpenGL-related third-party dependencies.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLExternal_8hpp_source.html b/abcg/doc/html/abcgOpenGLExternal_8hpp_source.html index 082861c70..61a5f2181 100644 --- a/abcg/doc/html/abcgOpenGLExternal_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLExternal_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgOpenGLFunction_8cpp.html b/abcg/doc/html/abcgOpenGLFunction_8cpp.html index e3514d07d..2acdad4c7 100644 --- a/abcg/doc/html/abcgOpenGLFunction_8cpp.html +++ b/abcg/doc/html/abcgOpenGLFunction_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -117,7 +117,7 @@

Detailed Description

Definition of OpenGL-related error checking functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLFunction_8hpp.html b/abcg/doc/html/abcgOpenGLFunction_8hpp.html index eebfd5575..5f06b09cb 100644 --- a/abcg/doc/html/abcgOpenGLFunction_8hpp.html +++ b/abcg/doc/html/abcgOpenGLFunction_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -650,7 +650,7 @@

Declaration of OpenGL-related error checking functions.

Error checking wrappers for OpenGL functions are defined here as inline functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLFunction_8hpp_source.html b/abcg/doc/html/abcgOpenGLFunction_8hpp_source.html index 61f36019c..99d3fa9d7 100644 --- a/abcg/doc/html/abcgOpenGLFunction_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLFunction_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgOpenGLImage_8cpp.html b/abcg/doc/html/abcgOpenGLImage_8cpp.html index f05d4511d..a117920a3 100644 --- a/abcg/doc/html/abcgOpenGLImage_8cpp.html +++ b/abcg/doc/html/abcgOpenGLImage_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -110,20 +110,18 @@ #include "abcgImage.hpp"
#include <cppitertools/itertools.hpp>
#include <fmt/core.h>
-#include <fstream>
#include <gsl/gsl>
-#include <vector>
#include "abcgException.hpp"
Include dependency graph for abcgOpenGLImage.cpp:
-
+

Detailed Description

Definition of OpenGL texture loading helper functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.map b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.map index 353ffb825..c681518f6 100644 --- a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.map +++ b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.map @@ -1,19 +1,16 @@ - + - - - - - - - + + + + + - - - - + + + diff --git a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.md5 b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.md5 index c8bfe8be0..6b27341a0 100644 --- a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.md5 +++ b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.md5 @@ -1 +1 @@ -ad79c786cd23c45884aecac7b9f73287 \ No newline at end of file +2a7733979ce8de001648e558e8dcfc1a \ No newline at end of file diff --git a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.svg b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.svg index b8f59ae65..450421581 100644 --- a/abcg/doc/html/abcgOpenGLImage_8cpp__incl.svg +++ b/abcg/doc/html/abcgOpenGLImage_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgOpenGLImage.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgOpenGLImage.cpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGLImage.cpp @@ -30,113 +30,83 @@ Node1->Node2 - - + + Node6 - - -abcgImage.hpp + + +abcgImage.hpp Node1->Node6 - - + + + + + +Node8 + + +cppitertools/itertools.hpp + + + + + +Node1->Node8 + + Node9 - -cppitertools/itertools.hpp + +fmt/core.h Node1->Node9 - - + + Node10 - -fmt/core.h + +gsl/gsl Node1->Node10 - - + + Node11 - - -fstream + + +abcgException.hpp Node1->Node11 - - - - - -Node12 - - -gsl/gsl - - - - - -Node1->Node12 - - - - - -Node13 - - -vector - - - - - -Node1->Node13 - - - - - -Node14 - - -abcgException.hpp - - - - - -Node1->Node14 - - + + @@ -195,68 +165,53 @@ Node6->Node7 - - - - - -Node8 - - -gsl/pointers - - + + - - -Node6->Node8 - - - - - -Node15 - - -source_location + + +Node12 + + +source_location - - -Node14->Node15 - - + + +Node11->Node12 + + - - -Node16 - - -stdexcept + + +Node13 + + +stdexcept - - -Node14->Node16 - - + + +Node11->Node13 + + - - -Node17 - - -string + + +Node14 + + +string - - -Node14->Node17 - - + + +Node11->Node14 + + diff --git a/abcg/doc/html/abcgOpenGLImage_8hpp.html b/abcg/doc/html/abcgOpenGLImage_8hpp.html index a678eef42..6e3220c00 100644 --- a/abcg/doc/html/abcgOpenGLImage_8hpp.html +++ b/abcg/doc/html/abcgOpenGLImage_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -131,10 +131,10 @@

Classes

struct  abcg::OpenGLTextureCreateInfo - Configuration settings for creating an OpenGL 2D texture. More...
+ Configuration settings for creating a 2D texture for OpenGL. More...
  struct  abcg::OpenGLCubemapCreateInfo - Configuration settings for creating an OpenGL 2D texture. More...
+ Configuration settings for creating a cubemap texture for OpenGL. More...
  + +

@@ -146,14 +146,16 @@

Functions

GLuint abcg::loadOpenGLTexture (OpenGLTextureCreateInfo const &createInfo)
 Creates an OpenGL 2D texture from an image loaded from a filesystem path. More...
 
GLuint abcg::loadOpenGLCubemap (OpenGLCubemapCreateInfo const &createInfo)
 Creates an OpenGL cubemap texture from a set of images loaded from filesystem paths. More...
 

Detailed Description

Declaration of OpenGL texture loading helper functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLImage_8hpp_source.html b/abcg/doc/html/abcgOpenGLImage_8hpp_source.html index 9888e3fcb..170f764cc 100644 --- a/abcg/doc/html/abcgOpenGLImage_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLImage_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -138,14 +138,14 @@
58 #endif
Header file for including OpenGL-related third-party dependencies.
Root namespace.
Definition: abcgApplication.hpp:23
-
GLuint loadOpenGLCubemap(OpenGLCubemapCreateInfo const &createInfo)
Definition: abcgOpenGLImage.cpp:83
-
GLuint loadOpenGLTexture(OpenGLTextureCreateInfo const &createInfo)
Definition: abcgOpenGLImage.cpp:22
-
Configuration settings for creating an OpenGL 2D texture.
Definition: abcgOpenGLImage.hpp:47
+
GLuint loadOpenGLCubemap(OpenGLCubemapCreateInfo const &createInfo)
Creates an OpenGL cubemap texture from a set of images loaded from filesystem paths.
Definition: abcgOpenGLImage.cpp:101
+
GLuint loadOpenGLTexture(OpenGLTextureCreateInfo const &createInfo)
Creates an OpenGL 2D texture from an image loaded from a filesystem path.
Definition: abcgOpenGLImage.cpp:30
+
Configuration settings for creating a cubemap texture for OpenGL.
Definition: abcgOpenGLImage.hpp:47
bool rightHandedSystem
Whether to convert the cubemap from a left-handed system to a right-handed system.
Definition: abcgOpenGLImage.hpp:55
-
std::array< std::string_view, 6 > paths
Array of paths to the texture files containing the sides of the cube map, given in the order +x,...
Definition: abcgOpenGLImage.hpp:50
+
std::array< std::string_view, 6 > paths
Array of paths to the image files (PNG or JPEG) containing the sides of the cube map,...
Definition: abcgOpenGLImage.hpp:50
bool generateMipmaps
Whether to generate mipmap levels.
Definition: abcgOpenGLImage.hpp:52
-
Configuration settings for creating an OpenGL 2D texture.
Definition: abcgOpenGLImage.hpp:32
-
std::string_view path
Path to the texture file.
Definition: abcgOpenGLImage.hpp:34
+
Configuration settings for creating a 2D texture for OpenGL.
Definition: abcgOpenGLImage.hpp:32
+
std::string_view path
Path to the image file (PNG or JPEG).
Definition: abcgOpenGLImage.hpp:34
bool sRGBToLinear
Whether to apply gamma decoding (expansion) to convert an image in sRGB space to linear space.
Definition: abcgOpenGLImage.hpp:41
bool flipUpsideDown
Whether to flip the image upside down.
Definition: abcgOpenGLImage.hpp:38
bool generateMipmaps
Whether to generate mipmap levels.
Definition: abcgOpenGLImage.hpp:36
diff --git a/abcg/doc/html/abcgOpenGLShader_8cpp.html b/abcg/doc/html/abcgOpenGLShader_8cpp.html index 1c071da94..31d1e7f14 100644 --- a/abcg/doc/html/abcgOpenGLShader_8cpp.html +++ b/abcg/doc/html/abcgOpenGLShader_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -99,8 +99,6 @@
-
/home/harlen/dev/abcg/abcg/abcgOpenGLShader.cpp File Reference
@@ -109,52 +107,25 @@

Definition of helper functions for building OpenGL shaders. More...

#include "abcgOpenGLShader.hpp"
-#include "abcgApplication.hpp"
#include <cppitertools/itertools.hpp>
#include <fmt/core.h>
#include <gsl/gsl>
#include <filesystem>
#include <fstream>
-#include <optional>
#include <sstream>
#include <vector>
#include "abcgException.hpp"
Include dependency graph for abcgOpenGLShader.cpp:
-
+
-
- - - -

-Functions

GLuint abcgStageToOpenGLStage (abcg::ShaderStage stage)
 
-

Detailed Description

+

Detailed Description

Definition of helper functions for building OpenGL shaders.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- -

Function Documentation

- -

◆ abcgStageToOpenGLStage()

- -
-
- - - - - - - - -
GLuint abcgStageToOpenGLStage (abcg::ShaderStage stage)
-
- -
-
- + + diff --git a/abcg/doc/html/abcgOpenGLShader_8hpp_source.html b/abcg/doc/html/abcgOpenGLShader_8hpp_source.html index 0a7a114a8..fda619e12 100644 --- a/abcg/doc/html/abcgOpenGLShader_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLShader_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -127,17 +127,14 @@
36  bool throwOnError = true);
37 [[nodiscard]] std::vector<abcg::OpenGLShader>
38 triggerOpenGLShaderCompile(std::vector<ShaderSource> const &pathsOrSources);
-
39 [[nodiscard]] bool
-
40 checkOpenGLShaderCompile(std::vector<OpenGLShader> const &shaders,
-
41  bool throwOnError = true);
-
42 [[nodiscard]] GLuint
-
43 triggerOpenGLShaderLink(std::vector<OpenGLShader> const &shaders,
-
44  bool throwOnError = true);
-
45 [[nodiscard]] bool checkOpenGLShaderLink(GLuint shaderProgram,
-
46  bool throwOnError = true);
-
47 } // namespace abcg
-
48 
-
49 #endif
+
39 bool checkOpenGLShaderCompile(std::vector<OpenGLShader> const &shaders,
+
40  bool throwOnError = true);
+
41 GLuint triggerOpenGLShaderLink(std::vector<OpenGLShader> const &shaders,
+
42  bool throwOnError = true);
+
43 bool checkOpenGLShaderLink(GLuint shaderProgram, bool throwOnError = true);
+
44 } // namespace abcg
+
45 
+
46 #endif
Header file for including OpenGL-related third-party dependencies.
Declaration of a structure for building shaders.
Root namespace.
Definition: abcgApplication.hpp:23
diff --git a/abcg/doc/html/abcgOpenGLWindow_8cpp.html b/abcg/doc/html/abcgOpenGLWindow_8cpp.html index 4c515c0e0..fc741c93b 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8cpp.html +++ b/abcg/doc/html/abcgOpenGLWindow_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -110,20 +110,20 @@ #include <SDL_events.h>
#include <SDL_image.h>
#include <imgui_impl_opengl3.h>
-#include <imgui_impl_sdl.h>
+#include <imgui_impl_sdl2.h>
#include "abcgEmbeddedFonts.hpp"
#include "abcgException.hpp"
#include "abcgWindow.hpp"
Include dependency graph for abcgOpenGLWindow.cpp:
-
+

Detailed Description

Definition of abcg::OpenGLWindow members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.map b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.map index d2d52ac44..8bf9ab62e 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.map +++ b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.map @@ -5,8 +5,8 @@ - - + + @@ -17,6 +17,6 @@ - + diff --git a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.md5 b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.md5 index ebe39df2d..2324a1579 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.md5 +++ b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.md5 @@ -1 +1 @@ -c324fad8459e518edc48e2c7e5e0ca7e \ No newline at end of file +7904b16a1ba4b194eeca7b866499fc9d \ No newline at end of file diff --git a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.svg b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.svg index 952ce9ac3..e7a002342 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.svg +++ b/abcg/doc/html/abcgOpenGLWindow_8cpp__incl.svg @@ -4,8 +4,8 @@ - + /home/harlen/dev/abcg/abcg/abcgOpenGLWindow.cpp @@ -97,31 +97,31 @@ Node16 - -imgui_impl_sdl.h + +imgui_impl_sdl2.h Node1->Node16 - - + + Node17 - -abcgEmbeddedFonts.hpp + +abcgEmbeddedFonts.hpp Node1->Node17 - - + + @@ -295,16 +295,16 @@ Node18 - -array + +array Node17->Node18 - - + + diff --git a/abcg/doc/html/abcgOpenGLWindow_8hpp.html b/abcg/doc/html/abcgOpenGLWindow_8hpp.html index 01678e0c3..eccede32e 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8hpp.html +++ b/abcg/doc/html/abcgOpenGLWindow_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -157,7 +157,7 @@

Header file of abcg::OpenGLWindow.

Declaration of abcg::OpenGLWindow.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGLWindow_8hpp_source.html b/abcg/doc/html/abcgOpenGLWindow_8hpp_source.html index 930061495..e95de2ad0 100644 --- a/abcg/doc/html/abcgOpenGLWindow_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGLWindow_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgOpenGL_8hpp.html b/abcg/doc/html/abcgOpenGL_8hpp.html index 123c26335..d509afb98 100644 --- a/abcg/doc/html/abcgOpenGL_8hpp.html +++ b/abcg/doc/html/abcgOpenGL_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -113,7 +113,7 @@
Include dependency graph for abcgOpenGL.hpp:
-
+
@@ -122,7 +122,7 @@

Header file for OpenGL-related functions and classes.

This is a shortcut for OpenGL-related headers used in ABCg.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgOpenGL_8hpp__incl.map b/abcg/doc/html/abcgOpenGL_8hpp__incl.map index caedb7e1d..2aeb8d83c 100644 --- a/abcg/doc/html/abcgOpenGL_8hpp__incl.map +++ b/abcg/doc/html/abcgOpenGL_8hpp__incl.map @@ -1,27 +1,27 @@ - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + diff --git a/abcg/doc/html/abcgOpenGL_8hpp__incl.md5 b/abcg/doc/html/abcgOpenGL_8hpp__incl.md5 index 3c2923ec4..327a3701a 100644 --- a/abcg/doc/html/abcgOpenGL_8hpp__incl.md5 +++ b/abcg/doc/html/abcgOpenGL_8hpp__incl.md5 @@ -1 +1 @@ -fc17efa35d876c577bc8d264c23ac293 \ No newline at end of file +d7e5fc97df4b1b97b5e33a490afae0a2 \ No newline at end of file diff --git a/abcg/doc/html/abcgOpenGL_8hpp__incl.svg b/abcg/doc/html/abcgOpenGL_8hpp__incl.svg index 69aeb0392..be9d6d5be 100644 --- a/abcg/doc/html/abcgOpenGL_8hpp__incl.svg +++ b/abcg/doc/html/abcgOpenGL_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgOpenGL.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgOpenGL.hpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGL.hpp @@ -22,16 +22,16 @@ Node2 - -abcg.hpp + +abcg.hpp Node1->Node2 - - + + @@ -43,25 +43,25 @@ - + Node1->Node15 - - + + Node19 - -abcgOpenGLShader.hpp + +abcgOpenGLShader.hpp - + Node1->Node19 - - + + @@ -73,340 +73,346 @@ - + Node1->Node23 - - + + Node3 - -abcgApplication.hpp + +abcgApplication.hpp Node2->Node3 - - + + Node5 - -abcgException.hpp + +abcgException.hpp Node2->Node5 - - + + Node8 - -abcgExternal.hpp + +abcgExternal.hpp Node2->Node8 - - + + Node9 - -abcgTrackball.hpp + +abcgTrackball.hpp Node2->Node9 - - + + Node12 - -abcgUtil.hpp + +abcgUtil.hpp Node2->Node12 - - + + Node14 - -abcgWindow.hpp + +abcgWindow.hpp - + Node2->Node14 - - + + Node4 - -string + +string Node3->Node4 - - + + Node5->Node4 - - + + Node6 - -source_location + +source_location Node5->Node6 - - + + Node7 - -stdexcept + +stdexcept Node5->Node7 - - + + Node9->Node8 - - + + Node10 - -abcgTimer.hpp + +abcgTimer.hpp Node9->Node10 - - + + Node11 - -chrono + +chrono Node10->Node11 - - + + + + + +Node12->Node4 + + Node13 - -functional + +functional Node12->Node13 - - + + - + Node14->Node4 - - + + - + Node14->Node8 - - + + - + Node14->Node10 - - + + Node16 - -abcgOpenGLExternal.hpp + +abcgOpenGLExternal.hpp - + Node15->Node16 - - + + Node17 - -array + +array - + Node15->Node17 - - + + Node18 - -string_view + +string_view - + Node15->Node18 - - + + - + Node19->Node16 - - + + Node20 - -abcgShader.hpp + +abcgShader.hpp - + Node19->Node20 - - + + Node22 - -vector + +vector - + Node19->Node22 - - + + - + Node20->Node4 - - + + Node21 - -optional + +optional - + Node20->Node21 - - + + - + Node23->Node4 - - + + - + Node23->Node8 - - + + - + Node23->Node14 - - + + @@ -418,43 +424,43 @@ - + Node23->Node24 - + Node24->Node6 - - + + - + Node24->Node16 - - + + - + Node24->Node18 - - + + Node25 - -type_traits + +type_traits - + Node24->Node25 - - + + diff --git a/abcg/doc/html/abcgOpenGL_8hpp_source.html b/abcg/doc/html/abcgOpenGL_8hpp_source.html index 40456fd3b..f9bf25c4c 100644 --- a/abcg/doc/html/abcgOpenGL_8hpp_source.html +++ b/abcg/doc/html/abcgOpenGL_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgShader_8hpp.html b/abcg/doc/html/abcgShader_8hpp.html index f81e57e7b..1cdf1ae8e 100644 --- a/abcg/doc/html/abcgShader_8hpp.html +++ b/abcg/doc/html/abcgShader_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -167,7 +167,7 @@

Detailed Description

Declaration of a structure for building shaders.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgShader_8hpp__dep__incl.map b/abcg/doc/html/abcgShader_8hpp__dep__incl.map index 7b247e861..abb458e49 100644 --- a/abcg/doc/html/abcgShader_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgShader_8hpp__dep__incl.map @@ -5,9 +5,8 @@ - - - - - + + + + diff --git a/abcg/doc/html/abcgShader_8hpp__dep__incl.md5 b/abcg/doc/html/abcgShader_8hpp__dep__incl.md5 index 9c629c070..9350ce7cf 100644 --- a/abcg/doc/html/abcgShader_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgShader_8hpp__dep__incl.md5 @@ -1 +1 @@ -a9228a4bb024f9fecf86bf1129817ebf \ No newline at end of file +250dff626385129a87a0636e6090a3b2 \ No newline at end of file diff --git a/abcg/doc/html/abcgShader_8hpp__dep__incl.svg b/abcg/doc/html/abcgShader_8hpp__dep__incl.svg index 2bde4f4ba..cce3a58df 100644 --- a/abcg/doc/html/abcgShader_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgShader_8hpp__dep__incl.svg @@ -98,35 +98,35 @@ - - -Node9 - + + +Node8 + /home/harlen/dev/abcg /abcg/abcgVulkanPipeline.hpp - - -Node5->Node9 + + +Node5->Node8 - - -Node11 - + + +Node10 + /home/harlen/dev/abcg /abcg/abcgVulkanShader.cpp - - -Node5->Node11 + + +Node5->Node10 @@ -134,53 +134,37 @@ Node7 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node6->Node7 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node6->Node8 - - + + - - -Node9->Node6 + + +Node8->Node6 - - -Node10 - + + +Node9 + /home/harlen/dev/abcg /abcg/abcgVulkanPipeline.cpp - - -Node9->Node10 + + +Node8->Node9 diff --git a/abcg/doc/html/abcgShader_8hpp_source.html b/abcg/doc/html/abcgShader_8hpp_source.html index ff86ab5dc..a70cb4c18 100644 --- a/abcg/doc/html/abcgShader_8hpp_source.html +++ b/abcg/doc/html/abcgShader_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -113,7 +113,7 @@
17 namespace abcg {
18 struct ShaderSource;
19 enum class ShaderStage;
-
20 }; // namespace abcg
+
20 } // namespace abcg
21 
26 enum class abcg::ShaderStage {
27  Vertex,
diff --git a/abcg/doc/html/abcgTimer_8cpp.html b/abcg/doc/html/abcgTimer_8cpp.html index 243ec1628..a0227b0d5 100644 --- a/abcg/doc/html/abcgTimer_8cpp.html +++ b/abcg/doc/html/abcgTimer_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -116,7 +116,7 @@

Detailed Description

Definition of abcg::Timer members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgTimer_8hpp.html b/abcg/doc/html/abcgTimer_8hpp.html index 005750dc7..b6a9543c6 100644 --- a/abcg/doc/html/abcgTimer_8hpp.html +++ b/abcg/doc/html/abcgTimer_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -119,7 +119,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -140,7 +140,7 @@

Detailed Description

Header file of abcg::Timer.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgTimer_8hpp__dep__incl.map b/abcg/doc/html/abcgTimer_8hpp__dep__incl.map index 688913713..139a56c5f 100644 --- a/abcg/doc/html/abcgTimer_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgTimer_8hpp__dep__incl.map @@ -1,20 +1,18 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgTimer_8hpp__dep__incl.md5 b/abcg/doc/html/abcgTimer_8hpp__dep__incl.md5 index b0748cab6..6df1389fd 100644 --- a/abcg/doc/html/abcgTimer_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgTimer_8hpp__dep__incl.md5 @@ -1 +1 @@ -e36958faee442efbebc1586b0f840197 \ No newline at end of file +b01725a4a13a890a477282f971900d34 \ No newline at end of file diff --git a/abcg/doc/html/abcgTimer_8hpp__dep__incl.svg b/abcg/doc/html/abcgTimer_8hpp__dep__incl.svg index 279411a2a..7a80e66c3 100644 --- a/abcg/doc/html/abcgTimer_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgTimer_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgTimer.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgTimer.hpp + +/home/harlen/dev/abcg +/abcg/abcgTimer.hpp @@ -22,309 +22,271 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgTimer.cpp + +/home/harlen/dev/abcg +/abcg/abcgTimer.cpp Node1->Node2 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgTrackball.hpp + +/home/harlen/dev/abcg +/abcg/abcgTrackball.hpp Node1->Node3 - - + + - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgWindow.hpp + + +Node9 + + +/home/harlen/dev/abcg +/abcg/abcgWindow.hpp - - -Node1->Node10 - - + + +Node1->Node9 + + Node4 - -/home/harlen/dev/abcg -/abcg/abcg.hpp + +/home/harlen/dev/abcg +/abcg/abcg.hpp Node3->Node4 - - + + - - -Node9 - - -/home/harlen/dev/abcg -/abcg/abcgTrackball.cpp + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgTrackball.cpp - - -Node3->Node9 - - + + +Node3->Node8 + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgOpenGL.hpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGL.hpp Node4->Node5 - - + + Node6 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node4->Node6 - - + + Node7 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node6->Node7 - - + + - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - + + +Node9->Node4 + + + + +Node10 + + +/home/harlen/dev/abcg +/abcg/abcgApplication.cpp + - - -Node6->Node8 - - - + -Node10->Node4 - - - - - -Node10->Node7 - - +Node9->Node10 + + Node11 - - -/home/harlen/dev/abcg -/abcg/abcgApplication.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.cpp - + -Node10->Node11 - - +Node9->Node11 + + Node12 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.hpp - + -Node10->Node12 - - +Node9->Node12 + + Node13 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - - -Node10->Node13 - - + + +Node9->Node13 + + Node14 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - - -Node10->Node14 - - + + +Node9->Node14 + + - - -Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + + +Node16 + + +/home/harlen/dev/abcg +/abcg/abcgWindow.cpp - - -Node10->Node15 - - - - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgWindow.cpp - - + + +Node9->Node16 + + - - -Node10->Node18 - - + + +Node12->Node5 + + - + -Node13->Node5 - - +Node12->Node11 + + - - -Node13->Node12 - - + + +Node14->Node6 + + - + -Node15->Node6 - - - - - -Node15->Node14 - - - - - -Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - - +Node14->Node13 + + - - -Node15->Node16 - - - - - -Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +Node15 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node15->Node17 - - + + +Node14->Node15 + + diff --git a/abcg/doc/html/abcgTimer_8hpp_source.html b/abcg/doc/html/abcgTimer_8hpp_source.html index cc08e619d..0b9be0c33 100644 --- a/abcg/doc/html/abcgTimer_8hpp_source.html +++ b/abcg/doc/html/abcgTimer_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgTrackball_8cpp.html b/abcg/doc/html/abcgTrackball_8cpp.html index fd24682c8..f784be2ad 100644 --- a/abcg/doc/html/abcgTrackball_8cpp.html +++ b/abcg/doc/html/abcgTrackball_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -118,7 +118,7 @@

Detailed Description

Definition of abcg::TrackBall members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgTrackball_8hpp.html b/abcg/doc/html/abcgTrackball_8hpp.html index d0063afef..ebeba5a9b 100644 --- a/abcg/doc/html/abcgTrackball_8hpp.html +++ b/abcg/doc/html/abcgTrackball_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,7 +120,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -142,7 +142,7 @@

Header file of abcg::TrackBall.

Declaration of abcg::TrackBall class.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.map b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.map index 8bb9404e2..970f21e19 100644 --- a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.map @@ -1,9 +1,8 @@ - + - - + diff --git a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.md5 b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.md5 index 5671772b3..38835cdbd 100644 --- a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.md5 @@ -1 +1 @@ -fdb8832c81ad1e26ac9940d4434407a4 \ No newline at end of file +2d3c87247739c738280c37f12e472a48 \ No newline at end of file diff --git a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.svg b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.svg index f4a7d873a..2abbb9743 100644 --- a/abcg/doc/html/abcgTrackball_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgTrackball_8hpp__dep__incl.svg @@ -4,8 +4,8 @@ - + /home/harlen/dev/abcg/abcg/abcgTrackball.hpp @@ -34,19 +34,19 @@ - - -Node7 - + + +Node6 + /home/harlen/dev/abcg /abcg/abcgTrackball.cpp - - -Node1->Node7 + + +Node1->Node6 @@ -86,33 +86,17 @@ Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node4->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node4->Node6 - - + + diff --git a/abcg/doc/html/abcgTrackball_8hpp_source.html b/abcg/doc/html/abcgTrackball_8hpp_source.html index f43f9a595..4c12e2aa9 100644 --- a/abcg/doc/html/abcgTrackball_8hpp_source.html +++ b/abcg/doc/html/abcgTrackball_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -123,37 +123,37 @@
33 
34  [[nodiscard]] glm::quat getRotation() const;
35 
-
43  void setAxis(glm::vec3 const axis) noexcept { m_axis = axis; }
-
44 
-
52  void setVelocity(float const velocity) noexcept { m_velocity = velocity; }
+
36  void setAxis(glm::vec3 axis) noexcept;
+
37  void setVelocity(float velocity) noexcept;
+
38 
+
39 private:
+
40  constexpr static float m_maxVelocity{glm::radians(720.0f / 1000.0f)};
+
41 
+
42  glm::vec3 m_axis{1.0f};
+
43  float m_velocity{};
+
44  glm::quat m_rotation{glm::quat(1.0, 0.0, 0.0, 0.0)};
+
45 
+
46  float m_durationSinceLastEvent{};
+
47 
+
48  glm::vec3 m_lastPosition{};
+
49  Timer m_lastTime;
+
50  bool m_mouseTracking{};
+
51 
+
52  glm::ivec2 m_viewportSize{0};
53 
-
54 private:
-
55  constexpr static float m_maxVelocity{glm::radians(720.0f / 1000.0f)};
+
54  [[nodiscard]] glm::vec3 project(glm::vec2 const &mousePosition) const;
+
55 };
56 
-
57  glm::vec3 m_axis{1.0f};
-
58  float m_velocity{};
-
59  glm::quat m_rotation{glm::quat(1.0, 0.0, 0.0, 0.0)};
-
60 
-
61  float m_durationSinceLastEvent{};
-
62 
-
63  glm::vec3 m_lastPosition{};
-
64  Timer m_lastTime;
-
65  bool m_mouseTracking{};
-
66 
-
67  glm::ivec2 m_viewportSize{0};
-
68 
-
69  [[nodiscard]] glm::vec3 project(glm::vec2 const &mousePosition) const;
-
70 };
-
71 
-
72 #endif
+
57 #endif
Header file for including third-party dependencies.
Header file of abcg::Timer.
+
Represents a timer based on the monotonic clock std::chrono::steady_clock.
Definition: abcgTimer.hpp:24
Manages a virtual trackball.
Definition: abcgTrackball.hpp:27
-
void setVelocity(float const velocity) noexcept
Sets the trackball's rotation velocity.
Definition: abcgTrackball.hpp:52
void mousePress(glm::ivec2 const &position)
Function to be called on a mouse press event.
Definition: abcgTrackball.cpp:59
glm::quat getRotation() const
Returns the current trackball rotation as a quaternion.
Definition: abcgTrackball.cpp:98
-
void setAxis(glm::vec3 const axis) noexcept
Sets the trackball's axis of rotation.
Definition: abcgTrackball.hpp:43
+
void setAxis(glm::vec3 axis) noexcept
Sets the trackball's axis of rotation.
Definition: abcgTrackball.cpp:115
void mouseRelease(glm::ivec2 const &position)
Function to be called on a mouse release event.
Definition: abcgTrackball.cpp:75
+
void setVelocity(float velocity) noexcept
Sets the trackball's rotation velocity.
Definition: abcgTrackball.cpp:124
void resizeViewport(glm::ivec2 const &size) noexcept
Function to be called when the window is resized.
Definition: abcgTrackball.cpp:89
void mouseMove(glm::ivec2 const &position)
Function to be called on a mouse move event.
Definition: abcgTrackball.cpp:23
Root namespace.
Definition: abcgApplication.hpp:23
diff --git a/abcg/doc/html/abcgUtil_8cpp.html b/abcg/doc/html/abcgUtil_8cpp.html new file mode 100644 index 000000000..1dd226ea4 --- /dev/null +++ b/abcg/doc/html/abcgUtil_8cpp.html @@ -0,0 +1,130 @@ + + + + + + + + + ABCg: /home/harlen/dev/abcg/abcg/abcgUtil.cpp File Reference + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+
ABCg +  v3.1.0 +
+
Development framework for MCTA008-17
+
+
+ + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
/home/harlen/dev/abcg/abcg/abcgUtil.cpp File Reference
+
+
+ +

General utility functions. +More...

+
#include "abcgUtil.hpp"
+
+Include dependency graph for abcgUtil.cpp:
+
+
+
+
+

Detailed Description

+

General utility functions.

+

This file is part of ABCg (https://github.com/hbatagelo/abcg).

+ +
+
+ + + + diff --git a/abcg/doc/html/abcgUtil_8cpp__incl.map b/abcg/doc/html/abcgUtil_8cpp__incl.map new file mode 100644 index 000000000..ca2de59f4 --- /dev/null +++ b/abcg/doc/html/abcgUtil_8cpp__incl.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/abcg/doc/html/abcgUtil_8cpp__incl.md5 b/abcg/doc/html/abcgUtil_8cpp__incl.md5 new file mode 100644 index 000000000..d888f5de1 --- /dev/null +++ b/abcg/doc/html/abcgUtil_8cpp__incl.md5 @@ -0,0 +1 @@ +280eb7a5ac2e46004916c7bfabf28460 \ No newline at end of file diff --git a/abcg/doc/html/abcgUtil_8cpp__incl.svg b/abcg/doc/html/abcgUtil_8cpp__incl.svg new file mode 100644 index 000000000..00c575894 --- /dev/null +++ b/abcg/doc/html/abcgUtil_8cpp__incl.svg @@ -0,0 +1,67 @@ + + + + + + +/home/harlen/dev/abcg/abcg/abcgUtil.cpp + + +Node1 + + +/home/harlen/dev/abcg +/abcg/abcgUtil.cpp + + + + + +Node2 + + +abcgUtil.hpp + + + + + +Node1->Node2 + + + + + +Node3 + + +functional + + + + + +Node2->Node3 + + + + + +Node4 + + +string + + + + + +Node2->Node4 + + + + + diff --git a/abcg/doc/html/abcgUtil_8hpp.html b/abcg/doc/html/abcgUtil_8hpp.html index 15d5a23d7..af7487e46 100644 --- a/abcg/doc/html/abcgUtil_8hpp.html +++ b/abcg/doc/html/abcgUtil_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -110,16 +110,17 @@

Declaration of general utility functions. More...

#include <functional>
+#include <string>
Include dependency graph for abcgUtil.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -141,11 +142,20 @@ std::size_t abcg::hashCombine (const TFirst &value, const TRest &...rest)  Creates a hash value from several values. More...
  +std::string abcg::toRedString (std::string_view str) + Creates a string prefixed with the ANSI color code that corresponds to foreground bold red. More...
+  +std::string abcg::toYellowString (std::string_view str) + Creates a string prefixed with the ANSI color code that corresponds to foreground bold yellow. More...
+  +std::string abcg::toBlueString (std::string_view str) + Creates a string prefixed with the ANSI color code that corresponds to foreground bold blue. More...

Detailed Description

Declaration of general utility functions.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgUtil_8hpp.js b/abcg/doc/html/abcgUtil_8hpp.js index b26cf08b9..c21961d51 100644 --- a/abcg/doc/html/abcgUtil_8hpp.js +++ b/abcg/doc/html/abcgUtil_8hpp.js @@ -1,5 +1,8 @@ var abcgUtil_8hpp = [ [ "hashCombine", "abcgUtil_8hpp.html#aed04a19d18acb506c896c2f220d495c1", null ], - [ "hashCombineSeed", "abcgUtil_8hpp.html#a087b770c423ea0ec8a1e54e655dbb0a0", null ] + [ "hashCombineSeed", "abcgUtil_8hpp.html#a087b770c423ea0ec8a1e54e655dbb0a0", null ], + [ "toBlueString", "abcgUtil_8hpp.html#a1b13712894adf3cfdda66dd3ddd14256", null ], + [ "toRedString", "abcgUtil_8hpp.html#a7ffc0a33678775f855ffa982c00ccb0d", null ], + [ "toYellowString", "abcgUtil_8hpp.html#a9a8a9c73318a69a62645ca5ee239763d", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/abcgUtil_8hpp__dep__incl.map b/abcg/doc/html/abcgUtil_8hpp__dep__incl.map index 790453f28..2c97976b3 100644 --- a/abcg/doc/html/abcgUtil_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgUtil_8hpp__dep__incl.map @@ -1,8 +1,10 @@ - + + + + - - + diff --git a/abcg/doc/html/abcgUtil_8hpp__dep__incl.md5 b/abcg/doc/html/abcgUtil_8hpp__dep__incl.md5 index 85ef0422a..9ed5adc37 100644 --- a/abcg/doc/html/abcgUtil_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgUtil_8hpp__dep__incl.md5 @@ -1 +1 @@ -0e99c384f50692331bf20471252edd54 \ No newline at end of file +d076081cd9659a761609ae27c98e36e9 \ No newline at end of file diff --git a/abcg/doc/html/abcgUtil_8hpp__dep__incl.svg b/abcg/doc/html/abcgUtil_8hpp__dep__incl.svg index eb64d2ade..e7ea290a6 100644 --- a/abcg/doc/html/abcgUtil_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgUtil_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgUtil.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgUtil.hpp + +/home/harlen/dev/abcg +/abcg/abcgUtil.hpp @@ -31,8 +31,56 @@ Node1->Node2 - - + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgException.cpp + + + + + +Node1->Node6 + + + + + +Node7 + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLError.cpp + + + + + +Node1->Node7 + + + + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgUtil.cpp + + + + + +Node1->Node8 + + @@ -70,33 +118,17 @@ Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node4->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node4->Node6 - - + + diff --git a/abcg/doc/html/abcgUtil_8hpp__incl.map b/abcg/doc/html/abcgUtil_8hpp__incl.map index 2cddded30..0606d2684 100644 --- a/abcg/doc/html/abcgUtil_8hpp__incl.map +++ b/abcg/doc/html/abcgUtil_8hpp__incl.map @@ -1,4 +1,5 @@ - - + + + diff --git a/abcg/doc/html/abcgUtil_8hpp__incl.md5 b/abcg/doc/html/abcgUtil_8hpp__incl.md5 index 612b045fb..ea07091ca 100644 --- a/abcg/doc/html/abcgUtil_8hpp__incl.md5 +++ b/abcg/doc/html/abcgUtil_8hpp__incl.md5 @@ -1 +1 @@ -3a9491ed86d171bf5a6561c8e4b020bc \ No newline at end of file +9331bdc5dc53789775556560702eef43 \ No newline at end of file diff --git a/abcg/doc/html/abcgUtil_8hpp__incl.svg b/abcg/doc/html/abcgUtil_8hpp__incl.svg index d4508f43b..aec7eca94 100644 --- a/abcg/doc/html/abcgUtil_8hpp__incl.svg +++ b/abcg/doc/html/abcgUtil_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgUtil.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgUtil.hpp + +/home/harlen/dev/abcg +/abcg/abcgUtil.hpp @@ -22,16 +22,31 @@ Node2 - -functional + +functional Node1->Node2 - - + + + + + +Node3 + + +string + + + + + +Node1->Node3 + + diff --git a/abcg/doc/html/abcgUtil_8hpp_source.html b/abcg/doc/html/abcgUtil_8hpp_source.html index fb0aac153..785dba1a0 100644 --- a/abcg/doc/html/abcgUtil_8hpp_source.html +++ b/abcg/doc/html/abcgUtil_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,30 +108,38 @@
12 #define ABCG_UTIL_HPP_
13 
14 #include <functional>
-
15 
-
16 namespace abcg {
-
17 
-
39 template <typename TFirst, typename... TRest>
-
40 void hashCombineSeed(std::size_t &seed, const TFirst &value,
-
41  const TRest &...rest) {
-
42  seed ^= std::hash<TFirst>{}(value) + 0x9e3779b97f4a7c15 + (seed << 6) +
-
43  (seed >> 2);
-
44  (hashCombineSeed(seed, rest), ...);
-
45 }
-
46 
-
64 template <typename TFirst, typename... TRest>
-
65 std::size_t hashCombine(const TFirst &value, const TRest &...rest) {
-
66  std::size_t seed{};
-
67  hashCombineSeed(seed, value, rest...);
-
68  return seed;
-
69 }
-
70 
-
71 } // namespace abcg
-
72 
-
73 #endif
+
15 #include <string>
+
16 
+
17 namespace abcg {
+
18 
+
40 template <typename TFirst, typename... TRest>
+
41 void hashCombineSeed(std::size_t &seed, const TFirst &value,
+
42  const TRest &...rest) {
+
43  seed ^= std::hash<TFirst>{}(value) + 0x9e3779b97f4a7c15 + (seed << 6) +
+
44  (seed >> 2);
+
45  (hashCombineSeed(seed, rest), ...);
+
46 }
+
47 
+
65 template <typename TFirst, typename... TRest>
+
66 std::size_t hashCombine(const TFirst &value, const TRest &...rest) {
+
67  std::size_t seed{};
+
68  hashCombineSeed(seed, value, rest...);
+
69  return seed;
+
70 }
+
71 
+
72 std::string toRedString(std::string_view str);
+
73 std::string toYellowString(std::string_view str);
+
74 std::string toBlueString(std::string_view str);
+
75 
+
76 } // namespace abcg
+
77 
+
78 #endif
Root namespace.
Definition: abcgApplication.hpp:23
-
void hashCombineSeed(std::size_t &seed, const TFirst &value, const TRest &...rest)
Creates a hash value from several values, combining them with a seed value.
Definition: abcgUtil.hpp:40
-
std::size_t hashCombine(const TFirst &value, const TRest &...rest)
Creates a hash value from several values.
Definition: abcgUtil.hpp:65
+
void hashCombineSeed(std::size_t &seed, const TFirst &value, const TRest &...rest)
Creates a hash value from several values, combining them with a seed value.
Definition: abcgUtil.hpp:41
+
std::string toBlueString(std::string_view str)
Creates a string prefixed with the ANSI color code that corresponds to foreground bold blue.
Definition: abcgUtil.cpp:55
+
std::string toRedString(std::string_view str)
Creates a string prefixed with the ANSI color code that corresponds to foreground bold red.
Definition: abcgUtil.cpp:29
+
std::string toYellowString(std::string_view str)
Creates a string prefixed with the ANSI color code that corresponds to foreground bold yellow.
Definition: abcgUtil.cpp:42
+
std::size_t hashCombine(const TFirst &value, const TRest &...rest)
Creates a hash value from several values.
Definition: abcgUtil.hpp:66
diff --git a/abcg/doc/html/abcgVulkanBuffer_8cpp.html b/abcg/doc/html/abcgVulkanBuffer_8cpp.html index 707543280..50b030f2d 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8cpp.html +++ b/abcg/doc/html/abcgVulkanBuffer_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -113,13 +113,13 @@
Include dependency graph for abcgVulkanBuffer.cpp:
-
+

Detailed Description

Definition of abcg::VulkanBuffer.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.map b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.map index 05eaacbfa..7225841a7 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.map @@ -1,18 +1,19 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.md5 index 4660f528f..dca96bb09 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.md5 @@ -1 +1 @@ -f9d4a597aec53cd8289fe2e4b5602edd \ No newline at end of file +210fea9a07a496248fc5a6668fa832b4 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.svg b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.svg index 44afbc2a0..4486f0b50 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanBuffer_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanBuffer.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp @@ -22,238 +22,247 @@ Node2 - -abcgVulkanBuffer.hpp + +abcgVulkanBuffer.hpp Node1->Node2 - - - - - -Node11 - - -gsl/gsl - - - - - -Node1->Node11 - - + + Node12 - -set + +gsl/gsl - + Node1->Node12 - - + + Node13 - - -abcgException.hpp + + +set - + Node1->Node13 - - + + + + + +Node14 + + +abcgException.hpp + + + + + +Node1->Node14 + + Node3 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node2->Node3 - - + + - - -Node10 - - -gsl/pointers + + +Node11 + + +gsl/pointers - + -Node2->Node10 - - +Node2->Node11 + + Node4 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node3->Node4 - - + + - - -Node7 - - -abcgVulkanPhysicalDevice.hpp + + +Node10 + + +functional - - -Node3->Node7 - - + + +Node3->Node10 + + Node5 - -volk.h + +optional Node4->Node5 - - + + Node6 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node4->Node6 - - - - - -Node7->Node4 - - - - - -Node8 - - -optional - - - - - -Node7->Node8 - - + + Node9 - -abcgVulkanInstance.hpp + +abcgVulkanInstance.hpp - - -Node7->Node9 - - + + +Node4->Node9 + + - - -Node9->Node4 - - + + +Node7 + + +volk.h + - - -Node14 - - -source_location + + + +Node6->Node7 + + + + + +Node8 + + +vulkan/vulkan.hpp - - -Node13->Node14 - - + + +Node6->Node8 + + + + + +Node9->Node6 + + Node15 - -stdexcept + +source_location - - -Node13->Node15 - - + + +Node14->Node15 + + Node16 - -string + +stdexcept + + + + + +Node14->Node16 + + + + + +Node17 + + +string - + -Node13->Node16 - - +Node14->Node17 + + diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp.html b/abcg/doc/html/abcgVulkanBuffer_8hpp.html index 966bb2c25..ec64b992f 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp.html +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,7 +120,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -145,7 +145,7 @@

Header file of abcg::VulkanBuffer.

Declaration of abcg::VulkanBuffer

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.map index f136cf539..145d6dc46 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.map @@ -1,8 +1,7 @@ - - - - + + + + - diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.md5 index cbd454502..a245680ec 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.md5 @@ -1 +1 @@ -7871fa7ba7e0cb49ada7ee2f870f4dfe \ No newline at end of file +9984ea8900ea8cce6682cf4be492ee63 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.svg index 2b482a1e3..3acb51db9 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanBuffer.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp @@ -22,49 +22,49 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node1->Node2 - - + + + + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp + + + + + +Node1->Node4 + + Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp Node1->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp - - - - - -Node1->Node6 - - + + @@ -79,24 +79,8 @@ Node2->Node3 - - - - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node2->Node4 - - + + diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.map b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.map index 5699d093e..b4973aa0a 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.map @@ -1,11 +1,12 @@ - - - - - - - - - + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.md5 index 1823ff49f..1c480691f 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.md5 @@ -1 +1 @@ -c3003ff30e4ca3e17a8bf672f0f121cb \ No newline at end of file +974c01db14b6ae97ec5cb89d0df74582 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.svg b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.svg index 1094b82ae..5c5f69b04 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp__incl.svg @@ -5,16 +5,16 @@ --> + viewBox="0.00 0.00 315.00 319.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> /home/harlen/dev/abcg/abcg/abcgVulkanBuffer.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp @@ -22,133 +22,142 @@ Node2 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node1->Node2 - - - - - -Node9 - - -gsl/pointers + + + + + +Node10 + + +gsl/pointers - + -Node1->Node9 - - +Node1->Node10 + + Node3 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node2->Node3 - - + + - - -Node6 - - -abcgVulkanPhysicalDevice.hpp + + +Node9 + + +functional - - -Node2->Node6 - - + + +Node2->Node9 + + Node4 - -volk.h + +optional Node3->Node4 - - + + Node5 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node3->Node5 - - + + + + + +Node8 + + +abcgVulkanInstance.hpp + + - + -Node6->Node3 - - +Node3->Node8 + + + + + +Node6 + + +volk.h + + + + + +Node5->Node6 + + Node7 - -optional + +vulkan/vulkan.hpp - + -Node6->Node7 - - +Node5->Node7 + + - - -Node8 - - -abcgVulkanInstance.hpp - - - - + -Node6->Node8 - - - - - -Node8->Node3 - - +Node8->Node5 + + diff --git a/abcg/doc/html/abcgVulkanBuffer_8hpp_source.html b/abcg/doc/html/abcgVulkanBuffer_8hpp_source.html index 0acf9aaf7..06818553f 100644 --- a/abcg/doc/html/abcgVulkanBuffer_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanBuffer_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -131,31 +131,29 @@
46  void loadData(gsl::not_null<void const *> data, vk::DeviceSize size,
47  vk::DeviceSize offset = 0UL);
48 
-
52  explicit operator vk::Buffer const &() const noexcept { return m_buffer; }
-
53 
-
60  [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept {
-
61  return m_deviceMemory;
-
62  }
+
49  explicit operator vk::Buffer const &() const noexcept;
+
50 
+
51  [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept;
+
52 
+
53 private:
+
54  [[nodiscard]] std::pair<vk::Buffer, vk::DeviceMemory>
+
55  createBuffer(VulkanDevice const &device, vk::DeviceSize size,
+
56  vk::BufferUsageFlags usage,
+
57  vk::MemoryPropertyFlags properties) const;
+
58 
+
59  vk::Buffer m_buffer;
+
60  vk::DeviceMemory m_deviceMemory;
+
61  vk::Device m_device;
+
62 };
63 
-
64 private:
-
65  [[nodiscard]] std::pair<vk::Buffer, vk::DeviceMemory>
-
66  createBuffer(VulkanDevice const &device, vk::DeviceSize size,
-
67  vk::BufferUsageFlags usage,
-
68  vk::MemoryPropertyFlags properties) const;
-
69 
-
70  vk::Buffer m_buffer{};
-
71  vk::DeviceMemory m_deviceMemory{};
-
72  vk::Device m_device{};
-
73 };
-
74 
-
75 #endif
+
64 #endif
Header file of abcg::VulkanDevice.
A class for representing a Vulkan buffer.
Definition: abcgVulkanBuffer.hpp:41
+
vk::DeviceMemory const & getDeviceMemory() const noexcept
Returns the opaque handle to the device memory object associated with the buffer.
Definition: abcgVulkanBuffer.cpp:146
void create(VulkanDevice const &device, VulkanBufferCreateInfo const &createInfo)
Definition: abcgVulkanBuffer.cpp:19
void destroy()
Definition: abcgVulkanBuffer.cpp:66
-
vk::DeviceMemory const & getDeviceMemory() const noexcept
Returns the opaque handle to the device memory object associated with the buffer.
Definition: abcgVulkanBuffer.hpp:60
void loadData(gsl::not_null< void const * > data, vk::DeviceSize size, vk::DeviceSize offset=0UL)
Loads data to the buffer.
Definition: abcgVulkanBuffer.cpp:78
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
Root namespace.
Definition: abcgApplication.hpp:23
Creation info structure for abcg::VulkanBuffer::create.
Definition: abcgVulkanBuffer.hpp:28
vk::DeviceSize size
Definition: abcgVulkanBuffer.hpp:29
diff --git a/abcg/doc/html/abcgVulkanDevice_8cpp.html b/abcg/doc/html/abcgVulkanDevice_8cpp.html index 3f32a8073..2a62e5a55 100644 --- a/abcg/doc/html/abcgVulkanDevice_8cpp.html +++ b/abcg/doc/html/abcgVulkanDevice_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,17 +109,16 @@
#include "abcgVulkanDevice.hpp"
#include <gsl/gsl>
#include <set>
-#include "abcgException.hpp"
Include dependency graph for abcgVulkanDevice.cpp:
-
+

Detailed Description

Definition of abcg::VulkanDevice.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.map b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.map index 9028b517f..c69dca40b 100644 --- a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.map @@ -1,16 +1,13 @@ - - - - - - - - - - - - - - + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.md5 index 9db35f0d1..510b66a09 100644 --- a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.md5 @@ -1 +1 @@ -04307f151cfa32e31c996a83f829506d \ No newline at end of file +5436420eec4428e6cbe4447d1bb15c9f \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.svg b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.svg index cbe284fde..58ed8b193 100644 --- a/abcg/doc/html/abcgVulkanDevice_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanDevice_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanDevice.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.cpp @@ -22,208 +22,157 @@ Node2 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node1->Node2 - - - - - -Node9 - - -gsl/gsl - - - - - -Node1->Node9 - - + + Node10 - -set + +gsl/gsl - + Node1->Node10 - - + + Node11 - - -abcgException.hpp + + +set - + Node1->Node11 - - + + Node3 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node2->Node3 - - + + - - -Node6 - - -abcgVulkanPhysicalDevice.hpp + + +Node9 + + +functional - - -Node2->Node6 - - + + +Node2->Node9 + + Node4 - -volk.h + +optional Node3->Node4 - - + + Node5 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node3->Node5 - - - - - -Node6->Node3 - - - - - -Node7 - - -optional - - - - - -Node6->Node7 - - + + Node8 - -abcgVulkanInstance.hpp + +abcgVulkanInstance.hpp - - -Node6->Node8 - - + + +Node3->Node8 + + - - -Node8->Node3 - - - - - -Node12 - - -source_location + + +Node6 + + +volk.h - - -Node11->Node12 - - + + +Node5->Node6 + + - - -Node13 - - -stdexcept + + +Node7 + + +vulkan/vulkan.hpp - - -Node11->Node13 - - - - - -Node14 - - -string - - + + +Node5->Node7 + + - - -Node11->Node14 - - + + +Node8->Node5 + + diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp.html b/abcg/doc/html/abcgVulkanDevice_8hpp.html index b5d0ca845..3151d6a66 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp.html +++ b/abcg/doc/html/abcgVulkanDevice_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,18 +109,18 @@

Header file of abcg::VulkanDevice. More...

-
#include "abcgVulkanExternal.hpp"
-#include "abcgVulkanPhysicalDevice.hpp"
+
#include "abcgVulkanPhysicalDevice.hpp"
+#include <functional>
Include dependency graph for abcgVulkanDevice.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -148,7 +148,7 @@

Header file of abcg::VulkanDevice.

Declaration of abcg::VulkanDevice.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.map index ebba8e5b4..48780a2ea 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.map @@ -1,19 +1,18 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.md5 index 2acf8d96c..e5ee3539f 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.md5 @@ -1 +1 @@ -9a5fbf6f9f1d1a5db53a5e20793988b0 \ No newline at end of file +dc3c771c5572aa72dd4d3bf039f7580b \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.svg index 2b04954a3..a142d0cb7 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanDevice.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.hpp @@ -22,329 +22,301 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp Node1->Node2 - - + + + + + +Node7 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.cpp + + + + + +Node1->Node7 + + Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp Node1->Node8 - - + + Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp - + Node1->Node9 - - + + - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp - - - - - -Node1->Node10 - - - - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + + +Node12 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node1->Node11 - - + + +Node1->Node12 + + Node13 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - + Node1->Node13 - - - - - -Node14 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp - + + - - - -Node1->Node14 - - - - - -Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + + +Node15 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp - - -Node1->Node17 - - + + +Node1->Node15 + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node2->Node3 - - + + + + + +Node5 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp + + + + + +Node2->Node5 + + Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp Node2->Node6 - - - - - -Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp - - - - - -Node2->Node7 - - + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node3->Node4 - - + + - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node3->Node5 - - + + +Node8->Node3 + + - + -Node9->Node3 - - +Node8->Node6 + + - + -Node9->Node7 - - +Node8->Node9 + + + + + +Node10 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp + + Node9->Node10 - - + + - - -Node10->Node11 - - + + +Node9->Node12 + + - + -Node10->Node13 - - +Node9->Node13 + + - - -Node10->Node14 - - - - - -Node11->Node3 - - + + +Node10->Node3 + + - - -Node12 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + + +Node11 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - - -Node11->Node12 - - + + +Node10->Node11 + + - - -Node14->Node3 - - + + +Node13->Node3 + + - - -Node14->Node13 - - + + +Node13->Node12 + + - - -Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +Node14 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - + -Node14->Node15 - - +Node13->Node14 + + + + + +Node15->Node3 + + + + + +Node15->Node10 + + Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp - - -Node14->Node16 - - - - - -Node17->Node3 - - - - - -Node17->Node11 - - - - - -Node17->Node15 - - + + +Node15->Node16 + + diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.map b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.map index 32a2b8ff8..38685338a 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.map @@ -1,9 +1,10 @@ - - - - - - - + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.md5 index 7dee1f724..928ad652d 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.md5 @@ -1 +1 @@ -d914f2ac0f819188dc78a0c7402ab26c \ No newline at end of file +c84b33b060f20f5f8bf36691e52c3d8b \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.svg b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.svg index 780ee8c87..9e553fa97 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanDevice_8hpp__incl.svg @@ -4,121 +4,130 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanDevice.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.hpp Node2 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node1->Node2 - - - - - -Node5 - - -abcgVulkanPhysicalDevice.hpp + + + + + +Node8 + + +functional - - -Node1->Node5 - - + + +Node1->Node8 + + Node3 - -volk.h + +optional Node2->Node3 - - + + Node4 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node2->Node4 - - + + - + + +Node7 + + +abcgVulkanInstance.hpp + + + + -Node5->Node2 - - +Node2->Node7 + + + + + +Node5 + + +volk.h + + + + + +Node4->Node5 + + Node6 - -optional + +vulkan/vulkan.hpp - + -Node5->Node6 - - +Node4->Node6 + + - - -Node7 - - -abcgVulkanInstance.hpp - - - - + -Node5->Node7 - - - - - -Node7->Node2 - - +Node7->Node4 + + diff --git a/abcg/doc/html/abcgVulkanDevice_8hpp_source.html b/abcg/doc/html/abcgVulkanDevice_8hpp_source.html index ca6b11cec..4dc65de26 100644 --- a/abcg/doc/html/abcgVulkanDevice_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanDevice_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,87 +107,79 @@
13 #ifndef ABCG_VULKAN_DEVICE_HPP_
14 #define ABCG_VULKAN_DEVICE_HPP_
15 
-
16 #include "abcgVulkanExternal.hpp"
- -
18 
-
19 namespace abcg {
-
20 struct VulkanCommandPools;
-
21 struct VulkanQueues;
-
22 class VulkanDevice;
-
23 class VulkanPipeline;
-
24 class VulkanSwapchain;
-
25 class VulkanWindow;
-
26 } // namespace abcg
-
27 
- -
32  vk::CommandPool compute{};
-
33  vk::CommandPool graphics{};
-
34  vk::CommandPool transfer{};
-
35 };
-
36 
- -
41  vk::Queue compute{};
-
42  vk::Queue graphics{};
-
43  vk::Queue present{};
-
44  vk::Queue transfer{};
-
45 };
-
46 
- -
55 public:
-
56  void create(VulkanPhysicalDevice const &physicalDevice,
-
57  std::vector<char const *> const &extensions = {});
-
58  void destroy();
-
59 
-
63  explicit operator vk::Device const &() const noexcept { return m_device; }
-
64 
-
70  [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept {
-
71  return m_physicalDevice;
-
72  }
-
73 
-
79  [[nodiscard]] VulkanQueues const &getQueues() const noexcept {
-
80  return m_queues;
-
81  }
-
82 
-
88  [[nodiscard]] VulkanCommandPools const &getCommandPools() const noexcept {
-
89  return m_commandPools;
-
90  }
-
91 
-
92  void withCommandBuffer(
-
93  std::function<void(vk::CommandBuffer const &commandBuffer)> const &fun,
-
94  vk::QueueFlagBits queueFlag = vk::QueueFlagBits::eGraphics,
-
95  vk::CommandBufferLevel level = vk::CommandBufferLevel::ePrimary) const;
-
96 
-
97 private:
-
98  void createCommandPools();
-
99  void destroyCommandPools();
-
100 
-
101  vk::Device m_device{};
-
102  VulkanPhysicalDevice m_physicalDevice{};
-
103  VulkanCommandPools m_commandPools{};
-
104  VulkanQueues m_queues{};
-
105 };
-
106 
-
107 #endif
-
Header file for including Vulkan-related dependencies.
+ +
17 
+
18 #include <functional>
+
19 
+
20 namespace abcg {
+
21 struct VulkanCommandPools;
+
22 struct VulkanQueues;
+
23 class VulkanDevice;
+
24 class VulkanPipeline;
+
25 class VulkanSwapchain;
+
26 class VulkanWindow;
+
27 } // namespace abcg
+
28 
+ +
33  vk::CommandPool compute;
+
34  vk::CommandPool graphics;
+
35  vk::CommandPool transfer;
+
36 };
+
37 
+ +
42  vk::Queue compute;
+
43  vk::Queue graphics;
+
44  vk::Queue present;
+
45  vk::Queue transfer;
+
46 };
+
47 
+ +
56 public:
+
57  void create(VulkanPhysicalDevice const &physicalDevice,
+
58  std::vector<char const *> const &extensions = {});
+
59  void destroy();
+
60 
+
61  explicit operator vk::Device const &() const noexcept;
+
62 
+
63  [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept;
+
64  [[nodiscard]] VulkanQueues const &getQueues() const noexcept;
+
65  [[nodiscard]] VulkanCommandPools const &getCommandPools() const noexcept;
+
66 
+
67  void withCommandBuffer(
+
68  std::function<void(vk::CommandBuffer const &commandBuffer)> const &fun,
+
69  vk::QueueFlagBits queueFlag = vk::QueueFlagBits::eGraphics,
+
70  vk::CommandBufferLevel level = vk::CommandBufferLevel::ePrimary) const;
+
71 
+
72 private:
+
73  void createCommandPools();
+
74  void destroyCommandPools();
+
75 
+
76  vk::Device m_device;
+
77  VulkanPhysicalDevice m_physicalDevice;
+
78  VulkanCommandPools m_commandPools;
+
79  VulkanQueues m_queues;
+
80 };
+
81 
+
82 #endif
Header file of abcg::VulkanPhysicalDevice.
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
-
void destroy()
Definition: abcgVulkanDevice.cpp:72
-
VulkanPhysicalDevice const & getPhysicalDevice() const noexcept
Access to abcg::VulkanPhysicalDevice.
Definition: abcgVulkanDevice.hpp:70
-
VulkanCommandPools const & getCommandPools() const noexcept
Returns the command pools associated with this device.
Definition: abcgVulkanDevice.hpp:88
-
VulkanQueues const & getQueues() const noexcept
Returns the queues associated with this device.
Definition: abcgVulkanDevice.hpp:79
-
void create(VulkanPhysicalDevice const &physicalDevice, std::vector< char const * > const &extensions={})
Definition: abcgVulkanDevice.cpp:19
-
void withCommandBuffer(std::function< void(vk::CommandBuffer const &commandBuffer)> const &fun, vk::QueueFlagBits queueFlag=vk::QueueFlagBits::eGraphics, vk::CommandBufferLevel level=vk::CommandBufferLevel::ePrimary) const
Allocates and creates a command buffer to be immediately submitted and released.
Definition: abcgVulkanDevice.cpp:88
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
+
void destroy()
Definition: abcgVulkanDevice.cpp:71
+
VulkanCommandPools const & getCommandPools() const noexcept
Returns the command pools associated with this device.
Definition: abcgVulkanDevice.cpp:108
+
void create(VulkanPhysicalDevice const &physicalDevice, std::vector< char const * > const &extensions={})
Definition: abcgVulkanDevice.cpp:17
+
VulkanPhysicalDevice const & getPhysicalDevice() const noexcept
Access to abcg::VulkanPhysicalDevice.
Definition: abcgVulkanDevice.cpp:89
+
void withCommandBuffer(std::function< void(vk::CommandBuffer const &commandBuffer)> const &fun, vk::QueueFlagBits queueFlag=vk::QueueFlagBits::eGraphics, vk::CommandBufferLevel level=vk::CommandBufferLevel::ePrimary) const
Allocates and creates a command buffer to be immediately submitted and released.
Definition: abcgVulkanDevice.cpp:123
+
VulkanQueues const & getQueues() const noexcept
Returns the queues associated with this device.
Definition: abcgVulkanDevice.cpp:98
A class for representing a Vulkan physical device.
Definition: abcgVulkanPhysicalDevice.hpp:43
Root namespace.
Definition: abcgApplication.hpp:23
-
Command pools associated with a Vulkan device.
Definition: abcgVulkanDevice.hpp:31
-
vk::CommandPool graphics
Definition: abcgVulkanDevice.hpp:33
-
vk::CommandPool transfer
Definition: abcgVulkanDevice.hpp:34
-
vk::CommandPool compute
Definition: abcgVulkanDevice.hpp:32
-
Queues associated with a Vulkan device.
Definition: abcgVulkanDevice.hpp:40
-
vk::Queue transfer
Definition: abcgVulkanDevice.hpp:44
-
vk::Queue graphics
Definition: abcgVulkanDevice.hpp:42
-
vk::Queue compute
Definition: abcgVulkanDevice.hpp:41
-
vk::Queue present
Definition: abcgVulkanDevice.hpp:43
+
Command pools associated with a Vulkan device.
Definition: abcgVulkanDevice.hpp:32
+
vk::CommandPool graphics
Definition: abcgVulkanDevice.hpp:34
+
vk::CommandPool transfer
Definition: abcgVulkanDevice.hpp:35
+
vk::CommandPool compute
Definition: abcgVulkanDevice.hpp:33
+
Queues associated with a Vulkan device.
Definition: abcgVulkanDevice.hpp:41
+
vk::Queue transfer
Definition: abcgVulkanDevice.hpp:45
+
vk::Queue graphics
Definition: abcgVulkanDevice.hpp:43
+
vk::Queue compute
Definition: abcgVulkanDevice.hpp:42
+
vk::Queue present
Definition: abcgVulkanDevice.hpp:44
diff --git a/abcg/doc/html/abcgVulkanError_8cpp.html b/abcg/doc/html/abcgVulkanError_8cpp.html index 8f1d867de..f2bae3d45 100644 --- a/abcg/doc/html/abcgVulkanError_8cpp.html +++ b/abcg/doc/html/abcgVulkanError_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -117,7 +117,7 @@

Detailed Description

Definition of abcg::VulkanError members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanError_8hpp.html b/abcg/doc/html/abcgVulkanError_8hpp.html index 614f33f0c..08ac7add2 100644 --- a/abcg/doc/html/abcgVulkanError_8hpp.html +++ b/abcg/doc/html/abcgVulkanError_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -150,7 +150,7 @@

Header file of abcg::VulkanError and derived classes.

Declaration of abcg::VulkanError and derived classes.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanError_8hpp_source.html b/abcg/doc/html/abcgVulkanError_8hpp_source.html index ffe1e3c3d..3e28a444e 100644 --- a/abcg/doc/html/abcgVulkanError_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanError_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -144,24 +144,23 @@
58  source_location const &sourceLocation = source_location::current());
59 
60 private:
-
61  [[nodiscard]] static std::string
-
62  prettyPrint(VkResult errorCode, source_location const &sourceLocation);
+
61  static std::string prettyPrint(VkResult errorCode,
+
62  source_location const &sourceLocation);
63 #else
64 public:
65  explicit VulkanError(VkResult errorCode);
66  explicit VulkanError(vk::Result errorCode);
67 
68 private:
-
69  [[nodiscard]] static std::string prettyPrint(VkResult errorCode);
+
69  static std::string prettyPrint(VkResult errorCode);
70 #endif
71 
-
72  [[nodiscard]] static std::string_view
-
73  getVulkanErrorString(VkResult errorCode);
-
74 };
-
75 
-
76 #endif
+
72  static std::string_view getVulkanErrorString(VkResult errorCode);
+
73 };
+
74 
+
75 #endif
Header file of abcg::Exception and derived classes.
-
Base class for ABCg exception objects.
Definition: abcgException.hpp:71
+
Base class for ABCg exception objects.
Definition: abcgException.hpp:49
Represents an exception object for Vulkan runtime errors.
Definition: abcgVulkanError.hpp:53
VulkanError(VkResult errorCode, source_location const &sourceLocation=source_location::current())
Constructs an abcg::VulkanError object.
Definition: abcgVulkanError.cpp:88
Root namespace.
Definition: abcgApplication.hpp:23
diff --git a/abcg/doc/html/abcgVulkanExternal_8hpp.html b/abcg/doc/html/abcgVulkanExternal_8hpp.html index 346199448..4e29b7aef 100644 --- a/abcg/doc/html/abcgVulkanExternal_8hpp.html +++ b/abcg/doc/html/abcgVulkanExternal_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -119,7 +119,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -136,7 +136,7 @@

Header file for including Vulkan-related dependencies.

Preprocessor definitions and includes of Vulkan-related external dependencies.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +

Macro Definition Documentation

◆ ABCG_VULKAN_DEBUG_REPORT

diff --git a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.map index acd7bc745..6e3beeed6 100644 --- a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.map @@ -1,22 +1,22 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.md5 index 2c2330dc3..616b1c804 100644 --- a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.md5 @@ -1 +1 @@ -c6d6695e8324ebf46b3978705234f759 \ No newline at end of file +e627f54cfc8dd35c3e944589a15431f3 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.svg index c112f7ac8..9918f458f 100644 --- a/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanExternal_8hpp__dep__incl.svg @@ -4,449 +4,425 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanExternal.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanExternal.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanExternal.hpp Node2 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.hpp Node1->Node2 - - + + - - -Node19 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.hpp - - - - - -Node1->Node19 - - - - - -Node20 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.hpp + + +Node5 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.hpp - - -Node1->Node20 - - + + +Node1->Node5 + + Node3 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node2->Node3 - - + + - - -Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.cpp - - -Node2->Node9 - - + + +Node2->Node4 + + - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + + +Node2->Node5 + + + + + +Node17 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - - -Node2->Node10 - - + + +Node2->Node17 + + - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp + + +Node18 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - - -Node2->Node11 - - + + +Node2->Node18 + + - - -Node12 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + + +Node5->Node4 + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.hpp - - -Node2->Node12 - - + + +Node5->Node6 + + - - -Node14 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +Node16 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node2->Node14 - - + + +Node5->Node16 + + - - -Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + + +Node5->Node17 + + + + + +Node7 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp - - -Node2->Node15 - - + + +Node6->Node7 + + - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + + +Node11 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.cpp - - -Node2->Node18 - - + + +Node6->Node11 + + - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + + +Node12 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp - - -Node3->Node4 - - + + +Node6->Node12 + + - - -Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + + +Node13 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp - - -Node3->Node7 - - + + +Node6->Node13 + + + + + +Node6->Node16 + + + + + +Node6->Node17 + + + + + +Node19 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp + + + + + +Node6->Node19 + + Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp - + -Node3->Node8 - - +Node7->Node8 + + - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + + +Node9 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp - - -Node4->Node5 - - + + +Node7->Node9 + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + + +Node10 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp - - -Node4->Node6 - - - - + -Node10->Node4 - - - - - -Node10->Node8 - - +Node7->Node10 + + - - -Node10->Node11 - - + + +Node8->Node3 + + - + -Node11->Node12 - - - - - -Node11->Node14 - - - - - -Node11->Node15 - - +Node12->Node8 + + - + -Node12->Node4 - - - - - -Node13 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp - - +Node12->Node10 + + Node12->Node13 - - - - - -Node15->Node4 - - + + - - -Node15->Node14 - - - - - -Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +Node14 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp - + + +Node13->Node14 + + + + -Node15->Node16 - - +Node13->Node16 + + - - -Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +Node13->Node17 + + + + + +Node14->Node8 + + + + + +Node15 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - + + +Node14->Node15 + + + + -Node15->Node17 +Node17->Node8 + + + + + +Node17->Node16 + + + + + +Node17->Node18 - - -Node18->Node4 - - - - + -Node18->Node12 - - +Node19->Node8 + + - + -Node18->Node16 - - +Node19->Node14 + + - - -Node19->Node5 - - + + +Node20 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp + - - -Node19->Node6 - - - - - -Node19->Node15 - - - - - -Node19->Node17 - - - + Node19->Node20 - - - - - -Node20->Node2 - - - - - -Node20->Node6 - - - - - -Node20->Node14 - - - - - -Node20->Node15 - - + + diff --git a/abcg/doc/html/abcgVulkanExternal_8hpp_source.html b/abcg/doc/html/abcgVulkanExternal_8hpp_source.html index 565a53963..c4c8c6b52 100644 --- a/abcg/doc/html/abcgVulkanExternal_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanExternal_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgVulkanImage_8cpp.html b/abcg/doc/html/abcgVulkanImage_8cpp.html index 648de8c42..eed5eccc9 100644 --- a/abcg/doc/html/abcgVulkanImage_8cpp.html +++ b/abcg/doc/html/abcgVulkanImage_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -116,13 +116,13 @@
Include dependency graph for abcgVulkanImage.cpp:
-
+

Detailed Description

Definition of abcg::VulkanImage.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanImage_8cpp__incl.map b/abcg/doc/html/abcgVulkanImage_8cpp__incl.map index 05dc10e82..d524c8459 100644 --- a/abcg/doc/html/abcgVulkanImage_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanImage_8cpp__incl.map @@ -1,21 +1,22 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - + + + + + diff --git a/abcg/doc/html/abcgVulkanImage_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanImage_8cpp__incl.md5 index 65ad29cf2..9c511ddb5 100644 --- a/abcg/doc/html/abcgVulkanImage_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanImage_8cpp__incl.md5 @@ -1 +1 @@ -526fff5910961db8e9bca90466ec3291 \ No newline at end of file +d47379dad2e758a5324f424be75a4cb2 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanImage_8cpp__incl.svg b/abcg/doc/html/abcgVulkanImage_8cpp__incl.svg index 7f63a6805..b3ce541b9 100644 --- a/abcg/doc/html/abcgVulkanImage_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanImage_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanImage.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp @@ -22,217 +22,196 @@ Node2 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp Node1->Node2 - - - - - -Node11 - - -abcgVulkanBuffer.hpp - - - - - -Node1->Node11 - - + + Node12 - - -SDL_image.h + + +abcgVulkanBuffer.hpp - + Node1->Node12 - - + + Node13 - -cppitertools/itertools.hpp + +SDL_image.h - + Node1->Node13 - - + + Node14 - -fmt/core.h + +cppitertools/itertools.hpp - + Node1->Node14 - - + + Node15 - -gsl/gsl + +fmt/core.h - + Node1->Node15 - - + + Node16 - - -abcgException.hpp + + +gsl/gsl - + Node1->Node16 - - + + + + + +Node17 + + +abcgException.hpp + + + + + +Node1->Node17 + + Node3 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node2->Node3 - - + + - - -Node10 - - -gsl/pointers + + +Node11 + + +gsl/pointers - + -Node2->Node10 - - +Node2->Node11 + + Node4 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node3->Node4 - - + + - - -Node7 - - -abcgVulkanPhysicalDevice.hpp + + +Node10 + + +functional - - -Node3->Node7 - - + + +Node3->Node10 + + Node5 - -volk.h + +optional Node4->Node5 - - + + Node6 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node4->Node6 - - - - - -Node7->Node4 - - - - - -Node8 - - -optional - - - - - -Node7->Node8 - - + + @@ -243,74 +222,104 @@ - - -Node7->Node9 - - + + +Node4->Node9 + + - - -Node9->Node4 - - + + +Node7 + + +volk.h + - - -Node11->Node3 - - - - -Node11->Node10 - - + + +Node6->Node7 + + - - -Node17 - - -source_location + + +Node8 + + +vulkan/vulkan.hpp - - -Node16->Node17 - - + + +Node6->Node8 + + + + + +Node9->Node6 + + + + + +Node12->Node3 + + + + + +Node12->Node11 + + Node18 - -stdexcept + +source_location - - -Node16->Node18 - - + + +Node17->Node18 + + Node19 - -string + +stdexcept + + + + + +Node17->Node19 + + + + + +Node20 + + +string - + -Node16->Node19 - - +Node17->Node20 + + diff --git a/abcg/doc/html/abcgVulkanImage_8hpp.html b/abcg/doc/html/abcgVulkanImage_8hpp.html index 1082704c3..07e6ea69d 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp.html +++ b/abcg/doc/html/abcgVulkanImage_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,7 +120,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -145,7 +145,7 @@

Header file of abcg::VulkanImage.

Declaration of abcg::VulkanImage

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.map index 1289558da..892b47958 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.map @@ -1,14 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.md5 index 41d3dd36f..337e5ecdf 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.md5 @@ -1 +1 @@ -db921fa5a25ecb60ad92435b9727481f \ No newline at end of file +83e50836b690ab45539ad8a1d091d804 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.svg index 60da9bf9e..2c8b27f7e 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanImage_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanImage.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp @@ -22,195 +22,163 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node1->Node2 - - + + + + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp + + + + + +Node1->Node4 + + Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp Node1->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp - - - - - -Node1->Node6 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node2->Node3 - - + + - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp - - -Node2->Node4 - - + + +Node5->Node6 + + - - -Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node6->Node7 - - + + +Node5->Node8 + + Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - + -Node6->Node9 - - +Node5->Node9 + + - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp - + + +Node6->Node2 + + + + +Node7 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp + - - -Node6->Node10 - - - + -Node7->Node2 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp - - +Node6->Node7 + + - - -Node7->Node8 - - + + +Node9->Node2 + + - + -Node10->Node2 - - - - - -Node10->Node9 - - - - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - - +Node9->Node8 + + - - -Node10->Node11 - - - - - -Node12 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +Node10 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - - -Node10->Node12 - - + + +Node9->Node10 + + diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__incl.map b/abcg/doc/html/abcgVulkanImage_8hpp__incl.map index b8405f9d5..50f084ce3 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanImage_8hpp__incl.map @@ -1,11 +1,12 @@ - - - - - - - - - + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanImage_8hpp__incl.md5 index fc68793fc..b8ee8a903 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanImage_8hpp__incl.md5 @@ -1 +1 @@ -7eb594adb900a5aea20b5782d44ee532 \ No newline at end of file +4822d8274ef40316f0295f76c32ed56c \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanImage_8hpp__incl.svg b/abcg/doc/html/abcgVulkanImage_8hpp__incl.svg index d1139399d..9f1b30d28 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanImage_8hpp__incl.svg @@ -5,16 +5,16 @@ --> + viewBox="0.00 0.00 315.00 319.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> /home/harlen/dev/abcg/abcg/abcgVulkanImage.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp @@ -22,133 +22,142 @@ Node2 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node1->Node2 - - - - - -Node9 - - -gsl/pointers + + + + + +Node10 + + +gsl/pointers - + -Node1->Node9 - - +Node1->Node10 + + Node3 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node2->Node3 - - + + - - -Node6 - - -abcgVulkanPhysicalDevice.hpp + + +Node9 + + +functional - - -Node2->Node6 - - + + +Node2->Node9 + + Node4 - -volk.h + +optional Node3->Node4 - - + + Node5 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node3->Node5 - - + + + + + +Node8 + + +abcgVulkanInstance.hpp + + - + -Node6->Node3 - - +Node3->Node8 + + + + + +Node6 + + +volk.h + + + + + +Node5->Node6 + + Node7 - -optional + +vulkan/vulkan.hpp - + -Node6->Node7 - - +Node5->Node7 + + - - -Node8 - - -abcgVulkanInstance.hpp - - - - + -Node6->Node8 - - - - - -Node8->Node3 - - +Node8->Node5 + + diff --git a/abcg/doc/html/abcgVulkanImage_8hpp_source.html b/abcg/doc/html/abcgVulkanImage_8hpp_source.html index 6a6610790..dfeed80fa 100644 --- a/abcg/doc/html/abcgVulkanImage_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanImage_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -130,58 +130,49 @@
45  VulkanImageCreateInfo const &createInfo);
46  void destroy();
47 
-
51  explicit operator vk::Image const &() const noexcept { return m_image; }
-
52 
-
59  [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept {
-
60  return m_deviceMemory;
-
61  }
-
62 
-
69  [[nodiscard]] vk::ImageView const &getView() const noexcept {
-
70  return m_imageView;
-
71  }
-
72 
-
78  [[nodiscard]] vk::DescriptorImageInfo const &
-
79  getDescriptorImageInfo() const noexcept {
-
80  return m_descriptorImageInfo;
-
81  }
-
82 
-
93  [[nodiscard]] uint32_t getMipLevels() const noexcept { return m_mipLevels; }
-
94 
-
95 private:
-
96  [[nodiscard]] std::pair<vk::Image, vk::DeviceMemory>
-
97  createImage(VulkanDevice const &device, vk::ImageCreateInfo const &imageInfo,
-
98  vk::MemoryPropertyFlags properties) const;
-
99  void transitionImageLayout(VulkanDevice const &device,
-
100  vk::ImageLayout oldImageLayout,
-
101  vk::ImageLayout newImageLayout,
-
102  vk::ImageSubresourceRange subresourceRange = {
-
103  .aspectMask = vk::ImageAspectFlagBits::eColor,
-
104  .levelCount = 1,
-
105  .layerCount = 1}) const;
-
106 
-
107  static void createMipmaps(VulkanDevice const &device, vk::Image image,
-
108  vk::Format imageFormat, uint32_t texWidth,
-
109  uint32_t texHeight, uint32_t mipLevels);
-
110 
-
111  vk::Image m_image{};
-
112  vk::DeviceMemory m_deviceMemory{};
-
113  vk::ImageView m_imageView{};
-
114  vk::Sampler m_sampler{};
-
115  vk::DescriptorImageInfo m_descriptorImageInfo{};
-
116  uint32_t m_mipLevels{1U};
-
117  vk::Device m_device{};
-
118 };
-
119 
-
120 #endif
+
48  explicit operator vk::Image const &() const noexcept;
+
49 
+
50  [[nodiscard]] vk::DeviceMemory const &getDeviceMemory() const noexcept;
+
51  [[nodiscard]] vk::ImageView const &getView() const noexcept;
+
52  [[nodiscard]] vk::DescriptorImageInfo const &
+
53  getDescriptorImageInfo() const noexcept;
+
54  [[nodiscard]] uint32_t getMipLevels() const noexcept;
+
55 
+
56 private:
+
57  [[nodiscard]] std::pair<vk::Image, vk::DeviceMemory>
+
58  createImage(VulkanDevice const &device, vk::ImageCreateInfo const &imageInfo,
+
59  vk::MemoryPropertyFlags properties) const;
+
60  void transitionImageLayout(VulkanDevice const &device,
+
61  vk::ImageLayout oldImageLayout,
+
62  vk::ImageLayout newImageLayout,
+
63  vk::ImageSubresourceRange subresourceRange = {
+
64  .aspectMask = vk::ImageAspectFlagBits::eColor,
+
65  .levelCount = 1,
+
66  .layerCount = 1}) const;
+
67 
+
68  static void createMipmaps(VulkanDevice const &device, vk::Image image,
+
69  vk::Format imageFormat, uint32_t texWidth,
+
70  uint32_t texHeight, uint32_t mipLevels);
+
71 
+
72  vk::Image m_image;
+
73  vk::DeviceMemory m_deviceMemory;
+
74  vk::ImageView m_imageView;
+
75  vk::Sampler m_sampler;
+
76  vk::DescriptorImageInfo m_descriptorImageInfo;
+
77  uint32_t m_mipLevels{1U};
+
78  vk::Device m_device;
+
79 };
+
80 
+
81 #endif
Header file of abcg::VulkanDevice.
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
A class for representing a Vulkan image.
Definition: abcgVulkanImage.hpp:40
-
uint32_t getMipLevels() const noexcept
Returns the number of mipmap levels generated for this image.
Definition: abcgVulkanImage.hpp:93
+
vk::DeviceMemory const & getDeviceMemory() const noexcept
Returns the opaque handle to the device memory object associated with this image.
Definition: abcgVulkanImage.cpp:206
+
uint32_t getMipLevels() const noexcept
Returns the number of mipmap levels generated for this image.
Definition: abcgVulkanImage.cpp:240
+
vk::DescriptorImageInfo const & getDescriptorImageInfo() const noexcept
Returns the descriptor image information associated with this image.
Definition: abcgVulkanImage.cpp:226
void create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)
Definition: abcgVulkanImage.cpp:21
-
vk::ImageView const & getView() const noexcept
Returns the opaque handle to the image view object associated with this image.
Definition: abcgVulkanImage.hpp:69
-
void destroy()
Definition: abcgVulkanImage.cpp:177
-
vk::DescriptorImageInfo const & getDescriptorImageInfo() const noexcept
Returns the descriptor image information associated with this image.
Definition: abcgVulkanImage.hpp:79
-
vk::DeviceMemory const & getDeviceMemory() const noexcept
Returns the opaque handle to the device memory object associated with this image.
Definition: abcgVulkanImage.hpp:59
+
vk::ImageView const & getView() const noexcept
Returns the opaque handle to the image view object associated with this image.
Definition: abcgVulkanImage.cpp:216
+
void destroy()
Definition: abcgVulkanImage.cpp:178
Root namespace.
Definition: abcgApplication.hpp:23
Creation info structure for abcg::VulkanImage.
Definition: abcgVulkanImage.hpp:28
vk::ImageCreateInfo info
Definition: abcgVulkanImage.hpp:29
diff --git a/abcg/doc/html/abcgVulkanInstance_8cpp.html b/abcg/doc/html/abcgVulkanInstance_8cpp.html index 5ba6db67a..bfbb7497e 100644 --- a/abcg/doc/html/abcgVulkanInstance_8cpp.html +++ b/abcg/doc/html/abcgVulkanInstance_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -111,17 +111,16 @@ #include "abcgApplication.hpp"
#include "abcgException.hpp"
#include "abcgVulkan.hpp"
-#include "abcgWindow.hpp"
Include dependency graph for abcgVulkanInstance.cpp:
-
+

Detailed Description

Definition of abcg::VulkanInstance.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.map b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.map index 632bfd46b..80365bebc 100644 --- a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.map @@ -1,35 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.md5 index e7bb50427..c4d7db399 100644 --- a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.md5 @@ -1 +1 @@ -ad03405023b787f4062cb65286f3888f \ No newline at end of file +d2a6aa560d2cf5f326692ca47e415e86 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.svg b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.svg index 568e03bae..83a40b0c0 100644 --- a/abcg/doc/html/abcgVulkanInstance_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanInstance_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanInstance.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp @@ -22,643 +22,616 @@ Node2 - -abcgVulkanInstance.hpp + +abcgVulkanInstance.hpp Node1->Node2 - - + + Node6 - -span + +span Node1->Node6 - - + + Node7 - -abcgApplication.hpp + +abcgApplication.hpp Node1->Node7 - - + + Node9 - -abcgException.hpp + +abcgException.hpp Node1->Node9 - - + + Node12 - -abcgVulkan.hpp + +abcgVulkan.hpp Node1->Node12 - - - - - -Node20 - - -abcgWindow.hpp - - - - - -Node1->Node20 - - + + Node3 - -abcgVulkanExternal.hpp + +abcgVulkanExternal.hpp Node2->Node3 - - + + Node4 - -volk.h + +volk.h Node3->Node4 - - + + Node5 - -vulkan/vulkan.hpp + +vulkan/vulkan.hpp Node3->Node5 - - + + Node8 - -string + +string Node7->Node8 - - + + Node9->Node8 - - + + Node10 - -source_location + +source_location Node9->Node10 - - + + Node11 - -stdexcept + +stdexcept Node9->Node11 - - + + Node13 - -abcg.hpp + +abcg.hpp Node12->Node13 - - + + Node21 - -abcgVulkanBuffer.hpp + +abcgVulkanBuffer.hpp - + Node12->Node21 - - + + Node26 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp - + Node12->Node26 - - + + Node27 - -abcgVulkanPipeline.hpp + +abcgVulkanPipeline.hpp - + Node12->Node27 - - + + Node28 - -abcgVulkanShader.hpp + +abcgVulkanShader.hpp Node12->Node28 - - + + Node32 - -abcgVulkanWindow.hpp + +abcgVulkanWindow.hpp Node12->Node32 - - + + Node13->Node7 - - + + Node13->Node9 - - + + Node14 - -abcgExternal.hpp + +abcgExternal.hpp Node13->Node14 - - + + Node15 - -abcgTrackball.hpp + +abcgTrackball.hpp Node13->Node15 - - + + Node18 - -abcgUtil.hpp + +abcgUtil.hpp Node13->Node18 - - + + + + + +Node20 + + +abcgWindow.hpp + + - + Node13->Node20 - - + + Node15->Node14 - - + + Node16 - -abcgTimer.hpp + +abcgTimer.hpp Node15->Node16 - - + + Node17 - -chrono + +chrono Node16->Node17 - - + + + + + +Node18->Node8 + + Node19 - -functional + +functional Node18->Node19 - - + + - + Node20->Node8 - - + + - + Node20->Node14 - - + + - + Node20->Node16 - - + + Node22 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp - + Node21->Node22 - - + + Node25 - -gsl/pointers + +gsl/pointers - + Node21->Node25 - - + + - - -Node22->Node3 - - + + +Node22->Node19 + + Node23 - -abcgVulkanPhysicalDevice.hpp + +abcgVulkanPhysicalDevice.hpp Node22->Node23 - - + + Node23->Node2 - - + + Node23->Node3 - - + + Node24 - -optional + +optional Node23->Node24 - - + + - + Node26->Node22 - - + + - + Node26->Node25 - - - - - -Node27->Node22 - - + + Node27->Node28 - - + + Node30 - -abcgVulkanSwapchain.hpp + +abcgVulkanSwapchain.hpp Node27->Node30 - - + + Node28->Node22 - - + + Node29 - -abcgShader.hpp + +abcgShader.hpp Node28->Node29 - - + + Node29->Node8 - - + + Node29->Node24 - - + + Node30->Node19 - - + + Node30->Node22 - - + + Node30->Node26 - - + + Node31 - -glm/fwd.hpp + +glm/fwd.hpp Node30->Node31 - - + + - -Node32->Node2 - - - - -Node32->Node8 - - +Node32->Node2 + + - + Node32->Node20 - - + + - + Node32->Node22 - - + + - + Node32->Node23 - - + + - + Node32->Node30 - - - - - -Node33 - - -array - - - - - -Node32->Node33 - - + + diff --git a/abcg/doc/html/abcgVulkanInstance_8hpp.html b/abcg/doc/html/abcgVulkanInstance_8hpp.html index 3546a20fe..e5a16ed95 100644 --- a/abcg/doc/html/abcgVulkanInstance_8hpp.html +++ b/abcg/doc/html/abcgVulkanInstance_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -119,7 +119,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -141,7 +141,7 @@

Header file of abcg::VulkanInstance.

Declaration of abcg::VulkanInstance.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.map index 6fa834efc..e8a9052c5 100644 --- a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.map @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.md5 index 47f4edc59..26e2439ab 100644 --- a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.md5 @@ -1 +1 @@ -47b5ff09f210b0f6d8655c07d2e317dd \ No newline at end of file +3e5151fd42c84980842eb98bb4d38423 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.svg index ecc3f80ca..e752cd997 100644 --- a/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanInstance_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanInstance.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.hpp @@ -22,403 +22,385 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node1->Node2 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.cpp Node1->Node3 - - + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.hpp Node1->Node4 - - + + Node16 - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - + Node1->Node16 - - + + - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +Node17 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - - -Node1->Node18 - - + + +Node1->Node17 + + - + Node4->Node3 - - + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.hpp Node4->Node5 - - + + Node15 - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - + Node4->Node15 - - + + - + Node4->Node16 - - + + Node6 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp Node5->Node6 - - + + Node10 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.cpp - + Node5->Node10 - - + + Node11 - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp - + Node5->Node11 - - + + Node12 - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp - + Node5->Node12 - - - - - -Node13 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp - - - - - -Node5->Node13 - - + + - + Node5->Node15 - - + + - + Node5->Node16 - - + + - - -Node19 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + + +Node18 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp - - -Node5->Node19 - - + + +Node5->Node18 + + Node7 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node6->Node7 - - + + Node8 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp - + Node6->Node8 - - + + Node9 - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp - + Node6->Node9 - - + + Node7->Node2 - - - - - -Node7->Node3 - - + + - + Node11->Node7 - - + + - + Node11->Node9 - - + + - + Node11->Node12 - - + + + + + +Node13 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp + + - + Node12->Node13 - - + + - + Node12->Node15 - - + + - + Node12->Node16 - - + + - + Node13->Node7 - - + + Node14 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - + Node13->Node14 - - + + - + Node16->Node7 - - + + - + Node16->Node15 - - - - - -Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - - + + Node16->Node17 - - + + - + -Node16->Node18 - - +Node18->Node7 + + - - -Node19->Node7 - - + + +Node18->Node13 + + - - -Node19->Node13 - - + + +Node19 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp + - - -Node19->Node17 - - + + + +Node18->Node19 + + diff --git a/abcg/doc/html/abcgVulkanInstance_8hpp_source.html b/abcg/doc/html/abcgVulkanInstance_8hpp_source.html index 9040847aa..ff362aafe 100644 --- a/abcg/doc/html/abcgVulkanInstance_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanInstance_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,21 +120,21 @@
29  std::string_view applicationName = {});
30  void destroy();
31 
-
35  explicit operator vk::Instance const &() const noexcept { return m_instance; }
+
32  explicit operator vk::Instance const &() const noexcept;
+
33 
+
34 private:
+
35  vk::Instance m_instance;
36 
-
37 private:
-
38  vk::Instance m_instance{};
-
39 
-
40 #if defined(ABCG_VULKAN_DEBUG_REPORT)
-
41  vk::DebugUtilsMessengerEXT m_debugMessenger{};
+
37 #if defined(ABCG_VULKAN_DEBUG_REPORT)
+
38  vk::DebugUtilsMessengerEXT m_debugMessenger{};
+
39 #endif
+
40 };
+
41 
42 #endif
-
43 };
-
44 
-
45 #endif
Header file for including Vulkan-related dependencies.
A class for representing a Vulkan instance.
Definition: abcgVulkanInstance.hpp:25
-
void destroy()
Definition: abcgVulkanInstance.cpp:200
-
void create(std::vector< char const * > const &layers={}, std::vector< char const * > const &extensions={}, std::string_view applicationName={})
Definition: abcgVulkanInstance.cpp:139
+
void destroy()
Definition: abcgVulkanInstance.cpp:201
+
void create(std::vector< char const * > const &layers={}, std::vector< char const * > const &extensions={}, std::string_view applicationName={})
Definition: abcgVulkanInstance.cpp:140
Root namespace.
Definition: abcgApplication.hpp:23
diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp.html b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp.html index 74a2f7413..7b2354af9 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp.html +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,21 +108,21 @@ More...

#include "abcgVulkanPhysicalDevice.hpp"
#include <cppitertools/itertools.hpp>
+#include <gsl/gsl>
#include <set>
#include <span>
#include "abcgException.hpp"
-#include "abcgVulkan.hpp"
#include "abcgVulkanInstance.hpp"
Include dependency graph for abcgVulkanPhysicalDevice.cpp:
-
+

Detailed Description

Definition of abcg::VulkanPhysicalDevice.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.map b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.map index a7c7f27f4..6ec82ffa0 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.map @@ -1,37 +1,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.md5 index b7085edd5..f573cb618 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.md5 @@ -1 +1 @@ -76488d6380387fdd4db6b0f8355b2db3 \ No newline at end of file +85aabdca84001c5c9b3b364b0ec9a8ac \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.svg b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.svg index b19d9f3ae..3d4e7a7fc 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8cpp__incl.svg @@ -4,17 +4,17 @@ - - + + /home/harlen/dev/abcg/abcg/abcgVulkanPhysicalDevice.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.cpp @@ -30,659 +30,215 @@ Node1->Node2 - - + + Node7 - -abcgVulkanInstance.hpp + +abcgVulkanInstance.hpp - + Node1->Node7 - - + + Node8 - -cppitertools/itertools.hpp + +cppitertools/itertools.hpp Node1->Node8 - - + + Node9 - -set + +gsl/gsl Node1->Node9 - - + + Node10 - -span + +set Node1->Node10 - - + + Node11 - - -abcgException.hpp + + +span Node1->Node11 - - + + - - -Node15 - - -abcgVulkan.hpp + + +Node12 + + +abcgException.hpp - - -Node1->Node15 - - + + +Node1->Node12 + + Node3 - -optional + +optional Node2->Node3 - - + + Node4 - -abcgVulkanExternal.hpp + +abcgVulkanExternal.hpp Node2->Node4 - - + + Node2->Node7 - - + + Node5 - -volk.h + +volk.h Node4->Node5 - - + + Node6 - -vulkan/vulkan.hpp + +vulkan/vulkan.hpp Node4->Node6 - - + + Node7->Node4 - - - - - -Node12 - - -source_location - - - - - -Node11->Node12 - - + + Node13 - -stdexcept + +source_location - + -Node11->Node13 - - +Node12->Node13 + + Node14 - -string + +stdexcept - + -Node11->Node14 - - - - - -Node16 - - -abcg.hpp - - - - - -Node15->Node16 - - - - - -Node25 - - -abcgVulkanBuffer.hpp - - - - - -Node15->Node25 - - - - - -Node28 - - -abcgVulkanImage.hpp - - - - - -Node15->Node28 - - - - - -Node29 - - -abcgVulkanPipeline.hpp - - - - - -Node15->Node29 - - - - - -Node30 - - -abcgVulkanShader.hpp - - - - - -Node15->Node30 - - - - - -Node34 - - -abcgVulkanWindow.hpp - - - - - -Node15->Node34 - - - - - -Node16->Node11 - - - - - -Node17 - - -abcgApplication.hpp - - - - - -Node16->Node17 - - - - - -Node18 - - -abcgExternal.hpp - +Node12->Node14 + + - - - -Node16->Node18 - - - - - -Node19 - - -abcgTrackball.hpp - - - - - -Node16->Node19 - - - - - -Node22 - - -abcgUtil.hpp - - - - - -Node16->Node22 - - - - - -Node24 - - -abcgWindow.hpp - - - - - -Node16->Node24 - - - - - -Node17->Node14 - - - - - -Node19->Node18 - - - - - -Node20 - - -abcgTimer.hpp - - - - - -Node19->Node20 - - - - - -Node21 - - -chrono - - - - - -Node20->Node21 - - - - - -Node23 - - -functional - - - - - -Node22->Node23 - - - - - -Node24->Node14 - - - - - -Node24->Node18 - - - - - -Node24->Node20 - - - - - -Node26 - - -abcgVulkanDevice.hpp - - - - - -Node25->Node26 - - - - - -Node27 - - -gsl/pointers - - - - - -Node25->Node27 - - - - - -Node26->Node2 - - - - - -Node26->Node4 - - - - - -Node28->Node26 - - - - - -Node28->Node27 - - - - - -Node29->Node26 - - - - - -Node29->Node30 - - - - - -Node32 - - -abcgVulkanSwapchain.hpp - - - - - -Node29->Node32 - - - - - -Node30->Node26 - - - - - -Node31 - - -abcgShader.hpp - - - - - -Node30->Node31 - - - - - -Node31->Node3 - - - - - -Node31->Node14 - - - - - -Node32->Node23 - - - - - -Node32->Node26 - - - - - -Node32->Node28 - - - - - -Node33 - - -glm/fwd.hpp - - - - - -Node32->Node33 - - - - - -Node34->Node2 - - - - - -Node34->Node7 - - - - - -Node34->Node14 - - - - - -Node34->Node24 - - - - - -Node34->Node26 - - - - - -Node34->Node32 - - - - - -Node35 - - -array + + +Node15 + + +string - - -Node34->Node35 - - + + +Node12->Node15 + + diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp.html b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp.html index d28fc51ad..1d3eb466b 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp.html +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -121,7 +121,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -146,7 +146,7 @@

Header file of abcg::VulkanPhysicalDevice.

Declaration of abcg::VulkanPhysicalDevice.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.map index f13d27ad1..5956bbf20 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.map @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.md5 index a18172db2..cb799ce7b 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.md5 @@ -1 +1 @@ -db8a0b1aa444a759dcbf0b5a0fd92e37 \ No newline at end of file +713e5a36c040c8f9d9d86d57aefc8c30 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.svg index bec1ddd27..a07ef5884 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanPhysicalDevice.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.hpp @@ -22,363 +22,345 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.hpp Node1->Node2 - - + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp + + +Node13 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node1->Node6 - - + + +Node1->Node13 + + Node14 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - + Node1->Node14 - - + + - - -Node15 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + + +Node18 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPhysicalDevice.cpp - - -Node1->Node15 - - + + +Node1->Node18 + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.hpp Node2->Node3 - - + + + + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanDevice.cpp + + + + + +Node2->Node8 + + Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanDevice.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.hpp Node2->Node9 - - + + Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp - + Node2->Node10 - - - - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp - + + - - - -Node2->Node11 - - - - - -Node12 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp - - - - - -Node2->Node12 - - + + +Node2->Node13 + + - + Node2->Node14 - - - - - -Node2->Node15 - - + + - - -Node18 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + + +Node16 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp - - -Node2->Node18 - - + + +Node2->Node16 + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node3->Node4 - - + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanBuffer.cpp + + + + + +Node3->Node6 + + Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanBuffer.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanImage.cpp Node3->Node7 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanImage.cpp - - - - - -Node3->Node8 - - + + Node5 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node4->Node5 - - + + - - -Node4->Node6 - - + + +Node9->Node4 + + - + -Node10->Node4 - - +Node9->Node7 + + - + -Node10->Node8 - - +Node9->Node10 + + + + + +Node11 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp + + Node10->Node11 - - + + - - -Node11->Node12 - - + + +Node10->Node13 + + - + -Node11->Node14 - - +Node10->Node14 + + - - -Node11->Node15 - - - - - -Node12->Node4 - - + + +Node11->Node4 + + - - -Node13 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + + +Node12 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - - -Node12->Node13 - - + + +Node11->Node12 + + - - -Node15->Node4 - - + + +Node14->Node4 + + - - -Node15->Node14 - - + + +Node14->Node13 + + - - -Node16 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +Node15 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - + -Node15->Node16 - - +Node14->Node15 + + + + + +Node16->Node4 + + + + + +Node16->Node11 + + Node17 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp - - -Node15->Node17 - - - - - -Node18->Node4 - - - - - -Node18->Node12 - - - - - -Node18->Node16 - - + + +Node16->Node17 + + diff --git a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp_source.html b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp_source.html index f989c2d6a..57d8e0aae 100644 --- a/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanPhysicalDevice_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -136,67 +136,52 @@
48  bool useSeparateTransferQueue = false);
49  void destroy();
50 
-
54  explicit operator vk::PhysicalDevice const &() const noexcept {
-
55  return m_physicalDevice;
-
56  }
-
57 
-
58  [[nodiscard]] std::optional<uint32_t>
-
59  findMemoryType(uint32_t memoryTypeBitsRequirement,
-
60  vk::MemoryPropertyFlags requiredProperties) const;
-
61 
-
67  [[nodiscard]] VulkanInstance const &getInstance() const noexcept {
-
68  return m_instance;
-
69  }
-
70 
-
76  [[nodiscard]] VulkanQueuesFamilies const &getQueuesFamilies() const noexcept {
-
77  return m_queuesFamilies;
-
78  }
-
79 
-
85  [[nodiscard]] vk::SurfaceKHR const &getSurfaceKHR() const noexcept {
-
86  return m_surfaceKHR;
-
87  }
-
88 
-
94  [[nodiscard]] vk::SampleCountFlagBits getSampleCount() const noexcept {
-
95  return m_sampleCount;
-
96  }
-
97 
-
98  [[nodiscard]] std::optional<vk::Format>
-
99  getFirstSupportedFormat(std::vector<vk::Format> const &candidates,
-
100  vk::ImageTiling tiling,
-
101  vk::FormatFeatureFlags features) const;
-
102 
-
103 private:
-
104  void checkQueueFamily(vk::QueueFamilyProperties const &properties,
-
105  uint32_t queueFamilyIndex,
-
106  bool useSeparateTransferQueue);
-
107  void findQueueFamilies(bool useSeparateTransferQueue);
-
108  [[nodiscard]] vk::SampleCountFlagBits getMaxUsableSampleCount();
-
109  [[nodiscard]] bool
-
110  isDeviceSuitable(std::vector<char const *> const &extensions,
-
111  bool useSeparateTransferQueue);
-
112  [[nodiscard]] std::vector<char const *>
-
113  checkExtensionsSupport(std::vector<char const *> const &extensions);
-
114 
-
115  vk::PhysicalDevice m_physicalDevice{};
-
116  VulkanInstance m_instance{};
-
117  vk::SurfaceKHR m_surfaceKHR{};
-
118  vk::SampleCountFlagBits m_sampleCount{};
-
119  VulkanQueuesFamilies m_queuesFamilies;
-
120 };
-
121 
-
122 #endif
+
51  explicit operator vk::PhysicalDevice const &() const noexcept;
+
52 
+
53  [[nodiscard]] std::optional<uint32_t>
+
54  findMemoryType(uint32_t memoryTypeBitsRequirement,
+
55  vk::MemoryPropertyFlags requiredProperties) const;
+
56  [[nodiscard]] VulkanInstance const &getInstance() const noexcept;
+
57  [[nodiscard]] VulkanQueuesFamilies const &getQueuesFamilies() const noexcept;
+
58  [[nodiscard]] vk::SurfaceKHR const &getSurfaceKHR() const noexcept;
+
59  [[nodiscard]] vk::SampleCountFlagBits getSampleCount() const noexcept;
+
60  [[nodiscard]] std::optional<vk::Format>
+
61  getFirstSupportedFormat(std::vector<vk::Format> const &candidates,
+
62  vk::ImageTiling tiling,
+
63  vk::FormatFeatureFlags features) const;
+
64 
+
65 private:
+
66  void checkQueueFamily(vk::QueueFamilyProperties const &properties,
+
67  uint32_t queueFamilyIndex,
+
68  bool useSeparateTransferQueue);
+
69  void findQueueFamilies(bool useSeparateTransferQueue);
+
70  [[nodiscard]] vk::SampleCountFlagBits getMaxUsableSampleCount();
+
71  [[nodiscard]] bool
+
72  isDeviceSuitable(std::vector<char const *> const &extensions,
+
73  bool useSeparateTransferQueue);
+
74  [[nodiscard]] std::vector<char const *>
+
75  checkExtensionsSupport(std::vector<char const *> const &extensions);
+
76 
+
77  vk::PhysicalDevice m_physicalDevice;
+
78  VulkanInstance m_instance;
+
79  vk::SurfaceKHR m_surfaceKHR;
+
80  vk::SampleCountFlagBits m_sampleCount{};
+
81  VulkanQueuesFamilies m_queuesFamilies;
+
82 };
+
83 
+
84 #endif
Header file for including Vulkan-related dependencies.
Header file of abcg::VulkanInstance.
A class for representing a Vulkan instance.
Definition: abcgVulkanInstance.hpp:25
A class for representing a Vulkan physical device.
Definition: abcgVulkanPhysicalDevice.hpp:43
+
VulkanInstance const & getInstance() const noexcept
Access to abcg::VulkanInstance.
Definition: abcgVulkanPhysicalDevice.cpp:92
std::optional< uint32_t > findMemoryType(uint32_t memoryTypeBitsRequirement, vk::MemoryPropertyFlags requiredProperties) const
Finds a type of memory that meets the given requirements.
Definition: abcgVulkanPhysicalDevice.cpp:58
-
std::optional< vk::Format > getFirstSupportedFormat(std::vector< vk::Format > const &candidates, vk::ImageTiling tiling, vk::FormatFeatureFlags features) const
Definition: abcgVulkanPhysicalDevice.cpp:139
-
VulkanInstance const & getInstance() const noexcept
Access to abcg::VulkanInstance.
Definition: abcgVulkanPhysicalDevice.hpp:67
+
vk::SurfaceKHR const & getSurfaceKHR() const noexcept
Access to the surface.
Definition: abcgVulkanPhysicalDevice.cpp:112
+
std::optional< vk::Format > getFirstSupportedFormat(std::vector< vk::Format > const &candidates, vk::ImageTiling tiling, vk::FormatFeatureFlags features) const
Definition: abcgVulkanPhysicalDevice.cpp:187
void destroy()
Definition: abcgVulkanPhysicalDevice.cpp:46
-
VulkanQueuesFamilies const & getQueuesFamilies() const noexcept
Access to queues families.
Definition: abcgVulkanPhysicalDevice.hpp:76
-
vk::SampleCountFlagBits getSampleCount() const noexcept
Access to number of samples.
Definition: abcgVulkanPhysicalDevice.hpp:94
-
vk::SurfaceKHR const & getSurfaceKHR() const noexcept
Access to the surface.
Definition: abcgVulkanPhysicalDevice.hpp:85
+
vk::SampleCountFlagBits getSampleCount() const noexcept
Access to number of samples.
Definition: abcgVulkanPhysicalDevice.cpp:122
void create(VulkanInstance const &instance, vk::SurfaceKHR const &surface, std::vector< char const * > const &extensions={}, vk::SampleCountFlagBits sampleCount=vk::SampleCountFlagBits::e1, bool useSeparateTransferQueue=false)
Definition: abcgVulkanPhysicalDevice.cpp:21
+
VulkanQueuesFamilies const & getQueuesFamilies() const noexcept
Access to queues families.
Definition: abcgVulkanPhysicalDevice.cpp:102
Root namespace.
Definition: abcgApplication.hpp:23
Supported queues families.
Definition: abcgVulkanPhysicalDevice.hpp:33
std::optional< uint32_t > compute
Definition: abcgVulkanPhysicalDevice.hpp:34
diff --git a/abcg/doc/html/abcgVulkanPipeline_8cpp.html b/abcg/doc/html/abcgVulkanPipeline_8cpp.html index 2d3dddb48..9cb8f8f0f 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8cpp.html +++ b/abcg/doc/html/abcgVulkanPipeline_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -111,13 +111,13 @@
Include dependency graph for abcgVulkanPipeline.cpp:
-
+

Detailed Description

Definition of abcg::VulkanPipeline.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.map b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.map index 52f621b5a..6c072c1f3 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.map @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.md5 index ffa41bda6..076b14388 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.md5 @@ -1 +1 @@ -5090c22d17133328da8cda8803310fd7 \ No newline at end of file +d04c7d5bf9e5906d81e9ba3ce43a74d1 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.svg b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.svg index 53f9424ed..693ca4c4f 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanPipeline_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanPipeline.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp @@ -22,292 +22,286 @@ Node2 - -abcgVulkanPipeline.hpp + +abcgVulkanPipeline.hpp Node1->Node2 - - + + Node18 - -gsl/gsl + +gsl/gsl - + Node1->Node18 - - + + Node3 - - -abcgVulkanDevice.hpp + + +abcgVulkanShader.hpp Node2->Node3 - - - - - -Node10 - - -abcgVulkanShader.hpp - - + + - - -Node2->Node10 - - - - - -Node13 - - -abcgVulkanSwapchain.hpp + + +Node14 + + +abcgVulkanSwapchain.hpp - - -Node2->Node13 - - + + +Node2->Node14 + + Node4 - - -abcgVulkanExternal.hpp + + +abcgShader.hpp Node3->Node4 - - + + Node7 - - -abcgVulkanPhysicalDevice.hpp + + +abcgVulkanDevice.hpp Node3->Node7 - - + + Node5 - -volk.h + +optional Node4->Node5 - - + + Node6 - -vulkan/vulkan.hpp + +string Node4->Node6 - - - - - -Node7->Node4 - - + + Node8 - - -optional + + +abcgVulkanPhysicalDevice.hpp Node7->Node8 - - + + - - -Node9 - - -abcgVulkanInstance.hpp + + +Node13 + + +functional - - -Node7->Node9 - - - - - -Node9->Node4 - - + + +Node7->Node13 + + - - -Node10->Node3 - - + + +Node8->Node5 + + - - -Node11 - - -abcgShader.hpp + + +Node9 + + +abcgVulkanExternal.hpp - - -Node10->Node11 - - - - - -Node11->Node8 - - + + +Node8->Node9 + + Node12 - - -string + + +abcgVulkanInstance.hpp - - -Node11->Node12 - - + + +Node8->Node12 + + - - -Node13->Node3 - - + + +Node10 + + +volk.h + - - -Node14 - - -functional + + + +Node9->Node10 + + + + + +Node11 + + +vulkan/vulkan.hpp - - -Node13->Node14 - - + + +Node9->Node11 + + + + + +Node12->Node9 + + + + + +Node14->Node7 + + + + + +Node14->Node13 + + Node15 - -glm/fwd.hpp + +glm/fwd.hpp - - -Node13->Node15 - - + + +Node14->Node15 + + Node16 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp - - -Node13->Node16 - - + + +Node14->Node16 + + - - -Node16->Node3 - - + + +Node16->Node7 + + Node17 - -gsl/pointers + +gsl/pointers - + Node16->Node17 - - + + diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp.html b/abcg/doc/html/abcgVulkanPipeline_8hpp.html index 7ac11e1c0..3cc7feb8a 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp.html +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,19 +109,18 @@

Header file of abcg::VulkanPipeline. More...

-
#include "abcgVulkanDevice.hpp"
-#include "abcgVulkanShader.hpp"
+
Include dependency graph for abcgVulkanPipeline.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -146,7 +145,7 @@

Header file of abcg::VulkanPipeline.

Declaration of abcg::VulkanPipeline.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.map index cca277911..0fc235b15 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.map @@ -1,7 +1,6 @@ - - - + + + - diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.md5 index 3114dfd0f..49e51883b 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.md5 @@ -1 +1 @@ -76baaeef020b507a77a92059cc11cc52 \ No newline at end of file +00cf98f95e0e1b74e385e057c78c5fdf \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.svg index 7782d64aa..8d5f7e087 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanPipeline.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp @@ -22,33 +22,33 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node1->Node2 - - + + - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - - -Node1->Node5 - - + + +Node1->Node4 + + @@ -63,24 +63,8 @@ Node2->Node3 - - - - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node2->Node4 - - + + diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.map b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.map index 49c4af639..2ee90d9f3 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.map @@ -1,18 +1,18 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.md5 index 30eb18b9e..7a30bdbce 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.md5 @@ -1 +1 @@ -702b0a10a77fb438a4f741b1db819fb1 \ No newline at end of file +3288ad319dc3dd593a850dee1ac3fff1 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.svg b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.svg index 3996826d3..1841a2659 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp__incl.svg @@ -4,280 +4,274 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanPipeline.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp Node2 - - -abcgVulkanDevice.hpp + + +abcgVulkanShader.hpp Node1->Node2 - - + + - - -Node9 - - -abcgVulkanShader.hpp - - - - - -Node1->Node9 - - - - - -Node12 - - -abcgVulkanSwapchain.hpp + + +Node13 + + +abcgVulkanSwapchain.hpp - - -Node1->Node12 - - + + +Node1->Node13 + + Node3 - - -abcgVulkanExternal.hpp + + +abcgShader.hpp Node2->Node3 - - + + Node6 - - -abcgVulkanPhysicalDevice.hpp + + +abcgVulkanDevice.hpp Node2->Node6 - - + + Node4 - -volk.h + +optional Node3->Node4 - - + + Node5 - -vulkan/vulkan.hpp + +string Node3->Node5 - - - - - -Node6->Node3 - - + + Node7 - - -optional + + +abcgVulkanPhysicalDevice.hpp Node6->Node7 - - + + - - -Node8 - - -abcgVulkanInstance.hpp + + +Node12 + + +functional - - -Node6->Node8 - - - - - -Node8->Node3 - - + + +Node6->Node12 + + - - -Node9->Node2 - - + + +Node7->Node4 + + - - -Node10 - - -abcgShader.hpp + + +Node8 + + +abcgVulkanExternal.hpp - - -Node9->Node10 - - - - - -Node10->Node7 - - + + +Node7->Node8 + + Node11 - - -string + + +abcgVulkanInstance.hpp - - -Node10->Node11 - - + + +Node7->Node11 + + - - -Node12->Node2 - - + + +Node9 + + +volk.h + - - -Node13 - - -functional + + + +Node8->Node9 + + + + + +Node10 + + +vulkan/vulkan.hpp - - -Node12->Node13 - - + + +Node8->Node10 + + + + + +Node11->Node8 + + + + + +Node13->Node6 + + + + + +Node13->Node12 + + Node14 - -glm/fwd.hpp + +glm/fwd.hpp - - -Node12->Node14 - - + + +Node13->Node14 + + Node15 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp - - -Node12->Node15 - - + + +Node13->Node15 + + - - -Node15->Node2 - - + + +Node15->Node6 + + Node16 - -gsl/pointers + +gsl/pointers - + Node15->Node16 - - + + diff --git a/abcg/doc/html/abcgVulkanPipeline_8hpp_source.html b/abcg/doc/html/abcgVulkanPipeline_8hpp_source.html index 17128c56c..5a420917d 100644 --- a/abcg/doc/html/abcgVulkanPipeline_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanPipeline_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,75 +107,71 @@
13 #ifndef ABCG_VULKAN_PIPELINE_HPP_
14 #define ABCG_VULKAN_PIPELINE_HPP_
15 
-
16 #include "abcgVulkanDevice.hpp"
-
17 #include "abcgVulkanShader.hpp"
-
18 #include "abcgVulkanSwapchain.hpp"
-
19 
-
20 namespace abcg {
-
21 struct VulkanPipelineCreateInfo;
-
22 class VulkanPipeline;
-
23 } // namespace abcg
-
24 
- -
29  std::vector<abcg::VulkanShader> shaders{};
-
30  std::vector<vk::VertexInputBindingDescription> bindingDescriptions{};
-
31  std::vector<vk::VertexInputAttributeDescription> attributeDescriptions{};
-
32  vk::PipelineInputAssemblyStateCreateInfo inputAssemblyState{};
-
33  std::optional<std::vector<vk::Viewport>> viewports{};
-
34  std::optional<std::vector<vk::Rect2D>> scissors{};
-
35  vk::PipelineRasterizationStateCreateInfo rasterizationState{};
-
36  std::optional<vk::PipelineMultisampleStateCreateInfo> multisampleState{};
-
37  std::optional<vk::PipelineDepthStencilStateCreateInfo> depthStencilState{};
-
38  std::optional<vk::PipelineColorBlendAttachmentState> colorBlendAttachment{};
-
39  std::optional<vk::PipelineColorBlendStateCreateInfo> colorBlendState{};
-
40  std::vector<vk::DynamicState> dynamicStates{};
-
41  vk::PipelineLayoutCreateInfo pipelineLayout{};
-
42  vk::PipelineCache pipelineCache{};
-
43 };
-
44 
- -
52 public:
-
53  void create(VulkanSwapchain const &swapchain,
-
54  VulkanPipelineCreateInfo const &createInfo);
-
55  void destroy();
-
56 
-
60  explicit operator vk::Pipeline const &() const noexcept { return m_pipeline; }
-
61 
-
67  [[nodiscard]] vk::PipelineLayout const &getLayout() const noexcept {
-
68  return m_pipelineLayout;
-
69  }
-
70 
-
71 private:
-
72  vk::Pipeline m_pipeline{};
-
73  vk::PipelineLayout m_pipelineLayout{};
-
74  vk::Device m_device{};
-
75 };
-
76 
-
77 #endif
-
Header file of abcg::VulkanDevice.
+
16 #include "abcgVulkanShader.hpp"
+
17 #include "abcgVulkanSwapchain.hpp"
+
18 
+
19 namespace abcg {
+
20 struct VulkanPipelineCreateInfo;
+
21 class VulkanPipeline;
+
22 } // namespace abcg
+
23 
+ +
28  std::vector<abcg::VulkanShader> shaders{};
+
29  std::vector<vk::VertexInputBindingDescription> bindingDescriptions{};
+
30  std::vector<vk::VertexInputAttributeDescription> attributeDescriptions{};
+
31  vk::PipelineInputAssemblyStateCreateInfo inputAssemblyState{};
+
32  std::optional<std::vector<vk::Viewport>> viewports{};
+
33  std::optional<std::vector<vk::Rect2D>> scissors{};
+
34  vk::PipelineRasterizationStateCreateInfo rasterizationState{};
+
35  std::optional<vk::PipelineMultisampleStateCreateInfo> multisampleState{};
+
36  std::optional<vk::PipelineDepthStencilStateCreateInfo> depthStencilState{};
+
37  std::optional<vk::PipelineColorBlendAttachmentState> colorBlendAttachment{};
+
38  std::optional<vk::PipelineColorBlendStateCreateInfo> colorBlendState{};
+
39  std::vector<vk::DynamicState> dynamicStates{};
+
40  vk::PipelineLayoutCreateInfo pipelineLayout{};
+
41  vk::PipelineCache pipelineCache{};
+
42 };
+
43 
+ +
51 public:
+
52  void create(VulkanSwapchain const &swapchain,
+
53  VulkanPipelineCreateInfo const &createInfo);
+
54  void destroy();
+
55 
+
56  explicit operator vk::Pipeline const &() const noexcept;
+
57 
+
58  [[nodiscard]] vk::PipelineLayout const &getLayout() const noexcept;
+
59 
+
60 private:
+
61  vk::Pipeline m_pipeline;
+
62  vk::PipelineLayout m_pipelineLayout;
+
63  vk::Device m_device;
+
64 };
+
65 
+
66 #endif
Declaration of helper functions for creating Vulkan shaders.
Header file of abcg::VulkanSwapchain.
-
A class for representing a Vulkan pipeline.
Definition: abcgVulkanPipeline.hpp:51
+
A class for representing a Vulkan pipeline.
Definition: abcgVulkanPipeline.hpp:50
void destroy()
Definition: abcgVulkanPipeline.cpp:128
void create(VulkanSwapchain const &swapchain, VulkanPipelineCreateInfo const &createInfo)
Definition: abcgVulkanPipeline.cpp:15
-
vk::PipelineLayout const & getLayout() const noexcept
Access to vk::PipelineLayout.
Definition: abcgVulkanPipeline.hpp:67
+
vk::PipelineLayout const & getLayout() const noexcept
Access to vk::PipelineLayout.
Definition: abcgVulkanPipeline.cpp:150
A class for representing a Vulkan swapchain.
Definition: abcgVulkanSwapchain.hpp:50
Root namespace.
Definition: abcgApplication.hpp:23
-
Creation info structure for abcg::VulkanPipeline::create.
Definition: abcgVulkanPipeline.hpp:28
-
std::optional< std::vector< vk::Rect2D > > scissors
Definition: abcgVulkanPipeline.hpp:34
-
std::vector< vk::VertexInputAttributeDescription > attributeDescriptions
Definition: abcgVulkanPipeline.hpp:31
-
vk::PipelineRasterizationStateCreateInfo rasterizationState
Definition: abcgVulkanPipeline.hpp:35
-
std::vector< abcg::VulkanShader > shaders
Definition: abcgVulkanPipeline.hpp:29
-
vk::PipelineCache pipelineCache
Definition: abcgVulkanPipeline.hpp:42
-
std::optional< vk::PipelineMultisampleStateCreateInfo > multisampleState
Definition: abcgVulkanPipeline.hpp:36
-
std::optional< vk::PipelineColorBlendStateCreateInfo > colorBlendState
Definition: abcgVulkanPipeline.hpp:39
-
std::optional< vk::PipelineDepthStencilStateCreateInfo > depthStencilState
Definition: abcgVulkanPipeline.hpp:37
-
std::optional< vk::PipelineColorBlendAttachmentState > colorBlendAttachment
Definition: abcgVulkanPipeline.hpp:38
-
vk::PipelineInputAssemblyStateCreateInfo inputAssemblyState
Definition: abcgVulkanPipeline.hpp:32
-
std::vector< vk::VertexInputBindingDescription > bindingDescriptions
Definition: abcgVulkanPipeline.hpp:30
-
vk::PipelineLayoutCreateInfo pipelineLayout
Definition: abcgVulkanPipeline.hpp:41
-
std::vector< vk::DynamicState > dynamicStates
Definition: abcgVulkanPipeline.hpp:40
-
std::optional< std::vector< vk::Viewport > > viewports
Definition: abcgVulkanPipeline.hpp:33
+
Creation info structure for abcg::VulkanPipeline::create.
Definition: abcgVulkanPipeline.hpp:27
+
std::optional< std::vector< vk::Rect2D > > scissors
Definition: abcgVulkanPipeline.hpp:33
+
std::vector< vk::VertexInputAttributeDescription > attributeDescriptions
Definition: abcgVulkanPipeline.hpp:30
+
vk::PipelineRasterizationStateCreateInfo rasterizationState
Definition: abcgVulkanPipeline.hpp:34
+
std::vector< abcg::VulkanShader > shaders
Definition: abcgVulkanPipeline.hpp:28
+
vk::PipelineCache pipelineCache
Definition: abcgVulkanPipeline.hpp:41
+
std::optional< vk::PipelineMultisampleStateCreateInfo > multisampleState
Definition: abcgVulkanPipeline.hpp:35
+
std::optional< vk::PipelineColorBlendStateCreateInfo > colorBlendState
Definition: abcgVulkanPipeline.hpp:38
+
std::optional< vk::PipelineDepthStencilStateCreateInfo > depthStencilState
Definition: abcgVulkanPipeline.hpp:36
+
std::optional< vk::PipelineColorBlendAttachmentState > colorBlendAttachment
Definition: abcgVulkanPipeline.hpp:37
+
vk::PipelineInputAssemblyStateCreateInfo inputAssemblyState
Definition: abcgVulkanPipeline.hpp:31
+
std::vector< vk::VertexInputBindingDescription > bindingDescriptions
Definition: abcgVulkanPipeline.hpp:29
+
vk::PipelineLayoutCreateInfo pipelineLayout
Definition: abcgVulkanPipeline.hpp:40
+
std::vector< vk::DynamicState > dynamicStates
Definition: abcgVulkanPipeline.hpp:39
+
std::optional< std::vector< vk::Viewport > > viewports
Definition: abcgVulkanPipeline.hpp:32
diff --git a/abcg/doc/html/abcgVulkanShader_8cpp.html b/abcg/doc/html/abcgVulkanShader_8cpp.html index 4e44301f7..c8f69c814 100644 --- a/abcg/doc/html/abcgVulkanShader_8cpp.html +++ b/abcg/doc/html/abcgVulkanShader_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,70 +109,29 @@

Definition of helper functions for creating Vulkan shaders. More...

#include "abcgVulkanShader.hpp"
-#include "abcgApplication.hpp"
#include "abcgException.hpp"
-#include "abcgVulkanWindow.hpp"
#include <glslang/SPIRV/GlslangToSpv.h>
#include <fmt/core.h>
+#include <gsl/gsl>
#include <filesystem>
#include <fstream>
Include dependency graph for abcgVulkanShader.cpp:
-
+
- - - -

Functions

vk::ShaderStageFlagBits abcgStageToVulkanStage (abcg::ShaderStage stage)
 
EShLanguage abcgStageToGlslangStage (abcg::ShaderStage stage)
 
std::vector< uint32_t > GLSLtoSPV (abcg::ShaderSource shaderSource)
 

Detailed Description

Definition of helper functions for creating Vulkan shaders.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +

Function Documentation

- -

◆ abcgStageToGlslangStage()

- -
-
- - - - - - - - -
EShLanguage abcgStageToGlslangStage (abcg::ShaderStage stage)
-
- -
-
- -

◆ abcgStageToVulkanStage()

- -
-
- - - - - - - - -
vk::ShaderStageFlagBits abcgStageToVulkanStage (abcg::ShaderStage stage)
-
- -
-

◆ GLSLtoSPV()

diff --git a/abcg/doc/html/abcgVulkanShader_8cpp.js b/abcg/doc/html/abcgVulkanShader_8cpp.js index 619c24f88..b11cbfb48 100644 --- a/abcg/doc/html/abcgVulkanShader_8cpp.js +++ b/abcg/doc/html/abcgVulkanShader_8cpp.js @@ -1,6 +1,4 @@ var abcgVulkanShader_8cpp = [ - [ "abcgStageToGlslangStage", "abcgVulkanShader_8cpp.html#a33f06509309afc65c3a74f2ab43fbcd6", null ], - [ "abcgStageToVulkanStage", "abcgVulkanShader_8cpp.html#abd9a731077343cc28d958393025b620b", null ], [ "GLSLtoSPV", "abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanShader_8cpp__incl.map b/abcg/doc/html/abcgVulkanShader_8cpp__incl.map index 8d4cebe27..aa8602c2d 100644 --- a/abcg/doc/html/abcgVulkanShader_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanShader_8cpp__incl.map @@ -1,32 +1,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanShader_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanShader_8cpp__incl.md5 index 4e3cb8094..5f604c593 100644 --- a/abcg/doc/html/abcgVulkanShader_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanShader_8cpp__incl.md5 @@ -1 +1 @@ -4d7cbcca006134dc8976883056a918b8 \ No newline at end of file +45f428129d114d605d55655309dcfae8 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanShader_8cpp__incl.svg b/abcg/doc/html/abcgVulkanShader_8cpp__incl.svg index 0ac0dee8f..894a29d6b 100644 --- a/abcg/doc/html/abcgVulkanShader_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanShader_8cpp__incl.svg @@ -4,17 +4,17 @@ - - + + /home/harlen/dev/abcg/abcg/abcgVulkanShader.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp @@ -22,508 +22,304 @@ Node2 - -abcgVulkanShader.hpp + +abcgVulkanShader.hpp Node1->Node2 - - - - - -Node12 - - -abcgApplication.hpp - - - - - -Node1->Node12 - - + + Node13 - -abcgException.hpp + +abcgException.hpp - + Node1->Node13 - - + + Node16 - - -abcgVulkanWindow.hpp + + +glslang/SPIRV/GlslangToSpv.h - + Node1->Node16 - - - - - -Node27 - - -glslang/SPIRV/GlslangToSpv.h + + + + + +Node17 + + +fmt/core.h - - -Node1->Node27 - - + + +Node1->Node17 + + - - -Node28 - - -fmt/core.h + + +Node18 + + +gsl/gsl - - -Node1->Node28 - - + + +Node1->Node18 + + - - -Node29 - - -filesystem + + +Node19 + + +filesystem - - -Node1->Node29 - - + + +Node1->Node19 + + - - -Node30 - - -fstream + + +Node20 + + +fstream - - -Node1->Node30 - - + + +Node1->Node20 + + Node3 - -abcgShader.hpp + +abcgShader.hpp Node2->Node3 - - + + Node6 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node2->Node6 - - + + Node4 - -optional + +optional Node3->Node4 - - + + Node5 - -string + +string Node3->Node5 - - + + Node7 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node6->Node7 - - + + - - -Node10 - - -abcgVulkanPhysicalDevice.hpp + + +Node12 + + +functional - - -Node6->Node10 - - + + +Node6->Node12 + + + + + +Node7->Node4 + + Node8 - - -volk.h + + +abcgVulkanExternal.hpp - + Node7->Node8 - - + + + + + +Node11 + + +abcgVulkanInstance.hpp + + + + + +Node7->Node11 + + Node9 - -vulkan/vulkan.hpp + +volk.h - - -Node7->Node9 - - - - - -Node10->Node4 - - - - - -Node10->Node7 - - + + +Node8->Node9 + + - - -Node11 - - -abcgVulkanInstance.hpp + + +Node10 + + +vulkan/vulkan.hpp - - -Node10->Node11 - - - - - -Node11->Node7 - - + + +Node8->Node10 + + - - -Node12->Node5 - - + + +Node11->Node8 + + - + Node13->Node5 - - + + Node14 - -source_location + +source_location - + Node13->Node14 - - + + Node15 - -stdexcept + +stdexcept - + Node13->Node15 - - - - - -Node16->Node5 - - - - - -Node16->Node6 - - - - - -Node16->Node10 - - - - - -Node16->Node11 - - - - - -Node17 - - -array - - - - - -Node16->Node17 - - - - - -Node18 - - -abcgVulkanSwapchain.hpp - - - - - -Node16->Node18 - - - - - -Node23 - - -abcgWindow.hpp - - - - - -Node16->Node23 - - - - - -Node18->Node6 - - - - - -Node19 - - -functional - - - - - -Node18->Node19 - - - - - -Node20 - - -glm/fwd.hpp - - - - - -Node18->Node20 - - - - - -Node21 - - -abcgVulkanImage.hpp - - - - - -Node18->Node21 - - - - - -Node21->Node6 - - - - - -Node22 - - -gsl/pointers - - - - - -Node21->Node22 - - - - - -Node23->Node5 - - - - - -Node24 - - -abcgExternal.hpp - - - - - -Node23->Node24 - - - - - -Node25 - - -abcgTimer.hpp - - - - - -Node23->Node25 - - - - - -Node26 - - -chrono - - - - - -Node25->Node26 - - + + diff --git a/abcg/doc/html/abcgVulkanShader_8hpp.html b/abcg/doc/html/abcgVulkanShader_8hpp.html index 7aeb9bb7a..98abe66b0 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp.html +++ b/abcg/doc/html/abcgVulkanShader_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -114,13 +114,13 @@
Include dependency graph for abcgVulkanShader.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -141,7 +141,7 @@

Detailed Description

Declaration of helper functions for creating Vulkan shaders.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.map index fe8c4be9b..c83771bc3 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.map @@ -1,9 +1,8 @@ - - - - + + + + - - + diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.md5 index 5b689e8b3..b6b894262 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.md5 @@ -1 +1 @@ -74180bdf8dde1ac107f79ef8460491ed \ No newline at end of file +b731d0c9c4e167c440f17c25d6758c32 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.svg index 11b7b860f..b20e7fb4d 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanShader_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanShader.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp @@ -22,49 +22,49 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node1->Node2 - - + + - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp - - -Node1->Node5 - - - - - -Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +Node1->Node4 + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.cpp - - -Node1->Node7 - - + + +Node1->Node6 + + @@ -79,46 +79,30 @@ Node2->Node3 - - + + - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node2->Node4 - - - - - -Node5->Node2 - - + + +Node4->Node2 + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + + +Node5 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - - -Node5->Node6 - - + + +Node4->Node5 + + diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__incl.map b/abcg/doc/html/abcgVulkanShader_8hpp__incl.map index 7ca224eea..6b9c00bea 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanShader_8hpp__incl.map @@ -1,12 +1,13 @@ - - - - - - - - - - + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanShader_8hpp__incl.md5 index 0b2e8dc22..9bf7904f6 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanShader_8hpp__incl.md5 @@ -1 +1 @@ -991baba04e484368531345eea2825714 \ No newline at end of file +a0543ed0297765bcae667392b97f67c3 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanShader_8hpp__incl.svg b/abcg/doc/html/abcgVulkanShader_8hpp__incl.svg index 96ddf8dac..67ed51c23 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanShader_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanShader.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanShader.hpp @@ -22,154 +22,163 @@ Node2 - -abcgShader.hpp + +abcgShader.hpp Node1->Node2 - - + + Node5 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node1->Node5 - - + + Node3 - -optional + +optional Node2->Node3 - - + + Node4 - -string + +string Node2->Node4 - - + + Node6 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node5->Node6 - - - - - -Node9 - - -abcgVulkanPhysicalDevice.hpp + + + + + +Node11 + + +functional - - -Node5->Node9 - - + + +Node5->Node11 + + + + + +Node6->Node3 + + Node7 - - -volk.h + + +abcgVulkanExternal.hpp - + Node6->Node7 - - + + + + + +Node10 + + +abcgVulkanInstance.hpp + + + + + +Node6->Node10 + + Node8 - -vulkan/vulkan.hpp + +volk.h - - -Node6->Node8 - - - - - -Node9->Node3 - - - - - -Node9->Node6 - - + + +Node7->Node8 + + - - -Node10 - - -abcgVulkanInstance.hpp + + +Node9 + + +vulkan/vulkan.hpp - - -Node9->Node10 - - + + +Node7->Node9 + + - - -Node10->Node6 - - + + +Node10->Node7 + + diff --git a/abcg/doc/html/abcgVulkanShader_8hpp_source.html b/abcg/doc/html/abcgVulkanShader_8hpp_source.html index 3c53f56c3..19ea12d01 100644 --- a/abcg/doc/html/abcgVulkanShader_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanShader_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -119,29 +119,24 @@
29  void create(VulkanDevice const &device, ShaderSource const &pathOrSource);
30  void destroy();
31 
-
37  [[nodiscard]] vk::ShaderStageFlagBits const &getStage() const noexcept {
-
38  return m_stage;
-
39  }
+
32  [[nodiscard]] vk::ShaderStageFlagBits const &getStage() const noexcept;
+
33  [[nodiscard]] vk::ShaderModule const &getModule() const noexcept;
+
34 
+
35 private:
+
36  vk::ShaderStageFlagBits m_stage{};
+
37  vk::ShaderModule m_module;
+
38  vk::Device m_device;
+
39 };
40 
-
46  [[nodiscard]] vk::ShaderModule const &getModule() const noexcept {
-
47  return m_module;
-
48  }
-
49 
-
50 private:
-
51  vk::ShaderStageFlagBits m_stage{};
-
52  vk::ShaderModule m_module{};
-
53  vk::Device m_device{};
-
54 };
-
55 
-
56 #endif
+
41 #endif
Declaration of a structure for building shaders.
Header file of abcg::VulkanDevice.
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
A class for representing a Vulkan shader.
Definition: abcgVulkanShader.hpp:27
-
void destroy()
Destroys the shader module.
Definition: abcgVulkanShader.cpp:330
-
vk::ShaderModule const & getModule() const noexcept
Returns the opaque handle to the shader module object.
Definition: abcgVulkanShader.hpp:46
-
void create(VulkanDevice const &device, ShaderSource const &pathOrSource)
Compiles a GLSL shader to SPIR-V and creates its module.
Definition: abcgVulkanShader.cpp:311
-
vk::ShaderStageFlagBits const & getStage() const noexcept
Returns the shader stage bitmask.
Definition: abcgVulkanShader.hpp:37
+
void destroy()
Destroys the shader module.
Definition: abcgVulkanShader.cpp:333
+
vk::ShaderStageFlagBits const & getStage() const noexcept
Returns the shader stage bitmask.
Definition: abcgVulkanShader.cpp:346
+
void create(VulkanDevice const &device, ShaderSource const &pathOrSource)
Compiles a GLSL shader to SPIR-V and creates its module.
Definition: abcgVulkanShader.cpp:314
+
vk::ShaderModule const & getModule() const noexcept
Returns the opaque handle to the shader module object.
Definition: abcgVulkanShader.cpp:355
Root namespace.
Definition: abcgApplication.hpp:23
Shader source code and corresponding stage.
Definition: abcgShader.hpp:46
diff --git a/abcg/doc/html/abcgVulkanSwapchain_8cpp.html b/abcg/doc/html/abcgVulkanSwapchain_8cpp.html index ee09340f3..340c4a831 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8cpp.html +++ b/abcg/doc/html/abcgVulkanSwapchain_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -99,8 +99,6 @@
-
/home/harlen/dev/abcg/abcg/abcgVulkanSwapchain.cpp File Reference
@@ -112,7 +110,6 @@ #include <functional>
#include <gsl/gsl>
#include <imgui_impl_vulkan.h>
-#include "abcgApplication.hpp"
#include "abcgException.hpp"
#include "abcgVulkanDevice.hpp"
#include "abcgVulkanPhysicalDevice.hpp"
@@ -120,115 +117,14 @@
Include dependency graph for abcgVulkanSwapchain.cpp:
-
+
-
- - - - - - - -

-Functions

vk::SurfaceFormatKHR chooseSwapSurfaceFormat (std::vector< vk::Format > const &requestFormats, vk::ColorSpaceKHR requestColorSpace, SurfaceSupport const &surfaceSupport)
 
vk::PresentModeKHR chooseSwapPresentMode (std::vector< vk::PresentModeKHR > const &requestModes, SurfaceSupport const &surfaceSupport)
 
vk::Extent2D chooseSwapExtent (vk::SurfaceCapabilitiesKHR capabilities, glm::ivec2 windowSize)
 
-

Detailed Description

+

Detailed Description

Definition of abcg::VulkanSwapchain.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- -

Function Documentation

- -

◆ chooseSwapExtent()

- -
-
- - - - - - - - - - - - - - - - - - -
vk::Extent2D chooseSwapExtent (vk::SurfaceCapabilitiesKHR capabilities,
glm::ivec2 windowSize 
)
-
- -
-
- -

◆ chooseSwapPresentMode()

- -
-
- - - - - - - - - - - - - - - - - - -
vk::PresentModeKHR chooseSwapPresentMode (std::vector< vk::PresentModeKHR > const & requestModes,
SurfaceSupport const & surfaceSupport 
)
-
- -
-
- -

◆ chooseSwapSurfaceFormat()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
vk::SurfaceFormatKHR chooseSwapSurfaceFormat (std::vector< vk::Format > const & requestFormats,
vk::ColorSpaceKHR requestColorSpace,
SurfaceSupport const & surfaceSupport 
)
-
- -
-
- + +
Include dependency graph for abcgVulkanSwapchain.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -147,7 +147,7 @@

Header file of abcg::VulkanSwapchain.

Declaration of abcg::VulkanSwapchain.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.map index b221b1fb1..0bae46b8b 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.map @@ -1,12 +1,10 @@ - - - - - - - - - - + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.md5 index 265717e7b..96f0e1bc3 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.md5 @@ -1 +1 @@ -5fe6f8532eaec321cd9aa3fddc927bf0 \ No newline at end of file +41279ad3109f3fa397ed726fb3c7372c \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.svg index 27ded60db..453548a2b 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanSwapchain.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp @@ -22,157 +22,125 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.hpp Node1->Node2 - - + + + + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp + + + + + +Node1->Node6 + + Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp Node1->Node7 - - - - - -Node8 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp - - - - - -Node1->Node8 - - + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node2->Node3 - - + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPipeline.cpp + + +Node5 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanPipeline.cpp - - -Node2->Node6 - - + + +Node2->Node5 + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node3->Node4 - - - - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - + + - - -Node3->Node5 - - + + +Node7->Node3 + + - + -Node8->Node3 - - - - - -Node8->Node7 - - - - - -Node9 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - +Node7->Node6 + + - - - -Node8->Node9 - - - - - -Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +Node8 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - - -Node8->Node10 - - + + +Node7->Node8 + + diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.map b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.map index 7deaf162b..c5b40bda2 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.map @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.md5 index 6a4f005bc..854c8cae7 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.md5 @@ -1 +1 @@ -8250e41dd5ac64b088926b6b5c4d31f3 \ No newline at end of file +d463c8c60c097c95354a41fb0d7abc82 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.svg b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.svg index 8aa8388bc..4f1f0198b 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanSwapchain.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.hpp @@ -22,184 +22,184 @@ Node2 - -functional + +functional Node1->Node2 - - + + Node3 - -glm/fwd.hpp + +glm/fwd.hpp Node1->Node3 - - + + Node4 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp Node1->Node4 - - + + Node11 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp Node1->Node11 - - + + + + + +Node4->Node2 + + Node5 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp Node4->Node5 - - - - - -Node8 - - -abcgVulkanPhysicalDevice.hpp - - - - - -Node4->Node8 - - + + Node6 - -volk.h + +optional Node5->Node6 - - + + Node7 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp Node5->Node7 - - + + + + + +Node10 + + +abcgVulkanInstance.hpp + + - + -Node8->Node5 - - +Node5->Node10 + + + + + +Node8 + + +volk.h + + + + + +Node7->Node8 + + Node9 - -optional + +vulkan/vulkan.hpp - + -Node8->Node9 - - +Node7->Node9 + + - - -Node10 - - -abcgVulkanInstance.hpp - - - - + -Node8->Node10 - - - - - -Node10->Node5 - - +Node10->Node7 + + Node11->Node4 - - + + Node12 - -gsl/pointers + +gsl/pointers Node11->Node12 - - + + diff --git a/abcg/doc/html/abcgVulkanSwapchain_8hpp_source.html b/abcg/doc/html/abcgVulkanSwapchain_8hpp_source.html index b9939aa37..14035a451 100644 --- a/abcg/doc/html/abcgVulkanSwapchain_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanSwapchain_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -123,12 +123,12 @@
29 
35  uint32_t index{};
-
36  vk::CommandPool commandPool{};
-
37  vk::CommandBuffer commandBuffer{};
-
38  vk::CommandBuffer commandBufferUI{};
-
39  vk::Fence fence{};
- -
41  vk::Framebuffer framebufferMain{};
+
36  vk::CommandPool commandPool;
+
37  vk::CommandBuffer commandBuffer;
+
38  vk::CommandBuffer commandBufferUI;
+
39  vk::Fence fence;
+ +
41  vk::Framebuffer framebufferMain;
42 };
43 
@@ -141,100 +141,78 @@
57  bool checkRebuild(VulkanSettings const &settings,
58  glm::ivec2 const &windowSize);
59 
-
63  explicit operator vk::SwapchainKHR const &() const noexcept {
-
64  return m_swapchainKHR;
-
65  }
-
66 
-
72  [[nodiscard]] VulkanDevice const &getDevice() const noexcept {
-
73  return m_device;
-
74  }
-
75 
-
81  [[nodiscard]] std::vector<VulkanFrame> const &getFrames() const noexcept {
-
82  return m_frames;
-
83  }
-
84 
-
90  [[nodiscard]] VulkanFrame const &getCurrentFrame() const noexcept {
-
91  return m_frames[m_currentFrame];
-
92  }
-
93 
-
99  [[nodiscard]] vk::RenderPass const &getMainRenderPass() const noexcept {
-
100  return m_renderPassMain;
-
101  }
-
102 
-
108  [[nodiscard]] vk::RenderPass const &getUIRenderPass() const noexcept {
-
109  return m_renderPassUI;
-
110  }
-
111 
-
117  [[nodiscard]] vk::Extent2D const &getExtent() const noexcept {
-
118  return m_swapchainExtent;
-
119  }
-
120 
-
126  [[nodiscard]] VulkanImage const &getDepthImage() const noexcept {
-
127  return m_depthImage;
-
128  }
-
129 
-
130 private:
-
131  void createFrames();
-
132  void destroyFrames();
-
133 
-
134  [[nodiscard]] vk::Format getDepthFormat(VulkanSettings const &settings);
-
135  void createDepthResources(VulkanSettings const &settings);
-
136  void destroyDepthResources();
-
137 
-
138  void createMSAAResources();
-
139  void destroyMSAAResources();
-
140 
-
141  void createRenderPasses(VulkanSettings const &settings);
-
142  void destroyRenderPasses();
-
143 
-
144  void createFramebuffers(VulkanSettings const &settings);
-
145 
-
146  vk::SwapchainKHR m_swapchainKHR;
-
147  VulkanDevice m_device;
-
148 
-
149  vk::Format m_swapchainImageFormat;
-
150  vk::Extent2D m_swapchainExtent;
-
151  bool m_swapChainRebuild{};
-
152 
-
153  // Data for swapchain synchronization
-
154  struct FrameSemaphores {
-
155  vk::Semaphore presentComplete{};
-
156  vk::Semaphore renderComplete{};
-
157  };
-
158 
-
159  uint32_t m_currentFrame{};
-
160  std::vector<VulkanFrame> m_frames{};
-
161  // Current set of swapchain wait semaphores we're using (needs to be distinct
-
162  // from per frame data)
-
163  uint32_t m_currentSemaphore{};
-
164  std::vector<FrameSemaphores> m_frameSemaphores{};
-
165 
-
166  VulkanImage m_depthImage{};
-
167  VulkanImage m_MSAAImage{};
-
168 
-
169  // Render passes
-
170  vk::RenderPass m_renderPassMain{};
-
171  vk::RenderPass m_renderPassUI{};
-
172 };
-
173 
-
174 #endif
+
60  explicit operator vk::SwapchainKHR const &() const noexcept;
+
61 
+
62  [[nodiscard]] VulkanDevice const &getDevice() const noexcept;
+
63  [[nodiscard]] std::vector<VulkanFrame> const &getFrames() const noexcept;
+
64  [[nodiscard]] VulkanFrame const &getCurrentFrame() const noexcept;
+
65  [[nodiscard]] vk::RenderPass const &getMainRenderPass() const noexcept;
+
66  [[nodiscard]] vk::RenderPass const &getUIRenderPass() const noexcept;
+
67  [[nodiscard]] vk::Extent2D const &getExtent() const noexcept;
+
68  [[nodiscard]] VulkanImage const &getDepthImage() const noexcept;
+
69 
+
70 private:
+
71  void createFrames();
+
72  void destroyFrames();
+
73 
+
74  [[nodiscard]] vk::Format getDepthFormat(VulkanSettings const &settings);
+
75  void createDepthResources(VulkanSettings const &settings);
+
76  void destroyDepthResources();
+
77 
+
78  void createMSAAResources();
+
79  void destroyMSAAResources();
+
80 
+
81  void createRenderPasses(VulkanSettings const &settings);
+
82  void destroyRenderPasses();
+
83 
+
84  void createFramebuffers(VulkanSettings const &settings);
+
85 
+
86  vk::SwapchainKHR m_swapchainKHR;
+
87  VulkanDevice m_device;
+
88 
+
89  vk::Format m_swapchainImageFormat;
+
90  vk::Extent2D m_swapchainExtent;
+
91  bool m_swapChainRebuild{};
+
92 
+
93  // Data for swapchain synchronization
+
94  struct FrameSemaphores {
+
95  vk::Semaphore presentComplete;
+
96  vk::Semaphore renderComplete;
+
97  };
+
98 
+
99  uint32_t m_currentFrame{};
+
100  std::vector<VulkanFrame> m_frames;
+
101  // Current set of swapchain wait semaphores we're using (needs to be distinct
+
102  // from per frame data)
+
103  uint32_t m_currentSemaphore{};
+
104  std::vector<FrameSemaphores> m_frameSemaphores;
+
105 
+
106  VulkanImage m_depthImage;
+
107  VulkanImage m_MSAAImage;
+
108 
+
109  // Render passes
+
110  vk::RenderPass m_renderPassMain;
+
111  vk::RenderPass m_renderPassUI;
+
112 };
+
113 
+
114 #endif
Header file of abcg::VulkanDevice.
Header file of abcg::VulkanImage.
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
A class for representing a Vulkan image.
Definition: abcgVulkanImage.hpp:40
A class for representing a Vulkan swapchain.
Definition: abcgVulkanSwapchain.hpp:50
-
VulkanDevice const & getDevice() const noexcept
Access to abcg::VulkanDevice.
Definition: abcgVulkanSwapchain.hpp:72
-
vk::Extent2D const & getExtent() const noexcept
Returns the swapchain extent.
Definition: abcgVulkanSwapchain.hpp:117
-
void present()
Definition: abcgVulkanSwapchain.cpp:203
-
VulkanImage const & getDepthImage() const noexcept
Returns the depth image object.
Definition: abcgVulkanSwapchain.hpp:126
-
vk::RenderPass const & getMainRenderPass() const noexcept
Returns the main render pass.
Definition: abcgVulkanSwapchain.hpp:99
-
std::vector< VulkanFrame > const & getFrames() const noexcept
Returns the in-flight frames.
Definition: abcgVulkanSwapchain.hpp:81
-
void render(std::function< void(VulkanFrame const &)> const &fun)
Definition: abcgVulkanSwapchain.cpp:128
-
void create(VulkanDevice const &device, VulkanSettings const &settings, glm::ivec2 const &windowSize)
Definition: abcgVulkanSwapchain.cpp:103
-
vk::RenderPass const & getUIRenderPass() const noexcept
Returns the UI render pass.
Definition: abcgVulkanSwapchain.hpp:108
-
bool checkRebuild(VulkanSettings const &settings, glm::ivec2 const &windowSize)
Definition: abcgVulkanSwapchain.cpp:237
-
void destroy()
Definition: abcgVulkanSwapchain.cpp:113
-
VulkanFrame const & getCurrentFrame() const noexcept
Returns the current in-flight frame.
Definition: abcgVulkanSwapchain.hpp:90
+
std::vector< VulkanFrame > const & getFrames() const noexcept
Returns the in-flight frames.
Definition: abcgVulkanSwapchain.cpp:397
+
void present()
Definition: abcgVulkanSwapchain.cpp:204
+
vk::RenderPass const & getMainRenderPass() const noexcept
Returns the main render pass.
Definition: abcgVulkanSwapchain.cpp:417
+
VulkanFrame const & getCurrentFrame() const noexcept
Returns the current in-flight frame.
Definition: abcgVulkanSwapchain.cpp:407
+
vk::Extent2D const & getExtent() const noexcept
Returns the swapchain extent.
Definition: abcgVulkanSwapchain.cpp:435
+
vk::RenderPass const & getUIRenderPass() const noexcept
Returns the UI render pass.
Definition: abcgVulkanSwapchain.cpp:426
+
void render(std::function< void(VulkanFrame const &)> const &fun)
Definition: abcgVulkanSwapchain.cpp:129
+
void create(VulkanDevice const &device, VulkanSettings const &settings, glm::ivec2 const &windowSize)
Definition: abcgVulkanSwapchain.cpp:104
+
bool checkRebuild(VulkanSettings const &settings, glm::ivec2 const &windowSize)
Definition: abcgVulkanSwapchain.cpp:238
+
void destroy()
Definition: abcgVulkanSwapchain.cpp:114
+
VulkanImage const & getDepthImage() const noexcept
Returns the depth image object.
Definition: abcgVulkanSwapchain.cpp:444
+
VulkanDevice const & getDevice() const noexcept
Access to abcg::VulkanDevice.
Definition: abcgVulkanSwapchain.cpp:387
Root namespace.
Definition: abcgApplication.hpp:23
Data needed by a rendering frame.
Definition: abcgVulkanSwapchain.hpp:34
vk::CommandBuffer commandBuffer
Definition: abcgVulkanSwapchain.hpp:37
@@ -244,7 +222,7 @@
vk::CommandBuffer commandBufferUI
Definition: abcgVulkanSwapchain.hpp:38
vk::Framebuffer framebufferMain
Definition: abcgVulkanSwapchain.hpp:41
vk::CommandPool commandPool
Definition: abcgVulkanSwapchain.hpp:36
-
Configuration settings for creating a Vulkan context.
Definition: abcgVulkanWindow.hpp:40
+
Configuration settings for creating a Vulkan context.
Definition: abcgVulkanWindow.hpp:37
diff --git a/abcg/doc/html/abcgVulkanWindow_8cpp.html b/abcg/doc/html/abcgVulkanWindow_8cpp.html index b0199aab5..88115fcf2 100644 --- a/abcg/doc/html/abcgVulkanWindow_8cpp.html +++ b/abcg/doc/html/abcgVulkanWindow_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,9 +109,8 @@
#include "abcgVulkanWindow.hpp"
#include <SDL_vulkan.h>
#include <algorithm>
-#include <cmath>
#include <gsl/gsl>
-#include <imgui_impl_sdl.h>
+#include <imgui_impl_sdl2.h>
#include <imgui_impl_vulkan.h>
#include "abcgEmbeddedFonts.hpp"
#include "abcgException.hpp"
@@ -121,13 +120,13 @@
Include dependency graph for abcgVulkanWindow.cpp:
-
+

Detailed Description

Definition of abcg::VulkanWindow members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.map b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.map index fcebe75b9..f50988f4b 100644 --- a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.map +++ b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.map @@ -1,33 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.md5 b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.md5 index e96edd998..fbc4cc29d 100644 --- a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.md5 @@ -1 +1 @@ -bf6f229abfc3645a16d731da6434ba30 \ No newline at end of file +8b65bb9f8e27c19717bdaa9e425e487a \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.svg b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.svg index 912c1e728..6dbdb29f4 100644 --- a/abcg/doc/html/abcgVulkanWindow_8cpp__incl.svg +++ b/abcg/doc/html/abcgVulkanWindow_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanWindow.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp @@ -22,541 +22,514 @@ Node2 - -abcgVulkanWindow.hpp + +abcgVulkanWindow.hpp Node1->Node2 - - + + - - -Node11 - - -abcgVulkanInstance.hpp + + +Node9 + + +abcgVulkanInstance.hpp - - -Node1->Node11 - - + + +Node1->Node9 + + - - -Node17 - - -abcgWindow.hpp + + +Node15 + + +abcgWindow.hpp - - -Node1->Node17 - - + + +Node1->Node15 + + + + + +Node20 + + +SDL_vulkan.h + + + + + +Node1->Node20 + + Node21 - -SDL_vulkan.h + +algorithm - + Node1->Node21 - - + + Node22 - -algorithm + +gsl/gsl - + Node1->Node22 - - + + Node23 - -cmath + +imgui_impl_sdl2.h - + Node1->Node23 - - + + Node24 - -gsl/gsl + +imgui_impl_vulkan.h - + Node1->Node24 - - + + Node25 - - -imgui_impl_sdl.h + + +abcgEmbeddedFonts.hpp - + Node1->Node25 - - - - - -Node26 - - -imgui_impl_vulkan.h - - - - - -Node1->Node26 - - + + Node27 - - -abcgEmbeddedFonts.hpp + + +abcgException.hpp - + Node1->Node27 - - + + - - -Node28 - - -abcgException.hpp - - - - - -Node1->Node28 - - - - - -Node31 - - -abcgVulkanError.hpp + + +Node30 + + +abcgVulkanError.hpp - - -Node1->Node31 - - + + +Node1->Node30 + + Node3 - - -array + + +abcgVulkanDevice.hpp Node2->Node3 - - + + Node4 - - -string + + +abcgVulkanPhysicalDevice.hpp - + Node2->Node4 - - + + - - -Node5 - - -abcgVulkanDevice.hpp - - - - - -Node2->Node5 - - + + +Node2->Node9 + + - - -Node9 - - -abcgVulkanPhysicalDevice.hpp + + +Node11 + + +abcgVulkanSwapchain.hpp - - -Node2->Node9 - - - Node2->Node11 - - + + - - -Node12 - - -abcgVulkanSwapchain.hpp + + +Node2->Node15 + + + + + +Node3->Node4 + + + + + +Node10 + + +functional - - -Node2->Node12 - - + + +Node3->Node10 + + + + + +Node5 + + +optional + - - -Node2->Node17 - - + + + +Node4->Node5 + + Node6 - -abcgVulkanExternal.hpp + +abcgVulkanExternal.hpp - + -Node5->Node6 - - +Node4->Node6 + + - + -Node5->Node9 - - +Node4->Node9 + + Node7 - -volk.h + +volk.h Node6->Node7 - - + + Node8 - -vulkan/vulkan.hpp + +vulkan/vulkan.hpp Node6->Node8 - - + + - + Node9->Node6 - - - - - -Node10 - - -optional - + + + + +Node11->Node3 + + - - -Node9->Node10 - - + + +Node11->Node10 + + - - -Node9->Node11 - - + + +Node12 + + +glm/fwd.hpp + - - -Node11->Node6 - - - - -Node12->Node5 - - + + +Node11->Node12 + + Node13 - - -functional + + +abcgVulkanImage.hpp - - -Node12->Node13 - - + + +Node11->Node13 + + + + + +Node13->Node3 + + Node14 - -glm/fwd.hpp - - - - - -Node12->Node14 - - - - - -Node15 - - -abcgVulkanImage.hpp + +gsl/pointers - + -Node12->Node15 - - - - - -Node15->Node5 - - +Node13->Node14 + + Node16 - -gsl/pointers + +string Node15->Node16 - - + + - - -Node17->Node4 - - + + +Node17 + + +abcgExternal.hpp + + + + + +Node15->Node17 + + Node18 - - -abcgExternal.hpp + + +abcgTimer.hpp - - -Node17->Node18 - - + + +Node15->Node18 + + Node19 - - -abcgTimer.hpp + + +chrono - - -Node17->Node19 - - + + +Node18->Node19 + + - - -Node20 - - -chrono + + +Node26 + + +array - - -Node19->Node20 - - + + +Node25->Node26 + + - - -Node27->Node3 - - + + +Node27->Node16 + + + + + +Node28 + + +source_location + - - -Node28->Node4 - - + + + +Node27->Node28 + + Node29 - -source_location - - - - - -Node28->Node29 - - - - - -Node30 - - -stdexcept + +stdexcept - - -Node28->Node30 - - - - - -Node31->Node7 - - + + +Node27->Node29 + + - - -Node31->Node8 - - + + +Node30->Node7 + + - - -Node31->Node28 - - + + +Node30->Node8 + + - + -Node31->Node29 - - +Node30->Node27 + + + + + +Node30->Node28 + + diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp.html b/abcg/doc/html/abcgVulkanWindow_8hpp.html index 55bbd3537..fd59b914b 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp.html +++ b/abcg/doc/html/abcgVulkanWindow_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,9 +109,7 @@

Header file of abcg::VulkanWindow. More...

-
#include <array>
-#include <string>
-#include "abcgVulkanDevice.hpp"
+
#include "abcgVulkanDevice.hpp"
#include "abcgVulkanInstance.hpp"
#include "abcgVulkanPhysicalDevice.hpp"
#include "abcgVulkanSwapchain.hpp"
@@ -119,13 +117,13 @@
Include dependency graph for abcgVulkanWindow.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -150,7 +148,7 @@

Header file of abcg::VulkanWindow.

Declaration of abcg::VulkanWindow.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.map index 93744af0f..d3bfe4ff8 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.map @@ -1,9 +1,7 @@ - - - - - + + + + - diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.md5 index 409d86df7..b377aee72 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.md5 @@ -1 +1 @@ -f898996b92ccb03bcf92bfda8b5408f3 \ No newline at end of file +15879e37bc087bb8590719bc93f6f9cc \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.svg index aa0242f13..89d1aa038 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanWindow.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp @@ -22,65 +22,49 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node1->Node2 - - + + + + + +Node4 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp + + + + + +Node1->Node4 + + Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp Node1->Node5 - - - - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp - - - - - -Node1->Node6 - - - - - -Node7 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp - - - - - -Node1->Node7 - - + + @@ -95,24 +79,8 @@ Node2->Node3 - - - - - -Node4 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node2->Node4 - - + + diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.map b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.map index be2af7a3f..a111910ed 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.map @@ -1,21 +1,20 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.md5 b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.md5 index 06676bb06..2e7dda512 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.md5 @@ -1 +1 @@ -358af384786c62ee3232fad033f99ba3 \ No newline at end of file +d09cb438d33bfa0c197af14c418d7240 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.svg b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.svg index 5e248a4fa..054e179e7 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkanWindow_8hpp__incl.svg @@ -4,331 +4,310 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkanWindow.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp Node2 - - -array + + +abcgVulkanDevice.hpp Node1->Node2 - - + + Node3 - - -string + + +abcgVulkanPhysicalDevice.hpp - + Node1->Node3 - - - - - -Node4 - - -abcgVulkanDevice.hpp - - - - - -Node1->Node4 - - + + Node8 - - -abcgVulkanPhysicalDevice.hpp + + +abcgVulkanInstance.hpp - + Node1->Node8 - - + + Node10 - - -abcgVulkanInstance.hpp + + +abcgVulkanSwapchain.hpp Node1->Node10 - - + + - - -Node11 - - -abcgVulkanSwapchain.hpp + + +Node14 + + +abcgWindow.hpp - - -Node1->Node11 - - + + +Node1->Node14 + + - - -Node16 - - -abcgWindow.hpp + + +Node2->Node3 + + + + + +Node9 + + +functional - - -Node1->Node16 - - + + +Node2->Node9 + + + + + +Node4 + + +optional + + + + + +Node3->Node4 + + Node5 - -abcgVulkanExternal.hpp + +abcgVulkanExternal.hpp - + -Node4->Node5 - - +Node3->Node5 + + - + -Node4->Node8 - - +Node3->Node8 + + Node6 - -volk.h + +volk.h Node5->Node6 - - + + Node7 - -vulkan/vulkan.hpp + +vulkan/vulkan.hpp Node5->Node7 - - + + - + Node8->Node5 - - - - - -Node9 - - -optional - + + + + +Node10->Node2 + + - - -Node8->Node9 - - + + +Node10->Node9 + + - - -Node8->Node10 - - + + +Node11 + + +glm/fwd.hpp + - - -Node10->Node5 - - - - -Node11->Node4 - - + + +Node10->Node11 + + Node12 - - -functional + + +abcgVulkanImage.hpp - - -Node11->Node12 - - + + +Node10->Node12 + + + + + +Node12->Node2 + + Node13 - -glm/fwd.hpp + +gsl/pointers - - -Node11->Node13 - - - - - -Node14 - - -abcgVulkanImage.hpp - - - - + -Node11->Node14 - - - - - -Node14->Node4 - - +Node12->Node13 + + Node15 - -gsl/pointers + +string Node14->Node15 - - + + - - -Node16->Node3 - - + + +Node16 + + +abcgExternal.hpp + + + + + +Node14->Node16 + + Node17 - - -abcgExternal.hpp + + +abcgTimer.hpp - - -Node16->Node17 - - + + +Node14->Node17 + + Node18 - - -abcgTimer.hpp + + +chrono - - -Node16->Node18 - - - - - -Node19 - - -chrono - - - - - -Node18->Node19 - - + + +Node17->Node18 + + diff --git a/abcg/doc/html/abcgVulkanWindow_8hpp_source.html b/abcg/doc/html/abcgVulkanWindow_8hpp_source.html index e1556d731..347e2d321 100644 --- a/abcg/doc/html/abcgVulkanWindow_8hpp_source.html +++ b/abcg/doc/html/abcgVulkanWindow_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,111 +107,101 @@
13 #ifndef ABCG_VULKAN_WINDOW_HPP_
14 #define ABCG_VULKAN_WINDOW_HPP_
15 
-
16 #include <array>
-
17 #include <string>
-
18 
-
19 #include "abcgVulkanDevice.hpp"
-
20 #include "abcgVulkanInstance.hpp"
- -
22 #include "abcgVulkanSwapchain.hpp"
-
23 #include "abcgWindow.hpp"
-
24 
-
25 namespace abcg {
-
26 class VulkanWindow;
-
27 struct VulkanSettings;
-
28 } // namespace abcg
-
29 
- -
42  int depthBufferSize{24};
+
16 #include "abcgVulkanDevice.hpp"
+
17 #include "abcgVulkanInstance.hpp"
+ +
19 #include "abcgVulkanSwapchain.hpp"
+
20 #include "abcgWindow.hpp"
+
21 
+
22 namespace abcg {
+
23 class VulkanWindow;
+
24 struct VulkanSettings;
+
25 } // namespace abcg
+
26 
+ +
39  int depthBufferSize{24};
+
40 
+
43 
- -
46 
-
52  int samples{0};
-
53 
-
62  bool vSync{false};
-
63 };
-
64 
-
82 class abcg::VulkanWindow : public Window {
-
83 public:
-
84  [[nodiscard]] VulkanSettings const &getVulkanSettings() const noexcept;
-
85  void setVulkanSettings(VulkanSettings const &vulkanSettings) noexcept;
-
86  // void saveScreenshotPNG(std::string_view filename) const;
+
49  int samples{0};
+
50 
+
59  bool vSync{false};
+
60 };
+
61 
+
79 class abcg::VulkanWindow : public Window {
+
80 public:
+
81  [[nodiscard]] VulkanSettings const &getVulkanSettings() const noexcept;
+
82  void setVulkanSettings(VulkanSettings const &vulkanSettings) noexcept;
+
83  // void saveScreenshotPNG(std::string_view filename) const;
+
84  [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept;
+
85  [[nodiscard]] VulkanDevice const &getDevice() const noexcept;
+
86  [[nodiscard]] VulkanSwapchain const &getSwapchain() const noexcept;
87 
-
88  [[nodiscard]] VulkanPhysicalDevice const &getPhysicalDevice() const noexcept {
-
89  return m_physicalDevice;
-
90  }
-
91  [[nodiscard]] VulkanDevice const &getDevice() const noexcept {
-
92  return m_device;
-
93  }
-
94  [[nodiscard]] VulkanSwapchain const &getSwapchain() noexcept {
-
95  return m_swapchain;
-
96  }
-
97 
-
98 protected:
-
99  virtual void onEvent(SDL_Event const &event);
-
100  virtual void onCreate();
-
101  virtual void onPaint(VulkanFrame const &frame);
-
102  virtual void onPaintUI();
-
103  virtual void onResize();
-
104  virtual void onUpdate();
-
105  virtual void onDestroy();
-
106 
-
107 private:
-
108  void handleEvent(SDL_Event const &event) final;
-
109  void create() final;
-
110  void paint() final;
-
111  void destroy() final;
-
112  [[nodiscard]] glm::ivec2 getWindowSize() const final;
-
113 
-
114  VulkanSettings m_vulkanSettings;
-
115  std::vector<char const *> const m_deviceExtensions{
-
116  VK_KHR_SWAPCHAIN_EXTENSION_NAME};
-
117  std::vector<char const *> m_layers {
-
118 #if defined(ABCG_VULKAN_DEBUG_REPORT)
-
119  "VK_LAYER_KHRONOS_validation"
-
120 #endif
-
121  };
-
122 
-
123  VulkanInstance m_instance{};
-
124  VulkanPhysicalDevice m_physicalDevice{};
-
125  VulkanDevice m_device{};
-
126  VulkanSwapchain m_swapchain{};
-
127  vk::SurfaceKHR m_surface{};
-
128  vk::DescriptorPool m_UIdescriptorPool{};
-
129  bool m_hidden{};
-
130  bool m_minimized{};
-
131 };
-
132 
-
133 #endif
+
88 protected:
+
89  virtual void onEvent(SDL_Event const &event);
+
90  virtual void onCreate();
+
91  virtual void onPaint(VulkanFrame const &frame);
+
92  virtual void onPaintUI();
+
93  virtual void onResize();
+
94  virtual void onUpdate();
+
95  virtual void onDestroy();
+
96 
+
97 private:
+
98  void handleEvent(SDL_Event const &event) final;
+
99  void create() final;
+
100  void paint() final;
+
101  void destroy() final;
+
102  [[nodiscard]] glm::ivec2 getWindowSize() const final;
+
103 
+
104  VulkanSettings m_vulkanSettings;
+
105  std::vector<char const *> m_deviceExtensions{VK_KHR_SWAPCHAIN_EXTENSION_NAME};
+
106  std::vector<char const *> m_layers {
+
107 #if defined(ABCG_VULKAN_DEBUG_REPORT)
+
108  "VK_LAYER_KHRONOS_validation"
+
109 #endif
+
110  };
+
111 
+
112  VulkanInstance m_instance;
+
113  VulkanPhysicalDevice m_physicalDevice;
+
114  VulkanDevice m_device;
+
115  VulkanSwapchain m_swapchain;
+
116  vk::SurfaceKHR m_surface;
+
117  vk::DescriptorPool m_UIdescriptorPool;
+
118  bool m_hidden{};
+
119  bool m_minimized{};
+
120 };
+
121 
+
122 #endif
Header file of abcg::VulkanDevice.
Header file of abcg::VulkanInstance.
Header file of abcg::VulkanPhysicalDevice.
Header file of abcg::VulkanSwapchain.
Header file of abcg::Window.
-
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:54
+
A class for representing a Vulkan logical device and related resources.
Definition: abcgVulkanDevice.hpp:55
+
A class for representing a Vulkan instance.
Definition: abcgVulkanInstance.hpp:25
A class for representing a Vulkan physical device.
Definition: abcgVulkanPhysicalDevice.hpp:43
A class for representing a Vulkan swapchain.
Definition: abcgVulkanSwapchain.hpp:50
-
Base class for a window that displays graphics using a Vulkan context.
Definition: abcgVulkanWindow.hpp:82
-
virtual void onPaint(VulkanFrame const &frame)
Custom handler for rendering the Vulkan scene.
Definition: abcgVulkanWindow.cpp:122
-
virtual void onCreate()
Custom handler for Vulkan initialization tasks to be performed before rendering the scene.
Definition: abcgVulkanWindow.cpp:108
-
virtual void onPaintUI()
Custom handler for rendering Dear ImGUI controls.
Definition: abcgVulkanWindow.cpp:136
-
VulkanPhysicalDevice const & getPhysicalDevice() const noexcept
Definition: abcgVulkanWindow.hpp:88
-
VulkanSwapchain const & getSwapchain() noexcept
Definition: abcgVulkanWindow.hpp:94
-
virtual void onDestroy()
Custom handler for cleaning up Vulkan resources.
Definition: abcgVulkanWindow.cpp:215
-
VulkanSettings const & getVulkanSettings() const noexcept
Returns the configuration settings of the Vulkan instance.
Definition: abcgVulkanWindow.cpp:70
-
virtual void onResize()
Custom handler for window resizing events.
Definition: abcgVulkanWindow.cpp:196
-
void setVulkanSettings(VulkanSettings const &vulkanSettings) noexcept
Sets the configuration settings that will be used for creating the Vulkan instance.
Definition: abcgVulkanWindow.cpp:81
-
virtual void onEvent(SDL_Event const &event)
Custom event handler.
Definition: abcgVulkanWindow.cpp:98
-
virtual void onUpdate()
Custom handler called for each frame before painting.
Definition: abcgVulkanWindow.cpp:206
-
VulkanDevice const & getDevice() const noexcept
Definition: abcgVulkanWindow.hpp:91
+
Base class for a window that displays graphics using a Vulkan context.
Definition: abcgVulkanWindow.hpp:79
+
VulkanSwapchain const & getSwapchain() const noexcept
Access to abcg::VulkanSwapchain.
Definition: abcgVulkanWindow.cpp:109
+
virtual void onPaint(VulkanFrame const &frame)
Custom handler for rendering the Vulkan scene.
Definition: abcgVulkanWindow.cpp:147
+
virtual void onCreate()
Custom handler for Vulkan initialization tasks to be performed before rendering the scene.
Definition: abcgVulkanWindow.cpp:133
+
virtual void onPaintUI()
Custom handler for rendering Dear ImGUI controls.
Definition: abcgVulkanWindow.cpp:161
+
VulkanDevice const & getDevice() const noexcept
Access to abcg::VulkanDevice.
Definition: abcgVulkanWindow.cpp:101
+
virtual void onDestroy()
Custom handler for cleaning up Vulkan resources.
Definition: abcgVulkanWindow.cpp:240
+
VulkanSettings const & getVulkanSettings() const noexcept
Returns the configuration settings of the Vulkan instance.
Definition: abcgVulkanWindow.cpp:69
+
virtual void onResize()
Custom handler for window resizing events.
Definition: abcgVulkanWindow.cpp:221
+
void setVulkanSettings(VulkanSettings const &vulkanSettings) noexcept
Sets the configuration settings that will be used for creating the Vulkan instance.
Definition: abcgVulkanWindow.cpp:80
+
virtual void onEvent(SDL_Event const &event)
Custom event handler.
Definition: abcgVulkanWindow.cpp:123
+
VulkanPhysicalDevice const & getPhysicalDevice() const noexcept
Access to abcg::VulkanPhysicalDevice.
Definition: abcgVulkanWindow.cpp:93
+
virtual void onUpdate()
Custom handler called for each frame before painting.
Definition: abcgVulkanWindow.cpp:231
Base abstract class that represents a SDL window.
Definition: abcgWindow.hpp:86
Root namespace.
Definition: abcgApplication.hpp:23
Data needed by a rendering frame.
Definition: abcgVulkanSwapchain.hpp:34
-
Configuration settings for creating a Vulkan context.
Definition: abcgVulkanWindow.hpp:40
-
int depthBufferSize
Minimum number of bits in the depth buffer.
Definition: abcgVulkanWindow.hpp:42
-
int samples
Number of desired samples to be used for multisample anti-aliasing.
Definition: abcgVulkanWindow.hpp:52
-
bool vSync
Whether to synchronize the presentation with the vertical retrace.
Definition: abcgVulkanWindow.hpp:62
-
int stencilBufferSize
Minimum number of bits in the stencil buffer.
Definition: abcgVulkanWindow.hpp:45
+
Configuration settings for creating a Vulkan context.
Definition: abcgVulkanWindow.hpp:37
+
int depthBufferSize
Minimum number of bits in the depth buffer.
Definition: abcgVulkanWindow.hpp:39
+
int samples
Number of desired samples to be used for multisample anti-aliasing.
Definition: abcgVulkanWindow.hpp:49
+
bool vSync
Whether to synchronize the presentation with the vertical retrace.
Definition: abcgVulkanWindow.hpp:59
+
int stencilBufferSize
Minimum number of bits in the stencil buffer.
Definition: abcgVulkanWindow.hpp:42
diff --git a/abcg/doc/html/abcgVulkan_8hpp.html b/abcg/doc/html/abcgVulkan_8hpp.html index 8cec34e23..ffcbc47cd 100644 --- a/abcg/doc/html/abcgVulkan_8hpp.html +++ b/abcg/doc/html/abcgVulkan_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -117,13 +117,13 @@
Include dependency graph for abcgVulkan.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -138,7 +138,7 @@

Header file for Vulkan-related functions and classes.

This is a shortcut for Vulkan-related headers used in ABCg.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +

Macro Definition Documentation

◆ GLM_FORCE_DEPTH_ZERO_TO_ONE

diff --git a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.map b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.map index 62f2bb02e..58f5c8869 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.map @@ -1,5 +1,4 @@ - + - diff --git a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.md5 b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.md5 index 67d334357..7271e8976 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.md5 @@ -1 +1 @@ -9d9283e12f4507aab7dd1c005642b288 \ No newline at end of file +ce8a7225d7966b90865427305918777f \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.svg b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.svg index 4c4cd96db..f28a65ede 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgVulkan_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkan.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp @@ -31,24 +31,8 @@ Node1->Node2 - - - - - -Node3 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node1->Node3 - - + + diff --git a/abcg/doc/html/abcgVulkan_8hpp__incl.map b/abcg/doc/html/abcgVulkan_8hpp__incl.map index 70b38ddbb..a41307de1 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__incl.map +++ b/abcg/doc/html/abcgVulkan_8hpp__incl.map @@ -1,33 +1,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgVulkan_8hpp__incl.md5 b/abcg/doc/html/abcgVulkan_8hpp__incl.md5 index d61cb9dd3..7994949d0 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__incl.md5 +++ b/abcg/doc/html/abcgVulkan_8hpp__incl.md5 @@ -1 +1 @@ -1bcf421328a5eda5d57785a19b664874 \ No newline at end of file +dfcf9dc5e5f29e556bfd2d2fb96ebc15 \ No newline at end of file diff --git a/abcg/doc/html/abcgVulkan_8hpp__incl.svg b/abcg/doc/html/abcgVulkan_8hpp__incl.svg index 339886c9f..a4cfc1e27 100644 --- a/abcg/doc/html/abcgVulkan_8hpp__incl.svg +++ b/abcg/doc/html/abcgVulkan_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgVulkan.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp @@ -22,589 +22,568 @@ Node2 - -abcg.hpp + +abcg.hpp Node1->Node2 - - + + Node15 - -abcgVulkanBuffer.hpp + +abcgVulkanBuffer.hpp - + Node1->Node15 - - + + Node24 - -abcgVulkanImage.hpp + +abcgVulkanImage.hpp - + Node1->Node24 - - + + Node25 - -abcgVulkanPipeline.hpp + +abcgVulkanPipeline.hpp - + Node1->Node25 - - + + Node26 - -abcgVulkanShader.hpp + +abcgVulkanShader.hpp Node1->Node26 - - + + Node30 - -abcgVulkanWindow.hpp + +abcgVulkanWindow.hpp Node1->Node30 - - + + Node3 - -abcgApplication.hpp + +abcgApplication.hpp Node2->Node3 - - + + Node5 - -abcgException.hpp + +abcgException.hpp Node2->Node5 - - + + Node8 - -abcgExternal.hpp + +abcgExternal.hpp Node2->Node8 - - + + Node9 - -abcgTrackball.hpp + +abcgTrackball.hpp Node2->Node9 - - + + Node12 - -abcgUtil.hpp + +abcgUtil.hpp Node2->Node12 - - + + Node14 - -abcgWindow.hpp + +abcgWindow.hpp - + Node2->Node14 - - + + Node4 - -string + +string Node3->Node4 - - + + Node5->Node4 - - + + Node6 - -source_location + +source_location Node5->Node6 - - + + Node7 - -stdexcept + +stdexcept Node5->Node7 - - + + Node9->Node8 - - + + Node10 - -abcgTimer.hpp + +abcgTimer.hpp Node9->Node10 - - + + Node11 - -chrono + +chrono Node10->Node11 - - + + + + + +Node12->Node4 + + Node13 - -functional + +functional Node12->Node13 - - + + - + Node14->Node4 - - + + - + Node14->Node8 - - + + - + Node14->Node10 - - + + Node16 - -abcgVulkanDevice.hpp + +abcgVulkanDevice.hpp - + Node15->Node16 - - + + Node23 - -gsl/pointers + +gsl/pointers - + Node15->Node23 - - + + + + + +Node16->Node13 + + Node17 - - -abcgVulkanExternal.hpp + + +abcgVulkanPhysicalDevice.hpp - + Node16->Node17 - - - - - -Node20 - - -abcgVulkanPhysicalDevice.hpp - - - - - -Node16->Node20 - - + + Node18 - -volk.h + +optional - + Node17->Node18 - - + + Node19 - - -vulkan/vulkan.hpp + + +abcgVulkanExternal.hpp - + Node17->Node19 - - + + - - -Node20->Node17 - - + + +Node22 + + +abcgVulkanInstance.hpp + - - -Node21 - - -optional + + + +Node17->Node22 + + + + + +Node20 + + +volk.h - + -Node20->Node21 - - +Node19->Node20 + + - - -Node22 - - -abcgVulkanInstance.hpp + + +Node21 + + +vulkan/vulkan.hpp - - -Node20->Node22 - - + + +Node19->Node21 + + - + -Node22->Node17 - - +Node22->Node19 + + - + Node24->Node16 - - + + - + Node24->Node23 - - - - - -Node25->Node16 - - + + Node25->Node26 - - + + Node28 - -abcgVulkanSwapchain.hpp + +abcgVulkanSwapchain.hpp Node25->Node28 - - + + Node26->Node16 - - + + Node27 - -abcgShader.hpp + +abcgShader.hpp Node26->Node27 - - + + Node27->Node4 - - + + - + -Node27->Node21 - - +Node27->Node18 + + Node28->Node13 - - + + Node28->Node16 - - + + Node28->Node24 - - + + Node29 - -glm/fwd.hpp + +glm/fwd.hpp Node28->Node29 - - - - - -Node30->Node4 - - + + - + Node30->Node14 - - + + - + Node30->Node16 - - + + - - -Node30->Node20 - - + + +Node30->Node17 + + - + Node30->Node22 - - + + - + Node30->Node28 - - - - - -Node31 - - -array - - - - - -Node30->Node31 - - + + diff --git a/abcg/doc/html/abcgVulkan_8hpp_source.html b/abcg/doc/html/abcgVulkan_8hpp_source.html index dbfabaa5d..ad5d89e33 100644 --- a/abcg/doc/html/abcgVulkan_8hpp_source.html +++ b/abcg/doc/html/abcgVulkan_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/abcgWindow_8cpp.html b/abcg/doc/html/abcgWindow_8cpp.html index 622d93c0b..bce560400 100644 --- a/abcg/doc/html/abcgWindow_8cpp.html +++ b/abcg/doc/html/abcgWindow_8cpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,18 +108,17 @@ More...

#include "abcgWindow.hpp"
#include <SDL_video.h>
-#include <utility>
-#include <imgui_impl_sdl.h>
+#include <imgui_impl_sdl2.h>
Include dependency graph for abcgWindow.cpp:
-
+

Detailed Description

Definition of abcg::Window members.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgWindow_8cpp__incl.map b/abcg/doc/html/abcgWindow_8cpp__incl.map index 1071deb7c..3dde603b7 100644 --- a/abcg/doc/html/abcgWindow_8cpp__incl.map +++ b/abcg/doc/html/abcgWindow_8cpp__incl.map @@ -1,9 +1,8 @@ - + - - + diff --git a/abcg/doc/html/abcgWindow_8cpp__incl.md5 b/abcg/doc/html/abcgWindow_8cpp__incl.md5 index 351790b5f..9a15909bb 100644 --- a/abcg/doc/html/abcgWindow_8cpp__incl.md5 +++ b/abcg/doc/html/abcgWindow_8cpp__incl.md5 @@ -1 +1 @@ -b8cc9e8d41d5baef206510b0fffb4b27 \ No newline at end of file +8030f55f0e1ae1861100d04775f8d272 \ No newline at end of file diff --git a/abcg/doc/html/abcgWindow_8cpp__incl.svg b/abcg/doc/html/abcgWindow_8cpp__incl.svg index e589f942c..1f4679820 100644 --- a/abcg/doc/html/abcgWindow_8cpp__incl.svg +++ b/abcg/doc/html/abcgWindow_8cpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgWindow.cpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgWindow.cpp + +/home/harlen/dev/abcg +/abcg/abcgWindow.cpp @@ -30,8 +30,8 @@ Node1->Node2 - - + + @@ -45,38 +45,23 @@ Node1->Node7 - - + + Node8 - -utility + +imgui_impl_sdl2.h Node1->Node8 - - - - - -Node9 - - -imgui_impl_sdl.h - - - - - -Node1->Node9 - - + + diff --git a/abcg/doc/html/abcgWindow_8hpp.html b/abcg/doc/html/abcgWindow_8hpp.html index bd964674c..59c2073a3 100644 --- a/abcg/doc/html/abcgWindow_8hpp.html +++ b/abcg/doc/html/abcgWindow_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -122,7 +122,7 @@
This graph shows which files directly or indirectly include this file:
-
+
@@ -152,7 +152,7 @@

Header file of abcg::Window.

Declaration of abcg::Window.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcgWindow_8hpp__dep__incl.map b/abcg/doc/html/abcgWindow_8hpp__dep__incl.map index 4cd927c6d..3caef9993 100644 --- a/abcg/doc/html/abcgWindow_8hpp__dep__incl.map +++ b/abcg/doc/html/abcgWindow_8hpp__dep__incl.map @@ -1,16 +1,14 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/abcg/doc/html/abcgWindow_8hpp__dep__incl.md5 b/abcg/doc/html/abcgWindow_8hpp__dep__incl.md5 index 86a603e65..607b4109d 100644 --- a/abcg/doc/html/abcgWindow_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcgWindow_8hpp__dep__incl.md5 @@ -1 +1 @@ -b56e2946d75dfdd32449ede5b095f78a \ No newline at end of file +491e73fd90f0a724eb6f927ef83000ff \ No newline at end of file diff --git a/abcg/doc/html/abcgWindow_8hpp__dep__incl.svg b/abcg/doc/html/abcgWindow_8hpp__dep__incl.svg index 49533b262..b8e213865 100644 --- a/abcg/doc/html/abcgWindow_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcgWindow_8hpp__dep__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcgWindow.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcgWindow.hpp + +/home/harlen/dev/abcg +/abcg/abcgWindow.hpp @@ -22,239 +22,201 @@ Node2 - -/home/harlen/dev/abcg -/abcg/abcg.hpp + +/home/harlen/dev/abcg +/abcg/abcg.hpp Node1->Node2 - - + + - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + + +Node6 + + +/home/harlen/dev/abcg +/abcg/abcgApplication.cpp - - -Node1->Node5 - - + + +Node1->Node6 + + Node7 - - -/home/harlen/dev/abcg -/abcg/abcgApplication.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.cpp Node1->Node7 - - + + Node8 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgOpenGLWindow.hpp Node1->Node8 - - + + Node9 - - -/home/harlen/dev/abcg -/abcg/abcgOpenGLWindow.hpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.cpp - + Node1->Node9 - - + + Node10 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.cpp + + +/home/harlen/dev/abcg +/abcg/abcgVulkanWindow.hpp - + Node1->Node10 - - + + - - -Node11 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanWindow.hpp - - - - - -Node1->Node11 - - - - - -Node14 - - -/home/harlen/dev/abcg -/abcg/abcgWindow.cpp + + +Node12 + + +/home/harlen/dev/abcg +/abcg/abcgWindow.cpp - - -Node1->Node14 - - + + +Node1->Node12 + + Node3 - -/home/harlen/dev/abcg -/abcg/abcgOpenGL.hpp + +/home/harlen/dev/abcg +/abcg/abcgOpenGL.hpp Node2->Node3 - - + + Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkan.hpp + +/home/harlen/dev/abcg +/abcg/abcgVulkan.hpp Node2->Node4 - - + + + + + +Node5 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp + + Node4->Node5 - - + + - - -Node6 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node4->Node6 - - + + +Node8->Node3 + + - + -Node9->Node3 - - +Node8->Node7 + + - - -Node9->Node8 - - + + +Node10->Node4 + + - + -Node11->Node4 - - - - - -Node11->Node10 - - - - - -Node12 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanShader.cpp - - +Node10->Node9 + + - - -Node11->Node12 - - - - - -Node13 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanSwapchain.cpp + + +Node11 + + +/home/harlen/dev/abcg +/abcg/abcgVulkanSwapchain.cpp - - -Node11->Node13 - - + + +Node10->Node11 + + diff --git a/abcg/doc/html/abcgWindow_8hpp_source.html b/abcg/doc/html/abcgWindow_8hpp_source.html index dedf968f6..0107879ac 100644 --- a/abcg/doc/html/abcgWindow_8hpp_source.html +++ b/abcg/doc/html/abcgWindow_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -164,8 +164,8 @@
156  [[nodiscard]] double getElapsedTime() const;
157  [[nodiscard]] SDL_Window *getSDLWindow() const noexcept;
158  [[nodiscard]] Uint32 getSDLWindowID() const noexcept;
-
159  [[nodiscard]] bool createSDLWindow(SDL_WindowFlags extraFlags);
-
160 
+
159 
+
160  bool createSDLWindow(SDL_WindowFlags extraFlags);
161  void setEnableResizingEventWatcher(bool enabled) noexcept;
162  void toggleFullscreen();
163 
@@ -201,29 +201,29 @@
Header file for including OpenGL-related third-party dependencies.
Header file of abcg::Timer.
Base abstract class that represents a SDL window.
Definition: abcgWindow.hpp:86
-
double getDeltaTime() const noexcept
Returns the time that have passed since the last frame.
Definition: abcgWindow.cpp:166
-
bool createSDLWindow(SDL_WindowFlags extraFlags)
Creates the SDL window.
Definition: abcgWindow.cpp:239
+
double getDeltaTime() const noexcept
Returns the time that have passed since the last frame.
Definition: abcgWindow.cpp:167
+
bool createSDLWindow(SDL_WindowFlags extraFlags)
Creates the SDL window.
Definition: abcgWindow.cpp:240
Window(Window &&)=default
Default move constructor.
Window & operator=(Window const &)=delete
friend int resizingEventWatcher(void *data, SDL_Event *event)
-
double getElapsedTime() const
Returns the time that have passed since the window was created.
Definition: abcgWindow.cpp:173
+
double getElapsedTime() const
Returns the time that have passed since the window was created.
Definition: abcgWindow.cpp:174
Window & operator=(Window &&)=default
Default move assignment.
virtual void paint()=0
Custom handler for window repainting.
-
SDL_Window * getSDLWindow() const noexcept
Returns the SDL window previously created with abcg::Window::createOpenGLWindow or abcg::Window::crea...
Definition: abcgWindow.cpp:219
-
Uint32 getSDLWindowID() const noexcept
Returns the numeric ID of the SDL window previously created with abcg::Window::createOpenGLWindow or ...
Definition: abcgWindow.cpp:229
+
SDL_Window * getSDLWindow() const noexcept
Returns the SDL window previously created with abcg::Window::createOpenGLWindow or abcg::Window::crea...
Definition: abcgWindow.cpp:220
+
Uint32 getSDLWindowID() const noexcept
Returns the numeric ID of the SDL window previously created with abcg::Window::createOpenGLWindow or ...
Definition: abcgWindow.cpp:230
virtual void handleEvent(SDL_Event const &event)=0
Custom event handler.
-
void setWindowSettings(WindowSettings const &windowSettings)
Sets the configuration settings of the window.
Definition: abcgWindow.cpp:187
-
WindowSettings const & getWindowSettings() const noexcept
Returns the current configuration settings of the window.
Definition: abcgWindow.cpp:180
+
void setWindowSettings(WindowSettings const &windowSettings)
Sets the configuration settings of the window.
Definition: abcgWindow.cpp:188
+
WindowSettings const & getWindowSettings() const noexcept
Returns the current configuration settings of the window.
Definition: abcgWindow.cpp:181
virtual void destroy()=0
Custom handler for window cleanup tasks.
Window()=default
Default constructor.
Window(Window const &)=delete
virtual ~Window()=default
Default destructor.
virtual void create()=0
Custom handler for window initialization tasks.
-
void setEnableResizingEventWatcher(bool enabled) noexcept
Toggles the resizing event watcher on/off.
Definition: abcgWindow.cpp:275
-
void toggleFullscreen()
Toggles between fullscreen and windowed mode.
Definition: abcgWindow.cpp:282
+
void setEnableResizingEventWatcher(bool enabled) noexcept
Toggles the resizing event watcher on/off.
Definition: abcgWindow.cpp:276
+
void toggleFullscreen()
Toggles between fullscreen and windowed mode.
Definition: abcgWindow.cpp:283
virtual glm::ivec2 getWindowSize() const =0
Returns the size of the SDL window.
Root namespace.
Definition: abcgApplication.hpp:23
-
int resizingEventWatcher(void *data, SDL_Event *event)
Definition: abcgWindow.cpp:126
+
int resizingEventWatcher(void *data, SDL_Event *event)
Definition: abcgWindow.cpp:127
Configuration settings of a window.
Definition: abcgWindow.hpp:46
bool showFullscreenButton
Whether to show a button to toggle fullscreen on/off.
Definition: abcgWindow.hpp:64
std::string fullscreenElementID
HTML element ID used for registering the fullscreen callback when the application is built for WebAss...
Definition: abcgWindow.hpp:68
diff --git a/abcg/doc/html/abcg_8hpp.html b/abcg/doc/html/abcg_8hpp.html index 153e89605..60799bfeb 100644 --- a/abcg/doc/html/abcg_8hpp.html +++ b/abcg/doc/html/abcg_8hpp.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -115,13 +115,13 @@
Include dependency graph for abcg.hpp:
-
+
This graph shows which files directly or indirectly include this file:
-
+
@@ -130,7 +130,7 @@

Shortcut header that includes the most common ABCg headers.

A shortcut to the main headers used by ABCg.

This file is part of ABCg (https://github.com/hbatagelo/abcg).

- +
diff --git a/abcg/doc/html/abcg_8hpp__dep__incl.map b/abcg/doc/html/abcg_8hpp__dep__incl.map index 27155d4b9..bb54a3b09 100644 --- a/abcg/doc/html/abcg_8hpp__dep__incl.map +++ b/abcg/doc/html/abcg_8hpp__dep__incl.map @@ -2,6 +2,5 @@ - - + diff --git a/abcg/doc/html/abcg_8hpp__dep__incl.md5 b/abcg/doc/html/abcg_8hpp__dep__incl.md5 index 6772eeee3..70d8d7888 100644 --- a/abcg/doc/html/abcg_8hpp__dep__incl.md5 +++ b/abcg/doc/html/abcg_8hpp__dep__incl.md5 @@ -1 +1 @@ -2cc41c563efe6b73bce2f779482714fb \ No newline at end of file +aa6b4a798a7d82efed2ced520b5c4c48 \ No newline at end of file diff --git a/abcg/doc/html/abcg_8hpp__dep__incl.svg b/abcg/doc/html/abcg_8hpp__dep__incl.svg index dfb1bdb60..4121f076f 100644 --- a/abcg/doc/html/abcg_8hpp__dep__incl.svg +++ b/abcg/doc/html/abcg_8hpp__dep__incl.svg @@ -4,8 +4,8 @@ - + /home/harlen/dev/abcg/abcg/abcg.hpp @@ -54,33 +54,17 @@ Node4 - -/home/harlen/dev/abcg -/abcg/abcgVulkanInstance.cpp + +/home/harlen/dev/abcg +/abcg/abcgVulkanInstance.cpp Node3->Node4 - - - - - -Node5 - - -/home/harlen/dev/abcg -/abcg/abcgVulkanPhysicalDevice.cpp - - - - - -Node3->Node5 - - + + diff --git a/abcg/doc/html/abcg_8hpp__incl.map b/abcg/doc/html/abcg_8hpp__incl.map index 239a7fb6f..a1fcf6539 100644 --- a/abcg/doc/html/abcg_8hpp__incl.map +++ b/abcg/doc/html/abcg_8hpp__incl.map @@ -1,15 +1,15 @@ - - - - - - - - + + + + + + + + - - - + + + diff --git a/abcg/doc/html/abcg_8hpp__incl.md5 b/abcg/doc/html/abcg_8hpp__incl.md5 index 5fed2c353..087d48c16 100644 --- a/abcg/doc/html/abcg_8hpp__incl.md5 +++ b/abcg/doc/html/abcg_8hpp__incl.md5 @@ -1 +1 @@ -5885bf7d5a5c03ca33d370ba419685ac \ No newline at end of file +207ae6f2d902ed67878a0019e58f7b4f \ No newline at end of file diff --git a/abcg/doc/html/abcg_8hpp__incl.svg b/abcg/doc/html/abcg_8hpp__incl.svg index ad1943558..77df4bf83 100644 --- a/abcg/doc/html/abcg_8hpp__incl.svg +++ b/abcg/doc/html/abcg_8hpp__incl.svg @@ -4,17 +4,17 @@ - + /home/harlen/dev/abcg/abcg/abcg.hpp Node1 - -/home/harlen/dev/abcg -/abcg/abcg.hpp + +/home/harlen/dev/abcg +/abcg/abcg.hpp @@ -22,112 +22,112 @@ Node2 - -abcgApplication.hpp + +abcgApplication.hpp Node1->Node2 - - + + Node4 - -abcgException.hpp + +abcgException.hpp Node1->Node4 - - + + Node7 - -abcgExternal.hpp + +abcgExternal.hpp Node1->Node7 - - + + Node8 - -abcgTrackball.hpp + +abcgTrackball.hpp Node1->Node8 - - + + Node11 - -abcgUtil.hpp + +abcgUtil.hpp Node1->Node11 - - + + Node13 - -abcgWindow.hpp + +abcgWindow.hpp - + Node1->Node13 - - + + Node3 - -string + +string Node2->Node3 - - + + Node4->Node3 - - + + @@ -141,8 +141,8 @@ Node4->Node5 - - + + @@ -156,77 +156,83 @@ Node4->Node6 - - + + Node8->Node7 - - + + Node9 - -abcgTimer.hpp + +abcgTimer.hpp Node8->Node9 - - + + Node10 - -chrono + +chrono Node9->Node10 - - + + + + + +Node11->Node3 + + Node12 - -functional + +functional Node11->Node12 - - + + - + Node13->Node3 - - + + - + Node13->Node7 - - + + - + Node13->Node9 - - + + diff --git a/abcg/doc/html/abcg_8hpp_source.html b/abcg/doc/html/abcg_8hpp_source.html index d6a7a363e..8e8737d4c 100644 --- a/abcg/doc/html/abcg_8hpp_source.html +++ b/abcg/doc/html/abcg_8hpp_source.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/annotated.html b/abcg/doc/html/annotated.html index 89707c998..7c3096b9a 100644 --- a/abcg/doc/html/annotated.html +++ b/abcg/doc/html/annotated.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -112,8 +112,8 @@  CSDLErrorRepresents an exception object for SDL errors  CSDLImageErrorRepresents an exception object for SDL_image errors  COpenGLErrorRepresents an exception object for OpenGL errors - COpenGLTextureCreateInfoConfiguration settings for creating an OpenGL 2D texture - COpenGLCubemapCreateInfoConfiguration settings for creating an OpenGL 2D texture + COpenGLTextureCreateInfoConfiguration settings for creating a 2D texture for OpenGL + COpenGLCubemapCreateInfoConfiguration settings for creating a cubemap texture for OpenGL  COpenGLShaderOpenGL shader object and its corresponding stage  COpenGLSettingsConfiguration settings for creating an OpenGL context  COpenGLWindowBase class for a window that displays graphics using an OpenGL context diff --git a/abcg/doc/html/classabcg_1_1Application-members.html b/abcg/doc/html/classabcg_1_1Application-members.html index 07a6d46b7..c1d055fd1 100644 --- a/abcg/doc/html/classabcg_1_1Application-members.html +++ b/abcg/doc/html/classabcg_1_1Application-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,8 +107,8 @@

This is the complete list of members for abcg::Application, including all inherited members.

- - + +
Application(int argc, char **argv)abcg::Application
getAssetsPath()abcg::Applicationinlinestatic
getBasePath()abcg::Applicationinlinestatic
getAssetsPath() noexceptabcg::Applicationstatic
getBasePath() noexceptabcg::Applicationstatic
run(Window &window)abcg::Application
diff --git a/abcg/doc/html/classabcg_1_1Application.html b/abcg/doc/html/classabcg_1_1Application.html index d81bfbef1..e47b5aeaf 100644 --- a/abcg/doc/html/classabcg_1_1Application.html +++ b/abcg/doc/html/classabcg_1_1Application.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,12 +124,12 @@ - - - - - - + + + + + +

Static Public Member Functions

static std::string const & getAssetsPath ()
 Returns the path to the application's assets directory, relative to the directory the executable is launched from. More...
 
static std::string const & getBasePath ()
 Returns the path to the application's directory, relative to the directory the executable is launched in. More...
 
static std::string const & getAssetsPath () noexcept
 Returns the path to the application's assets directory, relative to the directory the executable is launched from. More...
 
static std::string const & getBasePath () noexcept
 Returns the path to the application's directory, relative to the directory the executable is launched in. More...
 

Detailed Description

Manages the application's control flow.

@@ -173,8 +173,8 @@

Member Function Documentation

- -

◆ getAssetsPath()

+ +

◆ getAssetsPath()

- -

◆ getBasePath()

+ +

◆ getBasePath()

diff --git a/abcg/doc/html/classabcg_1_1Exception.html b/abcg/doc/html/classabcg_1_1Exception.html index 276f1b3f0..4c2f5bd41 100644 --- a/abcg/doc/html/classabcg_1_1Exception.html +++ b/abcg/doc/html/classabcg_1_1Exception.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,16 +124,16 @@ - + - - - + + +

Public Member Functions

 Exception (std::string_view what)
 Exception (std::string_view what)
 Constructs an abcg::Exception object. More...
 
const char * what () const noexcept override
 Returns the explanatory string. More...
 
char const * what () const noexcept override
 Returns the explanatory string. More...
 

Detailed Description

Base class for ABCg exception objects.

-

This is the base exception class used for exception objects thrown by ABCg.

+

Base exception class used for exception objects thrown by ABCg.

Constructor & Destructor Documentation

◆ Exception()

@@ -170,8 +170,8 @@

Member Function Documentation

- -

◆ what()

+ +

◆ what()

diff --git a/abcg/doc/html/classabcg_1_1OpenGLError.html b/abcg/doc/html/classabcg_1_1OpenGLError.html index 7520c50cd..cddc28823 100644 --- a/abcg/doc/html/classabcg_1_1OpenGLError.html +++ b/abcg/doc/html/classabcg_1_1OpenGLError.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,16 +124,16 @@ - + - + - - - + + +

Public Member Functions

 OpenGLError (std::string_view what, unsigned int errorCode, source_location const &sourceLocation=source_location::current())
 OpenGLError (std::string_view what, unsigned int errorCode, source_location const &sourceLocation=source_location::current())
 Constructs an abcg::OpenGLError object. More...
 
- Public Member Functions inherited from abcg::Exception
 Exception (std::string_view what)
 Exception (std::string_view what)
 Constructs an abcg::Exception object. More...
 
const char * what () const noexcept override
 Returns the explanatory string. More...
 
char const * what () const noexcept override
 Returns the explanatory string. More...
 

Detailed Description

Represents an exception object for OpenGL errors.

diff --git a/abcg/doc/html/classabcg_1_1OpenGLWindow-members.html b/abcg/doc/html/classabcg_1_1OpenGLWindow-members.html index 26bc7a093..8f27fbf01 100644 --- a/abcg/doc/html/classabcg_1_1OpenGLWindow-members.html +++ b/abcg/doc/html/classabcg_1_1OpenGLWindow-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/classabcg_1_1OpenGLWindow.html b/abcg/doc/html/classabcg_1_1OpenGLWindow.html index 6001386d5..80a708dca 100644 --- a/abcg/doc/html/classabcg_1_1OpenGLWindow.html +++ b/abcg/doc/html/classabcg_1_1OpenGLWindow.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -400,7 +400,7 @@

abcg::OpenGLWindow::onPaint.

This is not called when the window is minimized.

-

Override it for custom behavior. By default, it shows a FPS counter if abcg::WindowSettings::showFPS is set to true, and a toggle fullscren button if abcg::WindowSettings::showFullscreenButton is set to true.

+

Override it for custom behavior. By default, it shows a FPS counter if abcg::WindowSettings::showFPS is set to true, and a toggle fullscreen button if abcg::WindowSettings::showFullscreenButton is set to true.

diff --git a/abcg/doc/html/classabcg_1_1RuntimeError-members.html b/abcg/doc/html/classabcg_1_1RuntimeError-members.html index ab768d7cf..88e89a48c 100644 --- a/abcg/doc/html/classabcg_1_1RuntimeError-members.html +++ b/abcg/doc/html/classabcg_1_1RuntimeError-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,7 @@ - +
Exception(std::string_view what)abcg::Exceptionexplicit
RuntimeError(std::string_view what, source_location const &sourceLocation=source_location::current())abcg::RuntimeErrorexplicit
what() const noexcept overrideabcg::Exceptioninline
what() const noexcept overrideabcg::Exception
diff --git a/abcg/doc/html/classabcg_1_1RuntimeError.html b/abcg/doc/html/classabcg_1_1RuntimeError.html index b098f3b20..d97099b02 100644 --- a/abcg/doc/html/classabcg_1_1RuntimeError.html +++ b/abcg/doc/html/classabcg_1_1RuntimeError.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,16 +124,16 @@ - + - + - - - + + +

Public Member Functions

 RuntimeError (std::string_view what, source_location const &sourceLocation=source_location::current())
 RuntimeError (std::string_view what, source_location const &sourceLocation=source_location::current())
 Constructs an abcg::RuntimeError object. More...
 
- Public Member Functions inherited from abcg::Exception
 Exception (std::string_view what)
 Exception (std::string_view what)
 Constructs an abcg::Exception object. More...
 
const char * what () const noexcept override
 Returns the explanatory string. More...
 
char const * what () const noexcept override
 Returns the explanatory string. More...
 

Detailed Description

Represents an exception object for runtime errors.

diff --git a/abcg/doc/html/classabcg_1_1SDLError-members.html b/abcg/doc/html/classabcg_1_1SDLError-members.html index acbf3006a..ec3418584 100644 --- a/abcg/doc/html/classabcg_1_1SDLError-members.html +++ b/abcg/doc/html/classabcg_1_1SDLError-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,7 @@ - +
Exception(std::string_view what)abcg::Exceptionexplicit
SDLError(std::string_view what, source_location const &sourceLocation=source_location::current())abcg::SDLErrorexplicit
what() const noexcept overrideabcg::Exceptioninline
what() const noexcept overrideabcg::Exception
diff --git a/abcg/doc/html/classabcg_1_1SDLError.html b/abcg/doc/html/classabcg_1_1SDLError.html index 7dee8f91f..077bb8b3f 100644 --- a/abcg/doc/html/classabcg_1_1SDLError.html +++ b/abcg/doc/html/classabcg_1_1SDLError.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,16 +124,16 @@ - + - + - - - + + +

Public Member Functions

 SDLError (std::string_view what, source_location const &sourceLocation=source_location::current())
 SDLError (std::string_view what, source_location const &sourceLocation=source_location::current())
 Constructs an abcg::SDLError object. More...
 
- Public Member Functions inherited from abcg::Exception
 Exception (std::string_view what)
 Exception (std::string_view what)
 Constructs an abcg::Exception object. More...
 
const char * what () const noexcept override
 Returns the explanatory string. More...
 
char const * what () const noexcept override
 Returns the explanatory string. More...
 

Detailed Description

Represents an exception object for SDL errors.

diff --git a/abcg/doc/html/classabcg_1_1SDLImageError-members.html b/abcg/doc/html/classabcg_1_1SDLImageError-members.html index 3e5cbd18f..e288a4159 100644 --- a/abcg/doc/html/classabcg_1_1SDLImageError-members.html +++ b/abcg/doc/html/classabcg_1_1SDLImageError-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,7 @@ - +
Exception(std::string_view what)abcg::Exceptionexplicit
SDLImageError(std::string_view what, source_location const &sourceLocation=source_location::current())abcg::SDLImageErrorexplicit
what() const noexcept overrideabcg::Exceptioninline
what() const noexcept overrideabcg::Exception
diff --git a/abcg/doc/html/classabcg_1_1SDLImageError.html b/abcg/doc/html/classabcg_1_1SDLImageError.html index 4bd712d96..d44a88ecd 100644 --- a/abcg/doc/html/classabcg_1_1SDLImageError.html +++ b/abcg/doc/html/classabcg_1_1SDLImageError.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,16 +124,16 @@ - + - + - - - + + +

Public Member Functions

 SDLImageError (std::string_view what, source_location const &sourceLocation=source_location::current())
 SDLImageError (std::string_view what, source_location const &sourceLocation=source_location::current())
 Constructs an abcg::SDLError object. More...
 
- Public Member Functions inherited from abcg::Exception
 Exception (std::string_view what)
 Exception (std::string_view what)
 Constructs an abcg::Exception object. More...
 
const char * what () const noexcept override
 Returns the explanatory string. More...
 
char const * what () const noexcept override
 Returns the explanatory string. More...
 

Detailed Description

Represents an exception object for SDL_image errors.

diff --git a/abcg/doc/html/classabcg_1_1Timer-members.html b/abcg/doc/html/classabcg_1_1Timer-members.html index f622150fd..5cd417ac9 100644 --- a/abcg/doc/html/classabcg_1_1Timer-members.html +++ b/abcg/doc/html/classabcg_1_1Timer-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/classabcg_1_1Timer.html b/abcg/doc/html/classabcg_1_1Timer.html index 75d1b26de..dd269e724 100644 --- a/abcg/doc/html/classabcg_1_1Timer.html +++ b/abcg/doc/html/classabcg_1_1Timer.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/classabcg_1_1TrackBall-members.html b/abcg/doc/html/classabcg_1_1TrackBall-members.html index 4c4fefb92..d584dbc97 100644 --- a/abcg/doc/html/classabcg_1_1TrackBall-members.html +++ b/abcg/doc/html/classabcg_1_1TrackBall-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -111,8 +111,8 @@ mousePress(glm::ivec2 const &position)abcg::TrackBall mouseRelease(glm::ivec2 const &position)abcg::TrackBall resizeViewport(glm::ivec2 const &size) noexceptabcg::TrackBall - setAxis(glm::vec3 const axis) noexceptabcg::TrackBallinline - setVelocity(float const velocity) noexceptabcg::TrackBallinline + setAxis(glm::vec3 axis) noexceptabcg::TrackBall + setVelocity(float velocity) noexceptabcg::TrackBall
diff --git a/abcg/doc/html/classabcg_1_1TrackBall.html b/abcg/doc/html/classabcg_1_1TrackBall.html index 81d98bae9..608b09b1b 100644 --- a/abcg/doc/html/classabcg_1_1TrackBall.html +++ b/abcg/doc/html/classabcg_1_1TrackBall.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -129,12 +129,12 @@ glm::quat getRotation () const  Returns the current trackball rotation as a quaternion. More...
  -void setAxis (glm::vec3 const axis) noexcept - Sets the trackball's axis of rotation. More...
-  -void setVelocity (float const velocity) noexcept - Sets the trackball's rotation velocity. More...
-  +void setAxis (glm::vec3 axis) noexcept + Sets the trackball's axis of rotation. More...
+  +void setVelocity (float velocity) noexcept + Sets the trackball's rotation velocity. More...

Detailed Description

Manages a virtual trackball.

@@ -271,8 +271,8 @@

-

◆ setAxis()

+ +

◆ setAxis()

@@ -306,8 +306,8 @@

-

◆ setVelocity()

+ +

◆ setVelocity()

diff --git a/abcg/doc/html/classabcg_1_1TrackBall.js b/abcg/doc/html/classabcg_1_1TrackBall.js index ea29fe2fa..ea8ee9631 100644 --- a/abcg/doc/html/classabcg_1_1TrackBall.js +++ b/abcg/doc/html/classabcg_1_1TrackBall.js @@ -5,6 +5,6 @@ var classabcg_1_1TrackBall = [ "mousePress", "classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b", null ], [ "mouseRelease", "classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe", null ], [ "resizeViewport", "classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da", null ], - [ "setAxis", "classabcg_1_1TrackBall.html#a77d9bbdf49272b6c04109cfbd8479693", null ], - [ "setVelocity", "classabcg_1_1TrackBall.html#a19087363b152d422ae6b4d3e5bc1df89", null ] + [ "setAxis", "classabcg_1_1TrackBall.html#a78c570b915dd329448b0a6110da57af8", null ], + [ "setVelocity", "classabcg_1_1TrackBall.html#abdd3ed81210312f961aba9d9a6ab940f", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanBuffer-members.html b/abcg/doc/html/classabcg_1_1VulkanBuffer-members.html index 374b5ccb3..778263f2e 100644 --- a/abcg/doc/html/classabcg_1_1VulkanBuffer-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanBuffer-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,9 +108,9 @@ - + - +
create(VulkanDevice const &device, VulkanBufferCreateInfo const &createInfo)abcg::VulkanBuffer
destroy()abcg::VulkanBuffer
getDeviceMemory() const noexceptabcg::VulkanBufferinline
getDeviceMemory() const noexceptabcg::VulkanBuffer
loadData(gsl::not_null< void const * > data, vk::DeviceSize size, vk::DeviceSize offset=0UL)abcg::VulkanBuffer
operator vk::Buffer const &() const noexceptabcg::VulkanBufferinlineexplicit
operator vk::Buffer const &() const noexceptabcg::VulkanBufferexplicit
diff --git a/abcg/doc/html/classabcg_1_1VulkanBuffer.html b/abcg/doc/html/classabcg_1_1VulkanBuffer.html index eebada2bf..9f7d5e26e 100644 --- a/abcg/doc/html/classabcg_1_1VulkanBuffer.html +++ b/abcg/doc/html/classabcg_1_1VulkanBuffer.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,9 +124,9 @@  
operator vk::Buffer const & () const noexcept  Conversion to vk::Buffer. More...
  -vk::DeviceMemory const & getDeviceMemory () const noexcept - Returns the opaque handle to the device memory object associated with the buffer. More...
-  +vk::DeviceMemory const & getDeviceMemory () const noexcept + Returns the opaque handle to the device memory object associated with the buffer. More...

Detailed Description

A class for representing a Vulkan buffer.

@@ -177,8 +177,8 @@

-

◆ getDeviceMemory()

+ +

◆ getDeviceMemory()

diff --git a/abcg/doc/html/classabcg_1_1VulkanBuffer.js b/abcg/doc/html/classabcg_1_1VulkanBuffer.js index cae2df6eb..291196d7d 100644 --- a/abcg/doc/html/classabcg_1_1VulkanBuffer.js +++ b/abcg/doc/html/classabcg_1_1VulkanBuffer.js @@ -2,7 +2,7 @@ var classabcg_1_1VulkanBuffer = [ [ "create", "classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7", null ], [ "destroy", "classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae", null ], - [ "getDeviceMemory", "classabcg_1_1VulkanBuffer.html#a92490ce5ab81e5f962670192df1bcec4", null ], + [ "getDeviceMemory", "classabcg_1_1VulkanBuffer.html#a0a16b5a0699b4684cca7d1b2b3536fb8", null ], [ "loadData", "classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b", null ], [ "operator vk::Buffer const &", "classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanDevice-members.html b/abcg/doc/html/classabcg_1_1VulkanDevice-members.html index 18d8ff6da..0b7e27df5 100644 --- a/abcg/doc/html/classabcg_1_1VulkanDevice-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanDevice-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,10 +108,10 @@ - - - - + + + +
create(VulkanPhysicalDevice const &physicalDevice, std::vector< char const * > const &extensions={})abcg::VulkanDevice
destroy()abcg::VulkanDevice
getCommandPools() const noexceptabcg::VulkanDeviceinline
getPhysicalDevice() const noexceptabcg::VulkanDeviceinline
getQueues() const noexceptabcg::VulkanDeviceinline
operator vk::Device const &() const noexceptabcg::VulkanDeviceinlineexplicit
getCommandPools() const noexceptabcg::VulkanDevice
getPhysicalDevice() const noexceptabcg::VulkanDevice
getQueues() const noexceptabcg::VulkanDevice
operator vk::Device const &() const noexceptabcg::VulkanDeviceexplicit
withCommandBuffer(std::function< void(vk::CommandBuffer const &commandBuffer)> const &fun, vk::QueueFlagBits queueFlag=vk::QueueFlagBits::eGraphics, vk::CommandBufferLevel level=vk::CommandBufferLevel::ePrimary) constabcg::VulkanDevice
diff --git a/abcg/doc/html/classabcg_1_1VulkanDevice.html b/abcg/doc/html/classabcg_1_1VulkanDevice.html index 8eaa524bb..5dc65c300 100644 --- a/abcg/doc/html/classabcg_1_1VulkanDevice.html +++ b/abcg/doc/html/classabcg_1_1VulkanDevice.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -121,15 +121,15 @@  
operator vk::Device const & () const noexcept  Conversion to vk::Device. More...
  -VulkanPhysicalDevice const & getPhysicalDevice () const noexcept - Access to abcg::VulkanPhysicalDevice. More...
-  -VulkanQueues const & getQueues () const noexcept - Returns the queues associated with this device. More...
-  -VulkanCommandPools const & getCommandPools () const noexcept - Returns the command pools associated with this device. More...
-  +VulkanPhysicalDevice const & getPhysicalDevice () const noexcept + Access to abcg::VulkanPhysicalDevice. More...
+  +VulkanQueues const & getQueues () const noexcept + Returns the queues associated with this device. More...
+  +VulkanCommandPools const & getCommandPools () const noexcept + Returns the command pools associated with this device. More...
+  void withCommandBuffer (std::function< void(vk::CommandBuffer const &commandBuffer)> const &fun, vk::QueueFlagBits queueFlag=vk::QueueFlagBits::eGraphics, vk::CommandBufferLevel level=vk::CommandBufferLevel::ePrimary) const  Allocates and creates a command buffer to be immediately submitted and released. More...
  @@ -183,8 +183,8 @@

-

◆ getCommandPools()

+ +

◆ getCommandPools()

@@ -211,8 +211,8 @@

-

◆ getPhysicalDevice()

+ +

◆ getPhysicalDevice()

@@ -239,8 +239,8 @@

-

◆ getQueues()

+ +

◆ getQueues()

diff --git a/abcg/doc/html/classabcg_1_1VulkanDevice.js b/abcg/doc/html/classabcg_1_1VulkanDevice.js index d69c330a9..cb460e7be 100644 --- a/abcg/doc/html/classabcg_1_1VulkanDevice.js +++ b/abcg/doc/html/classabcg_1_1VulkanDevice.js @@ -2,9 +2,9 @@ var classabcg_1_1VulkanDevice = [ [ "create", "classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029", null ], [ "destroy", "classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4", null ], - [ "getCommandPools", "classabcg_1_1VulkanDevice.html#a40fe31ba2c810b100061d0cfa6a2c5f6", null ], - [ "getPhysicalDevice", "classabcg_1_1VulkanDevice.html#a278ccf59c43ee9a4b3c660eaf02bed99", null ], - [ "getQueues", "classabcg_1_1VulkanDevice.html#a50eaa1dc2e76927325d174d24a7e18c9", null ], + [ "getCommandPools", "classabcg_1_1VulkanDevice.html#a51281adfe9f7d437520c501939017de8", null ], + [ "getPhysicalDevice", "classabcg_1_1VulkanDevice.html#ac67a735b1d9d9a24de55d8f7e5e13a41", null ], + [ "getQueues", "classabcg_1_1VulkanDevice.html#affac11164d370e9c19e85e408dbcb15e", null ], [ "operator vk::Device const &", "classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a", null ], [ "withCommandBuffer", "classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanError-members.html b/abcg/doc/html/classabcg_1_1VulkanError-members.html index 26f5a63db..8dc55b6df 100644 --- a/abcg/doc/html/classabcg_1_1VulkanError-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanError-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,7 @@ - +
Exception(std::string_view what)abcg::Exceptionexplicit
VulkanError(VkResult errorCode, source_location const &sourceLocation=source_location::current())abcg::VulkanErrorexplicit
what() const noexcept overrideabcg::Exceptioninline
what() const noexcept overrideabcg::Exception
diff --git a/abcg/doc/html/classabcg_1_1VulkanError.html b/abcg/doc/html/classabcg_1_1VulkanError.html index 264332f5f..bdba41e34 100644 --- a/abcg/doc/html/classabcg_1_1VulkanError.html +++ b/abcg/doc/html/classabcg_1_1VulkanError.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -128,12 +128,12 @@  Constructs an
abcg::VulkanError object. More...
  - Public Member Functions inherited from abcg::ExceptionException (std::string_view what) + Exception (std::string_view what)  Constructs an abcg::Exception object. More...
  -const char * what () const noexcept override - Returns the explanatory string. More...
-  +char const * what () const noexcept override + Returns the explanatory string. More...

Detailed Description

Represents an exception object for Vulkan runtime errors.

diff --git a/abcg/doc/html/classabcg_1_1VulkanImage-members.html b/abcg/doc/html/classabcg_1_1VulkanImage-members.html index 7dc4cda06..efa445f6c 100644 --- a/abcg/doc/html/classabcg_1_1VulkanImage-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanImage-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,11 +109,11 @@ create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)abcg::VulkanImage create(VulkanDevice const &device, VulkanImageCreateInfo const &createInfo)abcg::VulkanImage destroy()abcg::VulkanImage - getDescriptorImageInfo() const noexceptabcg::VulkanImageinline - getDeviceMemory() const noexceptabcg::VulkanImageinline - getMipLevels() const noexceptabcg::VulkanImageinline - getView() const noexceptabcg::VulkanImageinline - operator vk::Image const &() const noexceptabcg::VulkanImageinlineexplicit + getDescriptorImageInfo() const noexceptabcg::VulkanImage + getDeviceMemory() const noexceptabcg::VulkanImage + getMipLevels() const noexceptabcg::VulkanImage + getView() const noexceptabcg::VulkanImage + operator vk::Image const &() const noexceptabcg::VulkanImageexplicit
diff --git a/abcg/doc/html/classabcg_1_1VulkanImage.html b/abcg/doc/html/classabcg_1_1VulkanImage.html index f22821755..594de9aaa 100644 --- a/abcg/doc/html/classabcg_1_1VulkanImage.html +++ b/abcg/doc/html/classabcg_1_1VulkanImage.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -123,15 +123,15 @@  operator vk::Image const & () const noexcept  Conversion to vk::Image. More...
  -vk::DeviceMemory const & getDeviceMemory () const noexcept - Returns the opaque handle to the device memory object associated with this image. More...
-  -vk::ImageView const & getView () const noexcept - Returns the opaque handle to the image view object associated with this image. More...
-  -vk::DescriptorImageInfo const & getDescriptorImageInfo () const noexcept - Returns the descriptor image information associated with this image. More...
-  +vk::DeviceMemory const & getDeviceMemory () const noexcept + Returns the opaque handle to the device memory object associated with this image. More...
+  +vk::ImageView const & getView () const noexcept + Returns the opaque handle to the image view object associated with this image. More...
+  +vk::DescriptorImageInfo const & getDescriptorImageInfo () const noexcept + Returns the descriptor image information associated with this image. More...
+  uint32_t getMipLevels () const noexcept  Returns the number of mipmap levels generated for this image. More...
  @@ -219,8 +219,8 @@

-

◆ getDescriptorImageInfo()

+ +

◆ getDescriptorImageInfo()

@@ -247,8 +247,8 @@

-

◆ getDeviceMemory()

+ +

◆ getDeviceMemory()

@@ -304,8 +304,8 @@

-

◆ getView()

+ +

◆ getView()

diff --git a/abcg/doc/html/classabcg_1_1VulkanImage.js b/abcg/doc/html/classabcg_1_1VulkanImage.js index 84fcb8346..bdd12678f 100644 --- a/abcg/doc/html/classabcg_1_1VulkanImage.js +++ b/abcg/doc/html/classabcg_1_1VulkanImage.js @@ -3,9 +3,9 @@ var classabcg_1_1VulkanImage = [ "create", "classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d", null ], [ "create", "classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b", null ], [ "destroy", "classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379", null ], - [ "getDescriptorImageInfo", "classabcg_1_1VulkanImage.html#ae0aa098edfcb6c4902ad843dbf79b741", null ], - [ "getDeviceMemory", "classabcg_1_1VulkanImage.html#af3b59382ddb59c35e3562bc17c3be590", null ], + [ "getDescriptorImageInfo", "classabcg_1_1VulkanImage.html#a8c7ee844b2493320c6bafa9485e80e8b", null ], + [ "getDeviceMemory", "classabcg_1_1VulkanImage.html#a1f0d5d74b39ad1652bb4cafc217456ca", null ], [ "getMipLevels", "classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5", null ], - [ "getView", "classabcg_1_1VulkanImage.html#ac9e43199ef73da1e4d033d3857b7275d", null ], + [ "getView", "classabcg_1_1VulkanImage.html#a9fca443ff07a966aa4cf3fd1fa4aa141", null ], [ "operator vk::Image const &", "classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanInstance-members.html b/abcg/doc/html/classabcg_1_1VulkanInstance-members.html index d2e727992..84086cc01 100644 --- a/abcg/doc/html/classabcg_1_1VulkanInstance-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanInstance-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,7 +108,7 @@ - +
create(std::vector< char const * > const &layers={}, std::vector< char const * > const &extensions={}, std::string_view applicationName={})abcg::VulkanInstance
destroy()abcg::VulkanInstance
operator vk::Instance const &() const noexceptabcg::VulkanInstanceinlineexplicit
operator vk::Instance const &() const noexceptabcg::VulkanInstanceexplicit
diff --git a/abcg/doc/html/classabcg_1_1VulkanInstance.html b/abcg/doc/html/classabcg_1_1VulkanInstance.html index 145360474..3b25124e4 100644 --- a/abcg/doc/html/classabcg_1_1VulkanInstance.html +++ b/abcg/doc/html/classabcg_1_1VulkanInstance.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -194,7 +194,7 @@

-inlineexplicitnoexcept +explicitnoexcept

diff --git a/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.html b/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.html index 5a0c3aa55..c27a8f558 100644 --- a/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.html +++ b/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -124,15 +124,15 @@ std::optional< uint32_t > findMemoryType (uint32_t memoryTypeBitsRequirement, vk::MemoryPropertyFlags requiredProperties) const  Finds a type of memory that meets the given requirements. More...
  -VulkanInstance const & getInstance () const noexcept - Access to abcg::VulkanInstance. More...
-  -VulkanQueuesFamilies const & getQueuesFamilies () const noexcept - Access to queues families. More...
-  -vk::SurfaceKHR const & getSurfaceKHR () const noexcept - Access to the surface. More...
-  +VulkanInstance const & getInstance () const noexcept + Access to abcg::VulkanInstance. More...
+  +VulkanQueuesFamilies const & getQueuesFamilies () const noexcept + Access to queues families. More...
+  +vk::SurfaceKHR const & getSurfaceKHR () const noexcept + Access to the surface. More...
+  vk::SampleCountFlagBits getSampleCount () const noexcept  Access to number of samples. More...
  @@ -277,8 +277,8 @@

-

◆ getInstance()

+ +

◆ getInstance()

@@ -305,8 +305,8 @@

-

◆ getQueuesFamilies()

+ +

◆ getQueuesFamilies()

@@ -361,8 +361,8 @@

-

◆ getSurfaceKHR()

+ +

◆ getSurfaceKHR()

diff --git a/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.js b/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.js index d310044d8..c5c143935 100644 --- a/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.js +++ b/abcg/doc/html/classabcg_1_1VulkanPhysicalDevice.js @@ -4,9 +4,9 @@ var classabcg_1_1VulkanPhysicalDevice = [ "destroy", "classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281", null ], [ "findMemoryType", "classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864", null ], [ "getFirstSupportedFormat", "classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32", null ], - [ "getInstance", "classabcg_1_1VulkanPhysicalDevice.html#a7fe5eff938f226bc44dea0e05d0fedc2", null ], - [ "getQueuesFamilies", "classabcg_1_1VulkanPhysicalDevice.html#aae28731aa415700f866860e3cd97f2c5", null ], + [ "getInstance", "classabcg_1_1VulkanPhysicalDevice.html#a434af1aec8d9971df7d3e5440bca4209", null ], + [ "getQueuesFamilies", "classabcg_1_1VulkanPhysicalDevice.html#af3eba085cd8bb0906582dbd19a453ca6", null ], [ "getSampleCount", "classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4", null ], - [ "getSurfaceKHR", "classabcg_1_1VulkanPhysicalDevice.html#adc24018e5fc3b25bbc930c1e5ae221c8", null ], + [ "getSurfaceKHR", "classabcg_1_1VulkanPhysicalDevice.html#a70a971ebe68c20b730e849c666b067e4", null ], [ "operator vk::PhysicalDevice const &", "classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanPipeline-members.html b/abcg/doc/html/classabcg_1_1VulkanPipeline-members.html index fa4513391..083ea9175 100644 --- a/abcg/doc/html/classabcg_1_1VulkanPipeline-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanPipeline-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,8 +108,8 @@ - - + +
create(VulkanSwapchain const &swapchain, VulkanPipelineCreateInfo const &createInfo)abcg::VulkanPipeline
destroy()abcg::VulkanPipeline
getLayout() const noexceptabcg::VulkanPipelineinline
operator vk::Pipeline const &() const noexceptabcg::VulkanPipelineinlineexplicit
getLayout() const noexceptabcg::VulkanPipeline
operator vk::Pipeline const &() const noexceptabcg::VulkanPipelineexplicit
diff --git a/abcg/doc/html/classabcg_1_1VulkanPipeline.html b/abcg/doc/html/classabcg_1_1VulkanPipeline.html index 3342108dd..207e19835 100644 --- a/abcg/doc/html/classabcg_1_1VulkanPipeline.html +++ b/abcg/doc/html/classabcg_1_1VulkanPipeline.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -121,9 +121,9 @@  
operator vk::Pipeline const & () const noexcept  Conversion to vk::Pipeline. More...
  -vk::PipelineLayout const & getLayout () const noexcept - Access to vk::PipelineLayout. More...
-  +vk::PipelineLayout const & getLayout () const noexcept + Access to vk::PipelineLayout. More...

Detailed Description

A class for representing a Vulkan pipeline.

@@ -174,8 +174,8 @@

-

◆ getLayout()

+ +

◆ getLayout()

diff --git a/abcg/doc/html/classabcg_1_1VulkanShader.html b/abcg/doc/html/classabcg_1_1VulkanShader.html index 8df79700e..81ecd5a08 100644 --- a/abcg/doc/html/classabcg_1_1VulkanShader.html +++ b/abcg/doc/html/classabcg_1_1VulkanShader.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -120,12 +120,12 @@ void 
destroy ()  Destroys the shader module. More...
  -vk::ShaderStageFlagBits const & getStage () const noexcept - Returns the shader stage bitmask. More...
-  -vk::ShaderModule const & getModule () const noexcept - Returns the opaque handle to the shader module object. More...
-  +vk::ShaderStageFlagBits const & getStage () const noexcept + Returns the shader stage bitmask. More...
+  +vk::ShaderModule const & getModule () const noexcept + Returns the opaque handle to the shader module object. More...

Detailed Description

A class for representing a Vulkan shader.

@@ -193,8 +193,8 @@

-

◆ getModule()

+ +

◆ getModule()

@@ -221,8 +221,8 @@

-

◆ getStage()

+ +

◆ getStage()

diff --git a/abcg/doc/html/classabcg_1_1VulkanShader.js b/abcg/doc/html/classabcg_1_1VulkanShader.js index 8c807b800..dc225f83c 100644 --- a/abcg/doc/html/classabcg_1_1VulkanShader.js +++ b/abcg/doc/html/classabcg_1_1VulkanShader.js @@ -2,6 +2,6 @@ var classabcg_1_1VulkanShader = [ [ "create", "classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2", null ], [ "destroy", "classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1", null ], - [ "getModule", "classabcg_1_1VulkanShader.html#a3d29eca130a1ecf86a75b594d6702878", null ], - [ "getStage", "classabcg_1_1VulkanShader.html#ad5666c31f864d9cbc7cf52fef5d8a850", null ] + [ "getModule", "classabcg_1_1VulkanShader.html#af6469274369f268db1bfeac8210ced7d", null ], + [ "getStage", "classabcg_1_1VulkanShader.html#a6c4ce257ae31cb6a5e1b177a7931abf7", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/classabcg_1_1VulkanSwapchain-members.html b/abcg/doc/html/classabcg_1_1VulkanSwapchain-members.html index bf06c38a8..6622f9aff 100644 --- a/abcg/doc/html/classabcg_1_1VulkanSwapchain-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanSwapchain-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -109,14 +109,14 @@
checkRebuild(VulkanSettings const &settings, glm::ivec2 const &windowSize)abcg::VulkanSwapchain create(VulkanDevice const &device, VulkanSettings const &settings, glm::ivec2 const &windowSize)abcg::VulkanSwapchain destroy()abcg::VulkanSwapchain - getCurrentFrame() const noexceptabcg::VulkanSwapchaininline - getDepthImage() const noexceptabcg::VulkanSwapchaininline - getDevice() const noexceptabcg::VulkanSwapchaininline - getExtent() const noexceptabcg::VulkanSwapchaininline - getFrames() const noexceptabcg::VulkanSwapchaininline - getMainRenderPass() const noexceptabcg::VulkanSwapchaininline - getUIRenderPass() const noexceptabcg::VulkanSwapchaininline - operator vk::SwapchainKHR const &() const noexceptabcg::VulkanSwapchaininlineexplicit + getCurrentFrame() const noexceptabcg::VulkanSwapchain + getDepthImage() const noexceptabcg::VulkanSwapchain + getDevice() const noexceptabcg::VulkanSwapchain + getExtent() const noexceptabcg::VulkanSwapchain + getFrames() const noexceptabcg::VulkanSwapchain + getMainRenderPass() const noexceptabcg::VulkanSwapchain + getUIRenderPass() const noexceptabcg::VulkanSwapchain + operator vk::SwapchainKHR const &() const noexceptabcg::VulkanSwapchainexplicit present()abcg::VulkanSwapchain render(std::function< void(VulkanFrame const &)> const &fun)abcg::VulkanSwapchain
diff --git a/abcg/doc/html/classabcg_1_1VulkanSwapchain.html b/abcg/doc/html/classabcg_1_1VulkanSwapchain.html index 74c5a48a7..00df865d7 100644 --- a/abcg/doc/html/classabcg_1_1VulkanSwapchain.html +++ b/abcg/doc/html/classabcg_1_1VulkanSwapchain.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -128,27 +128,27 @@  operator vk::SwapchainKHR const & () const noexcept  Conversion to vk::SwapchainKHR. More...
  -VulkanDevice const & getDevice () const noexcept - Access to abcg::VulkanDevice. More...
-  -std::vector< VulkanFrame > const & getFrames () const noexcept - Returns the in-flight frames. More...
-  -VulkanFrame const & getCurrentFrame () const noexcept - Returns the current in-flight frame. More...
-  -vk::RenderPass const & getMainRenderPass () const noexcept - Returns the main render pass. More...
-  -vk::RenderPass const & getUIRenderPass () const noexcept - Returns the UI render pass. More...
-  -vk::Extent2D const & getExtent () const noexcept - Returns the swapchain extent. More...
-  -VulkanImage const & getDepthImage () const noexcept - Returns the depth image object. More...
-  +VulkanDevice const & getDevice () const noexcept + Access to abcg::VulkanDevice. More...
+  +std::vector< VulkanFrame > const & getFrames () const noexcept + Returns the in-flight frames. More...
+  +VulkanFrame const & getCurrentFrame () const noexcept + Returns the current in-flight frame. More...
+  +vk::RenderPass const & getMainRenderPass () const noexcept + Returns the main render pass. More...
+  +vk::RenderPass const & getUIRenderPass () const noexcept + Returns the UI render pass. More...
+  +vk::Extent2D const & getExtent () const noexcept + Returns the swapchain extent. More...
+  +VulkanImage const & getDepthImage () const noexcept + Returns the depth image object. More...

Detailed Description

A class for representing a Vulkan swapchain.

@@ -233,8 +233,8 @@

-

◆ getCurrentFrame()

+ +

◆ getCurrentFrame()

@@ -261,8 +261,8 @@

-

◆ getDepthImage()

+ +

◆ getDepthImage()

@@ -289,8 +289,8 @@

-

◆ getDevice()

+ +

◆ getDevice()

@@ -317,8 +317,8 @@

-

◆ getExtent()

+ +

◆ getExtent()

@@ -345,8 +345,8 @@

-

◆ getFrames()

+ +

◆ getFrames()

@@ -373,8 +373,8 @@

-

◆ getMainRenderPass()

+ +

◆ getMainRenderPass()

@@ -401,8 +401,8 @@

-

◆ getUIRenderPass()

+ +

◆ getUIRenderPass()

diff --git a/abcg/doc/html/classabcg_1_1VulkanSwapchain.js b/abcg/doc/html/classabcg_1_1VulkanSwapchain.js index a7fcc60d0..70372f881 100644 --- a/abcg/doc/html/classabcg_1_1VulkanSwapchain.js +++ b/abcg/doc/html/classabcg_1_1VulkanSwapchain.js @@ -3,13 +3,13 @@ var classabcg_1_1VulkanSwapchain = [ "checkRebuild", "classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4", null ], [ "create", "classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31", null ], [ "destroy", "classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa", null ], - [ "getCurrentFrame", "classabcg_1_1VulkanSwapchain.html#aed9fd2ce2e49224f06e62c338ebde323", null ], - [ "getDepthImage", "classabcg_1_1VulkanSwapchain.html#a66fcdb5540a5c1a8ce5ac8d0b6d47ef3", null ], - [ "getDevice", "classabcg_1_1VulkanSwapchain.html#a09e59e721c2b09e7742e96dbeb6ec0e9", null ], - [ "getExtent", "classabcg_1_1VulkanSwapchain.html#a2d7261f5e89166e310d5d0351a1f287c", null ], - [ "getFrames", "classabcg_1_1VulkanSwapchain.html#a870927d139c2021bf8d0090ec1799b07", null ], - [ "getMainRenderPass", "classabcg_1_1VulkanSwapchain.html#a6d193ee181bbbcedca6638e3f7f595e2", null ], - [ "getUIRenderPass", "classabcg_1_1VulkanSwapchain.html#abe9e7f094e862c4894d50f53fd121b35", null ], + [ "getCurrentFrame", "classabcg_1_1VulkanSwapchain.html#a695ca7f8a93eaa5e8a54554fec139217", null ], + [ "getDepthImage", "classabcg_1_1VulkanSwapchain.html#aed0f6c1452d14d397ab8aa0e929c5404", null ], + [ "getDevice", "classabcg_1_1VulkanSwapchain.html#af63733016263f2ff3bbe4b3a16eaab6a", null ], + [ "getExtent", "classabcg_1_1VulkanSwapchain.html#a935ed2150d5edbe259ebc9559530455d", null ], + [ "getFrames", "classabcg_1_1VulkanSwapchain.html#a666836f228c09910e966b5261057582e", null ], + [ "getMainRenderPass", "classabcg_1_1VulkanSwapchain.html#a671cf8a7a7acf3b7cdd40c46b4a04df3", null ], + [ "getUIRenderPass", "classabcg_1_1VulkanSwapchain.html#a9695875598fb7718c64d0ebe43cdf580", null ], [ "operator vk::SwapchainKHR const &", "classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7", null ], [ "present", "classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b", null ], [ "render", "classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830", null ] diff --git a/abcg/doc/html/classabcg_1_1VulkanWindow-members.html b/abcg/doc/html/classabcg_1_1VulkanWindow-members.html index 0f32cfe0f..187b74861 100644 --- a/abcg/doc/html/classabcg_1_1VulkanWindow-members.html +++ b/abcg/doc/html/classabcg_1_1VulkanWindow-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -108,12 +108,12 @@ - + - + - + diff --git a/abcg/doc/html/classabcg_1_1VulkanWindow.html b/abcg/doc/html/classabcg_1_1VulkanWindow.html index 81a0b2514..935f1d1a8 100644 --- a/abcg/doc/html/classabcg_1_1VulkanWindow.html +++ b/abcg/doc/html/classabcg_1_1VulkanWindow.html @@ -43,7 +43,7 @@ @@ -131,12 +131,15 @@ - - - - - - + + + + + + + + + @@ -225,8 +228,8 @@ abcg::VulkanWindow::onDestroy for cleaning up Vulkan resources.
Remarks
Objects of this type cannot be copied or copy-constructed.

Member Function Documentation

- -

◆ getDevice()

+ +

◆ getDevice()

@@ -235,7 +238,7 @@

createSDLWindow(SDL_WindowFlags extraFlags)abcg::Windowprotected
getDeltaTime() const noexceptabcg::Windowprotected
getDevice() const noexceptabcg::VulkanWindowinline
getDevice() const noexceptabcg::VulkanWindow
getElapsedTime() constabcg::Windowprotected
getPhysicalDevice() const noexceptabcg::VulkanWindowinline
getPhysicalDevice() const noexceptabcg::VulkanWindow
getSDLWindow() const noexceptabcg::Windowprotected
getSDLWindowID() const noexceptabcg::Windowprotected
getSwapchain() noexceptabcg::VulkanWindowinline
getSwapchain() const noexceptabcg::VulkanWindow
getVulkanSettings() const noexceptabcg::VulkanWindow
getWindowSettings() const noexceptabcg::Window
onCreate()abcg::VulkanWindowprotectedvirtual
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
void setVulkanSettings (VulkanSettings const &vulkanSettings) noexcept
 Sets the configuration settings that will be used for creating the Vulkan instance. More...
 
VulkanPhysicalDevice const & getPhysicalDevice () const noexcept
 
VulkanDevice const & getDevice () const noexcept
 
VulkanSwapchain const & getSwapchain () noexcept
 
VulkanPhysicalDevice const & getPhysicalDevice () const noexcept
 Access to abcg::VulkanPhysicalDevice. More...
 
VulkanDevice const & getDevice () const noexcept
 Access to abcg::VulkanDevice. More...
 
VulkanSwapchain const & getSwapchain () const noexcept
 Access to abcg::VulkanSwapchain. More...
 
- Public Member Functions inherited from abcg::Window
 Window ()=default
 Default constructor. More...
- + @@ -243,15 +246,18 @@

-inlinenoexcept +noexcept

VulkanDevice const& abcg::VulkanWindow::getDevice abcg::VulkanDevice const & abcg::VulkanWindow::getDevice ( ) const
+

Access to abcg::VulkanDevice.

+
Returns
Instance of vulkan device associated with this window.
+
- -

◆ getPhysicalDevice()

+ +

◆ getPhysicalDevice()

- -

◆ getSwapchain()

+ +

◆ getSwapchain()

@@ -485,7 +497,7 @@

abcg::VulkanWindow::onPaint.

This is not called when the window is minimized.

-

Override it for custom behavior. By default, it shows a FPS counter if abcg::WindowSettings::showFPS is set to true, and a toggle fullscren button if abcg::WindowSettings::showFullscreenButton is set to true.

+

Override it for custom behavior. By default, it shows a FPS counter if abcg::WindowSettings::showFPS is set to true, and a toggle fullscreen button if abcg::WindowSettings::showFullscreenButton is set to true.

diff --git a/abcg/doc/html/classabcg_1_1VulkanWindow.js b/abcg/doc/html/classabcg_1_1VulkanWindow.js index 856fe59b0..58303f898 100644 --- a/abcg/doc/html/classabcg_1_1VulkanWindow.js +++ b/abcg/doc/html/classabcg_1_1VulkanWindow.js @@ -1,8 +1,8 @@ var classabcg_1_1VulkanWindow = [ - [ "getDevice", "classabcg_1_1VulkanWindow.html#ac74b4486f3c601741688ae08b7b7e90f", null ], - [ "getPhysicalDevice", "classabcg_1_1VulkanWindow.html#a4c2e111472f49a4636eed52d816081fc", null ], - [ "getSwapchain", "classabcg_1_1VulkanWindow.html#a55734ede91798cfe390e0b2b14cb971e", null ], + [ "getDevice", "classabcg_1_1VulkanWindow.html#a5ebbf3a25baa85d38e2d1bde297f085f", null ], + [ "getPhysicalDevice", "classabcg_1_1VulkanWindow.html#abba4a10ebb8d0e2ffa151134ce0d2a1e", null ], + [ "getSwapchain", "classabcg_1_1VulkanWindow.html#a1767221e5ba68e35fa0db9f53fd54d2a", null ], [ "getVulkanSettings", "classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5", null ], [ "onCreate", "classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679", null ], [ "onDestroy", "classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a", null ], diff --git a/abcg/doc/html/classabcg_1_1Window-members.html b/abcg/doc/html/classabcg_1_1Window-members.html index 34d74459a..d5e8abd1f 100644 --- a/abcg/doc/html/classabcg_1_1Window-members.html +++ b/abcg/doc/html/classabcg_1_1Window-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/classabcg_1_1Window.html b/abcg/doc/html/classabcg_1_1Window.html index 4af5aaa85..c2126ce52 100644 --- a/abcg/doc/html/classabcg_1_1Window.html +++ b/abcg/doc/html/classabcg_1_1Window.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -333,7 +333,7 @@

Custom handler for window initialization tasks.

-

This is called only once after SDL initializetion.

+

This is called only once after SDL initialization.

diff --git a/abcg/doc/html/classes.html b/abcg/doc/html/classes.html index 947398161..cddbbc285 100644 --- a/abcg/doc/html/classes.html +++ b/abcg/doc/html/classes.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/files.html b/abcg/doc/html/files.html index 172beebd7..2a68cf39d 100644 --- a/abcg/doc/html/files.html +++ b/abcg/doc/html/files.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -112,8 +112,8 @@  
abcgException.cppDefinition of abcg::Exception members  abcgException.hppHeader file of abcg::Exception and derived classes  abcgExternal.hppHeader file for including third-party dependencies - abcgImage.cppDefinition of texture loading helper functions - abcgImage.hppDeclaration of texture loading helper functions + abcgImage.cppDefinition of image manipulation helper functions + abcgImage.hppDeclaration of image manipulation helper functions  abcgOpenGL.hppHeader file for OpenGL-related functions and classes  abcgOpenGLError.cppDefinition of abcg::OpenGLError members  abcgOpenGLError.hppHeader file of abcg::OpenGLError and derived classes @@ -131,31 +131,32 @@  abcgTimer.hppHeader file of abcg::Timer  abcgTrackball.cppDefinition of abcg::TrackBall members  abcgTrackball.hppHeader file of abcg::TrackBall - abcgUtil.hppDeclaration of general utility functions - abcgVulkan.hppHeader file for Vulkan-related functions and classes - abcgVulkanBuffer.cppDefinition of abcg::VulkanBuffer - abcgVulkanBuffer.hppHeader file of abcg::VulkanBuffer - abcgVulkanDevice.cppDefinition of abcg::VulkanDevice - abcgVulkanDevice.hppHeader file of abcg::VulkanDevice - abcgVulkanError.cppDefinition of abcg::VulkanError members - abcgVulkanError.hppHeader file of abcg::VulkanError and derived classes - abcgVulkanExternal.hppHeader file for including Vulkan-related dependencies - abcgVulkanImage.cppDefinition of abcg::VulkanImage - abcgVulkanImage.hppHeader file of abcg::VulkanImage - abcgVulkanInstance.cppDefinition of abcg::VulkanInstance - abcgVulkanInstance.hppHeader file of abcg::VulkanInstance - abcgVulkanPhysicalDevice.cppDefinition of abcg::VulkanPhysicalDevice - abcgVulkanPhysicalDevice.hppHeader file of abcg::VulkanPhysicalDevice - abcgVulkanPipeline.cppDefinition of abcg::VulkanPipeline - abcgVulkanPipeline.hppHeader file of abcg::VulkanPipeline - abcgVulkanShader.cppDefinition of helper functions for creating Vulkan shaders - abcgVulkanShader.hppDeclaration of helper functions for creating Vulkan shaders - abcgVulkanSwapchain.cppDefinition of abcg::VulkanSwapchain - abcgVulkanSwapchain.hppHeader file of abcg::VulkanSwapchain - abcgVulkanWindow.cppDefinition of abcg::VulkanWindow members - abcgVulkanWindow.hppHeader file of abcg::VulkanWindow - abcgWindow.cppDefinition of abcg::Window members - abcgWindow.hppHeader file of abcg::Window + abcgUtil.cppGeneral utility functions + abcgUtil.hppDeclaration of general utility functions + abcgVulkan.hppHeader file for Vulkan-related functions and classes + abcgVulkanBuffer.cppDefinition of abcg::VulkanBuffer + abcgVulkanBuffer.hppHeader file of abcg::VulkanBuffer + abcgVulkanDevice.cppDefinition of abcg::VulkanDevice + abcgVulkanDevice.hppHeader file of abcg::VulkanDevice + abcgVulkanError.cppDefinition of abcg::VulkanError members + abcgVulkanError.hppHeader file of abcg::VulkanError and derived classes + abcgVulkanExternal.hppHeader file for including Vulkan-related dependencies + abcgVulkanImage.cppDefinition of abcg::VulkanImage + abcgVulkanImage.hppHeader file of abcg::VulkanImage + abcgVulkanInstance.cppDefinition of abcg::VulkanInstance + abcgVulkanInstance.hppHeader file of abcg::VulkanInstance + abcgVulkanPhysicalDevice.cppDefinition of abcg::VulkanPhysicalDevice + abcgVulkanPhysicalDevice.hppHeader file of abcg::VulkanPhysicalDevice + abcgVulkanPipeline.cppDefinition of abcg::VulkanPipeline + abcgVulkanPipeline.hppHeader file of abcg::VulkanPipeline + abcgVulkanShader.cppDefinition of helper functions for creating Vulkan shaders + abcgVulkanShader.hppDeclaration of helper functions for creating Vulkan shaders + abcgVulkanSwapchain.cppDefinition of abcg::VulkanSwapchain + abcgVulkanSwapchain.hppHeader file of abcg::VulkanSwapchain + abcgVulkanWindow.cppDefinition of abcg::VulkanWindow members + abcgVulkanWindow.hppHeader file of abcg::VulkanWindow + abcgWindow.cppDefinition of abcg::Window members + abcgWindow.hppHeader file of abcg::Window
diff --git a/abcg/doc/html/files_dup.js b/abcg/doc/html/files_dup.js index e18dbc978..230b559c7 100644 --- a/abcg/doc/html/files_dup.js +++ b/abcg/doc/html/files_dup.js @@ -22,7 +22,7 @@ var files_dup = [ "abcgOpenGLFunction.hpp", "abcgOpenGLFunction_8hpp.html", "abcgOpenGLFunction_8hpp" ], [ "abcgOpenGLImage.cpp", "abcgOpenGLImage_8cpp.html", null ], [ "abcgOpenGLImage.hpp", "abcgOpenGLImage_8hpp.html", "abcgOpenGLImage_8hpp" ], - [ "abcgOpenGLShader.cpp", "abcgOpenGLShader_8cpp.html", "abcgOpenGLShader_8cpp" ], + [ "abcgOpenGLShader.cpp", "abcgOpenGLShader_8cpp.html", null ], [ "abcgOpenGLShader.hpp", "abcgOpenGLShader_8hpp.html", "abcgOpenGLShader_8hpp" ], [ "abcgOpenGLWindow.cpp", "abcgOpenGLWindow_8cpp.html", null ], [ "abcgOpenGLWindow.hpp", "abcgOpenGLWindow_8hpp.html", "abcgOpenGLWindow_8hpp" ], @@ -35,6 +35,7 @@ var files_dup = [ "abcgTrackball.hpp", "abcgTrackball_8hpp.html", [ [ "TrackBall", "classabcg_1_1TrackBall.html", "classabcg_1_1TrackBall" ] ] ], + [ "abcgUtil.cpp", "abcgUtil_8cpp.html", null ], [ "abcgUtil.hpp", "abcgUtil_8hpp.html", "abcgUtil_8hpp" ], [ "abcgVulkan.hpp", "abcgVulkan_8hpp.html", "abcgVulkan_8hpp" ], [ "abcgVulkanBuffer.cpp", "abcgVulkanBuffer_8cpp.html", null ], @@ -74,7 +75,7 @@ var files_dup = [ "abcgVulkanShader.hpp", "abcgVulkanShader_8hpp.html", [ [ "VulkanShader", "classabcg_1_1VulkanShader.html", "classabcg_1_1VulkanShader" ] ] ], - [ "abcgVulkanSwapchain.cpp", "abcgVulkanSwapchain_8cpp.html", "abcgVulkanSwapchain_8cpp" ], + [ "abcgVulkanSwapchain.cpp", "abcgVulkanSwapchain_8cpp.html", null ], [ "abcgVulkanSwapchain.hpp", "abcgVulkanSwapchain_8hpp.html", [ [ "VulkanFrame", "structabcg_1_1VulkanFrame.html", "structabcg_1_1VulkanFrame" ], [ "VulkanSwapchain", "classabcg_1_1VulkanSwapchain.html", "classabcg_1_1VulkanSwapchain" ] diff --git a/abcg/doc/html/functions.html b/abcg/doc/html/functions.html index 59c720a5e..4699ef7d4 100644 --- a/abcg/doc/html/functions.html +++ b/abcg/doc/html/functions.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -228,73 +228,73 @@

- g -

-

linux workflow macOS workflow Windows workflow WASM workflow GitHub release (latest by date)

+

build workflow GitHub release (latest by date)

Development framework accompanying the course MCTA008-17 Computer Graphics at UFABC.

Documentation | Release notes

ABCg is a lightweight C++ framework that simplifies the development of 3D graphics applications based on OpenGL, OpenGL ES, WebGL, and Vulkan. It is designed for the tutorials and assignments of the course "MCTA008-17 Computer Graphics" taught at Federal University of ABC (UFABC).

@@ -111,7 +111,7 @@

Main features

    -
  • Supported platforms: Linux, mac OS, Windows, WebAssembly.
  • +
  • Supported platforms: Linux, macOS, Windows, WebAssembly.
  • Supported backends: OpenGL 3.3+, OpenGL ES 3.0+, WebGL 2.0 (via Emscripten), Vulkan 1.3.
  • Applications that use the common subset of functions between OpenGL 3.3 and OpenGL ES 3.0 can be built for WebGL 2.0 using the same source code.
  • OpenGL functions can be qualified with the abcg:: namespace to enable throwing exceptions with descriptive GL error messages that include the source code location.
  • @@ -123,7 +123,7 @@

    The following minimum requirements are shared among all platforms:

    • CMake 3.21.
    • -
    • A C++ compiler with at least partial support for C++20 (tested with GCC 11, Clang 13, MSVC 17, and emcc 3.1).
    • +
    • A C++ compiler with at least partial support for C++20 (tested with GCC 12, Clang 16, MSVC 17, and emcc 3.1.42).
    • A system with support for OpenGL 3.3 (OpenGL backend) or Vulkan 1.3 (Vulkan backend). Conformant software rasterizers such as Mesa's Gallium llvmpipe and lavapipe (post Jun 2022) are supported. Mesa's D3D12 backend on WSL 2.0 is supported as well.

    For WebAssembly:

    @@ -138,7 +138,7 @@

  • GLEW 2.2.0 (required for OpenGL-based applications).
  • Vulkan 1.3 (required for Vulkan-based applications).
-

Desktop dependencies can be resolved automatically with Conan. It is disabled by default. To use it, install Conan 1.47 or later and then configure CMake with -DENABLE_CONAN=ON.

+

Desktop dependencies can be resolved automatically with Conan, but it is disabled by default. To use Conan, install Conan 1.47 or a later 1.* version (ABCg is not compatible with Conan 2.0!) and then configure CMake with -DENABLE_CONAN=ON.

The default renderer backend is OpenGL (CMake option GRAPHICS_API=OpenGL). To use the Vulkan backend, configure CMake with -DGRAPHICS_API=Vulkan.


diff --git a/abcg/doc/html/inherit_graph_2.map b/abcg/doc/html/inherit_graph_2.map index 2b937eb4f..2401a4cc4 100644 --- a/abcg/doc/html/inherit_graph_2.map +++ b/abcg/doc/html/inherit_graph_2.map @@ -1,3 +1,3 @@ - + diff --git a/abcg/doc/html/inherit_graph_2.md5 b/abcg/doc/html/inherit_graph_2.md5 index 16101a5a0..6f93185d6 100644 --- a/abcg/doc/html/inherit_graph_2.md5 +++ b/abcg/doc/html/inherit_graph_2.md5 @@ -1 +1 @@ -d0d9a1760bf9be027f837e3b1a7969d1 \ No newline at end of file +311b5d26e2b3c91ab158de5937a0c5b4 \ No newline at end of file diff --git a/abcg/doc/html/inherit_graph_2.svg b/abcg/doc/html/inherit_graph_2.svg index 1f561379d..5289bb9c8 100644 --- a/abcg/doc/html/inherit_graph_2.svg +++ b/abcg/doc/html/inherit_graph_2.svg @@ -11,7 +11,7 @@ Node0 - + abcg::OpenGLCubemapCreateInfo diff --git a/abcg/doc/html/inherit_graph_5.map b/abcg/doc/html/inherit_graph_5.map index b7a368ef0..c66035ca0 100644 --- a/abcg/doc/html/inherit_graph_5.map +++ b/abcg/doc/html/inherit_graph_5.map @@ -1,3 +1,3 @@ - + diff --git a/abcg/doc/html/inherit_graph_5.md5 b/abcg/doc/html/inherit_graph_5.md5 index dd76426cf..fda49e419 100644 --- a/abcg/doc/html/inherit_graph_5.md5 +++ b/abcg/doc/html/inherit_graph_5.md5 @@ -1 +1 @@ -727aa16b73bf4f9455c3878ba28a823a \ No newline at end of file +6d939f778d00aa0c75296a389c40a692 \ No newline at end of file diff --git a/abcg/doc/html/inherit_graph_5.svg b/abcg/doc/html/inherit_graph_5.svg index 21562a796..4eb7c2f1e 100644 --- a/abcg/doc/html/inherit_graph_5.svg +++ b/abcg/doc/html/inherit_graph_5.svg @@ -11,7 +11,7 @@ Node0 - + abcg::OpenGLTextureCreateInfo diff --git a/abcg/doc/html/inherits.html b/abcg/doc/html/inherits.html index c22430313..da59c72b0 100644 --- a/abcg/doc/html/inherits.html +++ b/abcg/doc/html/inherits.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/md__home_harlen_dev_abcg3_CHANGELOG.html b/abcg/doc/html/md__home_harlen_dev_abcg3_CHANGELOG.html new file mode 100644 index 000000000..ea60e9f19 --- /dev/null +++ b/abcg/doc/html/md__home_harlen_dev_abcg3_CHANGELOG.html @@ -0,0 +1,213 @@ + + + + + + + + + ABCg: Release notes + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+
ABCg +  v3.1.0 +
+
Development framework for MCTA008-17
+
+
+ + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Release notes
+
+
+

+v3.1.0

+ +

+v3.0.0

+

+New features

+
    +
  • Added support for building in Visual Studio with MSVC. For that to work, GLEW, SDL2 and SDL2_image development libraries must be installed and set up as follows: the GLEW installation directory must be added to the system _Path_ variable; the environment variables SDL2DIR and SDL2IMAGEDIR must be set to the installation directory of SDL2 and SDL2_image, respectively. Debugging is also supported. However, building multiple executables is not supported in VS. Thus, make sure to use a single add_subdirectory() command in the CMakeLists.txt of the root directory. Also notice that the default output directory will be out/build instead of build if the project is built in the IDE.
  • +
  • Added support for building with MSVC in VS Code. Multiple executables are supported, as well as debugging. Below is an example of a launch.json for debugging the "Hello, World!" project:
    {
    +  "version": "0.2.0",
    +  "configurations": [
    +  {
    +    "name": "C++ Launch (Windows)",
    +    "type": "cppvsdbg",
    +    "request": "launch",
    +    "program": "${workspaceFolder}/build/bin/helloworld/helloworld.exe",
    +    "symbolSearchPath": "${workspaceFolder}/build/bin/Debug",
    +    "console": "integratedTerminal",
    +    "args": [],
    +    "stopAtEntry": false
    +  }
    +  ]
    +}
    +
  • +
  • Updated abcg::createOpenGLProgram with support for additional shader types and no dependance on abcg::OpenGLWindow. The function now accepts an object of type abcg::ShaderSource containing the paths or codes of any combination of shaders supported by OpenGL (vertex, fragment, geometry, tess control/evaluation, and compute shaders). The function also accepts a boolean as a second argument to toggle on/off exceptions on build errors. By default, exception throwing is enabled.
  • +
  • As an alternative to abcg::createOpenGLProgram, it is possible to split the build process into smaller parts by calling abcg::triggerOpenGLShaderCompile, abcg::checkOpenGLShaderCompile, abcg::triggerOpenGLShaderLink, and abcg::checkOpenGLShaderLink in sequence. This can be useful to prevent halting the application when building complex programs.
  • +
  • Added abcg::Application::getBasePath and abcg::Application::getAssetsPath as static member functions.
  • +
  • The HTML element ID used for registering the fullscreen callback function can now be set with abcg::WindowSettings::fullscreenElementID (default is #canvas).
  • +
  • abcg::loadOpenGLTexture and abcg::loadOpenGLCubemap now accepts creation info structures abcg::OpenGLTextureCreateInfo and abcg::OpenGLCubemapCreateInfo, respectively.
  • +
  • Added abcg::hashCombine and abcg::hashCombineSeed functions to easily combine hash values.
  • +
  • Added support for Vulkan.
  • +
+

+Breaking changes

+ +

+Other changes

+
    +
  • Updated external libraries (Dear ImGui v1.86; {fmt} 8.1.1; GSL 4.0.0).
  • +
  • Minimum required version for CMake increased to 3.21.
  • +
  • abcg::OpenGLWindow::getDeltaTime() marked noexcept.
  • +
+

+v2.0.1

+

+Bug Fixes

+
    +
  • Fixed flickering effect when glClear is not called for each frame. For this fix to work, abcg::OpenGLSettings::preserveWebGLDrawingBuffer must be true even when building for desktop.
  • +
+

+v2.0.0

+

+Breaking changes

+
    +
  • abcg::Application::run now takes by value a unique pointer to abcg::OpenGLWindow. Since std::unique_ptr cannot be copied, the caller must either use std::move or pass the pointer as an rvalue. This makes clear the intent of transferring ownership of the pointer, which was not explicit in the previous version that takes an lvalue reference.
  • +
  • Support for running multiple windows has been dropped. Multiple windows weren't working properly on Emscripten builds and aren't used in the course.
  • +
  • abcg::opengl::loadCubemap now transforms the cube map textures to a right-handed coordinate system by default. A small loading overhead is incurred because some of the bitmaps are flipped vertically and horizontally. This behavior can be disabled by setting the (new) parameter rightHandedSystem to false.
  • +
+

+Other changes

+
    +
  • abcg::Exception::OpenGL now generates a string describing all OpenGL error messages returned by glGetError when there are multiple errors.
  • +
  • All OpenGL functions from OpenGL ES 2.0 and ES 3.0 can now be qualified with the abcg namespace (e.g. abcg::glActiveTexture(0)) for automatic error handling in debug builds. This is an alternative to the GL_CHECK macro used in many engines to check for errors before and after each GL call.
  • +
  • Updated external libraries (Dear ImGui v1.84; cppitertools v2.1; {fmt} 8.0.1).
  • +
+

+v1.0.0

+
    +
  • Initial release, used during the first academic term of 2021.
  • +
+
+
+
+ + + + diff --git a/abcg/doc/html/md__home_harlen_dev_abcg_CHANGELOG.html b/abcg/doc/html/md__home_harlen_dev_abcg_CHANGELOG.html index 5733a7878..18098b24f 100644 --- a/abcg/doc/html/md__home_harlen_dev_abcg_CHANGELOG.html +++ b/abcg/doc/html/md__home_harlen_dev_abcg_CHANGELOG.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -104,8 +104,18 @@

+v3.1.0

+ +

v3.0.0

-

+

New features

-

+

Breaking changes

-

+

Other changes

  • Updated external libraries (Dear ImGui v1.86; {fmt} 8.1.1; GSL 4.0.0).
  • Minimum required version for CMake increased to 3.21.
  • abcg::OpenGLWindow::getDeltaTime() marked noexcept.
-

+

v2.0.1

-

+

Bug Fixes

  • Fixed flickering effect when glClear is not called for each frame. For this fix to work, abcg::OpenGLSettings::preserveWebGLDrawingBuffer must be true even when building for desktop.
-

+

v2.0.0

-

+

Breaking changes

  • abcg::Application::run now takes by value a unique pointer to abcg::OpenGLWindow. Since std::unique_ptr cannot be copied, the caller must either use std::move or pass the pointer as an rvalue. This makes clear the intent of transferring ownership of the pointer, which was not explicit in the previous version that takes an lvalue reference.
  • Support for running multiple windows has been dropped. Multiple windows weren't working properly on Emscripten builds and aren't used in the course.
  • abcg::opengl::loadCubemap now transforms the cube map textures to a right-handed coordinate system by default. A small loading overhead is incurred because some of the bitmaps are flipped vertically and horizontally. This behavior can be disabled by setting the (new) parameter rightHandedSystem to false.
-

+

Other changes

  • abcg::Exception::OpenGL now generates a string describing all OpenGL error messages returned by glGetError when there are multiple errors.
  • All OpenGL functions from OpenGL ES 2.0 and ES 3.0 can now be qualified with the abcg namespace (e.g. abcg::glActiveTexture(0)) for automatic error handling in debug builds. This is an alternative to the GL_CHECK macro used in many engines to check for errors before and after each GL call.
  • Updated external libraries (Dear ImGui v1.84; cppitertools v2.1; {fmt} 8.0.1).
-

+

v1.0.0

  • Initial release, used during the first academic term of 2021.
  • diff --git a/abcg/doc/html/namespaceabcg.html b/abcg/doc/html/namespaceabcg.html index 6cd3734a3..14264f127 100644 --- a/abcg/doc/html/namespaceabcg.html +++ b/abcg/doc/html/namespaceabcg.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    @@ -133,10 +133,10 @@  Represents an exception object for OpenGL errors. More...
      struct  OpenGLTextureCreateInfo - Configuration settings for creating an OpenGL 2D texture. More...
    + Configuration settings for creating a 2D texture for OpenGL. More...
      struct  OpenGLCubemapCreateInfo - Configuration settings for creating an OpenGL 2D texture. More...
    + Configuration settings for creating a cubemap texture for OpenGL. More...
      struct  OpenGLShader  OpenGL shader object and its corresponding stage. More...
    @@ -255,12 +255,12 @@ - - - - - - + + + + + + @@ -771,8 +771,10 @@ + + @@ -797,6 +799,15 @@ + + + + + + + + + @@ -1157,8 +1168,8 @@

    -

    ◆ flipHorizontally()

    + +

    ◆ flipHorizontally()

    @@ -1166,7 +1177,7 @@

    void abcg::flipHorizontally

    - + @@ -1177,15 +1188,15 @@

    Parameters

    Functions

    void flipHorizontally (gsl::not_null< SDL_Surface * > surface)
     Flips an image horizontally. More...
     
    void flipVertically (gsl::not_null< SDL_Surface * > surface)
     Flips an image vertically. More...
     
    void flipHorizontally (SDL_Surface &surface)
     Flips an image horizontally. More...
     
    void flipVertically (SDL_Surface &surface)
     Flips an image vertically. More...
     
    void checkGLError (source_location const &sourceLocation, std::string_view appendString)
     Checks OpenGL error status and throws on error with a log message. More...
     
    void glGetDoublev (GLenum pname, GLdouble *params, source_location const &sourceLocation=source_location::current())
     
    GLuint loadOpenGLTexture (OpenGLTextureCreateInfo const &createInfo)
     Creates an OpenGL 2D texture from an image loaded from a filesystem path. More...
     
    GLuint loadOpenGLCubemap (OpenGLCubemapCreateInfo const &createInfo)
     Creates an OpenGL cubemap texture from a set of images loaded from filesystem paths. More...
     
    GLuint createOpenGLProgram (std::vector< ShaderSource > const &pathsOrSources, bool throwOnError=true)
     Creates a program object from a group of shader paths or source codes. More...
    std::size_t hashCombine (const TFirst &value, const TRest &...rest)
     Creates a hash value from several values. More...
     
    std::string toRedString (std::string_view str)
     Creates a string prefixed with the ANSI color code that corresponds to foreground bold red. More...
     
    std::string toYellowString (std::string_view str)
     Creates a string prefixed with the ANSI color code that corresponds to foreground bold yellow. More...
     
    std::string toBlueString (std::string_view str)
     Creates a string prefixed with the ANSI color code that corresponds to foreground bold blue. More...
     
    void checkVkResult (VkResult retCode, source_location const &sourceLocation=source_location::current())
     
    int resizingEventWatcher (void *data, SDL_Event *event)
    (gsl::not_null< SDL_Surface * > SDL_Surface &  surface)
    - +
    surfacePointer to the SDL surface of a RGB or RGBA image.
    surfaceSDL surface of a RGB or RGBA image.
- -

◆ flipVertically()

+ +

◆ flipVertically()

@@ -1193,7 +1204,7 @@

void abcg::flipVertically ( - gsl::not_null< SDL_Surface * >  + SDL_Surface &  surface) @@ -1204,7 +1215,7 @@

Parameters
- +
surfacePointer to the SDL surface of a RGB or RGBA image.
surfaceSDL surface of a RGB or RGBA image.
@@ -13423,7 +13434,7 @@

abcg::hashCombineSeed, but implicitly uses a zero seed. It can be used as follows:

std::size_t hash{abcg::hashCombine(Foo{}, 42, "Some text", 3.14)};
-
std::size_t hashCombine(const TFirst &value, const TRest &...rest)
Creates a hash value from several values.
Definition: abcgUtil.hpp:65
+
std::size_t hashCombine(const TFirst &value, const TRest &...rest)
Creates a hash value from several values.
Definition: abcgUtil.hpp:66
Template Parameters
@@ -13481,7 +13492,7 @@

abcg::hashCombineSeed(hash, Foo{}, 42, "Some text");
// Use hash...
-
void hashCombineSeed(std::size_t &seed, const TFirst &value, const TRest &...rest)
Creates a hash value from several values, combining them with a seed value.
Definition: abcgUtil.hpp:40
+
void hashCombineSeed(std::size_t &seed, const TFirst &value, const TRest &...rest)
Creates a hash value from several values, combining them with a seed value.
Definition: abcgUtil.hpp:41
Template Parameters

TFirstTypename of the first value.
@@ -13517,6 +13528,21 @@

+

Creates an OpenGL cubemap texture from a set of images loaded from filesystem paths.

+
Parameters
+

TFirstTypename of the first value.
+ +
createInfoTexture creation settings.
+
+
+
Exceptions
+ + +
abcg::RuntimeErrorif any image could not be loaded.
+
+
+
Returns
ID of the texture, as generated by glGenTextures.
+

@@ -13535,6 +13561,21 @@

+

Creates an OpenGL 2D texture from an image loaded from a filesystem path.

+
Parameters
+ + +
createInfoTexture creation settings.
+
+
+
Exceptions
+ + +
abcg::RuntimeErrorif the image could not be loaded.
+
+
+
Returns
ID of the texture, as generated by glGenTextures.
+

@@ -13563,6 +13604,90 @@

+

+
+ +

◆ toBlueString()

+ +
+
+ + + + + + + + +
std::string abcg::toBlueString (std::string_view str)
+
+ +

Creates a string prefixed with the ANSI color code that corresponds to foreground bold blue.

+

The reset color code is appended to the end of the string.

+
Parameters
+ + +
strView of the input string.
+
+
+
Returns
New string surrounded by the color and reset codes.
+ +
+
+ +

◆ toRedString()

+ +
+
+ + + + + + + + +
std::string abcg::toRedString (std::string_view str)
+
+ +

Creates a string prefixed with the ANSI color code that corresponds to foreground bold red.

+

The reset color code is appended to the end of the string.

+
Parameters
+ + +
strView of the input string.
+
+
+
Returns
New string surrounded by the color and reset codes.
+ +
+
+ +

◆ toYellowString()

+ +
+
+ + + + + + + + +
std::string abcg::toYellowString (std::string_view str)
+
+ +

Creates a string prefixed with the ANSI color code that corresponds to foreground bold yellow.

+

The reset color code is appended to the end of the string.

+
Parameters
+ + +
strView of the input string.
+
+
+
Returns
New string surrounded by the color and reset codes.
+
diff --git a/abcg/doc/html/namespaceabcg.js b/abcg/doc/html/namespaceabcg.js index 561ffd7a0..a9771195a 100644 --- a/abcg/doc/html/namespaceabcg.js +++ b/abcg/doc/html/namespaceabcg.js @@ -62,8 +62,8 @@ var namespaceabcg = [ "checkOpenGLShaderLink", "namespaceabcg.html#aab59a12bb6313b5c58f5352ce6f380e5", null ], [ "checkVkResult", "namespaceabcg.html#a6dc603716e2c0c5a9ee71ff1ca9881d9", null ], [ "createOpenGLProgram", "namespaceabcg.html#ac5dc51412a57521944dc7f4f32901af5", null ], - [ "flipHorizontally", "namespaceabcg.html#a0d46e744a39225a18d381362cea62104", null ], - [ "flipVertically", "namespaceabcg.html#abc2b77e7547e5e73f00d7167f7a2f6b9", null ], + [ "flipHorizontally", "namespaceabcg.html#a070a6d04f8ddd3f8ffc85556822ad9b9", null ], + [ "flipVertically", "namespaceabcg.html#afbf3c358b10f7ef9aef38acb758e12ca", null ], [ "glActiveTexture", "namespaceabcg.html#abebf61480d8b46ad61238624521c440c", null ], [ "glAttachShader", "namespaceabcg.html#aadc675d08443dfb3f52d136d1e867c54", null ], [ "glBeginQuery", "namespaceabcg.html#a43ea888d5366cd13f8559ae5c45e503e", null ], @@ -320,6 +320,9 @@ var namespaceabcg = [ "loadOpenGLCubemap", "namespaceabcg.html#a39af18b7fd13bbdcd404b344ca29014e", null ], [ "loadOpenGLTexture", "namespaceabcg.html#ae4a5204a112c5bfabcab65d66f49aa8d", null ], [ "resizingEventWatcher", "namespaceabcg.html#a6825799aa852dc7612dad9326be2fb3b", null ], + [ "toBlueString", "namespaceabcg.html#a1b13712894adf3cfdda66dd3ddd14256", null ], + [ "toRedString", "namespaceabcg.html#a7ffc0a33678775f855ffa982c00ccb0d", null ], + [ "toYellowString", "namespaceabcg.html#a9a8a9c73318a69a62645ca5ee239763d", null ], [ "triggerOpenGLShaderCompile", "namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102", null ], [ "triggerOpenGLShaderLink", "namespaceabcg.html#aee435331b56516022710b8acc098883a", null ] ]; \ No newline at end of file diff --git a/abcg/doc/html/namespacemembers.html b/abcg/doc/html/namespacemembers.html index 870b896a7..728bbaf91 100644 --- a/abcg/doc/html/namespacemembers.html +++ b/abcg/doc/html/namespacemembers.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_enum.html b/abcg/doc/html/namespacemembers_enum.html index bbc5ef038..e5789ee06 100644 --- a/abcg/doc/html/namespacemembers_enum.html +++ b/abcg/doc/html/namespacemembers_enum.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_f.html b/abcg/doc/html/namespacemembers_f.html index 475b0ffad..ec453bde2 100644 --- a/abcg/doc/html/namespacemembers_f.html +++ b/abcg/doc/html/namespacemembers_f.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -103,10 +103,10 @@

- f -

diff --git a/abcg/doc/html/namespacemembers_func.html b/abcg/doc/html/namespacemembers_func.html index b13611c8e..6a337fc5b 100644 --- a/abcg/doc/html/namespacemembers_func.html +++ b/abcg/doc/html/namespacemembers_func.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_func_f.html b/abcg/doc/html/namespacemembers_func_f.html index 815bac301..cc2355f15 100644 --- a/abcg/doc/html/namespacemembers_func_f.html +++ b/abcg/doc/html/namespacemembers_func_f.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -103,10 +103,10 @@

- f -

diff --git a/abcg/doc/html/namespacemembers_func_g.html b/abcg/doc/html/namespacemembers_func_g.html index e85cbebdb..7e5545ffe 100644 --- a/abcg/doc/html/namespacemembers_func_g.html +++ b/abcg/doc/html/namespacemembers_func_g.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_func_h.html b/abcg/doc/html/namespacemembers_func_h.html index 645211fed..3ad30f2e5 100644 --- a/abcg/doc/html/namespacemembers_func_h.html +++ b/abcg/doc/html/namespacemembers_func_h.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_func_l.html b/abcg/doc/html/namespacemembers_func_l.html index a77a83d4f..8e0809faa 100644 --- a/abcg/doc/html/namespacemembers_func_l.html +++ b/abcg/doc/html/namespacemembers_func_l.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_func_r.html b/abcg/doc/html/namespacemembers_func_r.html index 721030657..e572e4454 100644 --- a/abcg/doc/html/namespacemembers_func_r.html +++ b/abcg/doc/html/namespacemembers_func_r.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/namespacemembers_func_t.html b/abcg/doc/html/namespacemembers_func_t.html index 86ea4a442..da441d94c 100644 --- a/abcg/doc/html/namespacemembers_func_t.html +++ b/abcg/doc/html/namespacemembers_func_t.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -102,6 +102,15 @@  

- t -

    +
  • toBlueString() +: abcg +
  • +
  • toRedString() +: abcg +
  • +
  • toYellowString() +: abcg +
  • triggerOpenGLShaderCompile() : abcg
  • diff --git a/abcg/doc/html/namespacemembers_g.html b/abcg/doc/html/namespacemembers_g.html index a167c0dd4..e0a052cca 100644 --- a/abcg/doc/html/namespacemembers_g.html +++ b/abcg/doc/html/namespacemembers_g.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_h.html b/abcg/doc/html/namespacemembers_h.html index 3de92cdb8..0dc057ad8 100644 --- a/abcg/doc/html/namespacemembers_h.html +++ b/abcg/doc/html/namespacemembers_h.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_l.html b/abcg/doc/html/namespacemembers_l.html index 56b03d83c..87edfcb5a 100644 --- a/abcg/doc/html/namespacemembers_l.html +++ b/abcg/doc/html/namespacemembers_l.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_o.html b/abcg/doc/html/namespacemembers_o.html index bbd113c24..ef932ce16 100644 --- a/abcg/doc/html/namespacemembers_o.html +++ b/abcg/doc/html/namespacemembers_o.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_r.html b/abcg/doc/html/namespacemembers_r.html index d865cefd3..af1cbe5f5 100644 --- a/abcg/doc/html/namespacemembers_r.html +++ b/abcg/doc/html/namespacemembers_r.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_s.html b/abcg/doc/html/namespacemembers_s.html index 08f9c75af..a7c649d44 100644 --- a/abcg/doc/html/namespacemembers_s.html +++ b/abcg/doc/html/namespacemembers_s.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    diff --git a/abcg/doc/html/namespacemembers_t.html b/abcg/doc/html/namespacemembers_t.html index b9d57242c..7766af506 100644 --- a/abcg/doc/html/namespacemembers_t.html +++ b/abcg/doc/html/namespacemembers_t.html @@ -43,7 +43,7 @@
    ABCg -  v3.0.0 +  v3.1.0
    Development framework for MCTA008-17
    @@ -102,6 +102,15 @@
    Here is a list of all namespace members with links to the namespace documentation for each member:

    - t -

      +
    • toBlueString() +: abcg +
    • +
    • toRedString() +: abcg +
    • +
    • toYellowString() +: abcg +
    • triggerOpenGLShaderCompile() : abcg
    • diff --git a/abcg/doc/html/namespacemembers_type.html b/abcg/doc/html/namespacemembers_type.html index 326d1cd24..388de2778 100644 --- a/abcg/doc/html/namespacemembers_type.html +++ b/abcg/doc/html/namespacemembers_type.html @@ -43,7 +43,7 @@
      ABCg -  v3.0.0 +  v3.1.0
      Development framework for MCTA008-17
      diff --git a/abcg/doc/html/namespaces.html b/abcg/doc/html/namespaces.html index b60629550..ccc086600 100644 --- a/abcg/doc/html/namespaces.html +++ b/abcg/doc/html/namespaces.html @@ -43,7 +43,7 @@
      ABCg -  v3.0.0 +  v3.1.0
      Development framework for MCTA008-17
      @@ -112,8 +112,8 @@  CSDLErrorRepresents an exception object for SDL errors  CSDLImageErrorRepresents an exception object for SDL_image errors  COpenGLErrorRepresents an exception object for OpenGL errors - COpenGLTextureCreateInfoConfiguration settings for creating an OpenGL 2D texture - COpenGLCubemapCreateInfoConfiguration settings for creating an OpenGL 2D texture + COpenGLTextureCreateInfoConfiguration settings for creating a 2D texture for OpenGL + COpenGLCubemapCreateInfoConfiguration settings for creating a cubemap texture for OpenGL  COpenGLShaderOpenGL shader object and its corresponding stage  COpenGLSettingsConfiguration settings for creating an OpenGL context  COpenGLWindowBase class for a window that displays graphics using an OpenGL context diff --git a/abcg/doc/html/navtreedata.js b/abcg/doc/html/navtreedata.js index 99e048c47..cc505d8db 100644 --- a/abcg/doc/html/navtreedata.js +++ b/abcg/doc/html/navtreedata.js @@ -35,19 +35,20 @@ var NAVTREE = [ "Docker setup", "index.html#autotoc_md7", null ], [ "License", "index.html#autotoc_md8", null ], [ "Release notes", "md__home_harlen_dev_abcg_CHANGELOG.html", [ - [ "v3.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md10", [ - [ "New features", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md11", null ], - [ "Breaking changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md12", null ], - [ "Other changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md13", null ] + [ "v3.1.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md10", null ], + [ "v3.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md11", [ + [ "New features", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md12", null ], + [ "Breaking changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md13", null ], + [ "Other changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md14", null ] ] ], - [ "v2.0.1", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md14", [ - [ "Bug Fixes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md15", null ] + [ "v2.0.1", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md15", [ + [ "Bug Fixes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md16", null ] ] ], - [ "v2.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md16", [ - [ "Breaking changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md17", null ], - [ "Other changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md18", null ] + [ "v2.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md17", [ + [ "Breaking changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md18", null ], + [ "Other changes", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md19", null ] ] ], - [ "v1.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md19", null ] + [ "v1.0.0", "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md20", null ] ] ], [ "Namespaces", "namespaces.html", [ [ "Namespace List", "namespaces.html", "namespaces_dup" ], @@ -84,8 +85,8 @@ var NAVTREEINDEX = [ "abcgApplication_8cpp.html", "abcgOpenGLFunction_8hpp.html#aea378f4807f17ed76e8129260b35c1a1", -"classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637", -"namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e" +"classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c", +"namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0" ]; var SYNCONMSG = 'click to disable panel synchronisation'; diff --git a/abcg/doc/html/navtreeindex0.js b/abcg/doc/html/navtreeindex0.js index 1ba692015..76b2241f1 100644 --- a/abcg/doc/html/navtreeindex0.js +++ b/abcg/doc/html/navtreeindex0.js @@ -15,8 +15,8 @@ var NAVTREEINDEX0 = "abcgExternal_8hpp_source.html":[8,0,6], "abcgImage_8cpp.html":[8,0,7], "abcgImage_8hpp.html":[8,0,8], -"abcgImage_8hpp.html#a0d46e744a39225a18d381362cea62104":[8,0,8,0], -"abcgImage_8hpp.html#abc2b77e7547e5e73f00d7167f7a2f6b9":[8,0,8,1], +"abcgImage_8hpp.html#a070a6d04f8ddd3f8ffc85556822ad9b9":[8,0,8,0], +"abcgImage_8hpp.html#afbf3c358b10f7ef9aef38acb758e12ca":[8,0,8,1], "abcgImage_8hpp_source.html":[8,0,8], "abcgOpenGLError_8cpp.html":[8,0,10], "abcgOpenGLError_8hpp.html":[8,0,11], diff --git a/abcg/doc/html/navtreeindex1.js b/abcg/doc/html/navtreeindex1.js index e5aae5814..2c856470a 100644 --- a/abcg/doc/html/navtreeindex1.js +++ b/abcg/doc/html/navtreeindex1.js @@ -36,7 +36,6 @@ var NAVTREEINDEX1 = "abcgOpenGLImage_8hpp.html#ae4a5204a112c5bfabcab65d66f49aa8d":[8,0,16,3], "abcgOpenGLImage_8hpp_source.html":[8,0,16], "abcgOpenGLShader_8cpp.html":[8,0,17], -"abcgOpenGLShader_8cpp.html#a1b9d9248c0d1f7a7bee9653a529dadca":[8,0,17,0], "abcgOpenGLShader_8hpp.html":[8,0,18], "abcgOpenGLShader_8hpp.html#a49e7d7355e5505155f33045df8ab1102":[8,0,18,4], "abcgOpenGLShader_8hpp.html#aab59a12bb6313b5c58f5352ce6f380e5":[8,0,18,2], @@ -76,58 +75,57 @@ var NAVTREEINDEX1 = "abcgTrackball_8cpp.html":[8,0,24], "abcgTrackball_8hpp.html":[8,0,25], "abcgTrackball_8hpp_source.html":[8,0,25], -"abcgUtil_8hpp.html":[8,0,26], -"abcgUtil_8hpp.html#a087b770c423ea0ec8a1e54e655dbb0a0":[8,0,26,1], -"abcgUtil_8hpp.html#aed04a19d18acb506c896c2f220d495c1":[8,0,26,0], -"abcgUtil_8hpp_source.html":[8,0,26], -"abcgVulkanBuffer_8cpp.html":[8,0,28], -"abcgVulkanBuffer_8hpp.html":[8,0,29], -"abcgVulkanBuffer_8hpp_source.html":[8,0,29], -"abcgVulkanDevice_8cpp.html":[8,0,30], -"abcgVulkanDevice_8hpp.html":[8,0,31], -"abcgVulkanDevice_8hpp_source.html":[8,0,31], -"abcgVulkanError_8cpp.html":[8,0,32], -"abcgVulkanError_8hpp.html":[8,0,33], -"abcgVulkanError_8hpp.html#a6dc603716e2c0c5a9ee71ff1ca9881d9":[8,0,33,1], -"abcgVulkanError_8hpp_source.html":[8,0,33], -"abcgVulkanExternal_8hpp.html":[8,0,34], -"abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f":[8,0,34,1], -"abcgVulkanExternal_8hpp.html#adb1991a2979d0bd698ad63fdc1fc328b":[8,0,34,0], -"abcgVulkanExternal_8hpp_source.html":[8,0,34], -"abcgVulkanImage_8cpp.html":[8,0,35], -"abcgVulkanImage_8hpp.html":[8,0,36], -"abcgVulkanImage_8hpp_source.html":[8,0,36], -"abcgVulkanInstance_8cpp.html":[8,0,37], -"abcgVulkanInstance_8hpp.html":[8,0,38], -"abcgVulkanInstance_8hpp_source.html":[8,0,38], -"abcgVulkanPhysicalDevice_8cpp.html":[8,0,39], -"abcgVulkanPhysicalDevice_8hpp.html":[8,0,40], -"abcgVulkanPhysicalDevice_8hpp_source.html":[8,0,40], -"abcgVulkanPipeline_8cpp.html":[8,0,41], -"abcgVulkanPipeline_8hpp.html":[8,0,42], -"abcgVulkanPipeline_8hpp_source.html":[8,0,42], -"abcgVulkanShader_8cpp.html":[8,0,43], -"abcgVulkanShader_8cpp.html#a33f06509309afc65c3a74f2ab43fbcd6":[8,0,43,0], -"abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a":[8,0,43,2], -"abcgVulkanShader_8cpp.html#abd9a731077343cc28d958393025b620b":[8,0,43,1], -"abcgVulkanShader_8hpp.html":[8,0,44], -"abcgVulkanShader_8hpp_source.html":[8,0,44], -"abcgVulkanSwapchain_8cpp.html":[8,0,45], -"abcgVulkanSwapchain_8cpp.html#a1483e553cb233562ff7ae7efcf60e5e0":[8,0,45,2], -"abcgVulkanSwapchain_8cpp.html#a39a911060dac4822e4f53788fe57c7b0":[8,0,45,0], -"abcgVulkanSwapchain_8cpp.html#a4074f1e431857e425c4dfe6ba27069a9":[8,0,45,1], -"abcgVulkanSwapchain_8hpp.html":[8,0,46], -"abcgVulkanSwapchain_8hpp_source.html":[8,0,46], -"abcgVulkanWindow_8cpp.html":[8,0,47], -"abcgVulkanWindow_8hpp.html":[8,0,48], -"abcgVulkanWindow_8hpp_source.html":[8,0,48], -"abcgVulkan_8hpp.html":[8,0,27], -"abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968":[8,0,27,0], -"abcgVulkan_8hpp_source.html":[8,0,27], -"abcgWindow_8cpp.html":[8,0,49], -"abcgWindow_8hpp.html":[8,0,50], -"abcgWindow_8hpp.html#a6825799aa852dc7612dad9326be2fb3b":[8,0,50,2], -"abcgWindow_8hpp_source.html":[8,0,50], +"abcgUtil_8cpp.html":[8,0,26], +"abcgUtil_8hpp.html":[8,0,27], +"abcgUtil_8hpp.html#a087b770c423ea0ec8a1e54e655dbb0a0":[8,0,27,1], +"abcgUtil_8hpp.html#a1b13712894adf3cfdda66dd3ddd14256":[8,0,27,2], +"abcgUtil_8hpp.html#a7ffc0a33678775f855ffa982c00ccb0d":[8,0,27,3], +"abcgUtil_8hpp.html#a9a8a9c73318a69a62645ca5ee239763d":[8,0,27,4], +"abcgUtil_8hpp.html#aed04a19d18acb506c896c2f220d495c1":[8,0,27,0], +"abcgUtil_8hpp_source.html":[8,0,27], +"abcgVulkanBuffer_8cpp.html":[8,0,29], +"abcgVulkanBuffer_8hpp.html":[8,0,30], +"abcgVulkanBuffer_8hpp_source.html":[8,0,30], +"abcgVulkanDevice_8cpp.html":[8,0,31], +"abcgVulkanDevice_8hpp.html":[8,0,32], +"abcgVulkanDevice_8hpp_source.html":[8,0,32], +"abcgVulkanError_8cpp.html":[8,0,33], +"abcgVulkanError_8hpp.html":[8,0,34], +"abcgVulkanError_8hpp.html#a6dc603716e2c0c5a9ee71ff1ca9881d9":[8,0,34,1], +"abcgVulkanError_8hpp_source.html":[8,0,34], +"abcgVulkanExternal_8hpp.html":[8,0,35], +"abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f":[8,0,35,1], +"abcgVulkanExternal_8hpp.html#adb1991a2979d0bd698ad63fdc1fc328b":[8,0,35,0], +"abcgVulkanExternal_8hpp_source.html":[8,0,35], +"abcgVulkanImage_8cpp.html":[8,0,36], +"abcgVulkanImage_8hpp.html":[8,0,37], +"abcgVulkanImage_8hpp_source.html":[8,0,37], +"abcgVulkanInstance_8cpp.html":[8,0,38], +"abcgVulkanInstance_8hpp.html":[8,0,39], +"abcgVulkanInstance_8hpp_source.html":[8,0,39], +"abcgVulkanPhysicalDevice_8cpp.html":[8,0,40], +"abcgVulkanPhysicalDevice_8hpp.html":[8,0,41], +"abcgVulkanPhysicalDevice_8hpp_source.html":[8,0,41], +"abcgVulkanPipeline_8cpp.html":[8,0,42], +"abcgVulkanPipeline_8hpp.html":[8,0,43], +"abcgVulkanPipeline_8hpp_source.html":[8,0,43], +"abcgVulkanShader_8cpp.html":[8,0,44], +"abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a":[8,0,44,0], +"abcgVulkanShader_8hpp.html":[8,0,45], +"abcgVulkanShader_8hpp_source.html":[8,0,45], +"abcgVulkanSwapchain_8cpp.html":[8,0,46], +"abcgVulkanSwapchain_8hpp.html":[8,0,47], +"abcgVulkanSwapchain_8hpp_source.html":[8,0,47], +"abcgVulkanWindow_8cpp.html":[8,0,48], +"abcgVulkanWindow_8hpp.html":[8,0,49], +"abcgVulkanWindow_8hpp_source.html":[8,0,49], +"abcgVulkan_8hpp.html":[8,0,28], +"abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968":[8,0,28,0], +"abcgVulkan_8hpp_source.html":[8,0,28], +"abcgWindow_8cpp.html":[8,0,50], +"abcgWindow_8hpp.html":[8,0,51], +"abcgWindow_8hpp.html#a6825799aa852dc7612dad9326be2fb3b":[8,0,51,2], +"abcgWindow_8hpp_source.html":[8,0,51], "abcg_8hpp.html":[8,0,0], "abcg_8hpp_source.html":[8,0,0], "annotated.html":[7,0], @@ -135,8 +133,8 @@ var NAVTREEINDEX1 = "classabcg_1_1Application.html#aa5a85168c861a3502d37a1336f1aae0d":[7,0,0,0,1], "classabcg_1_1Application.html#ab8275b32a7f2ff090e15a906f5039f54":[7,0,0,0,0], "classabcg_1_1Exception.html":[7,0,0,1], +"classabcg_1_1Exception.html#a2570f60fe3573e51566430f5a7c5f5fb":[7,0,0,1,1], "classabcg_1_1Exception.html#a264c852c597e5fad26cee2090b7ebd71":[7,0,0,1,0], -"classabcg_1_1Exception.html#ac29321e33a5280ecdc5c59405f08c080":[7,0,0,1,1], "classabcg_1_1OpenGLError.html":[7,0,0,5], "classabcg_1_1OpenGLError.html#a6f1a5080226aa9434ef1f5b096710fa0":[7,0,0,5,0], "classabcg_1_1OpenGLWindow.html":[7,0,0,10], @@ -160,94 +158,96 @@ var NAVTREEINDEX1 = "classabcg_1_1Timer.html#a5cdb94e9a81ed24604079384a40cb56c":[7,0,0,12,1], "classabcg_1_1Timer.html#a70a10ae27c24c5d559c688d7abe0a62e":[7,0,0,12,0], "classabcg_1_1TrackBall.html":[7,0,0,13], -"classabcg_1_1TrackBall.html#a19087363b152d422ae6b4d3e5bc1df89":[7,0,0,13,6], "classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b":[7,0,0,13,2], "classabcg_1_1TrackBall.html#a5801a1f9825c5ee5fae329406f4b4264":[7,0,0,13,0], -"classabcg_1_1TrackBall.html#a77d9bbdf49272b6c04109cfbd8479693":[7,0,0,13,5], +"classabcg_1_1TrackBall.html#a78c570b915dd329448b0a6110da57af8":[7,0,0,13,5], "classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe":[7,0,0,13,3], +"classabcg_1_1TrackBall.html#abdd3ed81210312f961aba9d9a6ab940f":[7,0,0,13,6], "classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da":[7,0,0,13,4], "classabcg_1_1TrackBall.html#ad19937746c776c6d57c649d5fc7ff946":[7,0,0,13,1], "classabcg_1_1VulkanBuffer.html":[7,0,0,15], +"classabcg_1_1VulkanBuffer.html#a0a16b5a0699b4684cca7d1b2b3536fb8":[7,0,0,15,2], "classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e":[7,0,0,15,4], "classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7":[7,0,0,15,0], "classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae":[7,0,0,15,1], -"classabcg_1_1VulkanBuffer.html#a92490ce5ab81e5f962670192df1bcec4":[7,0,0,15,2], "classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b":[7,0,0,15,3], "classabcg_1_1VulkanDevice.html":[7,0,0,18], "classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4":[7,0,0,18,1], -"classabcg_1_1VulkanDevice.html#a278ccf59c43ee9a4b3c660eaf02bed99":[7,0,0,18,3], -"classabcg_1_1VulkanDevice.html#a40fe31ba2c810b100061d0cfa6a2c5f6":[7,0,0,18,2], -"classabcg_1_1VulkanDevice.html#a50eaa1dc2e76927325d174d24a7e18c9":[7,0,0,18,4], +"classabcg_1_1VulkanDevice.html#a51281adfe9f7d437520c501939017de8":[7,0,0,18,2], "classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a":[7,0,0,18,5], "classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029":[7,0,0,18,0], +"classabcg_1_1VulkanDevice.html#ac67a735b1d9d9a24de55d8f7e5e13a41":[7,0,0,18,3], "classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc":[7,0,0,18,6], +"classabcg_1_1VulkanDevice.html#affac11164d370e9c19e85e408dbcb15e":[7,0,0,18,4], "classabcg_1_1VulkanError.html":[7,0,0,19], "classabcg_1_1VulkanError.html#aa5a0a0656ae43e62cbffd8cf4ce758ce":[7,0,0,19,0], "classabcg_1_1VulkanImage.html":[7,0,0,21], "classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b":[7,0,0,21,1], +"classabcg_1_1VulkanImage.html#a1f0d5d74b39ad1652bb4cafc217456ca":[7,0,0,21,4], "classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5":[7,0,0,21,5], +"classabcg_1_1VulkanImage.html#a8c7ee844b2493320c6bafa9485e80e8b":[7,0,0,21,3], "classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d":[7,0,0,21,0], -"classabcg_1_1VulkanImage.html#ac9e43199ef73da1e4d033d3857b7275d":[7,0,0,21,6], +"classabcg_1_1VulkanImage.html#a9fca443ff07a966aa4cf3fd1fa4aa141":[7,0,0,21,6], "classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379":[7,0,0,21,2], -"classabcg_1_1VulkanImage.html#ae0aa098edfcb6c4902ad843dbf79b741":[7,0,0,21,3], "classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986":[7,0,0,21,7], -"classabcg_1_1VulkanImage.html#af3b59382ddb59c35e3562bc17c3be590":[7,0,0,21,4], "classabcg_1_1VulkanInstance.html":[7,0,0,22], "classabcg_1_1VulkanInstance.html#a617850d1b31fc2b4960951ff839f5168":[7,0,0,22,1], "classabcg_1_1VulkanInstance.html#a6ec883f5f84307353b0bbfe85e5c749f":[7,0,0,22,2], "classabcg_1_1VulkanInstance.html#abdd4efd069ddeb2937f6771897765730":[7,0,0,22,0], "classabcg_1_1VulkanPhysicalDevice.html":[7,0,0,24], +"classabcg_1_1VulkanPhysicalDevice.html#a434af1aec8d9971df7d3e5440bca4209":[7,0,0,24,4], "classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864":[7,0,0,24,2], +"classabcg_1_1VulkanPhysicalDevice.html#a70a971ebe68c20b730e849c666b067e4":[7,0,0,24,7], "classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32":[7,0,0,24,3], -"classabcg_1_1VulkanPhysicalDevice.html#a7fe5eff938f226bc44dea0e05d0fedc2":[7,0,0,24,4], "classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281":[7,0,0,24,1], -"classabcg_1_1VulkanPhysicalDevice.html#aae28731aa415700f866860e3cd97f2c5":[7,0,0,24,5], "classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4":[7,0,0,24,6], -"classabcg_1_1VulkanPhysicalDevice.html#adc24018e5fc3b25bbc930c1e5ae221c8":[7,0,0,24,7], "classabcg_1_1VulkanPhysicalDevice.html#ae39f878f560e709b08b634314d28d730":[7,0,0,24,0], "classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1":[7,0,0,24,8], +"classabcg_1_1VulkanPhysicalDevice.html#af3eba085cd8bb0906582dbd19a453ca6":[7,0,0,24,5], "classabcg_1_1VulkanPipeline.html":[7,0,0,26], "classabcg_1_1VulkanPipeline.html#a15da4398f57661508f2585c552c23cac":[7,0,0,26,1], "classabcg_1_1VulkanPipeline.html#a49a3fddd5247929486f870e4f4d64419":[7,0,0,26,3], "classabcg_1_1VulkanPipeline.html#a743747edda95318ed91afe853d2a71c0":[7,0,0,26,0], -"classabcg_1_1VulkanPipeline.html#a9b58d66a31560dd3ddd018100c2dc79e":[7,0,0,26,2], +"classabcg_1_1VulkanPipeline.html#a8d36ff10042f814ab8ee85f8d05799e1":[7,0,0,26,2], "classabcg_1_1VulkanShader.html":[7,0,0,27], "classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1":[7,0,0,27,1], -"classabcg_1_1VulkanShader.html#a3d29eca130a1ecf86a75b594d6702878":[7,0,0,27,2], +"classabcg_1_1VulkanShader.html#a6c4ce257ae31cb6a5e1b177a7931abf7":[7,0,0,27,3], "classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2":[7,0,0,27,0], -"classabcg_1_1VulkanShader.html#ad5666c31f864d9cbc7cf52fef5d8a850":[7,0,0,27,3], +"classabcg_1_1VulkanShader.html#af6469274369f268db1bfeac8210ced7d":[7,0,0,27,2], "classabcg_1_1VulkanSwapchain.html":[7,0,0,29], -"classabcg_1_1VulkanSwapchain.html#a09e59e721c2b09e7742e96dbeb6ec0e9":[7,0,0,29,5], -"classabcg_1_1VulkanSwapchain.html#a2d7261f5e89166e310d5d0351a1f287c":[7,0,0,29,6], +"classabcg_1_1VulkanSwapchain.html#a666836f228c09910e966b5261057582e":[7,0,0,29,7], "classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b":[7,0,0,29,11], -"classabcg_1_1VulkanSwapchain.html#a66fcdb5540a5c1a8ce5ac8d0b6d47ef3":[7,0,0,29,4], -"classabcg_1_1VulkanSwapchain.html#a6d193ee181bbbcedca6638e3f7f595e2":[7,0,0,29,8], -"classabcg_1_1VulkanSwapchain.html#a870927d139c2021bf8d0090ec1799b07":[7,0,0,29,7], +"classabcg_1_1VulkanSwapchain.html#a671cf8a7a7acf3b7cdd40c46b4a04df3":[7,0,0,29,8], +"classabcg_1_1VulkanSwapchain.html#a695ca7f8a93eaa5e8a54554fec139217":[7,0,0,29,3], "classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7":[7,0,0,29,10], +"classabcg_1_1VulkanSwapchain.html#a935ed2150d5edbe259ebc9559530455d":[7,0,0,29,6], +"classabcg_1_1VulkanSwapchain.html#a9695875598fb7718c64d0ebe43cdf580":[7,0,0,29,9], "classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830":[7,0,0,29,12], "classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31":[7,0,0,29,1], -"classabcg_1_1VulkanSwapchain.html#abe9e7f094e862c4894d50f53fd121b35":[7,0,0,29,9], "classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4":[7,0,0,29,0], "classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa":[7,0,0,29,2], -"classabcg_1_1VulkanSwapchain.html#aed9fd2ce2e49224f06e62c338ebde323":[7,0,0,29,3], +"classabcg_1_1VulkanSwapchain.html#aed0f6c1452d14d397ab8aa0e929c5404":[7,0,0,29,4], +"classabcg_1_1VulkanSwapchain.html#af63733016263f2ff3bbe4b3a16eaab6a":[7,0,0,29,5], "classabcg_1_1VulkanWindow.html":[7,0,0,31], +"classabcg_1_1VulkanWindow.html#a1767221e5ba68e35fa0db9f53fd54d2a":[7,0,0,31,2], "classabcg_1_1VulkanWindow.html#a2325095d54d08ec014f4173242565205":[7,0,0,31,7], "classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679":[7,0,0,31,4], "classabcg_1_1VulkanWindow.html#a42ea921c25307e0edcbf6271e52ef3c0":[7,0,0,31,8], -"classabcg_1_1VulkanWindow.html#a4c2e111472f49a4636eed52d816081fc":[7,0,0,31,1], -"classabcg_1_1VulkanWindow.html#a55734ede91798cfe390e0b2b14cb971e":[7,0,0,31,2], +"classabcg_1_1VulkanWindow.html#a5ebbf3a25baa85d38e2d1bde297f085f":[7,0,0,31,0], "classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a":[7,0,0,31,5], "classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5":[7,0,0,31,3], "classabcg_1_1VulkanWindow.html#a9c80fcb8dc6f482a4b440a273ca69902":[7,0,0,31,9], "classabcg_1_1VulkanWindow.html#ab3a719010faef282c83eacb999d0c3e6":[7,0,0,31,11], "classabcg_1_1VulkanWindow.html#ab8bd7fb6dcf8e770d1108ae6667c4762":[7,0,0,31,6], +"classabcg_1_1VulkanWindow.html#abba4a10ebb8d0e2ffa151134ce0d2a1e":[7,0,0,31,1], "classabcg_1_1VulkanWindow.html#ac32aced497100ccc33ae89d6181c2df5":[7,0,0,31,10], -"classabcg_1_1VulkanWindow.html#ac74b4486f3c601741688ae08b7b7e90f":[7,0,0,31,0], "classabcg_1_1Window.html":[7,0,0,33], "classabcg_1_1Window.html#a084f822db9d33093e6940e312e3cf5b2":[7,0,0,33,7], "classabcg_1_1Window.html#a0f9ac50c1babc71e1ac22207b4ccb48e":[7,0,0,33,5], "classabcg_1_1Window.html#a15e6b232cf072323945cf357425b24e0":[7,0,0,33,2], "classabcg_1_1Window.html#a2cad313eeee01bf3b89e248cd25ed71e":[7,0,0,33,15], "classabcg_1_1Window.html#a33a77ed4888300e0008bb92fb5fec509":[7,0,0,33,20], -"classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe":[7,0,0,33,8] +"classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe":[7,0,0,33,8], +"classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637":[7,0,0,33,14], +"classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0":[7,0,0,33,16] }; diff --git a/abcg/doc/html/navtreeindex2.js b/abcg/doc/html/navtreeindex2.js index 05b3847d1..f4c228a82 100644 --- a/abcg/doc/html/navtreeindex2.js +++ b/abcg/doc/html/navtreeindex2.js @@ -1,7 +1,5 @@ var NAVTREEINDEX2 = { -"classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637":[7,0,0,33,14], -"classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0":[7,0,0,33,16], "classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c":[7,0,0,33,9], "classabcg_1_1Window.html#a6bc85489a6372037ebb5946eb20cbeaf":[7,0,0,33,10], "classabcg_1_1Window.html#a7e2b0741b0314a4e6472353de3de1633":[7,0,0,33,13], @@ -36,25 +34,26 @@ var NAVTREEINDEX2 = "index.html#autotoc_md8":[4], "md__home_harlen_dev_abcg_CHANGELOG.html":[5], "md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md10":[5,0], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md11":[5,0,0], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md12":[5,0,1], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md13":[5,0,2], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md14":[5,1], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md15":[5,1,0], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md16":[5,2], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md17":[5,2,0], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md18":[5,2,1], -"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md19":[5,3], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md11":[5,1], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md12":[5,1,0], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md13":[5,1,1], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md14":[5,1,2], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md15":[5,2], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md16":[5,2,0], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md17":[5,3], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md18":[5,3,0], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md19":[5,3,1], +"md__home_harlen_dev_abcg_CHANGELOG.html#autotoc_md20":[5,4], "namespaceabcg.html":[6,0,0], "namespaceabcg.html#a03ba96b4728e99b4f58cce1f3e102b49":[6,0,0,218], "namespaceabcg.html#a03d850c93d16ad308516bb83bb8ffa0d":[6,0,0,205], "namespaceabcg.html#a045bd908a5989d1ed1b6a4d28cc2bab6":[6,0,0,105], "namespaceabcg.html#a05ece875ff476f630548c8cf7a0d952b":[6,0,0,206], "namespaceabcg.html#a0690d7a9fb1fbe27f1630b51a6ef506f":[6,0,0,166], +"namespaceabcg.html#a070a6d04f8ddd3f8ffc85556822ad9b9":[6,0,0,43], "namespaceabcg.html#a087b770c423ea0ec8a1e54e655dbb0a0":[6,0,0,297], "namespaceabcg.html#a08dbe7a21733bff43ed976be14f99e9b":[6,0,0,104], "namespaceabcg.html#a0a55fd40d1c8f2dfc0fd072e5b2c5ebc":[6,0,0,243], -"namespaceabcg.html#a0d46e744a39225a18d381362cea62104":[6,0,0,43], "namespaceabcg.html#a0f8299d53f2d5e195444be565301462c":[6,0,0,241], "namespaceabcg.html#a10f604e428c78fad5ca881ecae15f9df":[6,0,0,225], "namespaceabcg.html#a1156c925b568620ac51f94893db587ac":[6,0,0,64], @@ -66,6 +65,7 @@ var NAVTREEINDEX2 = "namespaceabcg.html#a15c8e64b115ca61dc7bd460af8447497":[6,0,0,259], "namespaceabcg.html#a16e4ed4c33c7e9abd8eb412c422c7f8a":[6,0,0,285], "namespaceabcg.html#a17c9ec119f0c1c6d101a042131774ef9":[6,0,0,244], +"namespaceabcg.html#a1b13712894adf3cfdda66dd3ddd14256":[6,0,0,301], "namespaceabcg.html#a1b9de47c64a177ed5daf99eeee3c3f05":[6,0,0,72], "namespaceabcg.html#a1c0feac412868f91511bc6cee51c0472":[6,0,0,93], "namespaceabcg.html#a1daed0c2b70ea52f0436053095125e44":[6,0,0,90], @@ -115,7 +115,7 @@ var NAVTREEINDEX2 = "namespaceabcg.html#a47b7481c9fc066c9cd54a0f010258818":[6,0,0,189], "namespaceabcg.html#a47dba8957f7121ceccfde94363e707e4":[6,0,0,124], "namespaceabcg.html#a47e3bd5f6dc82daa656e76b655940338":[6,0,0,108], -"namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102":[6,0,0,301], +"namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102":[6,0,0,304], "namespaceabcg.html#a4a8a224da5a79b1029605b7e77218e7c":[6,0,0,173], "namespaceabcg.html#a4c721ad9d476be58c7fcc04da120288b":[6,0,0,150], "namespaceabcg.html#a4c9b0c886972e7d983e58c367787572c":[6,0,0,131], @@ -167,6 +167,7 @@ var NAVTREEINDEX2 = "namespaceabcg.html#a7b172b6de78b247898a24c61d6d1d25f":[6,0,0,228], "namespaceabcg.html#a7cc7561e9541d7841342173bec200d0d":[6,0,0,135], "namespaceabcg.html#a7ff895f0b4b215b432009d5a23645b34":[6,0,0,239], +"namespaceabcg.html#a7ffc0a33678775f855ffa982c00ccb0d":[6,0,0,302], "namespaceabcg.html#a81e93970a280fc3782f7577db7060458":[6,0,0,215], "namespaceabcg.html#a81f720eec72780a58bf7719461d97971":[6,0,0,266], "namespaceabcg.html#a828f4d3a0f75f391780765df28ce8914":[6,0,0,223], @@ -208,6 +209,7 @@ var NAVTREEINDEX2 = "namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daafed8068cf66889c7c88bd5b7d3d02e4b":[6,0,0,36,7], "namespaceabcg.html#a99d565ab142c3aade17d3bf0165dc348":[6,0,0,257], "namespaceabcg.html#a9a5c4567cf69ddd662085c0f86b37fa4":[6,0,0,175], +"namespaceabcg.html#a9a8a9c73318a69a62645ca5ee239763d":[6,0,0,303], "namespaceabcg.html#a9ab713ec7c6e93a8f09b5278133dfcf7":[6,0,0,79], "namespaceabcg.html#a9c6d035dae7a9d2137cc484b6704f0c9":[6,0,0,159], "namespaceabcg.html#a9c896be2e2c6b41db3e1f4891e27bf8d":[6,0,0,87], @@ -244,10 +246,8 @@ var NAVTREEINDEX2 = "namespaceabcg.html#abaa5a136840114161dd2dca5dcfce646":[6,0,0,111], "namespaceabcg.html#abb0b676883c3e5c717cea345b043a372":[6,0,0,271], "namespaceabcg.html#abc150697687bc94d1ec422a5f2db1b88":[6,0,0,267], -"namespaceabcg.html#abc2b77e7547e5e73f00d7167f7a2f6b9":[6,0,0,44], "namespaceabcg.html#abde059e7926e418ee7676f612480ca2e":[6,0,0,192], "namespaceabcg.html#abe63fd43e8ff35c953ca7a58a9f50f24":[6,0,0,167], "namespaceabcg.html#abeafef647d9a881976fb42ecc4756c8d":[6,0,0,253], -"namespaceabcg.html#abebf61480d8b46ad61238624521c440c":[6,0,0,45], -"namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0":[6,0,0,277] +"namespaceabcg.html#abebf61480d8b46ad61238624521c440c":[6,0,0,45] }; diff --git a/abcg/doc/html/navtreeindex3.js b/abcg/doc/html/navtreeindex3.js index 50c14c0e1..8e0780ef2 100644 --- a/abcg/doc/html/navtreeindex3.js +++ b/abcg/doc/html/navtreeindex3.js @@ -1,5 +1,6 @@ var NAVTREEINDEX3 = { +"namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0":[6,0,0,277], "namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e":[6,0,0,291], "namespaceabcg.html#ac21f205c4a058a639fd695c4b4bf76fc":[6,0,0,265], "namespaceabcg.html#ac2b042cb4fcd350f3efd9925f90bb068":[6,0,0,169], @@ -54,7 +55,7 @@ var NAVTREEINDEX3 = "namespaceabcg.html#aed892da4fd2e2517f53ca8c902d36a31":[6,0,0,200], "namespaceabcg.html#aedab4d42e7085a4bab268099b2d1346d":[6,0,0,182], "namespaceabcg.html#aee3c58bf82ea8186bfab4f2942997022":[6,0,0,172], -"namespaceabcg.html#aee435331b56516022710b8acc098883a":[6,0,0,302], +"namespaceabcg.html#aee435331b56516022710b8acc098883a":[6,0,0,305], "namespaceabcg.html#aee53221fba9cbf13c75d78c9533da27b":[6,0,0,65], "namespaceabcg.html#aee93697e0e0b92b0b73a9c374d4afff0":[6,0,0,214], "namespaceabcg.html#aeed384502019a1ea9c53c5f79387f4a6":[6,0,0,248], @@ -80,6 +81,7 @@ var NAVTREEINDEX3 = "namespaceabcg.html#afb123afaf46459222024ea041cac15c7":[6,0,0,190], "namespaceabcg.html#afb3c84a308e303b503c6f0cdefd5f426":[6,0,0,56], "namespaceabcg.html#afb64d90352e53e92718dd7f10a2822a6":[6,0,0,263], +"namespaceabcg.html#afbf3c358b10f7ef9aef38acb758e12ca":[6,0,0,44], "namespaceabcg.html#afd3d4e6a15e37502f806875152c161ec":[6,0,0,70], "namespaceabcg.html#afe4c4f9e797dcd01910528c13ff471d4":[6,0,0,59], "namespacemembers.html":[6,1,0], diff --git a/abcg/doc/html/pages.html b/abcg/doc/html/pages.html index 1234059dc..c6c874cae 100644 --- a/abcg/doc/html/pages.html +++ b/abcg/doc/html/pages.html @@ -43,7 +43,7 @@
      ABCg -  v3.0.0 +  v3.1.0
      Development framework for MCTA008-17
      diff --git a/abcg/doc/html/search/all_0.js b/abcg/doc/html/search/all_0.js index e19a51d78..f50b43461 100644 --- a/abcg/doc/html/search/all_0.js +++ b/abcg/doc/html/search/all_0.js @@ -28,39 +28,37 @@ var searchData= ['abcgopenglwindow_2ecpp_25',['abcgOpenGLWindow.cpp',['../abcgOpenGLWindow_8cpp.html',1,'']]], ['abcgopenglwindow_2ehpp_26',['abcgOpenGLWindow.hpp',['../abcgOpenGLWindow_8hpp.html',1,'']]], ['abcgshader_2ehpp_27',['abcgShader.hpp',['../abcgShader_8hpp.html',1,'']]], - ['abcgstagetoglslangstage_28',['abcgStageToGlslangStage',['../abcgVulkanShader_8cpp.html#a33f06509309afc65c3a74f2ab43fbcd6',1,'abcgVulkanShader.cpp']]], - ['abcgstagetoopenglstage_29',['abcgStageToOpenGLStage',['../abcgOpenGLShader_8cpp.html#a1b9d9248c0d1f7a7bee9653a529dadca',1,'abcgOpenGLShader.cpp']]], - ['abcgstagetovulkanstage_30',['abcgStageToVulkanStage',['../abcgVulkanShader_8cpp.html#abd9a731077343cc28d958393025b620b',1,'abcgVulkanShader.cpp']]], - ['abcgtimer_2ecpp_31',['abcgTimer.cpp',['../abcgTimer_8cpp.html',1,'']]], - ['abcgtimer_2ehpp_32',['abcgTimer.hpp',['../abcgTimer_8hpp.html',1,'']]], - ['abcgtrackball_2ecpp_33',['abcgTrackball.cpp',['../abcgTrackball_8cpp.html',1,'']]], - ['abcgtrackball_2ehpp_34',['abcgTrackball.hpp',['../abcgTrackball_8hpp.html',1,'']]], - ['abcgutil_2ehpp_35',['abcgUtil.hpp',['../abcgUtil_8hpp.html',1,'']]], - ['abcgvulkan_2ehpp_36',['abcgVulkan.hpp',['../abcgVulkan_8hpp.html',1,'']]], - ['abcgvulkanbuffer_2ecpp_37',['abcgVulkanBuffer.cpp',['../abcgVulkanBuffer_8cpp.html',1,'']]], - ['abcgvulkanbuffer_2ehpp_38',['abcgVulkanBuffer.hpp',['../abcgVulkanBuffer_8hpp.html',1,'']]], - ['abcgvulkandevice_2ecpp_39',['abcgVulkanDevice.cpp',['../abcgVulkanDevice_8cpp.html',1,'']]], - ['abcgvulkandevice_2ehpp_40',['abcgVulkanDevice.hpp',['../abcgVulkanDevice_8hpp.html',1,'']]], - ['abcgvulkanerror_2ecpp_41',['abcgVulkanError.cpp',['../abcgVulkanError_8cpp.html',1,'']]], - ['abcgvulkanerror_2ehpp_42',['abcgVulkanError.hpp',['../abcgVulkanError_8hpp.html',1,'']]], - ['abcgvulkanexternal_2ehpp_43',['abcgVulkanExternal.hpp',['../abcgVulkanExternal_8hpp.html',1,'']]], - ['abcgvulkanimage_2ecpp_44',['abcgVulkanImage.cpp',['../abcgVulkanImage_8cpp.html',1,'']]], - ['abcgvulkanimage_2ehpp_45',['abcgVulkanImage.hpp',['../abcgVulkanImage_8hpp.html',1,'']]], - ['abcgvulkaninstance_2ecpp_46',['abcgVulkanInstance.cpp',['../abcgVulkanInstance_8cpp.html',1,'']]], - ['abcgvulkaninstance_2ehpp_47',['abcgVulkanInstance.hpp',['../abcgVulkanInstance_8hpp.html',1,'']]], - ['abcgvulkanphysicaldevice_2ecpp_48',['abcgVulkanPhysicalDevice.cpp',['../abcgVulkanPhysicalDevice_8cpp.html',1,'']]], - ['abcgvulkanphysicaldevice_2ehpp_49',['abcgVulkanPhysicalDevice.hpp',['../abcgVulkanPhysicalDevice_8hpp.html',1,'']]], - ['abcgvulkanpipeline_2ecpp_50',['abcgVulkanPipeline.cpp',['../abcgVulkanPipeline_8cpp.html',1,'']]], - ['abcgvulkanpipeline_2ehpp_51',['abcgVulkanPipeline.hpp',['../abcgVulkanPipeline_8hpp.html',1,'']]], - ['abcgvulkanshader_2ecpp_52',['abcgVulkanShader.cpp',['../abcgVulkanShader_8cpp.html',1,'']]], - ['abcgvulkanshader_2ehpp_53',['abcgVulkanShader.hpp',['../abcgVulkanShader_8hpp.html',1,'']]], - ['abcgvulkanswapchain_2ecpp_54',['abcgVulkanSwapchain.cpp',['../abcgVulkanSwapchain_8cpp.html',1,'']]], - ['abcgvulkanswapchain_2ehpp_55',['abcgVulkanSwapchain.hpp',['../abcgVulkanSwapchain_8hpp.html',1,'']]], - ['abcgvulkanwindow_2ecpp_56',['abcgVulkanWindow.cpp',['../abcgVulkanWindow_8cpp.html',1,'']]], - ['abcgvulkanwindow_2ehpp_57',['abcgVulkanWindow.hpp',['../abcgVulkanWindow_8hpp.html',1,'']]], - ['abcgwindow_2ecpp_58',['abcgWindow.cpp',['../abcgWindow_8cpp.html',1,'']]], - ['abcgwindow_2ehpp_59',['abcgWindow.hpp',['../abcgWindow_8hpp.html',1,'']]], - ['anyhit_60',['AnyHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daafed8068cf66889c7c88bd5b7d3d02e4b',1,'abcg']]], - ['application_61',['Application',['../classabcg_1_1Application.html',1,'abcg::Application'],['../classabcg_1_1Application.html#ab8275b32a7f2ff090e15a906f5039f54',1,'abcg::Application::Application()']]], - ['attributedescriptions_62',['attributeDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#a21d205573366e2e553b04b429c129d3f',1,'abcg::VulkanPipelineCreateInfo']]] + ['abcgtimer_2ecpp_28',['abcgTimer.cpp',['../abcgTimer_8cpp.html',1,'']]], + ['abcgtimer_2ehpp_29',['abcgTimer.hpp',['../abcgTimer_8hpp.html',1,'']]], + ['abcgtrackball_2ecpp_30',['abcgTrackball.cpp',['../abcgTrackball_8cpp.html',1,'']]], + ['abcgtrackball_2ehpp_31',['abcgTrackball.hpp',['../abcgTrackball_8hpp.html',1,'']]], + ['abcgutil_2ecpp_32',['abcgUtil.cpp',['../abcgUtil_8cpp.html',1,'']]], + ['abcgutil_2ehpp_33',['abcgUtil.hpp',['../abcgUtil_8hpp.html',1,'']]], + ['abcgvulkan_2ehpp_34',['abcgVulkan.hpp',['../abcgVulkan_8hpp.html',1,'']]], + ['abcgvulkanbuffer_2ecpp_35',['abcgVulkanBuffer.cpp',['../abcgVulkanBuffer_8cpp.html',1,'']]], + ['abcgvulkanbuffer_2ehpp_36',['abcgVulkanBuffer.hpp',['../abcgVulkanBuffer_8hpp.html',1,'']]], + ['abcgvulkandevice_2ecpp_37',['abcgVulkanDevice.cpp',['../abcgVulkanDevice_8cpp.html',1,'']]], + ['abcgvulkandevice_2ehpp_38',['abcgVulkanDevice.hpp',['../abcgVulkanDevice_8hpp.html',1,'']]], + ['abcgvulkanerror_2ecpp_39',['abcgVulkanError.cpp',['../abcgVulkanError_8cpp.html',1,'']]], + ['abcgvulkanerror_2ehpp_40',['abcgVulkanError.hpp',['../abcgVulkanError_8hpp.html',1,'']]], + ['abcgvulkanexternal_2ehpp_41',['abcgVulkanExternal.hpp',['../abcgVulkanExternal_8hpp.html',1,'']]], + ['abcgvulkanimage_2ecpp_42',['abcgVulkanImage.cpp',['../abcgVulkanImage_8cpp.html',1,'']]], + ['abcgvulkanimage_2ehpp_43',['abcgVulkanImage.hpp',['../abcgVulkanImage_8hpp.html',1,'']]], + ['abcgvulkaninstance_2ecpp_44',['abcgVulkanInstance.cpp',['../abcgVulkanInstance_8cpp.html',1,'']]], + ['abcgvulkaninstance_2ehpp_45',['abcgVulkanInstance.hpp',['../abcgVulkanInstance_8hpp.html',1,'']]], + ['abcgvulkanphysicaldevice_2ecpp_46',['abcgVulkanPhysicalDevice.cpp',['../abcgVulkanPhysicalDevice_8cpp.html',1,'']]], + ['abcgvulkanphysicaldevice_2ehpp_47',['abcgVulkanPhysicalDevice.hpp',['../abcgVulkanPhysicalDevice_8hpp.html',1,'']]], + ['abcgvulkanpipeline_2ecpp_48',['abcgVulkanPipeline.cpp',['../abcgVulkanPipeline_8cpp.html',1,'']]], + ['abcgvulkanpipeline_2ehpp_49',['abcgVulkanPipeline.hpp',['../abcgVulkanPipeline_8hpp.html',1,'']]], + ['abcgvulkanshader_2ecpp_50',['abcgVulkanShader.cpp',['../abcgVulkanShader_8cpp.html',1,'']]], + ['abcgvulkanshader_2ehpp_51',['abcgVulkanShader.hpp',['../abcgVulkanShader_8hpp.html',1,'']]], + ['abcgvulkanswapchain_2ecpp_52',['abcgVulkanSwapchain.cpp',['../abcgVulkanSwapchain_8cpp.html',1,'']]], + ['abcgvulkanswapchain_2ehpp_53',['abcgVulkanSwapchain.hpp',['../abcgVulkanSwapchain_8hpp.html',1,'']]], + ['abcgvulkanwindow_2ecpp_54',['abcgVulkanWindow.cpp',['../abcgVulkanWindow_8cpp.html',1,'']]], + ['abcgvulkanwindow_2ehpp_55',['abcgVulkanWindow.hpp',['../abcgVulkanWindow_8hpp.html',1,'']]], + ['abcgwindow_2ecpp_56',['abcgWindow.cpp',['../abcgWindow_8cpp.html',1,'']]], + ['abcgwindow_2ehpp_57',['abcgWindow.hpp',['../abcgWindow_8hpp.html',1,'']]], + ['anyhit_58',['AnyHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daafed8068cf66889c7c88bd5b7d3d02e4b',1,'abcg']]], + ['application_59',['Application',['../classabcg_1_1Application.html',1,'abcg::Application'],['../classabcg_1_1Application.html#ab8275b32a7f2ff090e15a906f5039f54',1,'abcg::Application::Application()']]], + ['attributedescriptions_60',['attributeDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#a21d205573366e2e553b04b429c129d3f',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/all_1.js b/abcg/doc/html/search/all_1.js index ca9f13949..7c2349cb3 100644 --- a/abcg/doc/html/search/all_1.js +++ b/abcg/doc/html/search/all_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['bindingdescriptions_63',['bindingDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#aeceb310b6089dbc7fc03f4d4107a01bc',1,'abcg::VulkanPipelineCreateInfo']]] + ['bindingdescriptions_61',['bindingDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#aeceb310b6089dbc7fc03f4d4107a01bc',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/all_10.js b/abcg/doc/html/search/all_10.js index 9e689c3ff..d4682b368 100644 --- a/abcg/doc/html/search/all_10.js +++ b/abcg/doc/html/search/all_10.js @@ -1,4 +1,4 @@ var searchData= [ - ['usage_490',['usage',['../structabcg_1_1VulkanBufferCreateInfo.html#aac514269f34a7e48e58d483ed6936ba5',1,'abcg::VulkanBufferCreateInfo']]] + ['usage_487',['usage',['../structabcg_1_1VulkanBufferCreateInfo.html#aac514269f34a7e48e58d483ed6936ba5',1,'abcg::VulkanBufferCreateInfo']]] ]; diff --git a/abcg/doc/html/search/all_11.js b/abcg/doc/html/search/all_11.js index 34b7627b3..4f68bedca 100644 --- a/abcg/doc/html/search/all_11.js +++ b/abcg/doc/html/search/all_11.js @@ -1,26 +1,26 @@ var searchData= [ - ['vertex_491',['Vertex',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daab22b929ba52471a02d18bb3a4e4472e6',1,'abcg']]], - ['viewinfo_492',['viewInfo',['../structabcg_1_1VulkanImageCreateInfo.html#a586c6bdaa5adc45d20f905dd145aa5d6',1,'abcg::VulkanImageCreateInfo']]], - ['viewports_493',['viewports',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc507b1cea2ca3b5234548575955c40f',1,'abcg::VulkanPipelineCreateInfo']]], - ['vsync_494',['vSync',['../structabcg_1_1VulkanSettings.html#a835e8a78a2b87f3839af4fde3a4a6da3',1,'abcg::VulkanSettings::vSync()'],['../structabcg_1_1OpenGLSettings.html#a6b44d787ebf56ea516cfb5a0c87f9672',1,'abcg::OpenGLSettings::vSync()']]], - ['vulkan_5fhpp_5fno_5fconstructors_495',['VULKAN_HPP_NO_CONSTRUCTORS',['../abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f',1,'abcgVulkanExternal.hpp']]], - ['vulkanbuffer_496',['VulkanBuffer',['../classabcg_1_1VulkanBuffer.html',1,'abcg']]], - ['vulkanbuffercreateinfo_497',['VulkanBufferCreateInfo',['../structabcg_1_1VulkanBufferCreateInfo.html',1,'abcg']]], - ['vulkancommandpools_498',['VulkanCommandPools',['../structabcg_1_1VulkanCommandPools.html',1,'abcg']]], - ['vulkandevice_499',['VulkanDevice',['../classabcg_1_1VulkanDevice.html',1,'abcg']]], - ['vulkanerror_500',['VulkanError',['../classabcg_1_1VulkanError.html',1,'abcg::VulkanError'],['../classabcg_1_1VulkanError.html#aa5a0a0656ae43e62cbffd8cf4ce758ce',1,'abcg::VulkanError::VulkanError()']]], - ['vulkanframe_501',['VulkanFrame',['../structabcg_1_1VulkanFrame.html',1,'abcg']]], - ['vulkanimage_502',['VulkanImage',['../classabcg_1_1VulkanImage.html',1,'abcg']]], - ['vulkanimagecreateinfo_503',['VulkanImageCreateInfo',['../structabcg_1_1VulkanImageCreateInfo.html',1,'abcg']]], - ['vulkaninstance_504',['VulkanInstance',['../classabcg_1_1VulkanInstance.html',1,'abcg']]], - ['vulkanphysicaldevice_505',['VulkanPhysicalDevice',['../classabcg_1_1VulkanPhysicalDevice.html',1,'abcg']]], - ['vulkanpipeline_506',['VulkanPipeline',['../classabcg_1_1VulkanPipeline.html',1,'abcg']]], - ['vulkanpipelinecreateinfo_507',['VulkanPipelineCreateInfo',['../structabcg_1_1VulkanPipelineCreateInfo.html',1,'abcg']]], - ['vulkanqueues_508',['VulkanQueues',['../structabcg_1_1VulkanQueues.html',1,'abcg']]], - ['vulkanqueuesfamilies_509',['VulkanQueuesFamilies',['../structabcg_1_1VulkanQueuesFamilies.html',1,'abcg']]], - ['vulkansettings_510',['VulkanSettings',['../structabcg_1_1VulkanSettings.html',1,'abcg']]], - ['vulkanshader_511',['VulkanShader',['../classabcg_1_1VulkanShader.html',1,'abcg']]], - ['vulkanswapchain_512',['VulkanSwapchain',['../classabcg_1_1VulkanSwapchain.html',1,'abcg']]], - ['vulkanwindow_513',['VulkanWindow',['../classabcg_1_1VulkanWindow.html',1,'abcg']]] + ['vertex_488',['Vertex',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daab22b929ba52471a02d18bb3a4e4472e6',1,'abcg']]], + ['viewinfo_489',['viewInfo',['../structabcg_1_1VulkanImageCreateInfo.html#a586c6bdaa5adc45d20f905dd145aa5d6',1,'abcg::VulkanImageCreateInfo']]], + ['viewports_490',['viewports',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc507b1cea2ca3b5234548575955c40f',1,'abcg::VulkanPipelineCreateInfo']]], + ['vsync_491',['vSync',['../structabcg_1_1VulkanSettings.html#a835e8a78a2b87f3839af4fde3a4a6da3',1,'abcg::VulkanSettings::vSync()'],['../structabcg_1_1OpenGLSettings.html#a6b44d787ebf56ea516cfb5a0c87f9672',1,'abcg::OpenGLSettings::vSync()']]], + ['vulkan_5fhpp_5fno_5fconstructors_492',['VULKAN_HPP_NO_CONSTRUCTORS',['../abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f',1,'abcgVulkanExternal.hpp']]], + ['vulkanbuffer_493',['VulkanBuffer',['../classabcg_1_1VulkanBuffer.html',1,'abcg']]], + ['vulkanbuffercreateinfo_494',['VulkanBufferCreateInfo',['../structabcg_1_1VulkanBufferCreateInfo.html',1,'abcg']]], + ['vulkancommandpools_495',['VulkanCommandPools',['../structabcg_1_1VulkanCommandPools.html',1,'abcg']]], + ['vulkandevice_496',['VulkanDevice',['../classabcg_1_1VulkanDevice.html',1,'abcg']]], + ['vulkanerror_497',['VulkanError',['../classabcg_1_1VulkanError.html',1,'abcg::VulkanError'],['../classabcg_1_1VulkanError.html#aa5a0a0656ae43e62cbffd8cf4ce758ce',1,'abcg::VulkanError::VulkanError()']]], + ['vulkanframe_498',['VulkanFrame',['../structabcg_1_1VulkanFrame.html',1,'abcg']]], + ['vulkanimage_499',['VulkanImage',['../classabcg_1_1VulkanImage.html',1,'abcg']]], + ['vulkanimagecreateinfo_500',['VulkanImageCreateInfo',['../structabcg_1_1VulkanImageCreateInfo.html',1,'abcg']]], + ['vulkaninstance_501',['VulkanInstance',['../classabcg_1_1VulkanInstance.html',1,'abcg']]], + ['vulkanphysicaldevice_502',['VulkanPhysicalDevice',['../classabcg_1_1VulkanPhysicalDevice.html',1,'abcg']]], + ['vulkanpipeline_503',['VulkanPipeline',['../classabcg_1_1VulkanPipeline.html',1,'abcg']]], + ['vulkanpipelinecreateinfo_504',['VulkanPipelineCreateInfo',['../structabcg_1_1VulkanPipelineCreateInfo.html',1,'abcg']]], + ['vulkanqueues_505',['VulkanQueues',['../structabcg_1_1VulkanQueues.html',1,'abcg']]], + ['vulkanqueuesfamilies_506',['VulkanQueuesFamilies',['../structabcg_1_1VulkanQueuesFamilies.html',1,'abcg']]], + ['vulkansettings_507',['VulkanSettings',['../structabcg_1_1VulkanSettings.html',1,'abcg']]], + ['vulkanshader_508',['VulkanShader',['../classabcg_1_1VulkanShader.html',1,'abcg']]], + ['vulkanswapchain_509',['VulkanSwapchain',['../classabcg_1_1VulkanSwapchain.html',1,'abcg']]], + ['vulkanwindow_510',['VulkanWindow',['../classabcg_1_1VulkanWindow.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/all_12.js b/abcg/doc/html/search/all_12.js index e7796dd57..d88548e7b 100644 --- a/abcg/doc/html/search/all_12.js +++ b/abcg/doc/html/search/all_12.js @@ -1,8 +1,8 @@ var searchData= [ - ['what_514',['what',['../classabcg_1_1Exception.html#ac29321e33a5280ecdc5c59405f08c080',1,'abcg::Exception']]], - ['width_515',['width',['../structabcg_1_1WindowSettings.html#ada062b6fe2f5b26d0088af70bb790c36',1,'abcg::WindowSettings']]], - ['window_516',['Window',['../classabcg_1_1Window.html',1,'abcg::Window'],['../classabcg_1_1Window.html#aa702b018021cfe38c189dc966d8ac6cf',1,'abcg::Window::Window()=default'],['../classabcg_1_1Window.html#aa8b9f266a2a760f8c28eedab86bada48',1,'abcg::Window::Window(Window const &)=delete'],['../classabcg_1_1Window.html#a15e6b232cf072323945cf357425b24e0',1,'abcg::Window::Window(Window &&)=default']]], - ['windowsettings_517',['WindowSettings',['../structabcg_1_1WindowSettings.html',1,'abcg']]], - ['withcommandbuffer_518',['withCommandBuffer',['../classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc',1,'abcg::VulkanDevice']]] + ['what_511',['what',['../classabcg_1_1Exception.html#a2570f60fe3573e51566430f5a7c5f5fb',1,'abcg::Exception']]], + ['width_512',['width',['../structabcg_1_1WindowSettings.html#ada062b6fe2f5b26d0088af70bb790c36',1,'abcg::WindowSettings']]], + ['window_513',['Window',['../classabcg_1_1Window.html',1,'abcg::Window'],['../classabcg_1_1Window.html#aa702b018021cfe38c189dc966d8ac6cf',1,'abcg::Window::Window()=default'],['../classabcg_1_1Window.html#aa8b9f266a2a760f8c28eedab86bada48',1,'abcg::Window::Window(Window const &)=delete'],['../classabcg_1_1Window.html#a15e6b232cf072323945cf357425b24e0',1,'abcg::Window::Window(Window &&)=default']]], + ['windowsettings_514',['WindowSettings',['../structabcg_1_1WindowSettings.html',1,'abcg']]], + ['withcommandbuffer_515',['withCommandBuffer',['../classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc',1,'abcg::VulkanDevice']]] ]; diff --git a/abcg/doc/html/search/all_13.js b/abcg/doc/html/search/all_13.js index 24f7fb0d5..116451f8f 100644 --- a/abcg/doc/html/search/all_13.js +++ b/abcg/doc/html/search/all_13.js @@ -1,4 +1,4 @@ var searchData= [ - ['_7ewindow_519',['~Window',['../classabcg_1_1Window.html#aa992bd26564502aa09ff727c39e1088f',1,'abcg::Window']]] + ['_7ewindow_516',['~Window',['../classabcg_1_1Window.html#aa992bd26564502aa09ff727c39e1088f',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/all_2.js b/abcg/doc/html/search/all_2.js index 559153947..c02267d34 100644 --- a/abcg/doc/html/search/all_2.js +++ b/abcg/doc/html/search/all_2.js @@ -1,29 +1,25 @@ var searchData= [ - ['callable_64',['Callable',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa79ace5b2a7206c5d0aa286a5b33385f8',1,'abcg']]], - ['callgl_65',['callGL',['../namespaceabcg.html#a59fd1679b061fafcc7c087404e3e3ed1',1,'abcg']]], - ['changelog_2emd_66',['CHANGELOG.md',['../CHANGELOG_8md.html',1,'']]], - ['checkglerror_67',['checkGLError',['../namespaceabcg.html#a319c7bd437a23751054bc1d092d9e0ae',1,'abcg']]], - ['checkopenglshadercompile_68',['checkOpenGLShaderCompile',['../namespaceabcg.html#ada2b3e076d6fe0c4dd27615e7f4d4d50',1,'abcg']]], - ['checkopenglshaderlink_69',['checkOpenGLShaderLink',['../namespaceabcg.html#aab59a12bb6313b5c58f5352ce6f380e5',1,'abcg']]], - ['checkrebuild_70',['checkRebuild',['../classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4',1,'abcg::VulkanSwapchain']]], - ['checkvkresult_71',['checkVkResult',['../namespaceabcg.html#a6dc603716e2c0c5a9ee71ff1ca9881d9',1,'abcg']]], - ['chooseswapextent_72',['chooseSwapExtent',['../abcgVulkanSwapchain_8cpp.html#a39a911060dac4822e4f53788fe57c7b0',1,'abcgVulkanSwapchain.cpp']]], - ['chooseswappresentmode_73',['chooseSwapPresentMode',['../abcgVulkanSwapchain_8cpp.html#a4074f1e431857e425c4dfe6ba27069a9',1,'abcgVulkanSwapchain.cpp']]], - ['chooseswapsurfaceformat_74',['chooseSwapSurfaceFormat',['../abcgVulkanSwapchain_8cpp.html#a1483e553cb233562ff7ae7efcf60e5e0',1,'abcgVulkanSwapchain.cpp']]], - ['closesthit_75',['ClosestHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad4fcd21286c099405aff8d6b04c76575',1,'abcg']]], - ['colorblendattachment_76',['colorBlendAttachment',['../structabcg_1_1VulkanPipelineCreateInfo.html#aa5ea15999850fa2dfe34904cc2967dcf',1,'abcg::VulkanPipelineCreateInfo']]], - ['colorblendstate_77',['colorBlendState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a8f619f17d792103695630434e5ffa8b2',1,'abcg::VulkanPipelineCreateInfo']]], - ['colorimage_78',['colorImage',['../structabcg_1_1VulkanFrame.html#a4d4e911f29fb4da4c62f3f7af4607f79',1,'abcg::VulkanFrame']]], - ['commandbuffer_79',['commandBuffer',['../structabcg_1_1VulkanFrame.html#a09e1b9bef7c11ce5217a30e2d60cf020',1,'abcg::VulkanFrame']]], - ['commandbufferui_80',['commandBufferUI',['../structabcg_1_1VulkanFrame.html#a78141c209406580fe7b7b308a89e5aa4',1,'abcg::VulkanFrame']]], - ['commandpool_81',['commandPool',['../structabcg_1_1VulkanFrame.html#aeb73ab1a9f74961233d4b29a563aef89',1,'abcg::VulkanFrame']]], - ['compatibility_82',['Compatibility',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328eadf9c715f20aaf58fb3926cc02b08ec53',1,'abcg']]], - ['compute_83',['compute',['../structabcg_1_1VulkanCommandPools.html#ae92fad133885626122607f37761b39ca',1,'abcg::VulkanCommandPools']]], - ['compute_84',['Compute',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa623a8d0366bf079411aa30be45b2d10',1,'abcg']]], - ['compute_85',['compute',['../structabcg_1_1VulkanQueuesFamilies.html#a5079aa2f106d59fd3c437f0b8d982594',1,'abcg::VulkanQueuesFamilies::compute()'],['../structabcg_1_1VulkanQueues.html#ad4407f2456a1102537909ac3fef5928a',1,'abcg::VulkanQueues::compute()']]], - ['core_86',['Core',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea83168e6cb289d732cc78427b51f93153',1,'abcg']]], - ['create_87',['create',['../classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2',1,'abcg::VulkanShader::create()'],['../classabcg_1_1Window.html#aae2263884294b506d2ffec789d3d4d9e',1,'abcg::Window::create()'],['../classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31',1,'abcg::VulkanSwapchain::create()'],['../classabcg_1_1VulkanPipeline.html#a743747edda95318ed91afe853d2a71c0',1,'abcg::VulkanPipeline::create()'],['../classabcg_1_1VulkanPhysicalDevice.html#ae39f878f560e709b08b634314d28d730',1,'abcg::VulkanPhysicalDevice::create()'],['../classabcg_1_1VulkanInstance.html#abdd4efd069ddeb2937f6771897765730',1,'abcg::VulkanInstance::create()'],['../classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b',1,'abcg::VulkanImage::create(VulkanDevice const &device, VulkanImageCreateInfo const &createInfo)'],['../classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d',1,'abcg::VulkanImage::create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)'],['../classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029',1,'abcg::VulkanDevice::create()'],['../classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7',1,'abcg::VulkanBuffer::create()']]], - ['createopenglprogram_88',['createOpenGLProgram',['../namespaceabcg.html#ac5dc51412a57521944dc7f4f32901af5',1,'abcg']]], - ['createsdlwindow_89',['createSDLWindow',['../classabcg_1_1Window.html#a0f9ac50c1babc71e1ac22207b4ccb48e',1,'abcg::Window']]] + ['callable_62',['Callable',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa79ace5b2a7206c5d0aa286a5b33385f8',1,'abcg']]], + ['callgl_63',['callGL',['../namespaceabcg.html#a59fd1679b061fafcc7c087404e3e3ed1',1,'abcg']]], + ['changelog_2emd_64',['CHANGELOG.md',['../CHANGELOG_8md.html',1,'']]], + ['checkglerror_65',['checkGLError',['../namespaceabcg.html#a319c7bd437a23751054bc1d092d9e0ae',1,'abcg']]], + ['checkopenglshadercompile_66',['checkOpenGLShaderCompile',['../namespaceabcg.html#ada2b3e076d6fe0c4dd27615e7f4d4d50',1,'abcg']]], + ['checkopenglshaderlink_67',['checkOpenGLShaderLink',['../namespaceabcg.html#aab59a12bb6313b5c58f5352ce6f380e5',1,'abcg']]], + ['checkrebuild_68',['checkRebuild',['../classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4',1,'abcg::VulkanSwapchain']]], + ['checkvkresult_69',['checkVkResult',['../namespaceabcg.html#a6dc603716e2c0c5a9ee71ff1ca9881d9',1,'abcg']]], + ['closesthit_70',['ClosestHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad4fcd21286c099405aff8d6b04c76575',1,'abcg']]], + ['colorblendattachment_71',['colorBlendAttachment',['../structabcg_1_1VulkanPipelineCreateInfo.html#aa5ea15999850fa2dfe34904cc2967dcf',1,'abcg::VulkanPipelineCreateInfo']]], + ['colorblendstate_72',['colorBlendState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a8f619f17d792103695630434e5ffa8b2',1,'abcg::VulkanPipelineCreateInfo']]], + ['colorimage_73',['colorImage',['../structabcg_1_1VulkanFrame.html#a4d4e911f29fb4da4c62f3f7af4607f79',1,'abcg::VulkanFrame']]], + ['commandbuffer_74',['commandBuffer',['../structabcg_1_1VulkanFrame.html#a09e1b9bef7c11ce5217a30e2d60cf020',1,'abcg::VulkanFrame']]], + ['commandbufferui_75',['commandBufferUI',['../structabcg_1_1VulkanFrame.html#a78141c209406580fe7b7b308a89e5aa4',1,'abcg::VulkanFrame']]], + ['commandpool_76',['commandPool',['../structabcg_1_1VulkanFrame.html#aeb73ab1a9f74961233d4b29a563aef89',1,'abcg::VulkanFrame']]], + ['compatibility_77',['Compatibility',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328eadf9c715f20aaf58fb3926cc02b08ec53',1,'abcg']]], + ['compute_78',['compute',['../structabcg_1_1VulkanCommandPools.html#ae92fad133885626122607f37761b39ca',1,'abcg::VulkanCommandPools::compute()'],['../structabcg_1_1VulkanQueues.html#ad4407f2456a1102537909ac3fef5928a',1,'abcg::VulkanQueues::compute()'],['../structabcg_1_1VulkanQueuesFamilies.html#a5079aa2f106d59fd3c437f0b8d982594',1,'abcg::VulkanQueuesFamilies::compute()']]], + ['compute_79',['Compute',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa623a8d0366bf079411aa30be45b2d10',1,'abcg']]], + ['core_80',['Core',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea83168e6cb289d732cc78427b51f93153',1,'abcg']]], + ['create_81',['create',['../classabcg_1_1VulkanPhysicalDevice.html#ae39f878f560e709b08b634314d28d730',1,'abcg::VulkanPhysicalDevice::create()'],['../classabcg_1_1Window.html#aae2263884294b506d2ffec789d3d4d9e',1,'abcg::Window::create()'],['../classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31',1,'abcg::VulkanSwapchain::create()'],['../classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2',1,'abcg::VulkanShader::create()'],['../classabcg_1_1VulkanPipeline.html#a743747edda95318ed91afe853d2a71c0',1,'abcg::VulkanPipeline::create()'],['../classabcg_1_1VulkanInstance.html#abdd4efd069ddeb2937f6771897765730',1,'abcg::VulkanInstance::create()'],['../classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b',1,'abcg::VulkanImage::create(VulkanDevice const &device, VulkanImageCreateInfo const &createInfo)'],['../classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d',1,'abcg::VulkanImage::create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)'],['../classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029',1,'abcg::VulkanDevice::create()'],['../classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7',1,'abcg::VulkanBuffer::create()']]], + ['createopenglprogram_82',['createOpenGLProgram',['../namespaceabcg.html#ac5dc51412a57521944dc7f4f32901af5',1,'abcg']]], + ['createsdlwindow_83',['createSDLWindow',['../classabcg_1_1Window.html#a0f9ac50c1babc71e1ac22207b4ccb48e',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/all_3.js b/abcg/doc/html/search/all_3.js index e771fc22b..7803974ca 100644 --- a/abcg/doc/html/search/all_3.js +++ b/abcg/doc/html/search/all_3.js @@ -1,9 +1,9 @@ var searchData= [ - ['data_90',['data',['../structabcg_1_1VulkanBufferCreateInfo.html#aa4f7f6a94fa3ce7cf7aef99afa16ac5f',1,'abcg::VulkanBufferCreateInfo']]], - ['depthbuffersize_91',['depthBufferSize',['../structabcg_1_1OpenGLSettings.html#a7e55ed42551b900cad40fc62f625350a',1,'abcg::OpenGLSettings::depthBufferSize()'],['../structabcg_1_1VulkanSettings.html#a07bf4a2018e4c5e448aa7e6685a7885b',1,'abcg::VulkanSettings::depthBufferSize()']]], - ['depthstencilstate_92',['depthStencilState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a975155f44a0ef2085102344e6e1f0fa5',1,'abcg::VulkanPipelineCreateInfo']]], - ['destroy_93',['destroy',['../classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae',1,'abcg::VulkanBuffer::destroy()'],['../classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4',1,'abcg::VulkanDevice::destroy()'],['../classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379',1,'abcg::VulkanImage::destroy()'],['../classabcg_1_1VulkanInstance.html#a617850d1b31fc2b4960951ff839f5168',1,'abcg::VulkanInstance::destroy()'],['../classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281',1,'abcg::VulkanPhysicalDevice::destroy()'],['../classabcg_1_1VulkanPipeline.html#a15da4398f57661508f2585c552c23cac',1,'abcg::VulkanPipeline::destroy()'],['../classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1',1,'abcg::VulkanShader::destroy()'],['../classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa',1,'abcg::VulkanSwapchain::destroy()'],['../classabcg_1_1Window.html#a93a2812c3be1df4d1fd92f1db13e4e1f',1,'abcg::Window::destroy()']]], - ['doublebuffering_94',['doubleBuffering',['../structabcg_1_1OpenGLSettings.html#a803c16f1fb40cc35f125722fa38e4338',1,'abcg::OpenGLSettings']]], - ['dynamicstates_95',['dynamicStates',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc27c6b72ac275c76b7edc49b00a2ecd',1,'abcg::VulkanPipelineCreateInfo']]] + ['data_84',['data',['../structabcg_1_1VulkanBufferCreateInfo.html#aa4f7f6a94fa3ce7cf7aef99afa16ac5f',1,'abcg::VulkanBufferCreateInfo']]], + ['depthbuffersize_85',['depthBufferSize',['../structabcg_1_1OpenGLSettings.html#a7e55ed42551b900cad40fc62f625350a',1,'abcg::OpenGLSettings::depthBufferSize()'],['../structabcg_1_1VulkanSettings.html#a07bf4a2018e4c5e448aa7e6685a7885b',1,'abcg::VulkanSettings::depthBufferSize()']]], + ['depthstencilstate_86',['depthStencilState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a975155f44a0ef2085102344e6e1f0fa5',1,'abcg::VulkanPipelineCreateInfo']]], + ['destroy_87',['destroy',['../classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae',1,'abcg::VulkanBuffer::destroy()'],['../classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4',1,'abcg::VulkanDevice::destroy()'],['../classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379',1,'abcg::VulkanImage::destroy()'],['../classabcg_1_1VulkanInstance.html#a617850d1b31fc2b4960951ff839f5168',1,'abcg::VulkanInstance::destroy()'],['../classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281',1,'abcg::VulkanPhysicalDevice::destroy()'],['../classabcg_1_1VulkanPipeline.html#a15da4398f57661508f2585c552c23cac',1,'abcg::VulkanPipeline::destroy()'],['../classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1',1,'abcg::VulkanShader::destroy()'],['../classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa',1,'abcg::VulkanSwapchain::destroy()'],['../classabcg_1_1Window.html#a93a2812c3be1df4d1fd92f1db13e4e1f',1,'abcg::Window::destroy()']]], + ['doublebuffering_88',['doubleBuffering',['../structabcg_1_1OpenGLSettings.html#a803c16f1fb40cc35f125722fa38e4338',1,'abcg::OpenGLSettings']]], + ['dynamicstates_89',['dynamicStates',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc27c6b72ac275c76b7edc49b00a2ecd',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/all_4.js b/abcg/doc/html/search/all_4.js index eb4adce00..5ab49fd2c 100644 --- a/abcg/doc/html/search/all_4.js +++ b/abcg/doc/html/search/all_4.js @@ -1,6 +1,6 @@ var searchData= [ - ['elapsed_96',['elapsed',['../classabcg_1_1Timer.html#a70a10ae27c24c5d559c688d7abe0a62e',1,'abcg::Timer']]], - ['es_97',['ES',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea04c19fa1e772ab66f0aad2efe61f25cd',1,'abcg']]], - ['exception_98',['Exception',['../classabcg_1_1Exception.html',1,'abcg::Exception'],['../classabcg_1_1Exception.html#a264c852c597e5fad26cee2090b7ebd71',1,'abcg::Exception::Exception()']]] + ['elapsed_90',['elapsed',['../classabcg_1_1Timer.html#a70a10ae27c24c5d559c688d7abe0a62e',1,'abcg::Timer']]], + ['es_91',['ES',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea04c19fa1e772ab66f0aad2efe61f25cd',1,'abcg']]], + ['exception_92',['Exception',['../classabcg_1_1Exception.html',1,'abcg::Exception'],['../classabcg_1_1Exception.html#a264c852c597e5fad26cee2090b7ebd71',1,'abcg::Exception::Exception()']]] ]; diff --git a/abcg/doc/html/search/all_5.js b/abcg/doc/html/search/all_5.js index a43775a28..5d42452b9 100644 --- a/abcg/doc/html/search/all_5.js +++ b/abcg/doc/html/search/all_5.js @@ -1,11 +1,11 @@ var searchData= [ - ['fence_99',['fence',['../structabcg_1_1VulkanFrame.html#a588976a9c273de75dec81028086c6fc3',1,'abcg::VulkanFrame']]], - ['findmemorytype_100',['findMemoryType',['../classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864',1,'abcg::VulkanPhysicalDevice']]], - ['fliphorizontally_101',['flipHorizontally',['../namespaceabcg.html#a0d46e744a39225a18d381362cea62104',1,'abcg']]], - ['flipupsidedown_102',['flipUpsideDown',['../structabcg_1_1OpenGLTextureCreateInfo.html#addabf0f11e77eb4e2605940ec91a1dad',1,'abcg::OpenGLTextureCreateInfo']]], - ['flipvertically_103',['flipVertically',['../namespaceabcg.html#abc2b77e7547e5e73f00d7167f7a2f6b9',1,'abcg']]], - ['fragment_104',['Fragment',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa37d01b98065725fe3a1d30acf3a0064a',1,'abcg']]], - ['framebuffermain_105',['framebufferMain',['../structabcg_1_1VulkanFrame.html#aba1f36e936ceaff0f968d8e234d8f820',1,'abcg::VulkanFrame']]], - ['fullscreenelementid_106',['fullscreenElementID',['../structabcg_1_1WindowSettings.html#a63c8ca61aba15173b7875a02ab16b19a',1,'abcg::WindowSettings']]] + ['fence_93',['fence',['../structabcg_1_1VulkanFrame.html#a588976a9c273de75dec81028086c6fc3',1,'abcg::VulkanFrame']]], + ['findmemorytype_94',['findMemoryType',['../classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864',1,'abcg::VulkanPhysicalDevice']]], + ['fliphorizontally_95',['flipHorizontally',['../namespaceabcg.html#a070a6d04f8ddd3f8ffc85556822ad9b9',1,'abcg']]], + ['flipupsidedown_96',['flipUpsideDown',['../structabcg_1_1OpenGLTextureCreateInfo.html#addabf0f11e77eb4e2605940ec91a1dad',1,'abcg::OpenGLTextureCreateInfo']]], + ['flipvertically_97',['flipVertically',['../namespaceabcg.html#afbf3c358b10f7ef9aef38acb758e12ca',1,'abcg']]], + ['fragment_98',['Fragment',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa37d01b98065725fe3a1d30acf3a0064a',1,'abcg']]], + ['framebuffermain_99',['framebufferMain',['../structabcg_1_1VulkanFrame.html#aba1f36e936ceaff0f968d8e234d8f820',1,'abcg::VulkanFrame']]], + ['fullscreenelementid_100',['fullscreenElementID',['../structabcg_1_1WindowSettings.html#a63c8ca61aba15173b7875a02ab16b19a',1,'abcg::WindowSettings']]] ]; diff --git a/abcg/doc/html/search/all_6.js b/abcg/doc/html/search/all_6.js index 5684e444c..688bdb04f 100644 --- a/abcg/doc/html/search/all_6.js +++ b/abcg/doc/html/search/all_6.js @@ -1,293 +1,293 @@ var searchData= [ - ['generatemipmaps_107',['generateMipmaps',['../structabcg_1_1OpenGLCubemapCreateInfo.html#affcc0a8f16f52376045888f01dad8563',1,'abcg::OpenGLCubemapCreateInfo::generateMipmaps()'],['../structabcg_1_1OpenGLTextureCreateInfo.html#aeb7ce4f29f2ecf6f4866a3448b73313f',1,'abcg::OpenGLTextureCreateInfo::generateMipmaps()']]], - ['geometry_108',['Geometry',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad9c6333623e6357515fcbf17be806273',1,'abcg']]], - ['getassetspath_109',['getAssetsPath',['../classabcg_1_1Application.html#ac3a160375fdb03e43e2de2094cc3a4e3',1,'abcg::Application']]], - ['getbasepath_110',['getBasePath',['../classabcg_1_1Application.html#a5f14e501676cbed3477be9b5480db0e5',1,'abcg::Application']]], - ['getcommandpools_111',['getCommandPools',['../classabcg_1_1VulkanDevice.html#a40fe31ba2c810b100061d0cfa6a2c5f6',1,'abcg::VulkanDevice']]], - ['getcurrentframe_112',['getCurrentFrame',['../classabcg_1_1VulkanSwapchain.html#aed9fd2ce2e49224f06e62c338ebde323',1,'abcg::VulkanSwapchain']]], - ['getdeltatime_113',['getDeltaTime',['../classabcg_1_1Window.html#a084f822db9d33093e6940e312e3cf5b2',1,'abcg::Window']]], - ['getdepthimage_114',['getDepthImage',['../classabcg_1_1VulkanSwapchain.html#a66fcdb5540a5c1a8ce5ac8d0b6d47ef3',1,'abcg::VulkanSwapchain']]], - ['getdescriptorimageinfo_115',['getDescriptorImageInfo',['../classabcg_1_1VulkanImage.html#ae0aa098edfcb6c4902ad843dbf79b741',1,'abcg::VulkanImage']]], - ['getdevice_116',['getDevice',['../classabcg_1_1VulkanSwapchain.html#a09e59e721c2b09e7742e96dbeb6ec0e9',1,'abcg::VulkanSwapchain::getDevice()'],['../classabcg_1_1VulkanWindow.html#ac74b4486f3c601741688ae08b7b7e90f',1,'abcg::VulkanWindow::getDevice()']]], - ['getdevicememory_117',['getDeviceMemory',['../classabcg_1_1VulkanBuffer.html#a92490ce5ab81e5f962670192df1bcec4',1,'abcg::VulkanBuffer::getDeviceMemory()'],['../classabcg_1_1VulkanImage.html#af3b59382ddb59c35e3562bc17c3be590',1,'abcg::VulkanImage::getDeviceMemory()']]], - ['getelapsedtime_118',['getElapsedTime',['../classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe',1,'abcg::Window']]], - ['getextent_119',['getExtent',['../classabcg_1_1VulkanSwapchain.html#a2d7261f5e89166e310d5d0351a1f287c',1,'abcg::VulkanSwapchain']]], - ['getfirstsupportedformat_120',['getFirstSupportedFormat',['../classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32',1,'abcg::VulkanPhysicalDevice']]], - ['getframes_121',['getFrames',['../classabcg_1_1VulkanSwapchain.html#a870927d139c2021bf8d0090ec1799b07',1,'abcg::VulkanSwapchain']]], - ['getinstance_122',['getInstance',['../classabcg_1_1VulkanPhysicalDevice.html#a7fe5eff938f226bc44dea0e05d0fedc2',1,'abcg::VulkanPhysicalDevice']]], - ['getlayout_123',['getLayout',['../classabcg_1_1VulkanPipeline.html#a9b58d66a31560dd3ddd018100c2dc79e',1,'abcg::VulkanPipeline']]], - ['getmainrenderpass_124',['getMainRenderPass',['../classabcg_1_1VulkanSwapchain.html#a6d193ee181bbbcedca6638e3f7f595e2',1,'abcg::VulkanSwapchain']]], - ['getmiplevels_125',['getMipLevels',['../classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5',1,'abcg::VulkanImage']]], - ['getmodule_126',['getModule',['../classabcg_1_1VulkanShader.html#a3d29eca130a1ecf86a75b594d6702878',1,'abcg::VulkanShader']]], - ['getopenglsettings_127',['getOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#a83705042db987f58079d7bb16333ab9e',1,'abcg::OpenGLWindow']]], - ['getphysicaldevice_128',['getPhysicalDevice',['../classabcg_1_1VulkanDevice.html#a278ccf59c43ee9a4b3c660eaf02bed99',1,'abcg::VulkanDevice::getPhysicalDevice()'],['../classabcg_1_1VulkanWindow.html#a4c2e111472f49a4636eed52d816081fc',1,'abcg::VulkanWindow::getPhysicalDevice()']]], - ['getqueues_129',['getQueues',['../classabcg_1_1VulkanDevice.html#a50eaa1dc2e76927325d174d24a7e18c9',1,'abcg::VulkanDevice']]], - ['getqueuesfamilies_130',['getQueuesFamilies',['../classabcg_1_1VulkanPhysicalDevice.html#aae28731aa415700f866860e3cd97f2c5',1,'abcg::VulkanPhysicalDevice']]], - ['getrotation_131',['getRotation',['../classabcg_1_1TrackBall.html#a5801a1f9825c5ee5fae329406f4b4264',1,'abcg::TrackBall']]], - ['getsamplecount_132',['getSampleCount',['../classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4',1,'abcg::VulkanPhysicalDevice']]], - ['getsdlwindow_133',['getSDLWindow',['../classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c',1,'abcg::Window']]], - ['getsdlwindowid_134',['getSDLWindowID',['../classabcg_1_1Window.html#a6bc85489a6372037ebb5946eb20cbeaf',1,'abcg::Window']]], - ['getstage_135',['getStage',['../classabcg_1_1VulkanShader.html#ad5666c31f864d9cbc7cf52fef5d8a850',1,'abcg::VulkanShader']]], - ['getsurfacekhr_136',['getSurfaceKHR',['../classabcg_1_1VulkanPhysicalDevice.html#adc24018e5fc3b25bbc930c1e5ae221c8',1,'abcg::VulkanPhysicalDevice']]], - ['getswapchain_137',['getSwapchain',['../classabcg_1_1VulkanWindow.html#a55734ede91798cfe390e0b2b14cb971e',1,'abcg::VulkanWindow']]], - ['getuirenderpass_138',['getUIRenderPass',['../classabcg_1_1VulkanSwapchain.html#abe9e7f094e862c4894d50f53fd121b35',1,'abcg::VulkanSwapchain']]], - ['getview_139',['getView',['../classabcg_1_1VulkanImage.html#ac9e43199ef73da1e4d033d3857b7275d',1,'abcg::VulkanImage']]], - ['getvulkansettings_140',['getVulkanSettings',['../classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5',1,'abcg::VulkanWindow']]], - ['getwindowsettings_141',['getWindowSettings',['../classabcg_1_1Window.html#a8bbd4003a05c63ace76c08146b734679',1,'abcg::Window']]], - ['getwindowsize_142',['getWindowSize',['../classabcg_1_1Window.html#adf143544a9b62c5c838768a7b446162c',1,'abcg::Window']]], - ['glactivetexture_143',['glActiveTexture',['../namespaceabcg.html#abebf61480d8b46ad61238624521c440c',1,'abcg']]], - ['glattachshader_144',['glAttachShader',['../namespaceabcg.html#aadc675d08443dfb3f52d136d1e867c54',1,'abcg']]], - ['glbeginquery_145',['glBeginQuery',['../namespaceabcg.html#a43ea888d5366cd13f8559ae5c45e503e',1,'abcg']]], - ['glbegintransformfeedback_146',['glBeginTransformFeedback',['../namespaceabcg.html#a4284264dbf0f5c318686f11bce8183cf',1,'abcg']]], - ['glbindattriblocation_147',['glBindAttribLocation',['../namespaceabcg.html#ae5d99843e0bc8a0c59503a2530d56d48',1,'abcg']]], - ['glbindbuffer_148',['glBindBuffer',['../namespaceabcg.html#a3cd63c5a736b0e401ad6e4ab6ea1ec41',1,'abcg']]], - ['glbindbufferbase_149',['glBindBufferBase',['../namespaceabcg.html#aa48f81c11025d9e8fc04c681932392ad',1,'abcg']]], - ['glbindbufferrange_150',['glBindBufferRange',['../namespaceabcg.html#a88b58e0a1d0a1aa9d68a0e19e78657ce',1,'abcg']]], - ['glbindfragdatalocation_151',['glBindFragDataLocation',['../namespaceabcg.html#a3f007c8f6d4d4ed049b66e03328d5b30',1,'abcg']]], - ['glbindframebuffer_152',['glBindFramebuffer',['../namespaceabcg.html#aaef0756c5e371e4b80f652586438b594',1,'abcg']]], - ['glbindrenderbuffer_153',['glBindRenderbuffer',['../namespaceabcg.html#aa2ee20f9a4dfcf2e740b00b08fb46b3e',1,'abcg']]], - ['glbindsampler_154',['glBindSampler',['../namespaceabcg.html#afb3c84a308e303b503c6f0cdefd5f426',1,'abcg']]], - ['glbindtexture_155',['glBindTexture',['../namespaceabcg.html#adb43c7b544c334de5da3f6c2c30570ae',1,'abcg']]], - ['glbindtransformfeedback_156',['glBindTransformFeedback',['../namespaceabcg.html#a8881b494dbdda2e680d2abf82dccadd9',1,'abcg']]], - ['glbindvertexarray_157',['glBindVertexArray',['../namespaceabcg.html#afe4c4f9e797dcd01910528c13ff471d4',1,'abcg']]], - ['glblendcolor_158',['glBlendColor',['../namespaceabcg.html#af87c9f438750ec5baa88caa3e204469c',1,'abcg']]], - ['glblendequation_159',['glBlendEquation',['../namespaceabcg.html#afa82d1d244c12d3f884e674b79a04f3e',1,'abcg']]], - ['glblendequationseparate_160',['glBlendEquationSeparate',['../namespaceabcg.html#a2e813667e01f4ea1e3a4ca5a16d4847e',1,'abcg']]], - ['glblendfunc_161',['glBlendFunc',['../namespaceabcg.html#a620308c51e62a88d78f44312b8931947',1,'abcg']]], - ['glblendfuncseparate_162',['glBlendFuncSeparate',['../namespaceabcg.html#a1156c925b568620ac51f94893db587ac',1,'abcg']]], - ['glblitframebuffer_163',['glBlitFramebuffer',['../namespaceabcg.html#aee53221fba9cbf13c75d78c9533da27b',1,'abcg']]], - ['glbufferdata_164',['glBufferData',['../namespaceabcg.html#a402e5079e8489cb8df8e3a6c5fcdbebf',1,'abcg']]], - ['glbuffersubdata_165',['glBufferSubData',['../namespaceabcg.html#af7091aa59a245999d277ec71e54b687f',1,'abcg']]], - ['glcheckframebufferstatus_166',['glCheckFramebufferStatus',['../namespaceabcg.html#a14b00e8df85dc5b1930b051be0f6a13d',1,'abcg']]], - ['glclear_167',['glClear',['../namespaceabcg.html#a37cf087e190d68ae489d69c1c7fb8c1a',1,'abcg']]], - ['glclearbufferfi_168',['glClearBufferfi',['../namespaceabcg.html#afd3d4e6a15e37502f806875152c161ec',1,'abcg']]], - ['glclearbufferfv_169',['glClearBufferfv',['../namespaceabcg.html#a4ee2c8db262e80410ae7a854d16c8637',1,'abcg']]], - ['glclearbufferiv_170',['glClearBufferiv',['../namespaceabcg.html#a1b9de47c64a177ed5daf99eeee3c3f05',1,'abcg']]], - ['glclearbufferuiv_171',['glClearBufferuiv',['../namespaceabcg.html#a9e5f02ca43e19e99dc0681be375b453d',1,'abcg']]], - ['glclearcolor_172',['glClearColor',['../namespaceabcg.html#a71881ed09c733ef5db9301bfee7a2f5f',1,'abcg']]], - ['glcleardepthf_173',['glClearDepthf',['../namespaceabcg.html#ace2477348a520f6b554b8b34662c53ac',1,'abcg']]], - ['glclearstencil_174',['glClearStencil',['../namespaceabcg.html#a3a4d7f77a063949bb602ac36ecc44319',1,'abcg']]], - ['glclientwaitsync_175',['glClientWaitSync',['../namespaceabcg.html#a4f8e59d6c10733d194fc5a329e52245f',1,'abcg']]], - ['glcolormask_176',['glColorMask',['../namespaceabcg.html#a41326750eb174903b1bf4119b7f33e96',1,'abcg']]], - ['glcompileshader_177',['glCompileShader',['../namespaceabcg.html#a9ab713ec7c6e93a8f09b5278133dfcf7',1,'abcg']]], - ['glcompressedteximage2d_178',['glCompressedTexImage2D',['../namespaceabcg.html#aca8b5cd79464cb9dcb6bc0c2261407f1',1,'abcg']]], - ['glcompressedteximage3d_179',['glCompressedTexImage3D',['../namespaceabcg.html#ad7bbab39db44f5da2ba62fe1de5a9dba',1,'abcg']]], - ['glcompressedtexsubimage2d_180',['glCompressedTexSubImage2D',['../namespaceabcg.html#a7a481529107e6f722c37ac9d559fc671',1,'abcg']]], - ['glcompressedtexsubimage3d_181',['glCompressedTexSubImage3D',['../namespaceabcg.html#a96b8b60242b097fb74451d423dc79fae',1,'abcg']]], - ['glcopybuffersubdata_182',['glCopyBufferSubData',['../namespaceabcg.html#a914c501ed0eff87b4474d1594ecc2f04',1,'abcg']]], - ['glcopyteximage2d_183',['glCopyTexImage2D',['../namespaceabcg.html#a8788882dedc9d5a598dfad1f21f9d6eb',1,'abcg']]], - ['glcopytexsubimage2d_184',['glCopyTexSubImage2D',['../namespaceabcg.html#ab7826bb1da6c947977b5644c00538540',1,'abcg']]], - ['glcopytexsubimage3d_185',['glCopyTexSubImage3D',['../namespaceabcg.html#a9c896be2e2c6b41db3e1f4891e27bf8d',1,'abcg']]], - ['glcreateprogram_186',['glCreateProgram',['../namespaceabcg.html#a2449fe3ff11796b682ca51d2611e0f8c',1,'abcg']]], - ['glcreateshader_187',['glCreateShader',['../namespaceabcg.html#a62dfd7c0cdb61a2971697e3980094a0e',1,'abcg']]], - ['glcullface_188',['glCullFace',['../namespaceabcg.html#a1daed0c2b70ea52f0436053095125e44',1,'abcg']]], - ['gldeletebuffers_189',['glDeleteBuffers',['../namespaceabcg.html#aab8d9786020b3f0a4a3f3a969579741c',1,'abcg']]], - ['gldeleteframebuffers_190',['glDeleteFramebuffers',['../namespaceabcg.html#a6c490c5eb7640f40ae09f87b0c52d81e',1,'abcg']]], - ['gldeleteprogram_191',['glDeleteProgram',['../namespaceabcg.html#a1c0feac412868f91511bc6cee51c0472',1,'abcg']]], - ['gldeletequeries_192',['glDeleteQueries',['../namespaceabcg.html#a6ce400968a396129fa47a1f2afa4f3da',1,'abcg']]], - ['gldeleterenderbuffers_193',['glDeleteRenderbuffers',['../namespaceabcg.html#aecca79eb3f54538532577cf2a21e067f',1,'abcg']]], - ['gldeletesamplers_194',['glDeleteSamplers',['../namespaceabcg.html#a8d2a8ddcaa0d34736ef16578f2d159a2',1,'abcg']]], - ['gldeleteshader_195',['glDeleteShader',['../namespaceabcg.html#ad378a150bf0c2b569ff5b22cd435acd6',1,'abcg']]], - ['gldeletesync_196',['glDeleteSync',['../namespaceabcg.html#a2f41106aca8b0948e9fb61a623413d08',1,'abcg']]], - ['gldeletetextures_197',['glDeleteTextures',['../namespaceabcg.html#a71fd7066e8b3aba42012e4f0136adc63',1,'abcg']]], - ['gldeletetransformfeedbacks_198',['glDeleteTransformFeedbacks',['../namespaceabcg.html#a65fc031e96cb6e9c23237520f257e174',1,'abcg']]], - ['gldeletevertexarrays_199',['glDeleteVertexArrays',['../namespaceabcg.html#a5c7dcb111f3c739f8948b80a4a2d23e2',1,'abcg']]], - ['gldepthfunc_200',['glDepthFunc',['../namespaceabcg.html#aa46fa714ee9925690a7bb07c3ef52df9',1,'abcg']]], - ['gldepthmask_201',['glDepthMask',['../namespaceabcg.html#a2c2a12a15c7b445dcee3d8656ca6dfbc',1,'abcg']]], - ['gldepthrangef_202',['glDepthRangef',['../namespaceabcg.html#a08dbe7a21733bff43ed976be14f99e9b',1,'abcg']]], - ['gldetachshader_203',['glDetachShader',['../namespaceabcg.html#a045bd908a5989d1ed1b6a4d28cc2bab6',1,'abcg']]], - ['gldisable_204',['glDisable',['../namespaceabcg.html#a84963ee1cf3177d6f23ca4641daf8b9b',1,'abcg']]], - ['gldisablevertexattribarray_205',['glDisableVertexAttribArray',['../namespaceabcg.html#a953dfc9ac20750b998c1b320c9c3177e',1,'abcg']]], - ['gldrawarrays_206',['glDrawArrays',['../namespaceabcg.html#a47e3bd5f6dc82daa656e76b655940338',1,'abcg']]], - ['gldrawarraysinstanced_207',['glDrawArraysInstanced',['../namespaceabcg.html#a32f7f0c0ce76c25248271a64c2b8e52b',1,'abcg']]], - ['gldrawbuffers_208',['glDrawBuffers',['../namespaceabcg.html#ae03a93e0f048e849bb5e37d712d7000c',1,'abcg']]], - ['gldrawelements_209',['glDrawElements',['../namespaceabcg.html#abaa5a136840114161dd2dca5dcfce646',1,'abcg']]], - ['gldrawelementsinstanced_210',['glDrawElementsInstanced',['../namespaceabcg.html#a67e3ae359f4840a60501e01a7ce4fb49',1,'abcg']]], - ['gldrawrangeelements_211',['glDrawRangeElements',['../namespaceabcg.html#aa5e970181c35e076181628df29de48e5',1,'abcg']]], - ['glenable_212',['glEnable',['../namespaceabcg.html#a5ee5802eb4646b281e426e550658124f',1,'abcg']]], - ['glenablevertexattribarray_213',['glEnableVertexAttribArray',['../namespaceabcg.html#a2b8c6c76fcc9d16e4a29551cac8f428f',1,'abcg']]], - ['glendquery_214',['glEndQuery',['../namespaceabcg.html#acebb037ad49e0f3714436346cb370a3e',1,'abcg']]], - ['glendtransformfeedback_215',['glEndTransformFeedback',['../namespaceabcg.html#a1427186fdcf12b9897523589b1ddf20f',1,'abcg']]], - ['glfencesync_216',['glFenceSync',['../namespaceabcg.html#acf7bb9039752df88aba99ed50675ceb6',1,'abcg']]], - ['glfinish_217',['glFinish',['../namespaceabcg.html#a94ad89b8ca10fc632d08f6c9d04d162e',1,'abcg']]], - ['glflush_218',['glFlush',['../namespaceabcg.html#ae0c6f2648cab3d1cd82a7ba910776e2b',1,'abcg']]], - ['glflushmappedbufferrange_219',['glFlushMappedBufferRange',['../namespaceabcg.html#a9280491505581f2f303c3f11442a9d8d',1,'abcg']]], - ['glframebufferrenderbuffer_220',['glFramebufferRenderbuffer',['../namespaceabcg.html#a24715a37b830d861d7cdb1f2f24bd32d',1,'abcg']]], - ['glframebuffertexture_221',['glFramebufferTexture',['../namespaceabcg.html#adb0766367e9364b01040121a4c2c79ed',1,'abcg']]], - ['glframebuffertexture2d_222',['glFramebufferTexture2D',['../namespaceabcg.html#a47dba8957f7121ceccfde94363e707e4',1,'abcg']]], - ['glframebuffertexturelayer_223',['glFramebufferTextureLayer',['../namespaceabcg.html#a399dc5200ed4b1c5ba36bc3aaa58c508',1,'abcg']]], - ['glfrontface_224',['glFrontFace',['../namespaceabcg.html#a6fa8b701a9a5003498e663163fe68729',1,'abcg']]], - ['glgenbuffers_225',['glGenBuffers',['../namespaceabcg.html#a5df92f4a085d8bca0fd0c52feee0128a',1,'abcg']]], - ['glgeneratemipmap_226',['glGenerateMipmap',['../namespaceabcg.html#acc670193ec022e761c4af8976494ed07',1,'abcg']]], - ['glgenframebuffers_227',['glGenFramebuffers',['../namespaceabcg.html#a5fb50995430e196812ba5fa75a9bf25a',1,'abcg']]], - ['glgenqueries_228',['glGenQueries',['../namespaceabcg.html#a86c415c268d7669e07339991c608e60b',1,'abcg']]], - ['glgenrenderbuffers_229',['glGenRenderbuffers',['../namespaceabcg.html#a4c9b0c886972e7d983e58c367787572c',1,'abcg']]], - ['glgensamplers_230',['glGenSamplers',['../namespaceabcg.html#ada23095347757d96190b853daddf8434',1,'abcg']]], - ['glgentextures_231',['glGenTextures',['../namespaceabcg.html#ae1015bd07641da254a331d9b3238d96f',1,'abcg']]], - ['glgentransformfeedbacks_232',['glGenTransformFeedbacks',['../namespaceabcg.html#a251e7d7579160c8fad43d5ce06ee9b06',1,'abcg']]], - ['glgenvertexarrays_233',['glGenVertexArrays',['../namespaceabcg.html#a7cc7561e9541d7841342173bec200d0d',1,'abcg']]], - ['glgetactiveattrib_234',['glGetActiveAttrib',['../namespaceabcg.html#ae0cdaa8143c25fdc5dd90b375a362816',1,'abcg']]], - ['glgetactiveuniform_235',['glGetActiveUniform',['../namespaceabcg.html#ac5aac5887d3a23fdd9e62db27eac53db',1,'abcg']]], - ['glgetactiveuniformblockiv_236',['glGetActiveUniformBlockiv',['../namespaceabcg.html#aac48b45e3026be3bc4270b9b98dd1b81',1,'abcg']]], - ['glgetactiveuniformblockname_237',['glGetActiveUniformBlockName',['../namespaceabcg.html#a242378c05d9480103f5375c8a8826c28',1,'abcg']]], - ['glgetactiveuniformsiv_238',['glGetActiveUniformsiv',['../namespaceabcg.html#aaf5e44d65badbc70664b1f392b0fb36f',1,'abcg']]], - ['glgetattachedshaders_239',['glGetAttachedShaders',['../namespaceabcg.html#a69e507a360bcf1ef4061f8c9a2731727',1,'abcg']]], - ['glgetattriblocation_240',['glGetAttribLocation',['../namespaceabcg.html#aa28b9cf639287662cb747a5f48e62ac7',1,'abcg']]], - ['glgetbooleanv_241',['glGetBooleanv',['../namespaceabcg.html#a96a319c6482b3dfc7e3375e5d2339ea8',1,'abcg']]], - ['glgetbufferparameteri64v_242',['glGetBufferParameteri64v',['../namespaceabcg.html#a6b33c9c6944be9a18490575915090e22',1,'abcg']]], - ['glgetbufferparameteriv_243',['glGetBufferParameteriv',['../namespaceabcg.html#ac96ad909a86ceba40b0a92e7b227f992',1,'abcg']]], - ['glgetbufferpointerv_244',['glGetBufferPointerv',['../namespaceabcg.html#ada9205a4af5b2d12c78c16b5176a6a82',1,'abcg']]], - ['glgetdoublev_245',['glGetDoublev',['../namespaceabcg.html#a8bd8be541ec50d33e34248aecd3f25b7',1,'abcg']]], - ['glgetfloatv_246',['glGetFloatv',['../namespaceabcg.html#af0c9e138d135378a3de00663c616cf46',1,'abcg']]], - ['glgetfragdatalocation_247',['glGetFragDataLocation',['../namespaceabcg.html#a1468aeed842d55a612da7a8257f5006f',1,'abcg']]], - ['glgetframebufferattachmentparameteriv_248',['glGetFramebufferAttachmentParameteriv',['../namespaceabcg.html#a4c721ad9d476be58c7fcc04da120288b',1,'abcg']]], - ['glgetinteger64i_5fv_249',['glGetInteger64i_v',['../namespaceabcg.html#ac2e13dc4a2ded3237be1ca90bad68d4e',1,'abcg']]], - ['glgetinteger64v_250',['glGetInteger64v',['../namespaceabcg.html#a59ea90fe9ec82ae3af1b3a29fe98de3f',1,'abcg']]], - ['glgetintegeri_5fv_251',['glGetIntegeri_v',['../namespaceabcg.html#ab3e060569fa74e0509c2a28806e4a847',1,'abcg']]], - ['glgetintegerv_252',['glGetIntegerv',['../namespaceabcg.html#a5fc4ea3f0ee00aec4b4ad39d830b83d5',1,'abcg']]], - ['glgetinternalformativ_253',['glGetInternalformativ',['../namespaceabcg.html#a56430f42fc367519455b993473579b79',1,'abcg']]], - ['glgetprogrambinary_254',['glGetProgramBinary',['../namespaceabcg.html#a70e991b998cd93d8ae0cdf86a145ed37',1,'abcg']]], - ['glgetprograminfolog_255',['glGetProgramInfoLog',['../namespaceabcg.html#a9169273965372bf17961bafe2cd37f8c',1,'abcg']]], - ['glgetprogramiv_256',['glGetProgramiv',['../namespaceabcg.html#afa031f5f52ad88625a88e1410478d892',1,'abcg']]], - ['glgetqueryiv_257',['glGetQueryiv',['../namespaceabcg.html#a9c6d035dae7a9d2137cc484b6704f0c9',1,'abcg']]], - ['glgetqueryobjectuiv_258',['glGetQueryObjectuiv',['../namespaceabcg.html#a73910bf72dd61e452b1776b00cdd7972',1,'abcg']]], - ['glgetrenderbufferparameteriv_259',['glGetRenderbufferParameteriv',['../namespaceabcg.html#a3c9dd56405aa600ef77b3194ddec1c52',1,'abcg']]], - ['glgetsamplerparameterfv_260',['glGetSamplerParameterfv',['../namespaceabcg.html#aa444f01ece43218d34ad9256c88eddf5',1,'abcg']]], - ['glgetsamplerparameteriv_261',['glGetSamplerParameteriv',['../namespaceabcg.html#ae6ea1aa7744033cbe3a10ec3b646e30d',1,'abcg']]], - ['glgetshaderinfolog_262',['glGetShaderInfoLog',['../namespaceabcg.html#a86aec026f1d1e876c7f47dfca141bc03',1,'abcg']]], - ['glgetshaderiv_263',['glGetShaderiv',['../namespaceabcg.html#aa074570fbd8a39ce2e899245b407044b',1,'abcg']]], - ['glgetshaderprecisionformat_264',['glGetShaderPrecisionFormat',['../namespaceabcg.html#a0690d7a9fb1fbe27f1630b51a6ef506f',1,'abcg']]], - ['glgetshadersource_265',['glGetShaderSource',['../namespaceabcg.html#abe63fd43e8ff35c953ca7a58a9f50f24',1,'abcg']]], - ['glgetstring_266',['glGetString',['../namespaceabcg.html#af419f0698487fc55f9fd8b7a424eb633',1,'abcg']]], - ['glgetstringi_267',['glGetStringi',['../namespaceabcg.html#ac2b042cb4fcd350f3efd9925f90bb068',1,'abcg']]], - ['glgetsynciv_268',['glGetSynciv',['../namespaceabcg.html#a57fa9fe8caf214671576ed55b06f239f',1,'abcg']]], - ['glgettexlevelparameterfv_269',['glGetTexLevelParameterfv',['../namespaceabcg.html#a720dffe7d97e8ebaba17b6d87583fd59',1,'abcg']]], - ['glgettexlevelparameteriv_270',['glGetTexLevelParameteriv',['../namespaceabcg.html#aee3c58bf82ea8186bfab4f2942997022',1,'abcg']]], - ['glgettexparameterfv_271',['glGetTexParameterfv',['../namespaceabcg.html#a4a8a224da5a79b1029605b7e77218e7c',1,'abcg']]], - ['glgettexparameteriv_272',['glGetTexParameteriv',['../namespaceabcg.html#ac768bcd240c1d1ad80589e5a248408df',1,'abcg']]], - ['glgettransformfeedbackvarying_273',['glGetTransformFeedbackVarying',['../namespaceabcg.html#a9a5c4567cf69ddd662085c0f86b37fa4',1,'abcg']]], - ['glgetuniformblockindex_274',['glGetUniformBlockIndex',['../namespaceabcg.html#a6710abf9cdd9e78d00280c40a56058da',1,'abcg']]], - ['glgetuniformfv_275',['glGetUniformfv',['../namespaceabcg.html#ae51c6519e4ba4b2a237c148d5606d76c',1,'abcg']]], - ['glgetuniformindices_276',['glGetUniformIndices',['../namespaceabcg.html#ace8f774eff785ea7e9f90c1c6b8e4425',1,'abcg']]], - ['glgetuniformiv_277',['glGetUniformiv',['../namespaceabcg.html#a3ed72ff0a3751e87af8369466f3a1cbf',1,'abcg']]], - ['glgetuniformlocation_278',['glGetUniformLocation',['../namespaceabcg.html#a22cb6b45a1ae2153d289a0ee3ac7729a',1,'abcg']]], - ['glgetuniformuiv_279',['glGetUniformuiv',['../namespaceabcg.html#acffb14045c39d65f3f8bead758313fbc',1,'abcg']]], - ['glgetvertexattribfv_280',['glGetVertexAttribfv',['../namespaceabcg.html#aedab4d42e7085a4bab268099b2d1346d',1,'abcg']]], - ['glgetvertexattribiiv_281',['glGetVertexAttribIiv',['../namespaceabcg.html#ad31542472e21428d05473b3ebe2489ee',1,'abcg']]], - ['glgetvertexattribiuiv_282',['glGetVertexAttribIuiv',['../namespaceabcg.html#a6a360138b05890b13f8439344e08512f',1,'abcg']]], - ['glgetvertexattribiv_283',['glGetVertexAttribiv',['../namespaceabcg.html#a78e9cb3ed811f7863b4a0c304a9fb278',1,'abcg']]], - ['glgetvertexattribpointerv_284',['glGetVertexAttribPointerv',['../namespaceabcg.html#aca5b82d3582454e73b1a86192124d485',1,'abcg']]], - ['glhint_285',['glHint',['../namespaceabcg.html#a97c884a2a934bf40d378024d81be625e',1,'abcg']]], - ['glinvalidateframebuffer_286',['glInvalidateFramebuffer',['../namespaceabcg.html#a619e3d0de44a879aa6db3054c39130ec',1,'abcg']]], - ['glinvalidatesubframebuffer_287',['glInvalidateSubFramebuffer',['../namespaceabcg.html#a47b7481c9fc066c9cd54a0f010258818',1,'abcg']]], - ['glisbuffer_288',['glIsBuffer',['../namespaceabcg.html#afb123afaf46459222024ea041cac15c7',1,'abcg']]], - ['glisenabled_289',['glIsEnabled',['../namespaceabcg.html#a2355d26ca6b32f64dd502ba787074e95',1,'abcg']]], - ['glisframebuffer_290',['glIsFramebuffer',['../namespaceabcg.html#abde059e7926e418ee7676f612480ca2e',1,'abcg']]], - ['glisprogram_291',['glIsProgram',['../namespaceabcg.html#ad8512fcd1782c81aaa121cd7e6c561d1',1,'abcg']]], - ['glisquery_292',['glIsQuery',['../namespaceabcg.html#a7a5eac1646a59b2c8de24b4862d3b2d9',1,'abcg']]], - ['glisrenderbuffer_293',['glIsRenderbuffer',['../namespaceabcg.html#a15acb0b1b9464f294f99aa989c44dc70',1,'abcg']]], - ['glissampler_294',['glIsSampler',['../namespaceabcg.html#ad85c0ff02a8b681ecb188752dd8ce9c0',1,'abcg']]], - ['glisshader_295',['glIsShader',['../namespaceabcg.html#a36db9b553f7422ea79b751c5763d194c',1,'abcg']]], - ['glissync_296',['glIsSync',['../namespaceabcg.html#a6e39dbba1c1d91b8df99ab60da87c364',1,'abcg']]], - ['glistexture_297',['glIsTexture',['../namespaceabcg.html#a913e9b053d880a383d8bf3d55cb5ead3',1,'abcg']]], - ['glistransformfeedback_298',['glIsTransformFeedback',['../namespaceabcg.html#aed892da4fd2e2517f53ca8c902d36a31',1,'abcg']]], - ['glisvertexarray_299',['glIsVertexArray',['../namespaceabcg.html#a5afdcd1166d09049b9bea8f425bbd0db',1,'abcg']]], - ['gllinewidth_300',['glLineWidth',['../namespaceabcg.html#aba2cae07b1fe8e188ff0fcc76ec9db8b',1,'abcg']]], - ['gllinkprogram_301',['glLinkProgram',['../namespaceabcg.html#af84c0f4d0816181cba506f1703c037c2',1,'abcg']]], - ['glm_5fforce_5fdepth_5fzero_5fto_5fone_302',['GLM_FORCE_DEPTH_ZERO_TO_ONE',['../abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968',1,'abcgVulkan.hpp']]], - ['glmapbufferrange_303',['glMapBufferRange',['../namespaceabcg.html#aaa863c0c9f439036f6d2b58e375ee105',1,'abcg']]], - ['glpausetransformfeedback_304',['glPauseTransformFeedback',['../namespaceabcg.html#a03d850c93d16ad308516bb83bb8ffa0d',1,'abcg']]], - ['glpixelstorei_305',['glPixelStorei',['../namespaceabcg.html#a05ece875ff476f630548c8cf7a0d952b',1,'abcg']]], - ['glpolygonoffset_306',['glPolygonOffset',['../namespaceabcg.html#afa173d8901021cb88486592fcc300a14',1,'abcg']]], - ['glprogrambinary_307',['glProgramBinary',['../namespaceabcg.html#aa836ddfde2ab9014c8322a66b1fc5bcc',1,'abcg']]], - ['glprogramparameteri_308',['glProgramParameteri',['../namespaceabcg.html#ae48fb31c3e26632acba7e1a9753ee5c9',1,'abcg']]], - ['glreadbuffer_309',['glReadBuffer',['../namespaceabcg.html#a9fbd7418dfcde0cdbb4ff58d29e40a4f',1,'abcg']]], - ['glreadpixels_310',['glReadPixels',['../namespaceabcg.html#ae8720c564832cd331d886e24aaf68c29',1,'abcg']]], - ['glreleaseshadercompiler_311',['glReleaseShaderCompiler',['../namespaceabcg.html#a3e97ab629b7cc5d4c7259e521ebe5fb7',1,'abcg']]], - ['glrenderbufferstorage_312',['glRenderbufferStorage',['../namespaceabcg.html#aae32d699a30865e7aa4c4de786a1d593',1,'abcg']]], - ['glrenderbufferstoragemultisample_313',['glRenderbufferStorageMultisample',['../namespaceabcg.html#aee93697e0e0b92b0b73a9c374d4afff0',1,'abcg']]], - ['glresumetransformfeedback_314',['glResumeTransformFeedback',['../namespaceabcg.html#a81e93970a280fc3782f7577db7060458',1,'abcg']]], - ['glsamplecoverage_315',['glSampleCoverage',['../namespaceabcg.html#adee87442b65fa46fe96cceb6a21d496a',1,'abcg']]], - ['glsamplerparameterf_316',['glSamplerParameterf',['../namespaceabcg.html#aa12216132f4a0242e7f0882c99bc98ad',1,'abcg']]], - ['glsamplerparameterfv_317',['glSamplerParameterfv',['../namespaceabcg.html#a03ba96b4728e99b4f58cce1f3e102b49',1,'abcg']]], - ['glsamplerparameteri_318',['glSamplerParameteri',['../namespaceabcg.html#ae9971e1b8abb781440101bac0968a897',1,'abcg']]], - ['glsamplerparameteriv_319',['glSamplerParameteriv',['../namespaceabcg.html#a304af29cf7db15205236d97e1836e79a',1,'abcg']]], - ['glscissor_320',['glScissor',['../namespaceabcg.html#ae1a3e82a002194c222284c5588998cfb',1,'abcg']]], - ['glshaderbinary_321',['glShaderBinary',['../namespaceabcg.html#af1c355ed607c699a2fbe6b56454b84db',1,'abcg']]], - ['glshadersource_322',['glShaderSource',['../namespaceabcg.html#a828f4d3a0f75f391780765df28ce8914',1,'abcg']]], - ['glsltospv_323',['GLSLtoSPV',['../abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a',1,'abcgVulkanShader.cpp']]], - ['glstencilfunc_324',['glStencilFunc',['../namespaceabcg.html#ad1bc3b8d63e3b65fc3a1222ce789db3a',1,'abcg']]], - ['glstencilfuncseparate_325',['glStencilFuncSeparate',['../namespaceabcg.html#a10f604e428c78fad5ca881ecae15f9df',1,'abcg']]], - ['glstencilmask_326',['glStencilMask',['../namespaceabcg.html#a1f1123ce5bc6fade14962343ad3395f0',1,'abcg']]], - ['glstencilmaskseparate_327',['glStencilMaskSeparate',['../namespaceabcg.html#aadbe72b51aec2a1355ab4a9fc312043c',1,'abcg']]], - ['glstencilop_328',['glStencilOp',['../namespaceabcg.html#a7b172b6de78b247898a24c61d6d1d25f',1,'abcg']]], - ['glstencilopseparate_329',['glStencilOpSeparate',['../namespaceabcg.html#a86ed23edfe4b5ef502fe321f5a40b706',1,'abcg']]], - ['glteximage2d_330',['glTexImage2D',['../namespaceabcg.html#ae220fd2c2bd61130ace06f851609903d',1,'abcg']]], - ['glteximage2dmultisample_331',['glTexImage2DMultisample',['../namespaceabcg.html#aea5f1cc76074ee940772a749cd1b57ad',1,'abcg']]], - ['glteximage3d_332',['glTexImage3D',['../namespaceabcg.html#a55111fa9ae85db9d5c62854dc5cfb735',1,'abcg']]], - ['gltexparameterf_333',['glTexParameterf',['../namespaceabcg.html#a3d91ea0fc162e4a0f5f6060418b6d61c',1,'abcg']]], - ['gltexparameterfv_334',['glTexParameterfv',['../namespaceabcg.html#a9f00bcbf608a6489e1bcbffe964574ea',1,'abcg']]], - ['gltexparameteri_335',['glTexParameteri',['../namespaceabcg.html#a4d4aae2bed9b15f89cd6bf9268cfcd0b',1,'abcg']]], - ['gltexparameteriv_336',['glTexParameteriv',['../namespaceabcg.html#aa4c561c1f3f974025cbf25837f5b0b41',1,'abcg']]], - ['gltexstorage2d_337',['glTexStorage2D',['../namespaceabcg.html#a4573fb1a4dd47d4a692b4602a4009918',1,'abcg']]], - ['gltexstorage3d_338',['glTexStorage3D',['../namespaceabcg.html#af9d8885c892cfeadf62c7280254d57f9',1,'abcg']]], - ['gltexsubimage2d_339',['glTexSubImage2D',['../namespaceabcg.html#a7ff895f0b4b215b432009d5a23645b34',1,'abcg']]], - ['gltexsubimage3d_340',['glTexSubImage3D',['../namespaceabcg.html#a7aaad5778d19c5cc07e1259010dd406a',1,'abcg']]], - ['gltransformfeedbackvaryings_341',['glTransformFeedbackVaryings',['../namespaceabcg.html#a0f8299d53f2d5e195444be565301462c',1,'abcg']]], - ['gluniform1f_342',['glUniform1f',['../namespaceabcg.html#a6f815dac65a78efa2afda323b1cadec9',1,'abcg']]], - ['gluniform1fv_343',['glUniform1fv',['../namespaceabcg.html#a0a55fd40d1c8f2dfc0fd072e5b2c5ebc',1,'abcg']]], - ['gluniform1i_344',['glUniform1i',['../namespaceabcg.html#a17c9ec119f0c1c6d101a042131774ef9',1,'abcg']]], - ['gluniform1iv_345',['glUniform1iv',['../namespaceabcg.html#a2ac0fcc475813238eec19657e6d4899d',1,'abcg']]], - ['gluniform1ui_346',['glUniform1ui',['../namespaceabcg.html#a4566f93a590c2437fab4c2ac07ea1454',1,'abcg']]], - ['gluniform1uiv_347',['glUniform1uiv',['../namespaceabcg.html#ae712e6a279573982c1c5e7c569a47add',1,'abcg']]], - ['gluniform2f_348',['glUniform2f',['../namespaceabcg.html#aeed384502019a1ea9c53c5f79387f4a6',1,'abcg']]], - ['gluniform2fv_349',['glUniform2fv',['../namespaceabcg.html#aba238c1971fc805fb79cc9249a4b3979',1,'abcg']]], - ['gluniform2i_350',['glUniform2i',['../namespaceabcg.html#ab923c4f8e4b6a7928d41e2c557083938',1,'abcg']]], - ['gluniform2iv_351',['glUniform2iv',['../namespaceabcg.html#adf14dfa164b234c7fbed7b45426b2d62',1,'abcg']]], - ['gluniform2ui_352',['glUniform2ui',['../namespaceabcg.html#ac9593131eae76be863d98795053363c5',1,'abcg']]], - ['gluniform2uiv_353',['glUniform2uiv',['../namespaceabcg.html#abeafef647d9a881976fb42ecc4756c8d',1,'abcg']]], - ['gluniform3f_354',['glUniform3f',['../namespaceabcg.html#a3ac2b6654fcb536e3d89e695b84d0229',1,'abcg']]], - ['gluniform3fv_355',['glUniform3fv',['../namespaceabcg.html#a97188797e9d2d99c779647cc2e3b1188',1,'abcg']]], - ['gluniform3i_356',['glUniform3i',['../namespaceabcg.html#a8e3f7eba54f08608b79aa8f3b469a970',1,'abcg']]], - ['gluniform3iv_357',['glUniform3iv',['../namespaceabcg.html#a99d565ab142c3aade17d3bf0165dc348',1,'abcg']]], - ['gluniform3ui_358',['glUniform3ui',['../namespaceabcg.html#aea378f4807f17ed76e8129260b35c1a1',1,'abcg']]], - ['gluniform3uiv_359',['glUniform3uiv',['../namespaceabcg.html#a15c8e64b115ca61dc7bd460af8447497',1,'abcg']]], - ['gluniform4f_360',['glUniform4f',['../namespaceabcg.html#a26ef61adcd575428307b9b9a92dc618c',1,'abcg']]], - ['gluniform4fv_361',['glUniform4fv',['../namespaceabcg.html#a3dbe8b9316fce91031a864a1a7b91497',1,'abcg']]], - ['gluniform4i_362',['glUniform4i',['../namespaceabcg.html#a3276a3ae4b0740216d4850df60881cfe',1,'abcg']]], - ['gluniform4iv_363',['glUniform4iv',['../namespaceabcg.html#afb64d90352e53e92718dd7f10a2822a6',1,'abcg']]], - ['gluniform4ui_364',['glUniform4ui',['../namespaceabcg.html#a506182a6eb4e8158ee10567344152470',1,'abcg']]], - ['gluniform4uiv_365',['glUniform4uiv',['../namespaceabcg.html#ac21f205c4a058a639fd695c4b4bf76fc',1,'abcg']]], - ['gluniformblockbinding_366',['glUniformBlockBinding',['../namespaceabcg.html#a81f720eec72780a58bf7719461d97971',1,'abcg']]], - ['gluniformmatrix2fv_367',['glUniformMatrix2fv',['../namespaceabcg.html#abc150697687bc94d1ec422a5f2db1b88',1,'abcg']]], - ['gluniformmatrix2x3fv_368',['glUniformMatrix2x3fv',['../namespaceabcg.html#ad53649314374711d76ff0b032950e9d2',1,'abcg']]], - ['gluniformmatrix2x4fv_369',['glUniformMatrix2x4fv',['../namespaceabcg.html#ae942855746c560463aed347013e2e84f',1,'abcg']]], - ['gluniformmatrix3fv_370',['glUniformMatrix3fv',['../namespaceabcg.html#a5f5c89006586583bd0cbabbace3a1d94',1,'abcg']]], - ['gluniformmatrix3x2fv_371',['glUniformMatrix3x2fv',['../namespaceabcg.html#abb0b676883c3e5c717cea345b043a372',1,'abcg']]], - ['gluniformmatrix3x4fv_372',['glUniformMatrix3x4fv',['../namespaceabcg.html#a8b8f3bffbbf4e2d6ec0afa0f130f2132',1,'abcg']]], - ['gluniformmatrix4fv_373',['glUniformMatrix4fv',['../namespaceabcg.html#a640ca79d0f9c8636c4161cea447a361d',1,'abcg']]], - ['gluniformmatrix4x2fv_374',['glUniformMatrix4x2fv',['../namespaceabcg.html#a549e5d5f67f44712248cf3e26af0ddd6',1,'abcg']]], - ['gluniformmatrix4x3fv_375',['glUniformMatrix4x3fv',['../namespaceabcg.html#a2a4e0b3c0401e2a85fe389191c5d768f',1,'abcg']]], - ['glunmapbuffer_376',['glUnmapBuffer',['../namespaceabcg.html#a1f475772cbe67c5b2370ef179c99b614',1,'abcg']]], - ['gluseprogram_377',['glUseProgram',['../namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0',1,'abcg']]], - ['glvalidateprogram_378',['glValidateProgram',['../namespaceabcg.html#a4ca1b9c8efcec40ef7506d115807a252',1,'abcg']]], - ['glvertexattrib1f_379',['glVertexAttrib1f',['../namespaceabcg.html#af725d24a5b6b6483d1cd3420dc6ec011',1,'abcg']]], - ['glvertexattrib1fv_380',['glVertexAttrib1fv',['../namespaceabcg.html#aeff647ce94259b8e0fbe731595cf1931',1,'abcg']]], - ['glvertexattrib2f_381',['glVertexAttrib2f',['../namespaceabcg.html#ab0c88524f1c60a35e818cd6f8902c2e7',1,'abcg']]], - ['glvertexattrib2fv_382',['glVertexAttrib2fv',['../namespaceabcg.html#a3be34bb76d1f704893e5ae334488f372',1,'abcg']]], - ['glvertexattrib3f_383',['glVertexAttrib3f',['../namespaceabcg.html#afa1466dac879205506b78b021aafff27',1,'abcg']]], - ['glvertexattrib3fv_384',['glVertexAttrib3fv',['../namespaceabcg.html#aad00233878a4e63de78696409cb8cfe7',1,'abcg']]], - ['glvertexattrib4f_385',['glVertexAttrib4f',['../namespaceabcg.html#a16e4ed4c33c7e9abd8eb412c422c7f8a',1,'abcg']]], - ['glvertexattrib4fv_386',['glVertexAttrib4fv',['../namespaceabcg.html#af15b80a8f2eb74ae9de6f26996d3d51d',1,'abcg']]], - ['glvertexattribdivisor_387',['glVertexAttribDivisor',['../namespaceabcg.html#a6bc99961c0b460aff0c6176e08667ad5',1,'abcg']]], - ['glvertexattribi4i_388',['glVertexAttribI4i',['../namespaceabcg.html#a298da5e81cd558e36acc8517f183330a',1,'abcg']]], - ['glvertexattribi4iv_389',['glVertexAttribI4iv',['../namespaceabcg.html#a2f957d37e18d6883d73b0c4d81c7925f',1,'abcg']]], - ['glvertexattribi4ui_390',['glVertexAttribI4ui',['../namespaceabcg.html#a3f20fa49edff456e65bcbbfc40befa92',1,'abcg']]], - ['glvertexattribi4uiv_391',['glVertexAttribI4uiv',['../namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e',1,'abcg']]], - ['glvertexattribipointer_392',['glVertexAttribIPointer',['../namespaceabcg.html#aa76792de0db9acdbb75c5b7a228dc022',1,'abcg']]], - ['glvertexattribpointer_393',['glVertexAttribPointer',['../namespaceabcg.html#af56cc0ad4060e65221188cfa41a59168',1,'abcg']]], - ['glviewport_394',['glViewport',['../namespaceabcg.html#a4488c395e82a5408c4321a611f039c78',1,'abcg']]], - ['glwaitsync_395',['glWaitSync',['../namespaceabcg.html#a14893e8222fcaac3d07be752b3c72c04',1,'abcg']]], - ['graphics_396',['graphics',['../structabcg_1_1VulkanCommandPools.html#a207d9deea08cda2bb99832828a63a44d',1,'abcg::VulkanCommandPools::graphics()'],['../structabcg_1_1VulkanQueues.html#a9c0f22bd376af220feb2ffb92962408d',1,'abcg::VulkanQueues::graphics()'],['../structabcg_1_1VulkanQueuesFamilies.html#afd66ca6fa2734f9789ed51809e74b034',1,'abcg::VulkanQueuesFamilies::graphics()']]] + ['generatemipmaps_101',['generateMipmaps',['../structabcg_1_1OpenGLCubemapCreateInfo.html#affcc0a8f16f52376045888f01dad8563',1,'abcg::OpenGLCubemapCreateInfo::generateMipmaps()'],['../structabcg_1_1OpenGLTextureCreateInfo.html#aeb7ce4f29f2ecf6f4866a3448b73313f',1,'abcg::OpenGLTextureCreateInfo::generateMipmaps()']]], + ['geometry_102',['Geometry',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad9c6333623e6357515fcbf17be806273',1,'abcg']]], + ['getassetspath_103',['getAssetsPath',['../classabcg_1_1Application.html#a0ba09deb85be01372abf095ebccfd90a',1,'abcg::Application']]], + ['getbasepath_104',['getBasePath',['../classabcg_1_1Application.html#a28b5d11e55d9aaef73b329503fe7725d',1,'abcg::Application']]], + ['getcommandpools_105',['getCommandPools',['../classabcg_1_1VulkanDevice.html#a51281adfe9f7d437520c501939017de8',1,'abcg::VulkanDevice']]], + ['getcurrentframe_106',['getCurrentFrame',['../classabcg_1_1VulkanSwapchain.html#a695ca7f8a93eaa5e8a54554fec139217',1,'abcg::VulkanSwapchain']]], + ['getdeltatime_107',['getDeltaTime',['../classabcg_1_1Window.html#a084f822db9d33093e6940e312e3cf5b2',1,'abcg::Window']]], + ['getdepthimage_108',['getDepthImage',['../classabcg_1_1VulkanSwapchain.html#aed0f6c1452d14d397ab8aa0e929c5404',1,'abcg::VulkanSwapchain']]], + ['getdescriptorimageinfo_109',['getDescriptorImageInfo',['../classabcg_1_1VulkanImage.html#a8c7ee844b2493320c6bafa9485e80e8b',1,'abcg::VulkanImage']]], + ['getdevice_110',['getDevice',['../classabcg_1_1VulkanSwapchain.html#af63733016263f2ff3bbe4b3a16eaab6a',1,'abcg::VulkanSwapchain::getDevice()'],['../classabcg_1_1VulkanWindow.html#a5ebbf3a25baa85d38e2d1bde297f085f',1,'abcg::VulkanWindow::getDevice()']]], + ['getdevicememory_111',['getDeviceMemory',['../classabcg_1_1VulkanBuffer.html#a0a16b5a0699b4684cca7d1b2b3536fb8',1,'abcg::VulkanBuffer::getDeviceMemory()'],['../classabcg_1_1VulkanImage.html#a1f0d5d74b39ad1652bb4cafc217456ca',1,'abcg::VulkanImage::getDeviceMemory()']]], + ['getelapsedtime_112',['getElapsedTime',['../classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe',1,'abcg::Window']]], + ['getextent_113',['getExtent',['../classabcg_1_1VulkanSwapchain.html#a935ed2150d5edbe259ebc9559530455d',1,'abcg::VulkanSwapchain']]], + ['getfirstsupportedformat_114',['getFirstSupportedFormat',['../classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32',1,'abcg::VulkanPhysicalDevice']]], + ['getframes_115',['getFrames',['../classabcg_1_1VulkanSwapchain.html#a666836f228c09910e966b5261057582e',1,'abcg::VulkanSwapchain']]], + ['getinstance_116',['getInstance',['../classabcg_1_1VulkanPhysicalDevice.html#a434af1aec8d9971df7d3e5440bca4209',1,'abcg::VulkanPhysicalDevice']]], + ['getlayout_117',['getLayout',['../classabcg_1_1VulkanPipeline.html#a8d36ff10042f814ab8ee85f8d05799e1',1,'abcg::VulkanPipeline']]], + ['getmainrenderpass_118',['getMainRenderPass',['../classabcg_1_1VulkanSwapchain.html#a671cf8a7a7acf3b7cdd40c46b4a04df3',1,'abcg::VulkanSwapchain']]], + ['getmiplevels_119',['getMipLevels',['../classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5',1,'abcg::VulkanImage']]], + ['getmodule_120',['getModule',['../classabcg_1_1VulkanShader.html#af6469274369f268db1bfeac8210ced7d',1,'abcg::VulkanShader']]], + ['getopenglsettings_121',['getOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#a83705042db987f58079d7bb16333ab9e',1,'abcg::OpenGLWindow']]], + ['getphysicaldevice_122',['getPhysicalDevice',['../classabcg_1_1VulkanDevice.html#ac67a735b1d9d9a24de55d8f7e5e13a41',1,'abcg::VulkanDevice::getPhysicalDevice()'],['../classabcg_1_1VulkanWindow.html#abba4a10ebb8d0e2ffa151134ce0d2a1e',1,'abcg::VulkanWindow::getPhysicalDevice()']]], + ['getqueues_123',['getQueues',['../classabcg_1_1VulkanDevice.html#affac11164d370e9c19e85e408dbcb15e',1,'abcg::VulkanDevice']]], + ['getqueuesfamilies_124',['getQueuesFamilies',['../classabcg_1_1VulkanPhysicalDevice.html#af3eba085cd8bb0906582dbd19a453ca6',1,'abcg::VulkanPhysicalDevice']]], + ['getrotation_125',['getRotation',['../classabcg_1_1TrackBall.html#a5801a1f9825c5ee5fae329406f4b4264',1,'abcg::TrackBall']]], + ['getsamplecount_126',['getSampleCount',['../classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4',1,'abcg::VulkanPhysicalDevice']]], + ['getsdlwindow_127',['getSDLWindow',['../classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c',1,'abcg::Window']]], + ['getsdlwindowid_128',['getSDLWindowID',['../classabcg_1_1Window.html#a6bc85489a6372037ebb5946eb20cbeaf',1,'abcg::Window']]], + ['getstage_129',['getStage',['../classabcg_1_1VulkanShader.html#a6c4ce257ae31cb6a5e1b177a7931abf7',1,'abcg::VulkanShader']]], + ['getsurfacekhr_130',['getSurfaceKHR',['../classabcg_1_1VulkanPhysicalDevice.html#a70a971ebe68c20b730e849c666b067e4',1,'abcg::VulkanPhysicalDevice']]], + ['getswapchain_131',['getSwapchain',['../classabcg_1_1VulkanWindow.html#a1767221e5ba68e35fa0db9f53fd54d2a',1,'abcg::VulkanWindow']]], + ['getuirenderpass_132',['getUIRenderPass',['../classabcg_1_1VulkanSwapchain.html#a9695875598fb7718c64d0ebe43cdf580',1,'abcg::VulkanSwapchain']]], + ['getview_133',['getView',['../classabcg_1_1VulkanImage.html#a9fca443ff07a966aa4cf3fd1fa4aa141',1,'abcg::VulkanImage']]], + ['getvulkansettings_134',['getVulkanSettings',['../classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5',1,'abcg::VulkanWindow']]], + ['getwindowsettings_135',['getWindowSettings',['../classabcg_1_1Window.html#a8bbd4003a05c63ace76c08146b734679',1,'abcg::Window']]], + ['getwindowsize_136',['getWindowSize',['../classabcg_1_1Window.html#adf143544a9b62c5c838768a7b446162c',1,'abcg::Window']]], + ['glactivetexture_137',['glActiveTexture',['../namespaceabcg.html#abebf61480d8b46ad61238624521c440c',1,'abcg']]], + ['glattachshader_138',['glAttachShader',['../namespaceabcg.html#aadc675d08443dfb3f52d136d1e867c54',1,'abcg']]], + ['glbeginquery_139',['glBeginQuery',['../namespaceabcg.html#a43ea888d5366cd13f8559ae5c45e503e',1,'abcg']]], + ['glbegintransformfeedback_140',['glBeginTransformFeedback',['../namespaceabcg.html#a4284264dbf0f5c318686f11bce8183cf',1,'abcg']]], + ['glbindattriblocation_141',['glBindAttribLocation',['../namespaceabcg.html#ae5d99843e0bc8a0c59503a2530d56d48',1,'abcg']]], + ['glbindbuffer_142',['glBindBuffer',['../namespaceabcg.html#a3cd63c5a736b0e401ad6e4ab6ea1ec41',1,'abcg']]], + ['glbindbufferbase_143',['glBindBufferBase',['../namespaceabcg.html#aa48f81c11025d9e8fc04c681932392ad',1,'abcg']]], + ['glbindbufferrange_144',['glBindBufferRange',['../namespaceabcg.html#a88b58e0a1d0a1aa9d68a0e19e78657ce',1,'abcg']]], + ['glbindfragdatalocation_145',['glBindFragDataLocation',['../namespaceabcg.html#a3f007c8f6d4d4ed049b66e03328d5b30',1,'abcg']]], + ['glbindframebuffer_146',['glBindFramebuffer',['../namespaceabcg.html#aaef0756c5e371e4b80f652586438b594',1,'abcg']]], + ['glbindrenderbuffer_147',['glBindRenderbuffer',['../namespaceabcg.html#aa2ee20f9a4dfcf2e740b00b08fb46b3e',1,'abcg']]], + ['glbindsampler_148',['glBindSampler',['../namespaceabcg.html#afb3c84a308e303b503c6f0cdefd5f426',1,'abcg']]], + ['glbindtexture_149',['glBindTexture',['../namespaceabcg.html#adb43c7b544c334de5da3f6c2c30570ae',1,'abcg']]], + ['glbindtransformfeedback_150',['glBindTransformFeedback',['../namespaceabcg.html#a8881b494dbdda2e680d2abf82dccadd9',1,'abcg']]], + ['glbindvertexarray_151',['glBindVertexArray',['../namespaceabcg.html#afe4c4f9e797dcd01910528c13ff471d4',1,'abcg']]], + ['glblendcolor_152',['glBlendColor',['../namespaceabcg.html#af87c9f438750ec5baa88caa3e204469c',1,'abcg']]], + ['glblendequation_153',['glBlendEquation',['../namespaceabcg.html#afa82d1d244c12d3f884e674b79a04f3e',1,'abcg']]], + ['glblendequationseparate_154',['glBlendEquationSeparate',['../namespaceabcg.html#a2e813667e01f4ea1e3a4ca5a16d4847e',1,'abcg']]], + ['glblendfunc_155',['glBlendFunc',['../namespaceabcg.html#a620308c51e62a88d78f44312b8931947',1,'abcg']]], + ['glblendfuncseparate_156',['glBlendFuncSeparate',['../namespaceabcg.html#a1156c925b568620ac51f94893db587ac',1,'abcg']]], + ['glblitframebuffer_157',['glBlitFramebuffer',['../namespaceabcg.html#aee53221fba9cbf13c75d78c9533da27b',1,'abcg']]], + ['glbufferdata_158',['glBufferData',['../namespaceabcg.html#a402e5079e8489cb8df8e3a6c5fcdbebf',1,'abcg']]], + ['glbuffersubdata_159',['glBufferSubData',['../namespaceabcg.html#af7091aa59a245999d277ec71e54b687f',1,'abcg']]], + ['glcheckframebufferstatus_160',['glCheckFramebufferStatus',['../namespaceabcg.html#a14b00e8df85dc5b1930b051be0f6a13d',1,'abcg']]], + ['glclear_161',['glClear',['../namespaceabcg.html#a37cf087e190d68ae489d69c1c7fb8c1a',1,'abcg']]], + ['glclearbufferfi_162',['glClearBufferfi',['../namespaceabcg.html#afd3d4e6a15e37502f806875152c161ec',1,'abcg']]], + ['glclearbufferfv_163',['glClearBufferfv',['../namespaceabcg.html#a4ee2c8db262e80410ae7a854d16c8637',1,'abcg']]], + ['glclearbufferiv_164',['glClearBufferiv',['../namespaceabcg.html#a1b9de47c64a177ed5daf99eeee3c3f05',1,'abcg']]], + ['glclearbufferuiv_165',['glClearBufferuiv',['../namespaceabcg.html#a9e5f02ca43e19e99dc0681be375b453d',1,'abcg']]], + ['glclearcolor_166',['glClearColor',['../namespaceabcg.html#a71881ed09c733ef5db9301bfee7a2f5f',1,'abcg']]], + ['glcleardepthf_167',['glClearDepthf',['../namespaceabcg.html#ace2477348a520f6b554b8b34662c53ac',1,'abcg']]], + ['glclearstencil_168',['glClearStencil',['../namespaceabcg.html#a3a4d7f77a063949bb602ac36ecc44319',1,'abcg']]], + ['glclientwaitsync_169',['glClientWaitSync',['../namespaceabcg.html#a4f8e59d6c10733d194fc5a329e52245f',1,'abcg']]], + ['glcolormask_170',['glColorMask',['../namespaceabcg.html#a41326750eb174903b1bf4119b7f33e96',1,'abcg']]], + ['glcompileshader_171',['glCompileShader',['../namespaceabcg.html#a9ab713ec7c6e93a8f09b5278133dfcf7',1,'abcg']]], + ['glcompressedteximage2d_172',['glCompressedTexImage2D',['../namespaceabcg.html#aca8b5cd79464cb9dcb6bc0c2261407f1',1,'abcg']]], + ['glcompressedteximage3d_173',['glCompressedTexImage3D',['../namespaceabcg.html#ad7bbab39db44f5da2ba62fe1de5a9dba',1,'abcg']]], + ['glcompressedtexsubimage2d_174',['glCompressedTexSubImage2D',['../namespaceabcg.html#a7a481529107e6f722c37ac9d559fc671',1,'abcg']]], + ['glcompressedtexsubimage3d_175',['glCompressedTexSubImage3D',['../namespaceabcg.html#a96b8b60242b097fb74451d423dc79fae',1,'abcg']]], + ['glcopybuffersubdata_176',['glCopyBufferSubData',['../namespaceabcg.html#a914c501ed0eff87b4474d1594ecc2f04',1,'abcg']]], + ['glcopyteximage2d_177',['glCopyTexImage2D',['../namespaceabcg.html#a8788882dedc9d5a598dfad1f21f9d6eb',1,'abcg']]], + ['glcopytexsubimage2d_178',['glCopyTexSubImage2D',['../namespaceabcg.html#ab7826bb1da6c947977b5644c00538540',1,'abcg']]], + ['glcopytexsubimage3d_179',['glCopyTexSubImage3D',['../namespaceabcg.html#a9c896be2e2c6b41db3e1f4891e27bf8d',1,'abcg']]], + ['glcreateprogram_180',['glCreateProgram',['../namespaceabcg.html#a2449fe3ff11796b682ca51d2611e0f8c',1,'abcg']]], + ['glcreateshader_181',['glCreateShader',['../namespaceabcg.html#a62dfd7c0cdb61a2971697e3980094a0e',1,'abcg']]], + ['glcullface_182',['glCullFace',['../namespaceabcg.html#a1daed0c2b70ea52f0436053095125e44',1,'abcg']]], + ['gldeletebuffers_183',['glDeleteBuffers',['../namespaceabcg.html#aab8d9786020b3f0a4a3f3a969579741c',1,'abcg']]], + ['gldeleteframebuffers_184',['glDeleteFramebuffers',['../namespaceabcg.html#a6c490c5eb7640f40ae09f87b0c52d81e',1,'abcg']]], + ['gldeleteprogram_185',['glDeleteProgram',['../namespaceabcg.html#a1c0feac412868f91511bc6cee51c0472',1,'abcg']]], + ['gldeletequeries_186',['glDeleteQueries',['../namespaceabcg.html#a6ce400968a396129fa47a1f2afa4f3da',1,'abcg']]], + ['gldeleterenderbuffers_187',['glDeleteRenderbuffers',['../namespaceabcg.html#aecca79eb3f54538532577cf2a21e067f',1,'abcg']]], + ['gldeletesamplers_188',['glDeleteSamplers',['../namespaceabcg.html#a8d2a8ddcaa0d34736ef16578f2d159a2',1,'abcg']]], + ['gldeleteshader_189',['glDeleteShader',['../namespaceabcg.html#ad378a150bf0c2b569ff5b22cd435acd6',1,'abcg']]], + ['gldeletesync_190',['glDeleteSync',['../namespaceabcg.html#a2f41106aca8b0948e9fb61a623413d08',1,'abcg']]], + ['gldeletetextures_191',['glDeleteTextures',['../namespaceabcg.html#a71fd7066e8b3aba42012e4f0136adc63',1,'abcg']]], + ['gldeletetransformfeedbacks_192',['glDeleteTransformFeedbacks',['../namespaceabcg.html#a65fc031e96cb6e9c23237520f257e174',1,'abcg']]], + ['gldeletevertexarrays_193',['glDeleteVertexArrays',['../namespaceabcg.html#a5c7dcb111f3c739f8948b80a4a2d23e2',1,'abcg']]], + ['gldepthfunc_194',['glDepthFunc',['../namespaceabcg.html#aa46fa714ee9925690a7bb07c3ef52df9',1,'abcg']]], + ['gldepthmask_195',['glDepthMask',['../namespaceabcg.html#a2c2a12a15c7b445dcee3d8656ca6dfbc',1,'abcg']]], + ['gldepthrangef_196',['glDepthRangef',['../namespaceabcg.html#a08dbe7a21733bff43ed976be14f99e9b',1,'abcg']]], + ['gldetachshader_197',['glDetachShader',['../namespaceabcg.html#a045bd908a5989d1ed1b6a4d28cc2bab6',1,'abcg']]], + ['gldisable_198',['glDisable',['../namespaceabcg.html#a84963ee1cf3177d6f23ca4641daf8b9b',1,'abcg']]], + ['gldisablevertexattribarray_199',['glDisableVertexAttribArray',['../namespaceabcg.html#a953dfc9ac20750b998c1b320c9c3177e',1,'abcg']]], + ['gldrawarrays_200',['glDrawArrays',['../namespaceabcg.html#a47e3bd5f6dc82daa656e76b655940338',1,'abcg']]], + ['gldrawarraysinstanced_201',['glDrawArraysInstanced',['../namespaceabcg.html#a32f7f0c0ce76c25248271a64c2b8e52b',1,'abcg']]], + ['gldrawbuffers_202',['glDrawBuffers',['../namespaceabcg.html#ae03a93e0f048e849bb5e37d712d7000c',1,'abcg']]], + ['gldrawelements_203',['glDrawElements',['../namespaceabcg.html#abaa5a136840114161dd2dca5dcfce646',1,'abcg']]], + ['gldrawelementsinstanced_204',['glDrawElementsInstanced',['../namespaceabcg.html#a67e3ae359f4840a60501e01a7ce4fb49',1,'abcg']]], + ['gldrawrangeelements_205',['glDrawRangeElements',['../namespaceabcg.html#aa5e970181c35e076181628df29de48e5',1,'abcg']]], + ['glenable_206',['glEnable',['../namespaceabcg.html#a5ee5802eb4646b281e426e550658124f',1,'abcg']]], + ['glenablevertexattribarray_207',['glEnableVertexAttribArray',['../namespaceabcg.html#a2b8c6c76fcc9d16e4a29551cac8f428f',1,'abcg']]], + ['glendquery_208',['glEndQuery',['../namespaceabcg.html#acebb037ad49e0f3714436346cb370a3e',1,'abcg']]], + ['glendtransformfeedback_209',['glEndTransformFeedback',['../namespaceabcg.html#a1427186fdcf12b9897523589b1ddf20f',1,'abcg']]], + ['glfencesync_210',['glFenceSync',['../namespaceabcg.html#acf7bb9039752df88aba99ed50675ceb6',1,'abcg']]], + ['glfinish_211',['glFinish',['../namespaceabcg.html#a94ad89b8ca10fc632d08f6c9d04d162e',1,'abcg']]], + ['glflush_212',['glFlush',['../namespaceabcg.html#ae0c6f2648cab3d1cd82a7ba910776e2b',1,'abcg']]], + ['glflushmappedbufferrange_213',['glFlushMappedBufferRange',['../namespaceabcg.html#a9280491505581f2f303c3f11442a9d8d',1,'abcg']]], + ['glframebufferrenderbuffer_214',['glFramebufferRenderbuffer',['../namespaceabcg.html#a24715a37b830d861d7cdb1f2f24bd32d',1,'abcg']]], + ['glframebuffertexture_215',['glFramebufferTexture',['../namespaceabcg.html#adb0766367e9364b01040121a4c2c79ed',1,'abcg']]], + ['glframebuffertexture2d_216',['glFramebufferTexture2D',['../namespaceabcg.html#a47dba8957f7121ceccfde94363e707e4',1,'abcg']]], + ['glframebuffertexturelayer_217',['glFramebufferTextureLayer',['../namespaceabcg.html#a399dc5200ed4b1c5ba36bc3aaa58c508',1,'abcg']]], + ['glfrontface_218',['glFrontFace',['../namespaceabcg.html#a6fa8b701a9a5003498e663163fe68729',1,'abcg']]], + ['glgenbuffers_219',['glGenBuffers',['../namespaceabcg.html#a5df92f4a085d8bca0fd0c52feee0128a',1,'abcg']]], + ['glgeneratemipmap_220',['glGenerateMipmap',['../namespaceabcg.html#acc670193ec022e761c4af8976494ed07',1,'abcg']]], + ['glgenframebuffers_221',['glGenFramebuffers',['../namespaceabcg.html#a5fb50995430e196812ba5fa75a9bf25a',1,'abcg']]], + ['glgenqueries_222',['glGenQueries',['../namespaceabcg.html#a86c415c268d7669e07339991c608e60b',1,'abcg']]], + ['glgenrenderbuffers_223',['glGenRenderbuffers',['../namespaceabcg.html#a4c9b0c886972e7d983e58c367787572c',1,'abcg']]], + ['glgensamplers_224',['glGenSamplers',['../namespaceabcg.html#ada23095347757d96190b853daddf8434',1,'abcg']]], + ['glgentextures_225',['glGenTextures',['../namespaceabcg.html#ae1015bd07641da254a331d9b3238d96f',1,'abcg']]], + ['glgentransformfeedbacks_226',['glGenTransformFeedbacks',['../namespaceabcg.html#a251e7d7579160c8fad43d5ce06ee9b06',1,'abcg']]], + ['glgenvertexarrays_227',['glGenVertexArrays',['../namespaceabcg.html#a7cc7561e9541d7841342173bec200d0d',1,'abcg']]], + ['glgetactiveattrib_228',['glGetActiveAttrib',['../namespaceabcg.html#ae0cdaa8143c25fdc5dd90b375a362816',1,'abcg']]], + ['glgetactiveuniform_229',['glGetActiveUniform',['../namespaceabcg.html#ac5aac5887d3a23fdd9e62db27eac53db',1,'abcg']]], + ['glgetactiveuniformblockiv_230',['glGetActiveUniformBlockiv',['../namespaceabcg.html#aac48b45e3026be3bc4270b9b98dd1b81',1,'abcg']]], + ['glgetactiveuniformblockname_231',['glGetActiveUniformBlockName',['../namespaceabcg.html#a242378c05d9480103f5375c8a8826c28',1,'abcg']]], + ['glgetactiveuniformsiv_232',['glGetActiveUniformsiv',['../namespaceabcg.html#aaf5e44d65badbc70664b1f392b0fb36f',1,'abcg']]], + ['glgetattachedshaders_233',['glGetAttachedShaders',['../namespaceabcg.html#a69e507a360bcf1ef4061f8c9a2731727',1,'abcg']]], + ['glgetattriblocation_234',['glGetAttribLocation',['../namespaceabcg.html#aa28b9cf639287662cb747a5f48e62ac7',1,'abcg']]], + ['glgetbooleanv_235',['glGetBooleanv',['../namespaceabcg.html#a96a319c6482b3dfc7e3375e5d2339ea8',1,'abcg']]], + ['glgetbufferparameteri64v_236',['glGetBufferParameteri64v',['../namespaceabcg.html#a6b33c9c6944be9a18490575915090e22',1,'abcg']]], + ['glgetbufferparameteriv_237',['glGetBufferParameteriv',['../namespaceabcg.html#ac96ad909a86ceba40b0a92e7b227f992',1,'abcg']]], + ['glgetbufferpointerv_238',['glGetBufferPointerv',['../namespaceabcg.html#ada9205a4af5b2d12c78c16b5176a6a82',1,'abcg']]], + ['glgetdoublev_239',['glGetDoublev',['../namespaceabcg.html#a8bd8be541ec50d33e34248aecd3f25b7',1,'abcg']]], + ['glgetfloatv_240',['glGetFloatv',['../namespaceabcg.html#af0c9e138d135378a3de00663c616cf46',1,'abcg']]], + ['glgetfragdatalocation_241',['glGetFragDataLocation',['../namespaceabcg.html#a1468aeed842d55a612da7a8257f5006f',1,'abcg']]], + ['glgetframebufferattachmentparameteriv_242',['glGetFramebufferAttachmentParameteriv',['../namespaceabcg.html#a4c721ad9d476be58c7fcc04da120288b',1,'abcg']]], + ['glgetinteger64i_5fv_243',['glGetInteger64i_v',['../namespaceabcg.html#ac2e13dc4a2ded3237be1ca90bad68d4e',1,'abcg']]], + ['glgetinteger64v_244',['glGetInteger64v',['../namespaceabcg.html#a59ea90fe9ec82ae3af1b3a29fe98de3f',1,'abcg']]], + ['glgetintegeri_5fv_245',['glGetIntegeri_v',['../namespaceabcg.html#ab3e060569fa74e0509c2a28806e4a847',1,'abcg']]], + ['glgetintegerv_246',['glGetIntegerv',['../namespaceabcg.html#a5fc4ea3f0ee00aec4b4ad39d830b83d5',1,'abcg']]], + ['glgetinternalformativ_247',['glGetInternalformativ',['../namespaceabcg.html#a56430f42fc367519455b993473579b79',1,'abcg']]], + ['glgetprogrambinary_248',['glGetProgramBinary',['../namespaceabcg.html#a70e991b998cd93d8ae0cdf86a145ed37',1,'abcg']]], + ['glgetprograminfolog_249',['glGetProgramInfoLog',['../namespaceabcg.html#a9169273965372bf17961bafe2cd37f8c',1,'abcg']]], + ['glgetprogramiv_250',['glGetProgramiv',['../namespaceabcg.html#afa031f5f52ad88625a88e1410478d892',1,'abcg']]], + ['glgetqueryiv_251',['glGetQueryiv',['../namespaceabcg.html#a9c6d035dae7a9d2137cc484b6704f0c9',1,'abcg']]], + ['glgetqueryobjectuiv_252',['glGetQueryObjectuiv',['../namespaceabcg.html#a73910bf72dd61e452b1776b00cdd7972',1,'abcg']]], + ['glgetrenderbufferparameteriv_253',['glGetRenderbufferParameteriv',['../namespaceabcg.html#a3c9dd56405aa600ef77b3194ddec1c52',1,'abcg']]], + ['glgetsamplerparameterfv_254',['glGetSamplerParameterfv',['../namespaceabcg.html#aa444f01ece43218d34ad9256c88eddf5',1,'abcg']]], + ['glgetsamplerparameteriv_255',['glGetSamplerParameteriv',['../namespaceabcg.html#ae6ea1aa7744033cbe3a10ec3b646e30d',1,'abcg']]], + ['glgetshaderinfolog_256',['glGetShaderInfoLog',['../namespaceabcg.html#a86aec026f1d1e876c7f47dfca141bc03',1,'abcg']]], + ['glgetshaderiv_257',['glGetShaderiv',['../namespaceabcg.html#aa074570fbd8a39ce2e899245b407044b',1,'abcg']]], + ['glgetshaderprecisionformat_258',['glGetShaderPrecisionFormat',['../namespaceabcg.html#a0690d7a9fb1fbe27f1630b51a6ef506f',1,'abcg']]], + ['glgetshadersource_259',['glGetShaderSource',['../namespaceabcg.html#abe63fd43e8ff35c953ca7a58a9f50f24',1,'abcg']]], + ['glgetstring_260',['glGetString',['../namespaceabcg.html#af419f0698487fc55f9fd8b7a424eb633',1,'abcg']]], + ['glgetstringi_261',['glGetStringi',['../namespaceabcg.html#ac2b042cb4fcd350f3efd9925f90bb068',1,'abcg']]], + ['glgetsynciv_262',['glGetSynciv',['../namespaceabcg.html#a57fa9fe8caf214671576ed55b06f239f',1,'abcg']]], + ['glgettexlevelparameterfv_263',['glGetTexLevelParameterfv',['../namespaceabcg.html#a720dffe7d97e8ebaba17b6d87583fd59',1,'abcg']]], + ['glgettexlevelparameteriv_264',['glGetTexLevelParameteriv',['../namespaceabcg.html#aee3c58bf82ea8186bfab4f2942997022',1,'abcg']]], + ['glgettexparameterfv_265',['glGetTexParameterfv',['../namespaceabcg.html#a4a8a224da5a79b1029605b7e77218e7c',1,'abcg']]], + ['glgettexparameteriv_266',['glGetTexParameteriv',['../namespaceabcg.html#ac768bcd240c1d1ad80589e5a248408df',1,'abcg']]], + ['glgettransformfeedbackvarying_267',['glGetTransformFeedbackVarying',['../namespaceabcg.html#a9a5c4567cf69ddd662085c0f86b37fa4',1,'abcg']]], + ['glgetuniformblockindex_268',['glGetUniformBlockIndex',['../namespaceabcg.html#a6710abf9cdd9e78d00280c40a56058da',1,'abcg']]], + ['glgetuniformfv_269',['glGetUniformfv',['../namespaceabcg.html#ae51c6519e4ba4b2a237c148d5606d76c',1,'abcg']]], + ['glgetuniformindices_270',['glGetUniformIndices',['../namespaceabcg.html#ace8f774eff785ea7e9f90c1c6b8e4425',1,'abcg']]], + ['glgetuniformiv_271',['glGetUniformiv',['../namespaceabcg.html#a3ed72ff0a3751e87af8369466f3a1cbf',1,'abcg']]], + ['glgetuniformlocation_272',['glGetUniformLocation',['../namespaceabcg.html#a22cb6b45a1ae2153d289a0ee3ac7729a',1,'abcg']]], + ['glgetuniformuiv_273',['glGetUniformuiv',['../namespaceabcg.html#acffb14045c39d65f3f8bead758313fbc',1,'abcg']]], + ['glgetvertexattribfv_274',['glGetVertexAttribfv',['../namespaceabcg.html#aedab4d42e7085a4bab268099b2d1346d',1,'abcg']]], + ['glgetvertexattribiiv_275',['glGetVertexAttribIiv',['../namespaceabcg.html#ad31542472e21428d05473b3ebe2489ee',1,'abcg']]], + ['glgetvertexattribiuiv_276',['glGetVertexAttribIuiv',['../namespaceabcg.html#a6a360138b05890b13f8439344e08512f',1,'abcg']]], + ['glgetvertexattribiv_277',['glGetVertexAttribiv',['../namespaceabcg.html#a78e9cb3ed811f7863b4a0c304a9fb278',1,'abcg']]], + ['glgetvertexattribpointerv_278',['glGetVertexAttribPointerv',['../namespaceabcg.html#aca5b82d3582454e73b1a86192124d485',1,'abcg']]], + ['glhint_279',['glHint',['../namespaceabcg.html#a97c884a2a934bf40d378024d81be625e',1,'abcg']]], + ['glinvalidateframebuffer_280',['glInvalidateFramebuffer',['../namespaceabcg.html#a619e3d0de44a879aa6db3054c39130ec',1,'abcg']]], + ['glinvalidatesubframebuffer_281',['glInvalidateSubFramebuffer',['../namespaceabcg.html#a47b7481c9fc066c9cd54a0f010258818',1,'abcg']]], + ['glisbuffer_282',['glIsBuffer',['../namespaceabcg.html#afb123afaf46459222024ea041cac15c7',1,'abcg']]], + ['glisenabled_283',['glIsEnabled',['../namespaceabcg.html#a2355d26ca6b32f64dd502ba787074e95',1,'abcg']]], + ['glisframebuffer_284',['glIsFramebuffer',['../namespaceabcg.html#abde059e7926e418ee7676f612480ca2e',1,'abcg']]], + ['glisprogram_285',['glIsProgram',['../namespaceabcg.html#ad8512fcd1782c81aaa121cd7e6c561d1',1,'abcg']]], + ['glisquery_286',['glIsQuery',['../namespaceabcg.html#a7a5eac1646a59b2c8de24b4862d3b2d9',1,'abcg']]], + ['glisrenderbuffer_287',['glIsRenderbuffer',['../namespaceabcg.html#a15acb0b1b9464f294f99aa989c44dc70',1,'abcg']]], + ['glissampler_288',['glIsSampler',['../namespaceabcg.html#ad85c0ff02a8b681ecb188752dd8ce9c0',1,'abcg']]], + ['glisshader_289',['glIsShader',['../namespaceabcg.html#a36db9b553f7422ea79b751c5763d194c',1,'abcg']]], + ['glissync_290',['glIsSync',['../namespaceabcg.html#a6e39dbba1c1d91b8df99ab60da87c364',1,'abcg']]], + ['glistexture_291',['glIsTexture',['../namespaceabcg.html#a913e9b053d880a383d8bf3d55cb5ead3',1,'abcg']]], + ['glistransformfeedback_292',['glIsTransformFeedback',['../namespaceabcg.html#aed892da4fd2e2517f53ca8c902d36a31',1,'abcg']]], + ['glisvertexarray_293',['glIsVertexArray',['../namespaceabcg.html#a5afdcd1166d09049b9bea8f425bbd0db',1,'abcg']]], + ['gllinewidth_294',['glLineWidth',['../namespaceabcg.html#aba2cae07b1fe8e188ff0fcc76ec9db8b',1,'abcg']]], + ['gllinkprogram_295',['glLinkProgram',['../namespaceabcg.html#af84c0f4d0816181cba506f1703c037c2',1,'abcg']]], + ['glm_5fforce_5fdepth_5fzero_5fto_5fone_296',['GLM_FORCE_DEPTH_ZERO_TO_ONE',['../abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968',1,'abcgVulkan.hpp']]], + ['glmapbufferrange_297',['glMapBufferRange',['../namespaceabcg.html#aaa863c0c9f439036f6d2b58e375ee105',1,'abcg']]], + ['glpausetransformfeedback_298',['glPauseTransformFeedback',['../namespaceabcg.html#a03d850c93d16ad308516bb83bb8ffa0d',1,'abcg']]], + ['glpixelstorei_299',['glPixelStorei',['../namespaceabcg.html#a05ece875ff476f630548c8cf7a0d952b',1,'abcg']]], + ['glpolygonoffset_300',['glPolygonOffset',['../namespaceabcg.html#afa173d8901021cb88486592fcc300a14',1,'abcg']]], + ['glprogrambinary_301',['glProgramBinary',['../namespaceabcg.html#aa836ddfde2ab9014c8322a66b1fc5bcc',1,'abcg']]], + ['glprogramparameteri_302',['glProgramParameteri',['../namespaceabcg.html#ae48fb31c3e26632acba7e1a9753ee5c9',1,'abcg']]], + ['glreadbuffer_303',['glReadBuffer',['../namespaceabcg.html#a9fbd7418dfcde0cdbb4ff58d29e40a4f',1,'abcg']]], + ['glreadpixels_304',['glReadPixels',['../namespaceabcg.html#ae8720c564832cd331d886e24aaf68c29',1,'abcg']]], + ['glreleaseshadercompiler_305',['glReleaseShaderCompiler',['../namespaceabcg.html#a3e97ab629b7cc5d4c7259e521ebe5fb7',1,'abcg']]], + ['glrenderbufferstorage_306',['glRenderbufferStorage',['../namespaceabcg.html#aae32d699a30865e7aa4c4de786a1d593',1,'abcg']]], + ['glrenderbufferstoragemultisample_307',['glRenderbufferStorageMultisample',['../namespaceabcg.html#aee93697e0e0b92b0b73a9c374d4afff0',1,'abcg']]], + ['glresumetransformfeedback_308',['glResumeTransformFeedback',['../namespaceabcg.html#a81e93970a280fc3782f7577db7060458',1,'abcg']]], + ['glsamplecoverage_309',['glSampleCoverage',['../namespaceabcg.html#adee87442b65fa46fe96cceb6a21d496a',1,'abcg']]], + ['glsamplerparameterf_310',['glSamplerParameterf',['../namespaceabcg.html#aa12216132f4a0242e7f0882c99bc98ad',1,'abcg']]], + ['glsamplerparameterfv_311',['glSamplerParameterfv',['../namespaceabcg.html#a03ba96b4728e99b4f58cce1f3e102b49',1,'abcg']]], + ['glsamplerparameteri_312',['glSamplerParameteri',['../namespaceabcg.html#ae9971e1b8abb781440101bac0968a897',1,'abcg']]], + ['glsamplerparameteriv_313',['glSamplerParameteriv',['../namespaceabcg.html#a304af29cf7db15205236d97e1836e79a',1,'abcg']]], + ['glscissor_314',['glScissor',['../namespaceabcg.html#ae1a3e82a002194c222284c5588998cfb',1,'abcg']]], + ['glshaderbinary_315',['glShaderBinary',['../namespaceabcg.html#af1c355ed607c699a2fbe6b56454b84db',1,'abcg']]], + ['glshadersource_316',['glShaderSource',['../namespaceabcg.html#a828f4d3a0f75f391780765df28ce8914',1,'abcg']]], + ['glsltospv_317',['GLSLtoSPV',['../abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a',1,'abcgVulkanShader.cpp']]], + ['glstencilfunc_318',['glStencilFunc',['../namespaceabcg.html#ad1bc3b8d63e3b65fc3a1222ce789db3a',1,'abcg']]], + ['glstencilfuncseparate_319',['glStencilFuncSeparate',['../namespaceabcg.html#a10f604e428c78fad5ca881ecae15f9df',1,'abcg']]], + ['glstencilmask_320',['glStencilMask',['../namespaceabcg.html#a1f1123ce5bc6fade14962343ad3395f0',1,'abcg']]], + ['glstencilmaskseparate_321',['glStencilMaskSeparate',['../namespaceabcg.html#aadbe72b51aec2a1355ab4a9fc312043c',1,'abcg']]], + ['glstencilop_322',['glStencilOp',['../namespaceabcg.html#a7b172b6de78b247898a24c61d6d1d25f',1,'abcg']]], + ['glstencilopseparate_323',['glStencilOpSeparate',['../namespaceabcg.html#a86ed23edfe4b5ef502fe321f5a40b706',1,'abcg']]], + ['glteximage2d_324',['glTexImage2D',['../namespaceabcg.html#ae220fd2c2bd61130ace06f851609903d',1,'abcg']]], + ['glteximage2dmultisample_325',['glTexImage2DMultisample',['../namespaceabcg.html#aea5f1cc76074ee940772a749cd1b57ad',1,'abcg']]], + ['glteximage3d_326',['glTexImage3D',['../namespaceabcg.html#a55111fa9ae85db9d5c62854dc5cfb735',1,'abcg']]], + ['gltexparameterf_327',['glTexParameterf',['../namespaceabcg.html#a3d91ea0fc162e4a0f5f6060418b6d61c',1,'abcg']]], + ['gltexparameterfv_328',['glTexParameterfv',['../namespaceabcg.html#a9f00bcbf608a6489e1bcbffe964574ea',1,'abcg']]], + ['gltexparameteri_329',['glTexParameteri',['../namespaceabcg.html#a4d4aae2bed9b15f89cd6bf9268cfcd0b',1,'abcg']]], + ['gltexparameteriv_330',['glTexParameteriv',['../namespaceabcg.html#aa4c561c1f3f974025cbf25837f5b0b41',1,'abcg']]], + ['gltexstorage2d_331',['glTexStorage2D',['../namespaceabcg.html#a4573fb1a4dd47d4a692b4602a4009918',1,'abcg']]], + ['gltexstorage3d_332',['glTexStorage3D',['../namespaceabcg.html#af9d8885c892cfeadf62c7280254d57f9',1,'abcg']]], + ['gltexsubimage2d_333',['glTexSubImage2D',['../namespaceabcg.html#a7ff895f0b4b215b432009d5a23645b34',1,'abcg']]], + ['gltexsubimage3d_334',['glTexSubImage3D',['../namespaceabcg.html#a7aaad5778d19c5cc07e1259010dd406a',1,'abcg']]], + ['gltransformfeedbackvaryings_335',['glTransformFeedbackVaryings',['../namespaceabcg.html#a0f8299d53f2d5e195444be565301462c',1,'abcg']]], + ['gluniform1f_336',['glUniform1f',['../namespaceabcg.html#a6f815dac65a78efa2afda323b1cadec9',1,'abcg']]], + ['gluniform1fv_337',['glUniform1fv',['../namespaceabcg.html#a0a55fd40d1c8f2dfc0fd072e5b2c5ebc',1,'abcg']]], + ['gluniform1i_338',['glUniform1i',['../namespaceabcg.html#a17c9ec119f0c1c6d101a042131774ef9',1,'abcg']]], + ['gluniform1iv_339',['glUniform1iv',['../namespaceabcg.html#a2ac0fcc475813238eec19657e6d4899d',1,'abcg']]], + ['gluniform1ui_340',['glUniform1ui',['../namespaceabcg.html#a4566f93a590c2437fab4c2ac07ea1454',1,'abcg']]], + ['gluniform1uiv_341',['glUniform1uiv',['../namespaceabcg.html#ae712e6a279573982c1c5e7c569a47add',1,'abcg']]], + ['gluniform2f_342',['glUniform2f',['../namespaceabcg.html#aeed384502019a1ea9c53c5f79387f4a6',1,'abcg']]], + ['gluniform2fv_343',['glUniform2fv',['../namespaceabcg.html#aba238c1971fc805fb79cc9249a4b3979',1,'abcg']]], + ['gluniform2i_344',['glUniform2i',['../namespaceabcg.html#ab923c4f8e4b6a7928d41e2c557083938',1,'abcg']]], + ['gluniform2iv_345',['glUniform2iv',['../namespaceabcg.html#adf14dfa164b234c7fbed7b45426b2d62',1,'abcg']]], + ['gluniform2ui_346',['glUniform2ui',['../namespaceabcg.html#ac9593131eae76be863d98795053363c5',1,'abcg']]], + ['gluniform2uiv_347',['glUniform2uiv',['../namespaceabcg.html#abeafef647d9a881976fb42ecc4756c8d',1,'abcg']]], + ['gluniform3f_348',['glUniform3f',['../namespaceabcg.html#a3ac2b6654fcb536e3d89e695b84d0229',1,'abcg']]], + ['gluniform3fv_349',['glUniform3fv',['../namespaceabcg.html#a97188797e9d2d99c779647cc2e3b1188',1,'abcg']]], + ['gluniform3i_350',['glUniform3i',['../namespaceabcg.html#a8e3f7eba54f08608b79aa8f3b469a970',1,'abcg']]], + ['gluniform3iv_351',['glUniform3iv',['../namespaceabcg.html#a99d565ab142c3aade17d3bf0165dc348',1,'abcg']]], + ['gluniform3ui_352',['glUniform3ui',['../namespaceabcg.html#aea378f4807f17ed76e8129260b35c1a1',1,'abcg']]], + ['gluniform3uiv_353',['glUniform3uiv',['../namespaceabcg.html#a15c8e64b115ca61dc7bd460af8447497',1,'abcg']]], + ['gluniform4f_354',['glUniform4f',['../namespaceabcg.html#a26ef61adcd575428307b9b9a92dc618c',1,'abcg']]], + ['gluniform4fv_355',['glUniform4fv',['../namespaceabcg.html#a3dbe8b9316fce91031a864a1a7b91497',1,'abcg']]], + ['gluniform4i_356',['glUniform4i',['../namespaceabcg.html#a3276a3ae4b0740216d4850df60881cfe',1,'abcg']]], + ['gluniform4iv_357',['glUniform4iv',['../namespaceabcg.html#afb64d90352e53e92718dd7f10a2822a6',1,'abcg']]], + ['gluniform4ui_358',['glUniform4ui',['../namespaceabcg.html#a506182a6eb4e8158ee10567344152470',1,'abcg']]], + ['gluniform4uiv_359',['glUniform4uiv',['../namespaceabcg.html#ac21f205c4a058a639fd695c4b4bf76fc',1,'abcg']]], + ['gluniformblockbinding_360',['glUniformBlockBinding',['../namespaceabcg.html#a81f720eec72780a58bf7719461d97971',1,'abcg']]], + ['gluniformmatrix2fv_361',['glUniformMatrix2fv',['../namespaceabcg.html#abc150697687bc94d1ec422a5f2db1b88',1,'abcg']]], + ['gluniformmatrix2x3fv_362',['glUniformMatrix2x3fv',['../namespaceabcg.html#ad53649314374711d76ff0b032950e9d2',1,'abcg']]], + ['gluniformmatrix2x4fv_363',['glUniformMatrix2x4fv',['../namespaceabcg.html#ae942855746c560463aed347013e2e84f',1,'abcg']]], + ['gluniformmatrix3fv_364',['glUniformMatrix3fv',['../namespaceabcg.html#a5f5c89006586583bd0cbabbace3a1d94',1,'abcg']]], + ['gluniformmatrix3x2fv_365',['glUniformMatrix3x2fv',['../namespaceabcg.html#abb0b676883c3e5c717cea345b043a372',1,'abcg']]], + ['gluniformmatrix3x4fv_366',['glUniformMatrix3x4fv',['../namespaceabcg.html#a8b8f3bffbbf4e2d6ec0afa0f130f2132',1,'abcg']]], + ['gluniformmatrix4fv_367',['glUniformMatrix4fv',['../namespaceabcg.html#a640ca79d0f9c8636c4161cea447a361d',1,'abcg']]], + ['gluniformmatrix4x2fv_368',['glUniformMatrix4x2fv',['../namespaceabcg.html#a549e5d5f67f44712248cf3e26af0ddd6',1,'abcg']]], + ['gluniformmatrix4x3fv_369',['glUniformMatrix4x3fv',['../namespaceabcg.html#a2a4e0b3c0401e2a85fe389191c5d768f',1,'abcg']]], + ['glunmapbuffer_370',['glUnmapBuffer',['../namespaceabcg.html#a1f475772cbe67c5b2370ef179c99b614',1,'abcg']]], + ['gluseprogram_371',['glUseProgram',['../namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0',1,'abcg']]], + ['glvalidateprogram_372',['glValidateProgram',['../namespaceabcg.html#a4ca1b9c8efcec40ef7506d115807a252',1,'abcg']]], + ['glvertexattrib1f_373',['glVertexAttrib1f',['../namespaceabcg.html#af725d24a5b6b6483d1cd3420dc6ec011',1,'abcg']]], + ['glvertexattrib1fv_374',['glVertexAttrib1fv',['../namespaceabcg.html#aeff647ce94259b8e0fbe731595cf1931',1,'abcg']]], + ['glvertexattrib2f_375',['glVertexAttrib2f',['../namespaceabcg.html#ab0c88524f1c60a35e818cd6f8902c2e7',1,'abcg']]], + ['glvertexattrib2fv_376',['glVertexAttrib2fv',['../namespaceabcg.html#a3be34bb76d1f704893e5ae334488f372',1,'abcg']]], + ['glvertexattrib3f_377',['glVertexAttrib3f',['../namespaceabcg.html#afa1466dac879205506b78b021aafff27',1,'abcg']]], + ['glvertexattrib3fv_378',['glVertexAttrib3fv',['../namespaceabcg.html#aad00233878a4e63de78696409cb8cfe7',1,'abcg']]], + ['glvertexattrib4f_379',['glVertexAttrib4f',['../namespaceabcg.html#a16e4ed4c33c7e9abd8eb412c422c7f8a',1,'abcg']]], + ['glvertexattrib4fv_380',['glVertexAttrib4fv',['../namespaceabcg.html#af15b80a8f2eb74ae9de6f26996d3d51d',1,'abcg']]], + ['glvertexattribdivisor_381',['glVertexAttribDivisor',['../namespaceabcg.html#a6bc99961c0b460aff0c6176e08667ad5',1,'abcg']]], + ['glvertexattribi4i_382',['glVertexAttribI4i',['../namespaceabcg.html#a298da5e81cd558e36acc8517f183330a',1,'abcg']]], + ['glvertexattribi4iv_383',['glVertexAttribI4iv',['../namespaceabcg.html#a2f957d37e18d6883d73b0c4d81c7925f',1,'abcg']]], + ['glvertexattribi4ui_384',['glVertexAttribI4ui',['../namespaceabcg.html#a3f20fa49edff456e65bcbbfc40befa92',1,'abcg']]], + ['glvertexattribi4uiv_385',['glVertexAttribI4uiv',['../namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e',1,'abcg']]], + ['glvertexattribipointer_386',['glVertexAttribIPointer',['../namespaceabcg.html#aa76792de0db9acdbb75c5b7a228dc022',1,'abcg']]], + ['glvertexattribpointer_387',['glVertexAttribPointer',['../namespaceabcg.html#af56cc0ad4060e65221188cfa41a59168',1,'abcg']]], + ['glviewport_388',['glViewport',['../namespaceabcg.html#a4488c395e82a5408c4321a611f039c78',1,'abcg']]], + ['glwaitsync_389',['glWaitSync',['../namespaceabcg.html#a14893e8222fcaac3d07be752b3c72c04',1,'abcg']]], + ['graphics_390',['graphics',['../structabcg_1_1VulkanCommandPools.html#a207d9deea08cda2bb99832828a63a44d',1,'abcg::VulkanCommandPools::graphics()'],['../structabcg_1_1VulkanQueues.html#a9c0f22bd376af220feb2ffb92962408d',1,'abcg::VulkanQueues::graphics()'],['../structabcg_1_1VulkanQueuesFamilies.html#afd66ca6fa2734f9789ed51809e74b034',1,'abcg::VulkanQueuesFamilies::graphics()']]] ]; diff --git a/abcg/doc/html/search/all_7.js b/abcg/doc/html/search/all_7.js index 5ee27f61b..3b4fd80b4 100644 --- a/abcg/doc/html/search/all_7.js +++ b/abcg/doc/html/search/all_7.js @@ -1,7 +1,7 @@ var searchData= [ - ['handleevent_397',['handleEvent',['../classabcg_1_1Window.html#a7e2b0741b0314a4e6472353de3de1633',1,'abcg::Window']]], - ['hashcombine_398',['hashCombine',['../namespaceabcg.html#aed04a19d18acb506c896c2f220d495c1',1,'abcg']]], - ['hashcombineseed_399',['hashCombineSeed',['../namespaceabcg.html#a087b770c423ea0ec8a1e54e655dbb0a0',1,'abcg']]], - ['height_400',['height',['../structabcg_1_1WindowSettings.html#a7248a419830adea17916558922e05e9d',1,'abcg::WindowSettings']]] + ['handleevent_391',['handleEvent',['../classabcg_1_1Window.html#a7e2b0741b0314a4e6472353de3de1633',1,'abcg::Window']]], + ['hashcombine_392',['hashCombine',['../namespaceabcg.html#aed04a19d18acb506c896c2f220d495c1',1,'abcg']]], + ['hashcombineseed_393',['hashCombineSeed',['../namespaceabcg.html#a087b770c423ea0ec8a1e54e655dbb0a0',1,'abcg']]], + ['height_394',['height',['../structabcg_1_1WindowSettings.html#a7248a419830adea17916558922e05e9d',1,'abcg::WindowSettings']]] ]; diff --git a/abcg/doc/html/search/all_8.js b/abcg/doc/html/search/all_8.js index 68d480829..4c140bf61 100644 --- a/abcg/doc/html/search/all_8.js +++ b/abcg/doc/html/search/all_8.js @@ -1,7 +1,7 @@ var searchData= [ - ['index_401',['index',['../structabcg_1_1VulkanFrame.html#a13923e36b6699adeac0d6d77303b8cc1',1,'abcg::VulkanFrame']]], - ['info_402',['info',['../structabcg_1_1VulkanImageCreateInfo.html#a23600b7bb3043910f998e6f628a8f8e2',1,'abcg::VulkanImageCreateInfo']]], - ['inputassemblystate_403',['inputAssemblyState',['../structabcg_1_1VulkanPipelineCreateInfo.html#accfcb22092ee18ee7ef87a871f3748c2',1,'abcg::VulkanPipelineCreateInfo']]], - ['intersection_404',['Intersection',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa06d31c2ee920b4d53e8c9c06d90ba24',1,'abcg']]] + ['index_395',['index',['../structabcg_1_1VulkanFrame.html#a13923e36b6699adeac0d6d77303b8cc1',1,'abcg::VulkanFrame']]], + ['info_396',['info',['../structabcg_1_1VulkanImageCreateInfo.html#a23600b7bb3043910f998e6f628a8f8e2',1,'abcg::VulkanImageCreateInfo']]], + ['inputassemblystate_397',['inputAssemblyState',['../structabcg_1_1VulkanPipelineCreateInfo.html#accfcb22092ee18ee7ef87a871f3748c2',1,'abcg::VulkanPipelineCreateInfo']]], + ['intersection_398',['Intersection',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa06d31c2ee920b4d53e8c9c06d90ba24',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/all_9.js b/abcg/doc/html/search/all_9.js index 64d883ca7..28a463b83 100644 --- a/abcg/doc/html/search/all_9.js +++ b/abcg/doc/html/search/all_9.js @@ -1,6 +1,6 @@ var searchData= [ - ['loaddata_405',['loadData',['../classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b',1,'abcg::VulkanBuffer']]], - ['loadopenglcubemap_406',['loadOpenGLCubemap',['../namespaceabcg.html#a39af18b7fd13bbdcd404b344ca29014e',1,'abcg']]], - ['loadopengltexture_407',['loadOpenGLTexture',['../namespaceabcg.html#ae4a5204a112c5bfabcab65d66f49aa8d',1,'abcg']]] + ['loaddata_399',['loadData',['../classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b',1,'abcg::VulkanBuffer']]], + ['loadopenglcubemap_400',['loadOpenGLCubemap',['../namespaceabcg.html#a39af18b7fd13bbdcd404b344ca29014e',1,'abcg']]], + ['loadopengltexture_401',['loadOpenGLTexture',['../namespaceabcg.html#ae4a5204a112c5bfabcab65d66f49aa8d',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/all_a.js b/abcg/doc/html/search/all_a.js index 0623b9a5f..35512688a 100644 --- a/abcg/doc/html/search/all_a.js +++ b/abcg/doc/html/search/all_a.js @@ -1,11 +1,11 @@ var searchData= [ - ['majorversion_408',['majorVersion',['../structabcg_1_1OpenGLSettings.html#afc7fa9f1313149f8adf2ae0cca988419',1,'abcg::OpenGLSettings']]], - ['mesh_409',['Mesh',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa710fdb6adb881b408116ef95335e1961',1,'abcg']]], - ['minorversion_410',['minorVersion',['../structabcg_1_1OpenGLSettings.html#ab6cd2256bf7a8ba13ca1a9d6d8c5430f',1,'abcg::OpenGLSettings']]], - ['miss_411',['Miss',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daae7ddb7cd777b59610b220bcfa80bd95f',1,'abcg']]], - ['mousemove_412',['mouseMove',['../classabcg_1_1TrackBall.html#ad19937746c776c6d57c649d5fc7ff946',1,'abcg::TrackBall']]], - ['mousepress_413',['mousePress',['../classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b',1,'abcg::TrackBall']]], - ['mouserelease_414',['mouseRelease',['../classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe',1,'abcg::TrackBall']]], - ['multisamplestate_415',['multisampleState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a706358a130780833d6142a57c44d8e6b',1,'abcg::VulkanPipelineCreateInfo']]] + ['majorversion_402',['majorVersion',['../structabcg_1_1OpenGLSettings.html#afc7fa9f1313149f8adf2ae0cca988419',1,'abcg::OpenGLSettings']]], + ['mesh_403',['Mesh',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa710fdb6adb881b408116ef95335e1961',1,'abcg']]], + ['minorversion_404',['minorVersion',['../structabcg_1_1OpenGLSettings.html#ab6cd2256bf7a8ba13ca1a9d6d8c5430f',1,'abcg::OpenGLSettings']]], + ['miss_405',['Miss',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daae7ddb7cd777b59610b220bcfa80bd95f',1,'abcg']]], + ['mousemove_406',['mouseMove',['../classabcg_1_1TrackBall.html#ad19937746c776c6d57c649d5fc7ff946',1,'abcg::TrackBall']]], + ['mousepress_407',['mousePress',['../classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b',1,'abcg::TrackBall']]], + ['mouserelease_408',['mouseRelease',['../classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe',1,'abcg::TrackBall']]], + ['multisamplestate_409',['multisampleState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a706358a130780833d6142a57c44d8e6b',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/all_b.js b/abcg/doc/html/search/all_b.js index c56dae4a7..06bb58b13 100644 --- a/abcg/doc/html/search/all_b.js +++ b/abcg/doc/html/search/all_b.js @@ -1,25 +1,25 @@ var searchData= [ - ['buffer_20const_20_26_416',['Buffer const &',['../classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e',1,'abcg::VulkanBuffer']]], - ['device_20const_20_26_417',['Device const &',['../classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a',1,'abcg::VulkanDevice']]], - ['image_20const_20_26_418',['Image const &',['../classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986',1,'abcg::VulkanImage']]], - ['instance_20const_20_26_419',['Instance const &',['../classabcg_1_1VulkanInstance.html#a6ec883f5f84307353b0bbfe85e5c749f',1,'abcg::VulkanInstance']]], - ['oncreate_420',['onCreate',['../classabcg_1_1OpenGLWindow.html#adf60bc348bac241ebaafc74fc958f797',1,'abcg::OpenGLWindow::onCreate()'],['../classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679',1,'abcg::VulkanWindow::onCreate()']]], - ['ondestroy_421',['onDestroy',['../classabcg_1_1OpenGLWindow.html#a728da166bea2399508752ac30f055fbd',1,'abcg::OpenGLWindow::onDestroy()'],['../classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a',1,'abcg::VulkanWindow::onDestroy()']]], - ['onevent_422',['onEvent',['../classabcg_1_1OpenGLWindow.html#ac883112c71084751a6b6c6bde5ef4882',1,'abcg::OpenGLWindow::onEvent()'],['../classabcg_1_1VulkanWindow.html#ab8bd7fb6dcf8e770d1108ae6667c4762',1,'abcg::VulkanWindow::onEvent()']]], - ['onpaint_423',['onPaint',['../classabcg_1_1OpenGLWindow.html#a792a900730690de42f2511b9aa83c016',1,'abcg::OpenGLWindow::onPaint()'],['../classabcg_1_1VulkanWindow.html#a2325095d54d08ec014f4173242565205',1,'abcg::VulkanWindow::onPaint()']]], - ['onpaintui_424',['onPaintUI',['../classabcg_1_1OpenGLWindow.html#ac46e03a19382c3becfb615de33ae8b79',1,'abcg::OpenGLWindow::onPaintUI()'],['../classabcg_1_1VulkanWindow.html#a42ea921c25307e0edcbf6271e52ef3c0',1,'abcg::VulkanWindow::onPaintUI()']]], - ['onresize_425',['onResize',['../classabcg_1_1VulkanWindow.html#a9c80fcb8dc6f482a4b440a273ca69902',1,'abcg::VulkanWindow::onResize()'],['../classabcg_1_1OpenGLWindow.html#a3752d51b1a5c75ed5a2322aceafbb59e',1,'abcg::OpenGLWindow::onResize(glm::ivec2 const &size)']]], - ['onupdate_426',['onUpdate',['../classabcg_1_1OpenGLWindow.html#a71588879a55ea01d33e554d552d2958d',1,'abcg::OpenGLWindow::onUpdate()'],['../classabcg_1_1VulkanWindow.html#ac32aced497100ccc33ae89d6181c2df5',1,'abcg::VulkanWindow::onUpdate()']]], - ['openglcubemapcreateinfo_427',['OpenGLCubemapCreateInfo',['../structabcg_1_1OpenGLCubemapCreateInfo.html',1,'abcg']]], - ['openglerror_428',['OpenGLError',['../classabcg_1_1OpenGLError.html',1,'abcg::OpenGLError'],['../classabcg_1_1OpenGLError.html#a6f1a5080226aa9434ef1f5b096710fa0',1,'abcg::OpenGLError::OpenGLError()']]], - ['openglprofile_429',['OpenGLProfile',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328e',1,'abcg']]], - ['openglsettings_430',['OpenGLSettings',['../structabcg_1_1OpenGLSettings.html',1,'abcg']]], - ['openglshader_431',['OpenGLShader',['../structabcg_1_1OpenGLShader.html',1,'abcg']]], - ['opengltexturecreateinfo_432',['OpenGLTextureCreateInfo',['../structabcg_1_1OpenGLTextureCreateInfo.html',1,'abcg']]], - ['openglwindow_433',['OpenGLWindow',['../classabcg_1_1OpenGLWindow.html',1,'abcg']]], - ['operator_3d_434',['operator=',['../classabcg_1_1Window.html#a2cad313eeee01bf3b89e248cd25ed71e',1,'abcg::Window::operator=(Window const &)=delete'],['../classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637',1,'abcg::Window::operator=(Window &&)=default']]], - ['physicaldevice_20const_20_26_435',['PhysicalDevice const &',['../classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1',1,'abcg::VulkanPhysicalDevice']]], - ['pipeline_20const_20_26_436',['Pipeline const &',['../classabcg_1_1VulkanPipeline.html#a49a3fddd5247929486f870e4f4d64419',1,'abcg::VulkanPipeline']]], - ['swapchainkhr_20const_20_26_437',['SwapchainKHR const &',['../classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7',1,'abcg::VulkanSwapchain']]] + ['buffer_20const_20_26_410',['Buffer const &',['../classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e',1,'abcg::VulkanBuffer']]], + ['device_20const_20_26_411',['Device const &',['../classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a',1,'abcg::VulkanDevice']]], + ['image_20const_20_26_412',['Image const &',['../classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986',1,'abcg::VulkanImage']]], + ['instance_20const_20_26_413',['Instance const &',['../classabcg_1_1VulkanInstance.html#a6ec883f5f84307353b0bbfe85e5c749f',1,'abcg::VulkanInstance']]], + ['oncreate_414',['onCreate',['../classabcg_1_1OpenGLWindow.html#adf60bc348bac241ebaafc74fc958f797',1,'abcg::OpenGLWindow::onCreate()'],['../classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679',1,'abcg::VulkanWindow::onCreate()']]], + ['ondestroy_415',['onDestroy',['../classabcg_1_1OpenGLWindow.html#a728da166bea2399508752ac30f055fbd',1,'abcg::OpenGLWindow::onDestroy()'],['../classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a',1,'abcg::VulkanWindow::onDestroy()']]], + ['onevent_416',['onEvent',['../classabcg_1_1OpenGLWindow.html#ac883112c71084751a6b6c6bde5ef4882',1,'abcg::OpenGLWindow::onEvent()'],['../classabcg_1_1VulkanWindow.html#ab8bd7fb6dcf8e770d1108ae6667c4762',1,'abcg::VulkanWindow::onEvent()']]], + ['onpaint_417',['onPaint',['../classabcg_1_1OpenGLWindow.html#a792a900730690de42f2511b9aa83c016',1,'abcg::OpenGLWindow::onPaint()'],['../classabcg_1_1VulkanWindow.html#a2325095d54d08ec014f4173242565205',1,'abcg::VulkanWindow::onPaint()']]], + ['onpaintui_418',['onPaintUI',['../classabcg_1_1OpenGLWindow.html#ac46e03a19382c3becfb615de33ae8b79',1,'abcg::OpenGLWindow::onPaintUI()'],['../classabcg_1_1VulkanWindow.html#a42ea921c25307e0edcbf6271e52ef3c0',1,'abcg::VulkanWindow::onPaintUI()']]], + ['onresize_419',['onResize',['../classabcg_1_1VulkanWindow.html#a9c80fcb8dc6f482a4b440a273ca69902',1,'abcg::VulkanWindow::onResize()'],['../classabcg_1_1OpenGLWindow.html#a3752d51b1a5c75ed5a2322aceafbb59e',1,'abcg::OpenGLWindow::onResize(glm::ivec2 const &size)']]], + ['onupdate_420',['onUpdate',['../classabcg_1_1OpenGLWindow.html#a71588879a55ea01d33e554d552d2958d',1,'abcg::OpenGLWindow::onUpdate()'],['../classabcg_1_1VulkanWindow.html#ac32aced497100ccc33ae89d6181c2df5',1,'abcg::VulkanWindow::onUpdate()']]], + ['openglcubemapcreateinfo_421',['OpenGLCubemapCreateInfo',['../structabcg_1_1OpenGLCubemapCreateInfo.html',1,'abcg']]], + ['openglerror_422',['OpenGLError',['../classabcg_1_1OpenGLError.html',1,'abcg::OpenGLError'],['../classabcg_1_1OpenGLError.html#a6f1a5080226aa9434ef1f5b096710fa0',1,'abcg::OpenGLError::OpenGLError()']]], + ['openglprofile_423',['OpenGLProfile',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328e',1,'abcg']]], + ['openglsettings_424',['OpenGLSettings',['../structabcg_1_1OpenGLSettings.html',1,'abcg']]], + ['openglshader_425',['OpenGLShader',['../structabcg_1_1OpenGLShader.html',1,'abcg']]], + ['opengltexturecreateinfo_426',['OpenGLTextureCreateInfo',['../structabcg_1_1OpenGLTextureCreateInfo.html',1,'abcg']]], + ['openglwindow_427',['OpenGLWindow',['../classabcg_1_1OpenGLWindow.html',1,'abcg']]], + ['operator_3d_428',['operator=',['../classabcg_1_1Window.html#a2cad313eeee01bf3b89e248cd25ed71e',1,'abcg::Window::operator=(Window const &)=delete'],['../classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637',1,'abcg::Window::operator=(Window &&)=default']]], + ['physicaldevice_20const_20_26_429',['PhysicalDevice const &',['../classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1',1,'abcg::VulkanPhysicalDevice']]], + ['pipeline_20const_20_26_430',['Pipeline const &',['../classabcg_1_1VulkanPipeline.html#a49a3fddd5247929486f870e4f4d64419',1,'abcg::VulkanPipeline']]], + ['swapchainkhr_20const_20_26_431',['SwapchainKHR const &',['../classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7',1,'abcg::VulkanSwapchain']]] ]; diff --git a/abcg/doc/html/search/all_c.js b/abcg/doc/html/search/all_c.js index 08924be87..03b439cf7 100644 --- a/abcg/doc/html/search/all_c.js +++ b/abcg/doc/html/search/all_c.js @@ -1,11 +1,11 @@ var searchData= [ - ['paint_438',['paint',['../classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0',1,'abcg::Window']]], - ['path_439',['path',['../structabcg_1_1OpenGLTextureCreateInfo.html#aa530e14dd1ebe827bdbb1e12c2fde9eb',1,'abcg::OpenGLTextureCreateInfo']]], - ['paths_440',['paths',['../structabcg_1_1OpenGLCubemapCreateInfo.html#aa7c351d152aa3cbe2489d1c0a3321cf0',1,'abcg::OpenGLCubemapCreateInfo']]], - ['pipelinecache_441',['pipelineCache',['../structabcg_1_1VulkanPipelineCreateInfo.html#a458a37fb1c02f8e8f38e225e03958e4b',1,'abcg::VulkanPipelineCreateInfo']]], - ['pipelinelayout_442',['pipelineLayout',['../structabcg_1_1VulkanPipelineCreateInfo.html#af6f17be735d6640f8ba1acca984888b7',1,'abcg::VulkanPipelineCreateInfo']]], - ['present_443',['present',['../structabcg_1_1VulkanQueues.html#ae2266d17e17ae1aaa598c1401a9d5693',1,'abcg::VulkanQueues::present()'],['../structabcg_1_1VulkanQueuesFamilies.html#af4cb4d7aaea6ea89c19a416d4bbb396e',1,'abcg::VulkanQueuesFamilies::present()'],['../classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b',1,'abcg::VulkanSwapchain::present()']]], - ['profile_444',['profile',['../structabcg_1_1OpenGLSettings.html#aea12bf2d9cab8d22450248f53cc53c06',1,'abcg::OpenGLSettings']]], - ['properties_445',['properties',['../structabcg_1_1VulkanBufferCreateInfo.html#aaf7fd4b23a9eebef487087cca6150465',1,'abcg::VulkanBufferCreateInfo::properties()'],['../structabcg_1_1VulkanImageCreateInfo.html#ad7e70aa61a2a45bbd88470c0cb299430',1,'abcg::VulkanImageCreateInfo::properties()']]] + ['paint_432',['paint',['../classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0',1,'abcg::Window']]], + ['path_433',['path',['../structabcg_1_1OpenGLTextureCreateInfo.html#aa530e14dd1ebe827bdbb1e12c2fde9eb',1,'abcg::OpenGLTextureCreateInfo']]], + ['paths_434',['paths',['../structabcg_1_1OpenGLCubemapCreateInfo.html#aa7c351d152aa3cbe2489d1c0a3321cf0',1,'abcg::OpenGLCubemapCreateInfo']]], + ['pipelinecache_435',['pipelineCache',['../structabcg_1_1VulkanPipelineCreateInfo.html#a458a37fb1c02f8e8f38e225e03958e4b',1,'abcg::VulkanPipelineCreateInfo']]], + ['pipelinelayout_436',['pipelineLayout',['../structabcg_1_1VulkanPipelineCreateInfo.html#af6f17be735d6640f8ba1acca984888b7',1,'abcg::VulkanPipelineCreateInfo']]], + ['present_437',['present',['../structabcg_1_1VulkanQueues.html#ae2266d17e17ae1aaa598c1401a9d5693',1,'abcg::VulkanQueues::present()'],['../structabcg_1_1VulkanQueuesFamilies.html#af4cb4d7aaea6ea89c19a416d4bbb396e',1,'abcg::VulkanQueuesFamilies::present()'],['../classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b',1,'abcg::VulkanSwapchain::present()']]], + ['profile_438',['profile',['../structabcg_1_1OpenGLSettings.html#aea12bf2d9cab8d22450248f53cc53c06',1,'abcg::OpenGLSettings']]], + ['properties_439',['properties',['../structabcg_1_1VulkanBufferCreateInfo.html#aaf7fd4b23a9eebef487087cca6150465',1,'abcg::VulkanBufferCreateInfo::properties()'],['../structabcg_1_1VulkanImageCreateInfo.html#ad7e70aa61a2a45bbd88470c0cb299430',1,'abcg::VulkanImageCreateInfo::properties()']]] ]; diff --git a/abcg/doc/html/search/all_d.js b/abcg/doc/html/search/all_d.js index a7393417e..23ff04edc 100644 --- a/abcg/doc/html/search/all_d.js +++ b/abcg/doc/html/search/all_d.js @@ -1,14 +1,14 @@ var searchData= [ - ['rasterizationstate_446',['rasterizationState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3ac302c83e1a05758d9fe1efb4d593be',1,'abcg::VulkanPipelineCreateInfo']]], - ['raygen_447',['RayGen',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa4b2766e948a345bc42a34d6ae00b329a',1,'abcg']]], - ['readme_2emd_448',['README.md',['../README_8md.html',1,'']]], - ['release_20notes_449',['Release notes',['../md__home_harlen_dev_abcg_CHANGELOG.html',1,'']]], - ['render_450',['render',['../classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830',1,'abcg::VulkanSwapchain']]], - ['resizeviewport_451',['resizeViewport',['../classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da',1,'abcg::TrackBall']]], - ['resizingeventwatcher_452',['resizingEventWatcher',['../classabcg_1_1Window.html#a33a77ed4888300e0008bb92fb5fec509',1,'abcg::Window::resizingEventWatcher()'],['../namespaceabcg.html#a6825799aa852dc7612dad9326be2fb3b',1,'abcg::resizingEventWatcher()']]], - ['restart_453',['restart',['../classabcg_1_1Timer.html#a5cdb94e9a81ed24604079384a40cb56c',1,'abcg::Timer']]], - ['righthandedsystem_454',['rightHandedSystem',['../structabcg_1_1OpenGLCubemapCreateInfo.html#a243dcbc334ab16177e9a1c602da5b137',1,'abcg::OpenGLCubemapCreateInfo']]], - ['run_455',['run',['../classabcg_1_1Application.html#aa5a85168c861a3502d37a1336f1aae0d',1,'abcg::Application']]], - ['runtimeerror_456',['RuntimeError',['../classabcg_1_1RuntimeError.html',1,'abcg::RuntimeError'],['../classabcg_1_1RuntimeError.html#a763cafc3e784884aff12f98e58d189c9',1,'abcg::RuntimeError::RuntimeError()']]] + ['rasterizationstate_440',['rasterizationState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3ac302c83e1a05758d9fe1efb4d593be',1,'abcg::VulkanPipelineCreateInfo']]], + ['raygen_441',['RayGen',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa4b2766e948a345bc42a34d6ae00b329a',1,'abcg']]], + ['readme_2emd_442',['README.md',['../README_8md.html',1,'']]], + ['release_20notes_443',['Release notes',['../md__home_harlen_dev_abcg_CHANGELOG.html',1,'']]], + ['render_444',['render',['../classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830',1,'abcg::VulkanSwapchain']]], + ['resizeviewport_445',['resizeViewport',['../classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da',1,'abcg::TrackBall']]], + ['resizingeventwatcher_446',['resizingEventWatcher',['../classabcg_1_1Window.html#a33a77ed4888300e0008bb92fb5fec509',1,'abcg::Window::resizingEventWatcher()'],['../namespaceabcg.html#a6825799aa852dc7612dad9326be2fb3b',1,'abcg::resizingEventWatcher()']]], + ['restart_447',['restart',['../classabcg_1_1Timer.html#a5cdb94e9a81ed24604079384a40cb56c',1,'abcg::Timer']]], + ['righthandedsystem_448',['rightHandedSystem',['../structabcg_1_1OpenGLCubemapCreateInfo.html#a243dcbc334ab16177e9a1c602da5b137',1,'abcg::OpenGLCubemapCreateInfo']]], + ['run_449',['run',['../classabcg_1_1Application.html#aa5a85168c861a3502d37a1336f1aae0d',1,'abcg::Application']]], + ['runtimeerror_450',['RuntimeError',['../classabcg_1_1RuntimeError.html',1,'abcg::RuntimeError'],['../classabcg_1_1RuntimeError.html#a763cafc3e784884aff12f98e58d189c9',1,'abcg::RuntimeError::RuntimeError()']]] ]; diff --git a/abcg/doc/html/search/all_e.js b/abcg/doc/html/search/all_e.js index 5c29ef639..e0e5f41bf 100644 --- a/abcg/doc/html/search/all_e.js +++ b/abcg/doc/html/search/all_e.js @@ -1,26 +1,26 @@ var searchData= [ - ['samples_457',['samples',['../structabcg_1_1OpenGLSettings.html#a638f3bdcce5d64d33af0ea962e1d442b',1,'abcg::OpenGLSettings::samples()'],['../structabcg_1_1VulkanSettings.html#a2313becf3db6422e7e21db4c85a6ca3e',1,'abcg::VulkanSettings::samples()']]], - ['savescreenshotpng_458',['saveScreenshotPNG',['../classabcg_1_1OpenGLWindow.html#a800dee62e340fda9f5e8cd56a87a92ff',1,'abcg::OpenGLWindow']]], - ['scissors_459',['scissors',['../structabcg_1_1VulkanPipelineCreateInfo.html#a1e14b7422be45775bd1f32d6b7b781f6',1,'abcg::VulkanPipelineCreateInfo']]], - ['sdlerror_460',['SDLError',['../classabcg_1_1SDLError.html',1,'abcg::SDLError'],['../classabcg_1_1SDLError.html#acda7cd2b446cebf8bc34bdd6b49650ae',1,'abcg::SDLError::SDLError()']]], - ['sdlimageerror_461',['SDLImageError',['../classabcg_1_1SDLImageError.html',1,'abcg::SDLImageError'],['../classabcg_1_1SDLImageError.html#aa74124d1d9ad554b40bed725fdeecbf4',1,'abcg::SDLImageError::SDLImageError()']]], - ['setaxis_462',['setAxis',['../classabcg_1_1TrackBall.html#a77d9bbdf49272b6c04109cfbd8479693',1,'abcg::TrackBall']]], - ['setenableresizingeventwatcher_463',['setEnableResizingEventWatcher',['../classabcg_1_1Window.html#ac78275433807c6bef0d803c025239a6e',1,'abcg::Window']]], - ['setopenglsettings_464',['setOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#ad22c7e5387a252da2f674afbaceb6067',1,'abcg::OpenGLWindow']]], - ['setvelocity_465',['setVelocity',['../classabcg_1_1TrackBall.html#a19087363b152d422ae6b4d3e5bc1df89',1,'abcg::TrackBall']]], - ['setvulkansettings_466',['setVulkanSettings',['../classabcg_1_1VulkanWindow.html#ab3a719010faef282c83eacb999d0c3e6',1,'abcg::VulkanWindow']]], - ['setwindowsettings_467',['setWindowSettings',['../classabcg_1_1Window.html#a893b26152c708ec954c5dd14dcc1e277',1,'abcg::Window']]], - ['shader_468',['shader',['../structabcg_1_1OpenGLShader.html#a11bf84aa5bd59ff6922c8dd7e2584d0a',1,'abcg::OpenGLShader']]], - ['shaders_469',['shaders',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3e96b2025d8cc1ffba218670c2403fa9',1,'abcg::VulkanPipelineCreateInfo']]], - ['shadersource_470',['ShaderSource',['../structabcg_1_1ShaderSource.html',1,'abcg']]], - ['shaderstage_471',['ShaderStage',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40da',1,'abcg']]], - ['showfps_472',['showFPS',['../structabcg_1_1WindowSettings.html#aabd375c2547aa72f935e2424001aa028',1,'abcg::WindowSettings']]], - ['showfullscreenbutton_473',['showFullscreenButton',['../structabcg_1_1WindowSettings.html#a1e5f889ea5ca8aff15df1a14f394a95c',1,'abcg::WindowSettings']]], - ['size_474',['size',['../structabcg_1_1VulkanBufferCreateInfo.html#a862c279c01a8d9d85f1e90b6f12d0dc3',1,'abcg::VulkanBufferCreateInfo']]], - ['source_475',['source',['../structabcg_1_1ShaderSource.html#acbbc27c5cbecd70681a56edf39f5ff47',1,'abcg::ShaderSource']]], - ['source_5flocation_476',['source_location',['../namespaceabcg.html#acb1d90de1449e0e743214d0ae8bddff2',1,'abcg']]], - ['srgbtolinear_477',['sRGBToLinear',['../structabcg_1_1OpenGLTextureCreateInfo.html#acee939c3416c3b9c6ca3263740063f3c',1,'abcg::OpenGLTextureCreateInfo']]], - ['stage_478',['stage',['../structabcg_1_1OpenGLShader.html#a7b8598c453a1d9a6f9013ceba863cc53',1,'abcg::OpenGLShader::stage()'],['../structabcg_1_1ShaderSource.html#aea139da85d000dcb2b3127081d26423e',1,'abcg::ShaderSource::stage()']]], - ['stencilbuffersize_479',['stencilBufferSize',['../structabcg_1_1OpenGLSettings.html#ada0db76607a2f84573763ceeeeb882c9',1,'abcg::OpenGLSettings::stencilBufferSize()'],['../structabcg_1_1VulkanSettings.html#ac946ad39a7588eb5a960cd3b3fbf2092',1,'abcg::VulkanSettings::stencilBufferSize()']]] + ['samples_451',['samples',['../structabcg_1_1OpenGLSettings.html#a638f3bdcce5d64d33af0ea962e1d442b',1,'abcg::OpenGLSettings::samples()'],['../structabcg_1_1VulkanSettings.html#a2313becf3db6422e7e21db4c85a6ca3e',1,'abcg::VulkanSettings::samples()']]], + ['savescreenshotpng_452',['saveScreenshotPNG',['../classabcg_1_1OpenGLWindow.html#a800dee62e340fda9f5e8cd56a87a92ff',1,'abcg::OpenGLWindow']]], + ['scissors_453',['scissors',['../structabcg_1_1VulkanPipelineCreateInfo.html#a1e14b7422be45775bd1f32d6b7b781f6',1,'abcg::VulkanPipelineCreateInfo']]], + ['sdlerror_454',['SDLError',['../classabcg_1_1SDLError.html',1,'abcg::SDLError'],['../classabcg_1_1SDLError.html#acda7cd2b446cebf8bc34bdd6b49650ae',1,'abcg::SDLError::SDLError()']]], + ['sdlimageerror_455',['SDLImageError',['../classabcg_1_1SDLImageError.html',1,'abcg::SDLImageError'],['../classabcg_1_1SDLImageError.html#aa74124d1d9ad554b40bed725fdeecbf4',1,'abcg::SDLImageError::SDLImageError()']]], + ['setaxis_456',['setAxis',['../classabcg_1_1TrackBall.html#a78c570b915dd329448b0a6110da57af8',1,'abcg::TrackBall']]], + ['setenableresizingeventwatcher_457',['setEnableResizingEventWatcher',['../classabcg_1_1Window.html#ac78275433807c6bef0d803c025239a6e',1,'abcg::Window']]], + ['setopenglsettings_458',['setOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#ad22c7e5387a252da2f674afbaceb6067',1,'abcg::OpenGLWindow']]], + ['setvelocity_459',['setVelocity',['../classabcg_1_1TrackBall.html#abdd3ed81210312f961aba9d9a6ab940f',1,'abcg::TrackBall']]], + ['setvulkansettings_460',['setVulkanSettings',['../classabcg_1_1VulkanWindow.html#ab3a719010faef282c83eacb999d0c3e6',1,'abcg::VulkanWindow']]], + ['setwindowsettings_461',['setWindowSettings',['../classabcg_1_1Window.html#a893b26152c708ec954c5dd14dcc1e277',1,'abcg::Window']]], + ['shader_462',['shader',['../structabcg_1_1OpenGLShader.html#a11bf84aa5bd59ff6922c8dd7e2584d0a',1,'abcg::OpenGLShader']]], + ['shaders_463',['shaders',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3e96b2025d8cc1ffba218670c2403fa9',1,'abcg::VulkanPipelineCreateInfo']]], + ['shadersource_464',['ShaderSource',['../structabcg_1_1ShaderSource.html',1,'abcg']]], + ['shaderstage_465',['ShaderStage',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40da',1,'abcg']]], + ['showfps_466',['showFPS',['../structabcg_1_1WindowSettings.html#aabd375c2547aa72f935e2424001aa028',1,'abcg::WindowSettings']]], + ['showfullscreenbutton_467',['showFullscreenButton',['../structabcg_1_1WindowSettings.html#a1e5f889ea5ca8aff15df1a14f394a95c',1,'abcg::WindowSettings']]], + ['size_468',['size',['../structabcg_1_1VulkanBufferCreateInfo.html#a862c279c01a8d9d85f1e90b6f12d0dc3',1,'abcg::VulkanBufferCreateInfo']]], + ['source_469',['source',['../structabcg_1_1ShaderSource.html#acbbc27c5cbecd70681a56edf39f5ff47',1,'abcg::ShaderSource']]], + ['source_5flocation_470',['source_location',['../namespaceabcg.html#acb1d90de1449e0e743214d0ae8bddff2',1,'abcg']]], + ['srgbtolinear_471',['sRGBToLinear',['../structabcg_1_1OpenGLTextureCreateInfo.html#acee939c3416c3b9c6ca3263740063f3c',1,'abcg::OpenGLTextureCreateInfo']]], + ['stage_472',['stage',['../structabcg_1_1OpenGLShader.html#a7b8598c453a1d9a6f9013ceba863cc53',1,'abcg::OpenGLShader::stage()'],['../structabcg_1_1ShaderSource.html#aea139da85d000dcb2b3127081d26423e',1,'abcg::ShaderSource::stage()']]], + ['stencilbuffersize_473',['stencilBufferSize',['../structabcg_1_1OpenGLSettings.html#ada0db76607a2f84573763ceeeeb882c9',1,'abcg::OpenGLSettings::stencilBufferSize()'],['../structabcg_1_1VulkanSettings.html#ac946ad39a7588eb5a960cd3b3fbf2092',1,'abcg::VulkanSettings::stencilBufferSize()']]] ]; diff --git a/abcg/doc/html/search/all_f.js b/abcg/doc/html/search/all_f.js index 2e42b1dfb..f1f8c8d9e 100644 --- a/abcg/doc/html/search/all_f.js +++ b/abcg/doc/html/search/all_f.js @@ -1,13 +1,16 @@ var searchData= [ - ['task_480',['Task',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaeaeb30f9f18e0c50b178676f3eaef45f',1,'abcg']]], - ['tessellationcontrol_481',['TessellationControl',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa91a08ad964ef35c89ae69cd4176cfb4a',1,'abcg']]], - ['tessellationevaluation_482',['TessellationEvaluation',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa85a5d743bd284736223e3c1e95c6b952',1,'abcg']]], - ['timer_483',['Timer',['../classabcg_1_1Timer.html',1,'abcg']]], - ['title_484',['title',['../structabcg_1_1WindowSettings.html#a8136786953b8042eda46ff55298a4d9d',1,'abcg::WindowSettings']]], - ['togglefullscreen_485',['toggleFullscreen',['../classabcg_1_1Window.html#acc923148257095b1baf454607ef21ad6',1,'abcg::Window']]], - ['trackball_486',['TrackBall',['../classabcg_1_1TrackBall.html',1,'abcg']]], - ['transfer_487',['transfer',['../structabcg_1_1VulkanCommandPools.html#aa0c7811d81fa0c51293bd3f6dbe3f4f4',1,'abcg::VulkanCommandPools::transfer()'],['../structabcg_1_1VulkanQueues.html#a70263f2f8818d99a550e9a070e2486c4',1,'abcg::VulkanQueues::transfer()'],['../structabcg_1_1VulkanQueuesFamilies.html#a6b157e8e7c13fe4033ee2b0cf8b8d7ab',1,'abcg::VulkanQueuesFamilies::transfer()']]], - ['triggeropenglshadercompile_488',['triggerOpenGLShaderCompile',['../namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102',1,'abcg']]], - ['triggeropenglshaderlink_489',['triggerOpenGLShaderLink',['../namespaceabcg.html#aee435331b56516022710b8acc098883a',1,'abcg']]] + ['task_474',['Task',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaeaeb30f9f18e0c50b178676f3eaef45f',1,'abcg']]], + ['tessellationcontrol_475',['TessellationControl',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa91a08ad964ef35c89ae69cd4176cfb4a',1,'abcg']]], + ['tessellationevaluation_476',['TessellationEvaluation',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa85a5d743bd284736223e3c1e95c6b952',1,'abcg']]], + ['timer_477',['Timer',['../classabcg_1_1Timer.html',1,'abcg']]], + ['title_478',['title',['../structabcg_1_1WindowSettings.html#a8136786953b8042eda46ff55298a4d9d',1,'abcg::WindowSettings']]], + ['tobluestring_479',['toBlueString',['../namespaceabcg.html#a1b13712894adf3cfdda66dd3ddd14256',1,'abcg']]], + ['togglefullscreen_480',['toggleFullscreen',['../classabcg_1_1Window.html#acc923148257095b1baf454607ef21ad6',1,'abcg::Window']]], + ['toredstring_481',['toRedString',['../namespaceabcg.html#a7ffc0a33678775f855ffa982c00ccb0d',1,'abcg']]], + ['toyellowstring_482',['toYellowString',['../namespaceabcg.html#a9a8a9c73318a69a62645ca5ee239763d',1,'abcg']]], + ['trackball_483',['TrackBall',['../classabcg_1_1TrackBall.html',1,'abcg']]], + ['transfer_484',['transfer',['../structabcg_1_1VulkanCommandPools.html#aa0c7811d81fa0c51293bd3f6dbe3f4f4',1,'abcg::VulkanCommandPools::transfer()'],['../structabcg_1_1VulkanQueues.html#a70263f2f8818d99a550e9a070e2486c4',1,'abcg::VulkanQueues::transfer()'],['../structabcg_1_1VulkanQueuesFamilies.html#a6b157e8e7c13fe4033ee2b0cf8b8d7ab',1,'abcg::VulkanQueuesFamilies::transfer()']]], + ['triggeropenglshadercompile_485',['triggerOpenGLShaderCompile',['../namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102',1,'abcg']]], + ['triggeropenglshaderlink_486',['triggerOpenGLShaderLink',['../namespaceabcg.html#aee435331b56516022710b8acc098883a',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_0.js b/abcg/doc/html/search/classes_0.js index 41ab7365c..0ff9029e9 100644 --- a/abcg/doc/html/search/classes_0.js +++ b/abcg/doc/html/search/classes_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['application_520',['Application',['../classabcg_1_1Application.html',1,'abcg']]] + ['application_517',['Application',['../classabcg_1_1Application.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_1.js b/abcg/doc/html/search/classes_1.js index ec7cb4eed..3d5082660 100644 --- a/abcg/doc/html/search/classes_1.js +++ b/abcg/doc/html/search/classes_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['exception_521',['Exception',['../classabcg_1_1Exception.html',1,'abcg']]] + ['exception_518',['Exception',['../classabcg_1_1Exception.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_2.js b/abcg/doc/html/search/classes_2.js index 04088ddda..7e67c31fc 100644 --- a/abcg/doc/html/search/classes_2.js +++ b/abcg/doc/html/search/classes_2.js @@ -1,9 +1,9 @@ var searchData= [ - ['openglcubemapcreateinfo_522',['OpenGLCubemapCreateInfo',['../structabcg_1_1OpenGLCubemapCreateInfo.html',1,'abcg']]], - ['openglerror_523',['OpenGLError',['../classabcg_1_1OpenGLError.html',1,'abcg']]], - ['openglsettings_524',['OpenGLSettings',['../structabcg_1_1OpenGLSettings.html',1,'abcg']]], - ['openglshader_525',['OpenGLShader',['../structabcg_1_1OpenGLShader.html',1,'abcg']]], - ['opengltexturecreateinfo_526',['OpenGLTextureCreateInfo',['../structabcg_1_1OpenGLTextureCreateInfo.html',1,'abcg']]], - ['openglwindow_527',['OpenGLWindow',['../classabcg_1_1OpenGLWindow.html',1,'abcg']]] + ['openglcubemapcreateinfo_519',['OpenGLCubemapCreateInfo',['../structabcg_1_1OpenGLCubemapCreateInfo.html',1,'abcg']]], + ['openglerror_520',['OpenGLError',['../classabcg_1_1OpenGLError.html',1,'abcg']]], + ['openglsettings_521',['OpenGLSettings',['../structabcg_1_1OpenGLSettings.html',1,'abcg']]], + ['openglshader_522',['OpenGLShader',['../structabcg_1_1OpenGLShader.html',1,'abcg']]], + ['opengltexturecreateinfo_523',['OpenGLTextureCreateInfo',['../structabcg_1_1OpenGLTextureCreateInfo.html',1,'abcg']]], + ['openglwindow_524',['OpenGLWindow',['../classabcg_1_1OpenGLWindow.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_3.js b/abcg/doc/html/search/classes_3.js index d18a0c93e..59c16f241 100644 --- a/abcg/doc/html/search/classes_3.js +++ b/abcg/doc/html/search/classes_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['runtimeerror_528',['RuntimeError',['../classabcg_1_1RuntimeError.html',1,'abcg']]] + ['runtimeerror_525',['RuntimeError',['../classabcg_1_1RuntimeError.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_4.js b/abcg/doc/html/search/classes_4.js index 57e4b8736..c31d9357f 100644 --- a/abcg/doc/html/search/classes_4.js +++ b/abcg/doc/html/search/classes_4.js @@ -1,6 +1,6 @@ var searchData= [ - ['sdlerror_529',['SDLError',['../classabcg_1_1SDLError.html',1,'abcg']]], - ['sdlimageerror_530',['SDLImageError',['../classabcg_1_1SDLImageError.html',1,'abcg']]], - ['shadersource_531',['ShaderSource',['../structabcg_1_1ShaderSource.html',1,'abcg']]] + ['sdlerror_526',['SDLError',['../classabcg_1_1SDLError.html',1,'abcg']]], + ['sdlimageerror_527',['SDLImageError',['../classabcg_1_1SDLImageError.html',1,'abcg']]], + ['shadersource_528',['ShaderSource',['../structabcg_1_1ShaderSource.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_5.js b/abcg/doc/html/search/classes_5.js index 98dc93cbe..997f390fc 100644 --- a/abcg/doc/html/search/classes_5.js +++ b/abcg/doc/html/search/classes_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['timer_532',['Timer',['../classabcg_1_1Timer.html',1,'abcg']]], - ['trackball_533',['TrackBall',['../classabcg_1_1TrackBall.html',1,'abcg']]] + ['timer_529',['Timer',['../classabcg_1_1Timer.html',1,'abcg']]], + ['trackball_530',['TrackBall',['../classabcg_1_1TrackBall.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_6.js b/abcg/doc/html/search/classes_6.js index 4a6b9c3de..1e6775a83 100644 --- a/abcg/doc/html/search/classes_6.js +++ b/abcg/doc/html/search/classes_6.js @@ -1,21 +1,21 @@ var searchData= [ - ['vulkanbuffer_534',['VulkanBuffer',['../classabcg_1_1VulkanBuffer.html',1,'abcg']]], - ['vulkanbuffercreateinfo_535',['VulkanBufferCreateInfo',['../structabcg_1_1VulkanBufferCreateInfo.html',1,'abcg']]], - ['vulkancommandpools_536',['VulkanCommandPools',['../structabcg_1_1VulkanCommandPools.html',1,'abcg']]], - ['vulkandevice_537',['VulkanDevice',['../classabcg_1_1VulkanDevice.html',1,'abcg']]], - ['vulkanerror_538',['VulkanError',['../classabcg_1_1VulkanError.html',1,'abcg']]], - ['vulkanframe_539',['VulkanFrame',['../structabcg_1_1VulkanFrame.html',1,'abcg']]], - ['vulkanimage_540',['VulkanImage',['../classabcg_1_1VulkanImage.html',1,'abcg']]], - ['vulkanimagecreateinfo_541',['VulkanImageCreateInfo',['../structabcg_1_1VulkanImageCreateInfo.html',1,'abcg']]], - ['vulkaninstance_542',['VulkanInstance',['../classabcg_1_1VulkanInstance.html',1,'abcg']]], - ['vulkanphysicaldevice_543',['VulkanPhysicalDevice',['../classabcg_1_1VulkanPhysicalDevice.html',1,'abcg']]], - ['vulkanpipeline_544',['VulkanPipeline',['../classabcg_1_1VulkanPipeline.html',1,'abcg']]], - ['vulkanpipelinecreateinfo_545',['VulkanPipelineCreateInfo',['../structabcg_1_1VulkanPipelineCreateInfo.html',1,'abcg']]], - ['vulkanqueues_546',['VulkanQueues',['../structabcg_1_1VulkanQueues.html',1,'abcg']]], - ['vulkanqueuesfamilies_547',['VulkanQueuesFamilies',['../structabcg_1_1VulkanQueuesFamilies.html',1,'abcg']]], - ['vulkansettings_548',['VulkanSettings',['../structabcg_1_1VulkanSettings.html',1,'abcg']]], - ['vulkanshader_549',['VulkanShader',['../classabcg_1_1VulkanShader.html',1,'abcg']]], - ['vulkanswapchain_550',['VulkanSwapchain',['../classabcg_1_1VulkanSwapchain.html',1,'abcg']]], - ['vulkanwindow_551',['VulkanWindow',['../classabcg_1_1VulkanWindow.html',1,'abcg']]] + ['vulkanbuffer_531',['VulkanBuffer',['../classabcg_1_1VulkanBuffer.html',1,'abcg']]], + ['vulkanbuffercreateinfo_532',['VulkanBufferCreateInfo',['../structabcg_1_1VulkanBufferCreateInfo.html',1,'abcg']]], + ['vulkancommandpools_533',['VulkanCommandPools',['../structabcg_1_1VulkanCommandPools.html',1,'abcg']]], + ['vulkandevice_534',['VulkanDevice',['../classabcg_1_1VulkanDevice.html',1,'abcg']]], + ['vulkanerror_535',['VulkanError',['../classabcg_1_1VulkanError.html',1,'abcg']]], + ['vulkanframe_536',['VulkanFrame',['../structabcg_1_1VulkanFrame.html',1,'abcg']]], + ['vulkanimage_537',['VulkanImage',['../classabcg_1_1VulkanImage.html',1,'abcg']]], + ['vulkanimagecreateinfo_538',['VulkanImageCreateInfo',['../structabcg_1_1VulkanImageCreateInfo.html',1,'abcg']]], + ['vulkaninstance_539',['VulkanInstance',['../classabcg_1_1VulkanInstance.html',1,'abcg']]], + ['vulkanphysicaldevice_540',['VulkanPhysicalDevice',['../classabcg_1_1VulkanPhysicalDevice.html',1,'abcg']]], + ['vulkanpipeline_541',['VulkanPipeline',['../classabcg_1_1VulkanPipeline.html',1,'abcg']]], + ['vulkanpipelinecreateinfo_542',['VulkanPipelineCreateInfo',['../structabcg_1_1VulkanPipelineCreateInfo.html',1,'abcg']]], + ['vulkanqueues_543',['VulkanQueues',['../structabcg_1_1VulkanQueues.html',1,'abcg']]], + ['vulkanqueuesfamilies_544',['VulkanQueuesFamilies',['../structabcg_1_1VulkanQueuesFamilies.html',1,'abcg']]], + ['vulkansettings_545',['VulkanSettings',['../structabcg_1_1VulkanSettings.html',1,'abcg']]], + ['vulkanshader_546',['VulkanShader',['../classabcg_1_1VulkanShader.html',1,'abcg']]], + ['vulkanswapchain_547',['VulkanSwapchain',['../classabcg_1_1VulkanSwapchain.html',1,'abcg']]], + ['vulkanwindow_548',['VulkanWindow',['../classabcg_1_1VulkanWindow.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/classes_7.js b/abcg/doc/html/search/classes_7.js index 01ae52c10..93509d4d3 100644 --- a/abcg/doc/html/search/classes_7.js +++ b/abcg/doc/html/search/classes_7.js @@ -1,5 +1,5 @@ var searchData= [ - ['window_552',['Window',['../classabcg_1_1Window.html',1,'abcg']]], - ['windowsettings_553',['WindowSettings',['../structabcg_1_1WindowSettings.html',1,'abcg']]] + ['window_549',['Window',['../classabcg_1_1Window.html',1,'abcg']]], + ['windowsettings_550',['WindowSettings',['../structabcg_1_1WindowSettings.html',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/defines_0.js b/abcg/doc/html/search/defines_0.js index a018b403f..5ab0e0a80 100644 --- a/abcg/doc/html/search/defines_0.js +++ b/abcg/doc/html/search/defines_0.js @@ -1,7 +1,7 @@ var searchData= [ - ['abcg_5fversion_5fmajor_1041',['ABCG_VERSION_MAJOR',['../abcgApplication_8hpp.html#a07fc63a5e20c2f33f9ca0dd915ce491f',1,'abcgApplication.hpp']]], - ['abcg_5fversion_5fminor_1042',['ABCG_VERSION_MINOR',['../abcgApplication_8hpp.html#a7396b0333e58c89fbafa65e76af72183',1,'abcgApplication.hpp']]], - ['abcg_5fversion_5fpatch_1043',['ABCG_VERSION_PATCH',['../abcgApplication_8hpp.html#af521d4146de1ade55008a4d5f0ddd768',1,'abcgApplication.hpp']]], - ['abcg_5fvulkan_5fdebug_5freport_1044',['ABCG_VULKAN_DEBUG_REPORT',['../abcgVulkanExternal_8hpp.html#adb1991a2979d0bd698ad63fdc1fc328b',1,'abcgVulkanExternal.hpp']]] + ['abcg_5fversion_5fmajor_1036',['ABCG_VERSION_MAJOR',['../abcgApplication_8hpp.html#a07fc63a5e20c2f33f9ca0dd915ce491f',1,'abcgApplication.hpp']]], + ['abcg_5fversion_5fminor_1037',['ABCG_VERSION_MINOR',['../abcgApplication_8hpp.html#a7396b0333e58c89fbafa65e76af72183',1,'abcgApplication.hpp']]], + ['abcg_5fversion_5fpatch_1038',['ABCG_VERSION_PATCH',['../abcgApplication_8hpp.html#af521d4146de1ade55008a4d5f0ddd768',1,'abcgApplication.hpp']]], + ['abcg_5fvulkan_5fdebug_5freport_1039',['ABCG_VULKAN_DEBUG_REPORT',['../abcgVulkanExternal_8hpp.html#adb1991a2979d0bd698ad63fdc1fc328b',1,'abcgVulkanExternal.hpp']]] ]; diff --git a/abcg/doc/html/search/defines_1.js b/abcg/doc/html/search/defines_1.js index 9e0fb431d..05b97da57 100644 --- a/abcg/doc/html/search/defines_1.js +++ b/abcg/doc/html/search/defines_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['glm_5fforce_5fdepth_5fzero_5fto_5fone_1045',['GLM_FORCE_DEPTH_ZERO_TO_ONE',['../abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968',1,'abcgVulkan.hpp']]] + ['glm_5fforce_5fdepth_5fzero_5fto_5fone_1040',['GLM_FORCE_DEPTH_ZERO_TO_ONE',['../abcgVulkan_8hpp.html#aa53e0967978ad7a8792f6961156ec968',1,'abcgVulkan.hpp']]] ]; diff --git a/abcg/doc/html/search/defines_2.js b/abcg/doc/html/search/defines_2.js index b95978502..e98578082 100644 --- a/abcg/doc/html/search/defines_2.js +++ b/abcg/doc/html/search/defines_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['vulkan_5fhpp_5fno_5fconstructors_1046',['VULKAN_HPP_NO_CONSTRUCTORS',['../abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f',1,'abcgVulkanExternal.hpp']]] + ['vulkan_5fhpp_5fno_5fconstructors_1041',['VULKAN_HPP_NO_CONSTRUCTORS',['../abcgVulkanExternal_8hpp.html#a607e8c4e92dfe6be973de2486903571f',1,'abcgVulkanExternal.hpp']]] ]; diff --git a/abcg/doc/html/search/enums_0.js b/abcg/doc/html/search/enums_0.js index b0d62f83c..010bc2af3 100644 --- a/abcg/doc/html/search/enums_0.js +++ b/abcg/doc/html/search/enums_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['openglprofile_1021',['OpenGLProfile',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328e',1,'abcg']]] + ['openglprofile_1016',['OpenGLProfile',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328e',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enums_1.js b/abcg/doc/html/search/enums_1.js index 35a668636..9bc28f752 100644 --- a/abcg/doc/html/search/enums_1.js +++ b/abcg/doc/html/search/enums_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['shaderstage_1022',['ShaderStage',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40da',1,'abcg']]] + ['shaderstage_1017',['ShaderStage',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40da',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_0.js b/abcg/doc/html/search/enumvalues_0.js index 0c6412957..403267d1c 100644 --- a/abcg/doc/html/search/enumvalues_0.js +++ b/abcg/doc/html/search/enumvalues_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['anyhit_1023',['AnyHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daafed8068cf66889c7c88bd5b7d3d02e4b',1,'abcg']]] + ['anyhit_1018',['AnyHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daafed8068cf66889c7c88bd5b7d3d02e4b',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_1.js b/abcg/doc/html/search/enumvalues_1.js index 5342efd1c..8ed9a9907 100644 --- a/abcg/doc/html/search/enumvalues_1.js +++ b/abcg/doc/html/search/enumvalues_1.js @@ -1,8 +1,8 @@ var searchData= [ - ['callable_1024',['Callable',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa79ace5b2a7206c5d0aa286a5b33385f8',1,'abcg']]], - ['closesthit_1025',['ClosestHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad4fcd21286c099405aff8d6b04c76575',1,'abcg']]], - ['compatibility_1026',['Compatibility',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328eadf9c715f20aaf58fb3926cc02b08ec53',1,'abcg']]], - ['compute_1027',['Compute',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa623a8d0366bf079411aa30be45b2d10',1,'abcg']]], - ['core_1028',['Core',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea83168e6cb289d732cc78427b51f93153',1,'abcg']]] + ['callable_1019',['Callable',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa79ace5b2a7206c5d0aa286a5b33385f8',1,'abcg']]], + ['closesthit_1020',['ClosestHit',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad4fcd21286c099405aff8d6b04c76575',1,'abcg']]], + ['compatibility_1021',['Compatibility',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328eadf9c715f20aaf58fb3926cc02b08ec53',1,'abcg']]], + ['compute_1022',['Compute',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa623a8d0366bf079411aa30be45b2d10',1,'abcg']]], + ['core_1023',['Core',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea83168e6cb289d732cc78427b51f93153',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_2.js b/abcg/doc/html/search/enumvalues_2.js index 7775a916b..3424cb1c0 100644 --- a/abcg/doc/html/search/enumvalues_2.js +++ b/abcg/doc/html/search/enumvalues_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['es_1029',['ES',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea04c19fa1e772ab66f0aad2efe61f25cd',1,'abcg']]] + ['es_1024',['ES',['../namespaceabcg.html#aef63a265616374ef2d9f1d63b0e9328ea04c19fa1e772ab66f0aad2efe61f25cd',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_3.js b/abcg/doc/html/search/enumvalues_3.js index 2a8c66fca..9a68684b1 100644 --- a/abcg/doc/html/search/enumvalues_3.js +++ b/abcg/doc/html/search/enumvalues_3.js @@ -1,4 +1,4 @@ var searchData= [ - ['fragment_1030',['Fragment',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa37d01b98065725fe3a1d30acf3a0064a',1,'abcg']]] + ['fragment_1025',['Fragment',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa37d01b98065725fe3a1d30acf3a0064a',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_4.js b/abcg/doc/html/search/enumvalues_4.js index f71c0bac6..ef5e4010c 100644 --- a/abcg/doc/html/search/enumvalues_4.js +++ b/abcg/doc/html/search/enumvalues_4.js @@ -1,4 +1,4 @@ var searchData= [ - ['geometry_1031',['Geometry',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad9c6333623e6357515fcbf17be806273',1,'abcg']]] + ['geometry_1026',['Geometry',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daad9c6333623e6357515fcbf17be806273',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_5.js b/abcg/doc/html/search/enumvalues_5.js index 4b36de54a..4dab22be0 100644 --- a/abcg/doc/html/search/enumvalues_5.js +++ b/abcg/doc/html/search/enumvalues_5.js @@ -1,4 +1,4 @@ var searchData= [ - ['intersection_1032',['Intersection',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa06d31c2ee920b4d53e8c9c06d90ba24',1,'abcg']]] + ['intersection_1027',['Intersection',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaa06d31c2ee920b4d53e8c9c06d90ba24',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_6.js b/abcg/doc/html/search/enumvalues_6.js index c1b715aca..18504c287 100644 --- a/abcg/doc/html/search/enumvalues_6.js +++ b/abcg/doc/html/search/enumvalues_6.js @@ -1,5 +1,5 @@ var searchData= [ - ['mesh_1033',['Mesh',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa710fdb6adb881b408116ef95335e1961',1,'abcg']]], - ['miss_1034',['Miss',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daae7ddb7cd777b59610b220bcfa80bd95f',1,'abcg']]] + ['mesh_1028',['Mesh',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa710fdb6adb881b408116ef95335e1961',1,'abcg']]], + ['miss_1029',['Miss',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daae7ddb7cd777b59610b220bcfa80bd95f',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_7.js b/abcg/doc/html/search/enumvalues_7.js index 0927122c2..df1867163 100644 --- a/abcg/doc/html/search/enumvalues_7.js +++ b/abcg/doc/html/search/enumvalues_7.js @@ -1,4 +1,4 @@ var searchData= [ - ['raygen_1035',['RayGen',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa4b2766e948a345bc42a34d6ae00b329a',1,'abcg']]] + ['raygen_1030',['RayGen',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa4b2766e948a345bc42a34d6ae00b329a',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_8.js b/abcg/doc/html/search/enumvalues_8.js index 6421b18de..8e6bf8c65 100644 --- a/abcg/doc/html/search/enumvalues_8.js +++ b/abcg/doc/html/search/enumvalues_8.js @@ -1,6 +1,6 @@ var searchData= [ - ['task_1036',['Task',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaeaeb30f9f18e0c50b178676f3eaef45f',1,'abcg']]], - ['tessellationcontrol_1037',['TessellationControl',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa91a08ad964ef35c89ae69cd4176cfb4a',1,'abcg']]], - ['tessellationevaluation_1038',['TessellationEvaluation',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa85a5d743bd284736223e3c1e95c6b952',1,'abcg']]] + ['task_1031',['Task',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daaeaeb30f9f18e0c50b178676f3eaef45f',1,'abcg']]], + ['tessellationcontrol_1032',['TessellationControl',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa91a08ad964ef35c89ae69cd4176cfb4a',1,'abcg']]], + ['tessellationevaluation_1033',['TessellationEvaluation',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daa85a5d743bd284736223e3c1e95c6b952',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/enumvalues_9.js b/abcg/doc/html/search/enumvalues_9.js index 7440c5add..81ff340aa 100644 --- a/abcg/doc/html/search/enumvalues_9.js +++ b/abcg/doc/html/search/enumvalues_9.js @@ -1,4 +1,4 @@ var searchData= [ - ['vertex_1039',['Vertex',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daab22b929ba52471a02d18bb3a4e4472e6',1,'abcg']]] + ['vertex_1034',['Vertex',['../namespaceabcg.html#a9853f19ed2d55b91bc64fde5a95e40daab22b929ba52471a02d18bb3a4e4472e6',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/files_0.js b/abcg/doc/html/search/files_0.js index 1bca0005c..002485b7e 100644 --- a/abcg/doc/html/search/files_0.js +++ b/abcg/doc/html/search/files_0.js @@ -1,54 +1,55 @@ var searchData= [ - ['abcg_2ehpp_555',['abcg.hpp',['../abcg_8hpp.html',1,'']]], - ['abcgapplication_2ecpp_556',['abcgApplication.cpp',['../abcgApplication_8cpp.html',1,'']]], - ['abcgapplication_2ehpp_557',['abcgApplication.hpp',['../abcgApplication_8hpp.html',1,'']]], - ['abcgembeddedfonts_2ehpp_558',['abcgEmbeddedFonts.hpp',['../abcgEmbeddedFonts_8hpp.html',1,'']]], - ['abcgexception_2ecpp_559',['abcgException.cpp',['../abcgException_8cpp.html',1,'']]], - ['abcgexception_2ehpp_560',['abcgException.hpp',['../abcgException_8hpp.html',1,'']]], - ['abcgexternal_2ehpp_561',['abcgExternal.hpp',['../abcgExternal_8hpp.html',1,'']]], - ['abcgimage_2ecpp_562',['abcgImage.cpp',['../abcgImage_8cpp.html',1,'']]], - ['abcgimage_2ehpp_563',['abcgImage.hpp',['../abcgImage_8hpp.html',1,'']]], - ['abcgopengl_2ehpp_564',['abcgOpenGL.hpp',['../abcgOpenGL_8hpp.html',1,'']]], - ['abcgopenglerror_2ecpp_565',['abcgOpenGLError.cpp',['../abcgOpenGLError_8cpp.html',1,'']]], - ['abcgopenglerror_2ehpp_566',['abcgOpenGLError.hpp',['../abcgOpenGLError_8hpp.html',1,'']]], - ['abcgopenglexternal_2ehpp_567',['abcgOpenGLExternal.hpp',['../abcgOpenGLExternal_8hpp.html',1,'']]], - ['abcgopenglfunction_2ecpp_568',['abcgOpenGLFunction.cpp',['../abcgOpenGLFunction_8cpp.html',1,'']]], - ['abcgopenglfunction_2ehpp_569',['abcgOpenGLFunction.hpp',['../abcgOpenGLFunction_8hpp.html',1,'']]], - ['abcgopenglimage_2ecpp_570',['abcgOpenGLImage.cpp',['../abcgOpenGLImage_8cpp.html',1,'']]], - ['abcgopenglimage_2ehpp_571',['abcgOpenGLImage.hpp',['../abcgOpenGLImage_8hpp.html',1,'']]], - ['abcgopenglshader_2ecpp_572',['abcgOpenGLShader.cpp',['../abcgOpenGLShader_8cpp.html',1,'']]], - ['abcgopenglshader_2ehpp_573',['abcgOpenGLShader.hpp',['../abcgOpenGLShader_8hpp.html',1,'']]], - ['abcgopenglwindow_2ecpp_574',['abcgOpenGLWindow.cpp',['../abcgOpenGLWindow_8cpp.html',1,'']]], - ['abcgopenglwindow_2ehpp_575',['abcgOpenGLWindow.hpp',['../abcgOpenGLWindow_8hpp.html',1,'']]], - ['abcgshader_2ehpp_576',['abcgShader.hpp',['../abcgShader_8hpp.html',1,'']]], - ['abcgtimer_2ecpp_577',['abcgTimer.cpp',['../abcgTimer_8cpp.html',1,'']]], - ['abcgtimer_2ehpp_578',['abcgTimer.hpp',['../abcgTimer_8hpp.html',1,'']]], - ['abcgtrackball_2ecpp_579',['abcgTrackball.cpp',['../abcgTrackball_8cpp.html',1,'']]], - ['abcgtrackball_2ehpp_580',['abcgTrackball.hpp',['../abcgTrackball_8hpp.html',1,'']]], - ['abcgutil_2ehpp_581',['abcgUtil.hpp',['../abcgUtil_8hpp.html',1,'']]], - ['abcgvulkan_2ehpp_582',['abcgVulkan.hpp',['../abcgVulkan_8hpp.html',1,'']]], - ['abcgvulkanbuffer_2ecpp_583',['abcgVulkanBuffer.cpp',['../abcgVulkanBuffer_8cpp.html',1,'']]], - ['abcgvulkanbuffer_2ehpp_584',['abcgVulkanBuffer.hpp',['../abcgVulkanBuffer_8hpp.html',1,'']]], - ['abcgvulkandevice_2ecpp_585',['abcgVulkanDevice.cpp',['../abcgVulkanDevice_8cpp.html',1,'']]], - ['abcgvulkandevice_2ehpp_586',['abcgVulkanDevice.hpp',['../abcgVulkanDevice_8hpp.html',1,'']]], - ['abcgvulkanerror_2ecpp_587',['abcgVulkanError.cpp',['../abcgVulkanError_8cpp.html',1,'']]], - ['abcgvulkanerror_2ehpp_588',['abcgVulkanError.hpp',['../abcgVulkanError_8hpp.html',1,'']]], - ['abcgvulkanexternal_2ehpp_589',['abcgVulkanExternal.hpp',['../abcgVulkanExternal_8hpp.html',1,'']]], - ['abcgvulkanimage_2ecpp_590',['abcgVulkanImage.cpp',['../abcgVulkanImage_8cpp.html',1,'']]], - ['abcgvulkanimage_2ehpp_591',['abcgVulkanImage.hpp',['../abcgVulkanImage_8hpp.html',1,'']]], - ['abcgvulkaninstance_2ecpp_592',['abcgVulkanInstance.cpp',['../abcgVulkanInstance_8cpp.html',1,'']]], - ['abcgvulkaninstance_2ehpp_593',['abcgVulkanInstance.hpp',['../abcgVulkanInstance_8hpp.html',1,'']]], - ['abcgvulkanphysicaldevice_2ecpp_594',['abcgVulkanPhysicalDevice.cpp',['../abcgVulkanPhysicalDevice_8cpp.html',1,'']]], - ['abcgvulkanphysicaldevice_2ehpp_595',['abcgVulkanPhysicalDevice.hpp',['../abcgVulkanPhysicalDevice_8hpp.html',1,'']]], - ['abcgvulkanpipeline_2ecpp_596',['abcgVulkanPipeline.cpp',['../abcgVulkanPipeline_8cpp.html',1,'']]], - ['abcgvulkanpipeline_2ehpp_597',['abcgVulkanPipeline.hpp',['../abcgVulkanPipeline_8hpp.html',1,'']]], - ['abcgvulkanshader_2ecpp_598',['abcgVulkanShader.cpp',['../abcgVulkanShader_8cpp.html',1,'']]], - ['abcgvulkanshader_2ehpp_599',['abcgVulkanShader.hpp',['../abcgVulkanShader_8hpp.html',1,'']]], - ['abcgvulkanswapchain_2ecpp_600',['abcgVulkanSwapchain.cpp',['../abcgVulkanSwapchain_8cpp.html',1,'']]], - ['abcgvulkanswapchain_2ehpp_601',['abcgVulkanSwapchain.hpp',['../abcgVulkanSwapchain_8hpp.html',1,'']]], - ['abcgvulkanwindow_2ecpp_602',['abcgVulkanWindow.cpp',['../abcgVulkanWindow_8cpp.html',1,'']]], - ['abcgvulkanwindow_2ehpp_603',['abcgVulkanWindow.hpp',['../abcgVulkanWindow_8hpp.html',1,'']]], - ['abcgwindow_2ecpp_604',['abcgWindow.cpp',['../abcgWindow_8cpp.html',1,'']]], - ['abcgwindow_2ehpp_605',['abcgWindow.hpp',['../abcgWindow_8hpp.html',1,'']]] + ['abcg_2ehpp_552',['abcg.hpp',['../abcg_8hpp.html',1,'']]], + ['abcgapplication_2ecpp_553',['abcgApplication.cpp',['../abcgApplication_8cpp.html',1,'']]], + ['abcgapplication_2ehpp_554',['abcgApplication.hpp',['../abcgApplication_8hpp.html',1,'']]], + ['abcgembeddedfonts_2ehpp_555',['abcgEmbeddedFonts.hpp',['../abcgEmbeddedFonts_8hpp.html',1,'']]], + ['abcgexception_2ecpp_556',['abcgException.cpp',['../abcgException_8cpp.html',1,'']]], + ['abcgexception_2ehpp_557',['abcgException.hpp',['../abcgException_8hpp.html',1,'']]], + ['abcgexternal_2ehpp_558',['abcgExternal.hpp',['../abcgExternal_8hpp.html',1,'']]], + ['abcgimage_2ecpp_559',['abcgImage.cpp',['../abcgImage_8cpp.html',1,'']]], + ['abcgimage_2ehpp_560',['abcgImage.hpp',['../abcgImage_8hpp.html',1,'']]], + ['abcgopengl_2ehpp_561',['abcgOpenGL.hpp',['../abcgOpenGL_8hpp.html',1,'']]], + ['abcgopenglerror_2ecpp_562',['abcgOpenGLError.cpp',['../abcgOpenGLError_8cpp.html',1,'']]], + ['abcgopenglerror_2ehpp_563',['abcgOpenGLError.hpp',['../abcgOpenGLError_8hpp.html',1,'']]], + ['abcgopenglexternal_2ehpp_564',['abcgOpenGLExternal.hpp',['../abcgOpenGLExternal_8hpp.html',1,'']]], + ['abcgopenglfunction_2ecpp_565',['abcgOpenGLFunction.cpp',['../abcgOpenGLFunction_8cpp.html',1,'']]], + ['abcgopenglfunction_2ehpp_566',['abcgOpenGLFunction.hpp',['../abcgOpenGLFunction_8hpp.html',1,'']]], + ['abcgopenglimage_2ecpp_567',['abcgOpenGLImage.cpp',['../abcgOpenGLImage_8cpp.html',1,'']]], + ['abcgopenglimage_2ehpp_568',['abcgOpenGLImage.hpp',['../abcgOpenGLImage_8hpp.html',1,'']]], + ['abcgopenglshader_2ecpp_569',['abcgOpenGLShader.cpp',['../abcgOpenGLShader_8cpp.html',1,'']]], + ['abcgopenglshader_2ehpp_570',['abcgOpenGLShader.hpp',['../abcgOpenGLShader_8hpp.html',1,'']]], + ['abcgopenglwindow_2ecpp_571',['abcgOpenGLWindow.cpp',['../abcgOpenGLWindow_8cpp.html',1,'']]], + ['abcgopenglwindow_2ehpp_572',['abcgOpenGLWindow.hpp',['../abcgOpenGLWindow_8hpp.html',1,'']]], + ['abcgshader_2ehpp_573',['abcgShader.hpp',['../abcgShader_8hpp.html',1,'']]], + ['abcgtimer_2ecpp_574',['abcgTimer.cpp',['../abcgTimer_8cpp.html',1,'']]], + ['abcgtimer_2ehpp_575',['abcgTimer.hpp',['../abcgTimer_8hpp.html',1,'']]], + ['abcgtrackball_2ecpp_576',['abcgTrackball.cpp',['../abcgTrackball_8cpp.html',1,'']]], + ['abcgtrackball_2ehpp_577',['abcgTrackball.hpp',['../abcgTrackball_8hpp.html',1,'']]], + ['abcgutil_2ecpp_578',['abcgUtil.cpp',['../abcgUtil_8cpp.html',1,'']]], + ['abcgutil_2ehpp_579',['abcgUtil.hpp',['../abcgUtil_8hpp.html',1,'']]], + ['abcgvulkan_2ehpp_580',['abcgVulkan.hpp',['../abcgVulkan_8hpp.html',1,'']]], + ['abcgvulkanbuffer_2ecpp_581',['abcgVulkanBuffer.cpp',['../abcgVulkanBuffer_8cpp.html',1,'']]], + ['abcgvulkanbuffer_2ehpp_582',['abcgVulkanBuffer.hpp',['../abcgVulkanBuffer_8hpp.html',1,'']]], + ['abcgvulkandevice_2ecpp_583',['abcgVulkanDevice.cpp',['../abcgVulkanDevice_8cpp.html',1,'']]], + ['abcgvulkandevice_2ehpp_584',['abcgVulkanDevice.hpp',['../abcgVulkanDevice_8hpp.html',1,'']]], + ['abcgvulkanerror_2ecpp_585',['abcgVulkanError.cpp',['../abcgVulkanError_8cpp.html',1,'']]], + ['abcgvulkanerror_2ehpp_586',['abcgVulkanError.hpp',['../abcgVulkanError_8hpp.html',1,'']]], + ['abcgvulkanexternal_2ehpp_587',['abcgVulkanExternal.hpp',['../abcgVulkanExternal_8hpp.html',1,'']]], + ['abcgvulkanimage_2ecpp_588',['abcgVulkanImage.cpp',['../abcgVulkanImage_8cpp.html',1,'']]], + ['abcgvulkanimage_2ehpp_589',['abcgVulkanImage.hpp',['../abcgVulkanImage_8hpp.html',1,'']]], + ['abcgvulkaninstance_2ecpp_590',['abcgVulkanInstance.cpp',['../abcgVulkanInstance_8cpp.html',1,'']]], + ['abcgvulkaninstance_2ehpp_591',['abcgVulkanInstance.hpp',['../abcgVulkanInstance_8hpp.html',1,'']]], + ['abcgvulkanphysicaldevice_2ecpp_592',['abcgVulkanPhysicalDevice.cpp',['../abcgVulkanPhysicalDevice_8cpp.html',1,'']]], + ['abcgvulkanphysicaldevice_2ehpp_593',['abcgVulkanPhysicalDevice.hpp',['../abcgVulkanPhysicalDevice_8hpp.html',1,'']]], + ['abcgvulkanpipeline_2ecpp_594',['abcgVulkanPipeline.cpp',['../abcgVulkanPipeline_8cpp.html',1,'']]], + ['abcgvulkanpipeline_2ehpp_595',['abcgVulkanPipeline.hpp',['../abcgVulkanPipeline_8hpp.html',1,'']]], + ['abcgvulkanshader_2ecpp_596',['abcgVulkanShader.cpp',['../abcgVulkanShader_8cpp.html',1,'']]], + ['abcgvulkanshader_2ehpp_597',['abcgVulkanShader.hpp',['../abcgVulkanShader_8hpp.html',1,'']]], + ['abcgvulkanswapchain_2ecpp_598',['abcgVulkanSwapchain.cpp',['../abcgVulkanSwapchain_8cpp.html',1,'']]], + ['abcgvulkanswapchain_2ehpp_599',['abcgVulkanSwapchain.hpp',['../abcgVulkanSwapchain_8hpp.html',1,'']]], + ['abcgvulkanwindow_2ecpp_600',['abcgVulkanWindow.cpp',['../abcgVulkanWindow_8cpp.html',1,'']]], + ['abcgvulkanwindow_2ehpp_601',['abcgVulkanWindow.hpp',['../abcgVulkanWindow_8hpp.html',1,'']]], + ['abcgwindow_2ecpp_602',['abcgWindow.cpp',['../abcgWindow_8cpp.html',1,'']]], + ['abcgwindow_2ehpp_603',['abcgWindow.hpp',['../abcgWindow_8hpp.html',1,'']]] ]; diff --git a/abcg/doc/html/search/files_1.js b/abcg/doc/html/search/files_1.js index 17d37bee5..b188da918 100644 --- a/abcg/doc/html/search/files_1.js +++ b/abcg/doc/html/search/files_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['changelog_2emd_606',['CHANGELOG.md',['../CHANGELOG_8md.html',1,'']]] + ['changelog_2emd_604',['CHANGELOG.md',['../CHANGELOG_8md.html',1,'']]] ]; diff --git a/abcg/doc/html/search/files_2.js b/abcg/doc/html/search/files_2.js index b6697d977..640e4d83b 100644 --- a/abcg/doc/html/search/files_2.js +++ b/abcg/doc/html/search/files_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['readme_2emd_607',['README.md',['../README_8md.html',1,'']]] + ['readme_2emd_605',['README.md',['../README_8md.html',1,'']]] ]; diff --git a/abcg/doc/html/search/functions_0.js b/abcg/doc/html/search/functions_0.js index 400a4ed72..7d246626e 100644 --- a/abcg/doc/html/search/functions_0.js +++ b/abcg/doc/html/search/functions_0.js @@ -1,7 +1,4 @@ var searchData= [ - ['abcgstagetoglslangstage_608',['abcgStageToGlslangStage',['../abcgVulkanShader_8cpp.html#a33f06509309afc65c3a74f2ab43fbcd6',1,'abcgVulkanShader.cpp']]], - ['abcgstagetoopenglstage_609',['abcgStageToOpenGLStage',['../abcgOpenGLShader_8cpp.html#a1b9d9248c0d1f7a7bee9653a529dadca',1,'abcgOpenGLShader.cpp']]], - ['abcgstagetovulkanstage_610',['abcgStageToVulkanStage',['../abcgVulkanShader_8cpp.html#abd9a731077343cc28d958393025b620b',1,'abcgVulkanShader.cpp']]], - ['application_611',['Application',['../classabcg_1_1Application.html#ab8275b32a7f2ff090e15a906f5039f54',1,'abcg::Application']]] + ['application_606',['Application',['../classabcg_1_1Application.html#ab8275b32a7f2ff090e15a906f5039f54',1,'abcg::Application']]] ]; diff --git a/abcg/doc/html/search/functions_1.js b/abcg/doc/html/search/functions_1.js index 3b4c5a6bf..cb7f0b212 100644 --- a/abcg/doc/html/search/functions_1.js +++ b/abcg/doc/html/search/functions_1.js @@ -1,15 +1,12 @@ var searchData= [ - ['callgl_612',['callGL',['../namespaceabcg.html#a59fd1679b061fafcc7c087404e3e3ed1',1,'abcg']]], - ['checkglerror_613',['checkGLError',['../namespaceabcg.html#a319c7bd437a23751054bc1d092d9e0ae',1,'abcg']]], - ['checkopenglshadercompile_614',['checkOpenGLShaderCompile',['../namespaceabcg.html#ada2b3e076d6fe0c4dd27615e7f4d4d50',1,'abcg']]], - ['checkopenglshaderlink_615',['checkOpenGLShaderLink',['../namespaceabcg.html#aab59a12bb6313b5c58f5352ce6f380e5',1,'abcg']]], - ['checkrebuild_616',['checkRebuild',['../classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4',1,'abcg::VulkanSwapchain']]], - ['checkvkresult_617',['checkVkResult',['../namespaceabcg.html#a6dc603716e2c0c5a9ee71ff1ca9881d9',1,'abcg']]], - ['chooseswapextent_618',['chooseSwapExtent',['../abcgVulkanSwapchain_8cpp.html#a39a911060dac4822e4f53788fe57c7b0',1,'abcgVulkanSwapchain.cpp']]], - ['chooseswappresentmode_619',['chooseSwapPresentMode',['../abcgVulkanSwapchain_8cpp.html#a4074f1e431857e425c4dfe6ba27069a9',1,'abcgVulkanSwapchain.cpp']]], - ['chooseswapsurfaceformat_620',['chooseSwapSurfaceFormat',['../abcgVulkanSwapchain_8cpp.html#a1483e553cb233562ff7ae7efcf60e5e0',1,'abcgVulkanSwapchain.cpp']]], - ['create_621',['create',['../classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7',1,'abcg::VulkanBuffer::create()'],['../classabcg_1_1Window.html#aae2263884294b506d2ffec789d3d4d9e',1,'abcg::Window::create()'],['../classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31',1,'abcg::VulkanSwapchain::create()'],['../classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2',1,'abcg::VulkanShader::create()'],['../classabcg_1_1VulkanPipeline.html#a743747edda95318ed91afe853d2a71c0',1,'abcg::VulkanPipeline::create()'],['../classabcg_1_1VulkanPhysicalDevice.html#ae39f878f560e709b08b634314d28d730',1,'abcg::VulkanPhysicalDevice::create()'],['../classabcg_1_1VulkanInstance.html#abdd4efd069ddeb2937f6771897765730',1,'abcg::VulkanInstance::create()'],['../classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b',1,'abcg::VulkanImage::create(VulkanDevice const &device, VulkanImageCreateInfo const &createInfo)'],['../classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d',1,'abcg::VulkanImage::create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)'],['../classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029',1,'abcg::VulkanDevice::create()']]], - ['createopenglprogram_622',['createOpenGLProgram',['../namespaceabcg.html#ac5dc51412a57521944dc7f4f32901af5',1,'abcg']]], - ['createsdlwindow_623',['createSDLWindow',['../classabcg_1_1Window.html#a0f9ac50c1babc71e1ac22207b4ccb48e',1,'abcg::Window']]] + ['callgl_607',['callGL',['../namespaceabcg.html#a59fd1679b061fafcc7c087404e3e3ed1',1,'abcg']]], + ['checkglerror_608',['checkGLError',['../namespaceabcg.html#a319c7bd437a23751054bc1d092d9e0ae',1,'abcg']]], + ['checkopenglshadercompile_609',['checkOpenGLShaderCompile',['../namespaceabcg.html#ada2b3e076d6fe0c4dd27615e7f4d4d50',1,'abcg']]], + ['checkopenglshaderlink_610',['checkOpenGLShaderLink',['../namespaceabcg.html#aab59a12bb6313b5c58f5352ce6f380e5',1,'abcg']]], + ['checkrebuild_611',['checkRebuild',['../classabcg_1_1VulkanSwapchain.html#ac49877bbe8e638358d639373dba086f4',1,'abcg::VulkanSwapchain']]], + ['checkvkresult_612',['checkVkResult',['../namespaceabcg.html#a6dc603716e2c0c5a9ee71ff1ca9881d9',1,'abcg']]], + ['create_613',['create',['../classabcg_1_1VulkanBuffer.html#a63c95797fc3e4ddfb0c9282fae794dd7',1,'abcg::VulkanBuffer::create()'],['../classabcg_1_1Window.html#aae2263884294b506d2ffec789d3d4d9e',1,'abcg::Window::create()'],['../classabcg_1_1VulkanSwapchain.html#ab825b2bcd984c4efa9bf91f186b10f31',1,'abcg::VulkanSwapchain::create()'],['../classabcg_1_1VulkanShader.html#ab60a83a3d2045c1c4361eef0a2e64db2',1,'abcg::VulkanShader::create()'],['../classabcg_1_1VulkanPipeline.html#a743747edda95318ed91afe853d2a71c0',1,'abcg::VulkanPipeline::create()'],['../classabcg_1_1VulkanPhysicalDevice.html#ae39f878f560e709b08b634314d28d730',1,'abcg::VulkanPhysicalDevice::create()'],['../classabcg_1_1VulkanInstance.html#abdd4efd069ddeb2937f6771897765730',1,'abcg::VulkanInstance::create()'],['../classabcg_1_1VulkanImage.html#a05345978b7425f41b3248ea68050134b',1,'abcg::VulkanImage::create(VulkanDevice const &device, VulkanImageCreateInfo const &createInfo)'],['../classabcg_1_1VulkanImage.html#a9eeb71182f8999997c3298264f72ef0d',1,'abcg::VulkanImage::create(VulkanDevice const &device, std::string_view path, bool generateMipmaps=true)'],['../classabcg_1_1VulkanDevice.html#ab3e411047411d3fb64efc8689039e029',1,'abcg::VulkanDevice::create()']]], + ['createopenglprogram_614',['createOpenGLProgram',['../namespaceabcg.html#ac5dc51412a57521944dc7f4f32901af5',1,'abcg']]], + ['createsdlwindow_615',['createSDLWindow',['../classabcg_1_1Window.html#a0f9ac50c1babc71e1ac22207b4ccb48e',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/functions_10.js b/abcg/doc/html/search/functions_10.js index 6083641f9..be5ce88e5 100644 --- a/abcg/doc/html/search/functions_10.js +++ b/abcg/doc/html/search/functions_10.js @@ -1,4 +1,4 @@ var searchData= [ - ['_7ewindow_965',['~Window',['../classabcg_1_1Window.html#aa992bd26564502aa09ff727c39e1088f',1,'abcg::Window']]] + ['_7ewindow_960',['~Window',['../classabcg_1_1Window.html#aa992bd26564502aa09ff727c39e1088f',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/functions_2.js b/abcg/doc/html/search/functions_2.js index 091bec89b..8c5007e23 100644 --- a/abcg/doc/html/search/functions_2.js +++ b/abcg/doc/html/search/functions_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['destroy_624',['destroy',['../classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae',1,'abcg::VulkanBuffer::destroy()'],['../classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4',1,'abcg::VulkanDevice::destroy()'],['../classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379',1,'abcg::VulkanImage::destroy()'],['../classabcg_1_1VulkanInstance.html#a617850d1b31fc2b4960951ff839f5168',1,'abcg::VulkanInstance::destroy()'],['../classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281',1,'abcg::VulkanPhysicalDevice::destroy()'],['../classabcg_1_1VulkanPipeline.html#a15da4398f57661508f2585c552c23cac',1,'abcg::VulkanPipeline::destroy()'],['../classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1',1,'abcg::VulkanShader::destroy()'],['../classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa',1,'abcg::VulkanSwapchain::destroy()'],['../classabcg_1_1Window.html#a93a2812c3be1df4d1fd92f1db13e4e1f',1,'abcg::Window::destroy()']]] + ['destroy_616',['destroy',['../classabcg_1_1VulkanBuffer.html#a873139d866527c0c51ed24bc20e1f3ae',1,'abcg::VulkanBuffer::destroy()'],['../classabcg_1_1VulkanDevice.html#a0aa55708bd0aa0567f916c51343d03a4',1,'abcg::VulkanDevice::destroy()'],['../classabcg_1_1VulkanImage.html#acee63c8c454d5cc8e03f8381048b1379',1,'abcg::VulkanImage::destroy()'],['../classabcg_1_1VulkanInstance.html#a617850d1b31fc2b4960951ff839f5168',1,'abcg::VulkanInstance::destroy()'],['../classabcg_1_1VulkanPhysicalDevice.html#aa262040394eb85c78a40ab094f6ea281',1,'abcg::VulkanPhysicalDevice::destroy()'],['../classabcg_1_1VulkanPipeline.html#a15da4398f57661508f2585c552c23cac',1,'abcg::VulkanPipeline::destroy()'],['../classabcg_1_1VulkanShader.html#a276c5416ca86523a0871c2f2cf5c1fe1',1,'abcg::VulkanShader::destroy()'],['../classabcg_1_1VulkanSwapchain.html#ad4e607604552ba16cead8372ee5894aa',1,'abcg::VulkanSwapchain::destroy()'],['../classabcg_1_1Window.html#a93a2812c3be1df4d1fd92f1db13e4e1f',1,'abcg::Window::destroy()']]] ]; diff --git a/abcg/doc/html/search/functions_3.js b/abcg/doc/html/search/functions_3.js index 52f02101a..11a2c6d9e 100644 --- a/abcg/doc/html/search/functions_3.js +++ b/abcg/doc/html/search/functions_3.js @@ -1,5 +1,5 @@ var searchData= [ - ['elapsed_625',['elapsed',['../classabcg_1_1Timer.html#a70a10ae27c24c5d559c688d7abe0a62e',1,'abcg::Timer']]], - ['exception_626',['Exception',['../classabcg_1_1Exception.html#a264c852c597e5fad26cee2090b7ebd71',1,'abcg::Exception']]] + ['elapsed_617',['elapsed',['../classabcg_1_1Timer.html#a70a10ae27c24c5d559c688d7abe0a62e',1,'abcg::Timer']]], + ['exception_618',['Exception',['../classabcg_1_1Exception.html#a264c852c597e5fad26cee2090b7ebd71',1,'abcg::Exception']]] ]; diff --git a/abcg/doc/html/search/functions_4.js b/abcg/doc/html/search/functions_4.js index d3e7c33bc..58028a3e4 100644 --- a/abcg/doc/html/search/functions_4.js +++ b/abcg/doc/html/search/functions_4.js @@ -1,6 +1,6 @@ var searchData= [ - ['findmemorytype_627',['findMemoryType',['../classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864',1,'abcg::VulkanPhysicalDevice']]], - ['fliphorizontally_628',['flipHorizontally',['../namespaceabcg.html#a0d46e744a39225a18d381362cea62104',1,'abcg']]], - ['flipvertically_629',['flipVertically',['../namespaceabcg.html#abc2b77e7547e5e73f00d7167f7a2f6b9',1,'abcg']]] + ['findmemorytype_619',['findMemoryType',['../classabcg_1_1VulkanPhysicalDevice.html#a5f7aef77228188516dc469457b6a2864',1,'abcg::VulkanPhysicalDevice']]], + ['fliphorizontally_620',['flipHorizontally',['../namespaceabcg.html#a070a6d04f8ddd3f8ffc85556822ad9b9',1,'abcg']]], + ['flipvertically_621',['flipVertically',['../namespaceabcg.html#afbf3c358b10f7ef9aef38acb758e12ca',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/functions_5.js b/abcg/doc/html/search/functions_5.js index 10fe5ecbe..81722ebef 100644 --- a/abcg/doc/html/search/functions_5.js +++ b/abcg/doc/html/search/functions_5.js @@ -1,289 +1,289 @@ var searchData= [ - ['getassetspath_630',['getAssetsPath',['../classabcg_1_1Application.html#ac3a160375fdb03e43e2de2094cc3a4e3',1,'abcg::Application']]], - ['getbasepath_631',['getBasePath',['../classabcg_1_1Application.html#a5f14e501676cbed3477be9b5480db0e5',1,'abcg::Application']]], - ['getcommandpools_632',['getCommandPools',['../classabcg_1_1VulkanDevice.html#a40fe31ba2c810b100061d0cfa6a2c5f6',1,'abcg::VulkanDevice']]], - ['getcurrentframe_633',['getCurrentFrame',['../classabcg_1_1VulkanSwapchain.html#aed9fd2ce2e49224f06e62c338ebde323',1,'abcg::VulkanSwapchain']]], - ['getdeltatime_634',['getDeltaTime',['../classabcg_1_1Window.html#a084f822db9d33093e6940e312e3cf5b2',1,'abcg::Window']]], - ['getdepthimage_635',['getDepthImage',['../classabcg_1_1VulkanSwapchain.html#a66fcdb5540a5c1a8ce5ac8d0b6d47ef3',1,'abcg::VulkanSwapchain']]], - ['getdescriptorimageinfo_636',['getDescriptorImageInfo',['../classabcg_1_1VulkanImage.html#ae0aa098edfcb6c4902ad843dbf79b741',1,'abcg::VulkanImage']]], - ['getdevice_637',['getDevice',['../classabcg_1_1VulkanSwapchain.html#a09e59e721c2b09e7742e96dbeb6ec0e9',1,'abcg::VulkanSwapchain::getDevice()'],['../classabcg_1_1VulkanWindow.html#ac74b4486f3c601741688ae08b7b7e90f',1,'abcg::VulkanWindow::getDevice()']]], - ['getdevicememory_638',['getDeviceMemory',['../classabcg_1_1VulkanBuffer.html#a92490ce5ab81e5f962670192df1bcec4',1,'abcg::VulkanBuffer::getDeviceMemory()'],['../classabcg_1_1VulkanImage.html#af3b59382ddb59c35e3562bc17c3be590',1,'abcg::VulkanImage::getDeviceMemory()']]], - ['getelapsedtime_639',['getElapsedTime',['../classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe',1,'abcg::Window']]], - ['getextent_640',['getExtent',['../classabcg_1_1VulkanSwapchain.html#a2d7261f5e89166e310d5d0351a1f287c',1,'abcg::VulkanSwapchain']]], - ['getfirstsupportedformat_641',['getFirstSupportedFormat',['../classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32',1,'abcg::VulkanPhysicalDevice']]], - ['getframes_642',['getFrames',['../classabcg_1_1VulkanSwapchain.html#a870927d139c2021bf8d0090ec1799b07',1,'abcg::VulkanSwapchain']]], - ['getinstance_643',['getInstance',['../classabcg_1_1VulkanPhysicalDevice.html#a7fe5eff938f226bc44dea0e05d0fedc2',1,'abcg::VulkanPhysicalDevice']]], - ['getlayout_644',['getLayout',['../classabcg_1_1VulkanPipeline.html#a9b58d66a31560dd3ddd018100c2dc79e',1,'abcg::VulkanPipeline']]], - ['getmainrenderpass_645',['getMainRenderPass',['../classabcg_1_1VulkanSwapchain.html#a6d193ee181bbbcedca6638e3f7f595e2',1,'abcg::VulkanSwapchain']]], - ['getmiplevels_646',['getMipLevels',['../classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5',1,'abcg::VulkanImage']]], - ['getmodule_647',['getModule',['../classabcg_1_1VulkanShader.html#a3d29eca130a1ecf86a75b594d6702878',1,'abcg::VulkanShader']]], - ['getopenglsettings_648',['getOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#a83705042db987f58079d7bb16333ab9e',1,'abcg::OpenGLWindow']]], - ['getphysicaldevice_649',['getPhysicalDevice',['../classabcg_1_1VulkanDevice.html#a278ccf59c43ee9a4b3c660eaf02bed99',1,'abcg::VulkanDevice::getPhysicalDevice()'],['../classabcg_1_1VulkanWindow.html#a4c2e111472f49a4636eed52d816081fc',1,'abcg::VulkanWindow::getPhysicalDevice()']]], - ['getqueues_650',['getQueues',['../classabcg_1_1VulkanDevice.html#a50eaa1dc2e76927325d174d24a7e18c9',1,'abcg::VulkanDevice']]], - ['getqueuesfamilies_651',['getQueuesFamilies',['../classabcg_1_1VulkanPhysicalDevice.html#aae28731aa415700f866860e3cd97f2c5',1,'abcg::VulkanPhysicalDevice']]], - ['getrotation_652',['getRotation',['../classabcg_1_1TrackBall.html#a5801a1f9825c5ee5fae329406f4b4264',1,'abcg::TrackBall']]], - ['getsamplecount_653',['getSampleCount',['../classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4',1,'abcg::VulkanPhysicalDevice']]], - ['getsdlwindow_654',['getSDLWindow',['../classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c',1,'abcg::Window']]], - ['getsdlwindowid_655',['getSDLWindowID',['../classabcg_1_1Window.html#a6bc85489a6372037ebb5946eb20cbeaf',1,'abcg::Window']]], - ['getstage_656',['getStage',['../classabcg_1_1VulkanShader.html#ad5666c31f864d9cbc7cf52fef5d8a850',1,'abcg::VulkanShader']]], - ['getsurfacekhr_657',['getSurfaceKHR',['../classabcg_1_1VulkanPhysicalDevice.html#adc24018e5fc3b25bbc930c1e5ae221c8',1,'abcg::VulkanPhysicalDevice']]], - ['getswapchain_658',['getSwapchain',['../classabcg_1_1VulkanWindow.html#a55734ede91798cfe390e0b2b14cb971e',1,'abcg::VulkanWindow']]], - ['getuirenderpass_659',['getUIRenderPass',['../classabcg_1_1VulkanSwapchain.html#abe9e7f094e862c4894d50f53fd121b35',1,'abcg::VulkanSwapchain']]], - ['getview_660',['getView',['../classabcg_1_1VulkanImage.html#ac9e43199ef73da1e4d033d3857b7275d',1,'abcg::VulkanImage']]], - ['getvulkansettings_661',['getVulkanSettings',['../classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5',1,'abcg::VulkanWindow']]], - ['getwindowsettings_662',['getWindowSettings',['../classabcg_1_1Window.html#a8bbd4003a05c63ace76c08146b734679',1,'abcg::Window']]], - ['getwindowsize_663',['getWindowSize',['../classabcg_1_1Window.html#adf143544a9b62c5c838768a7b446162c',1,'abcg::Window']]], - ['glactivetexture_664',['glActiveTexture',['../namespaceabcg.html#abebf61480d8b46ad61238624521c440c',1,'abcg']]], - ['glattachshader_665',['glAttachShader',['../namespaceabcg.html#aadc675d08443dfb3f52d136d1e867c54',1,'abcg']]], - ['glbeginquery_666',['glBeginQuery',['../namespaceabcg.html#a43ea888d5366cd13f8559ae5c45e503e',1,'abcg']]], - ['glbegintransformfeedback_667',['glBeginTransformFeedback',['../namespaceabcg.html#a4284264dbf0f5c318686f11bce8183cf',1,'abcg']]], - ['glbindattriblocation_668',['glBindAttribLocation',['../namespaceabcg.html#ae5d99843e0bc8a0c59503a2530d56d48',1,'abcg']]], - ['glbindbuffer_669',['glBindBuffer',['../namespaceabcg.html#a3cd63c5a736b0e401ad6e4ab6ea1ec41',1,'abcg']]], - ['glbindbufferbase_670',['glBindBufferBase',['../namespaceabcg.html#aa48f81c11025d9e8fc04c681932392ad',1,'abcg']]], - ['glbindbufferrange_671',['glBindBufferRange',['../namespaceabcg.html#a88b58e0a1d0a1aa9d68a0e19e78657ce',1,'abcg']]], - ['glbindfragdatalocation_672',['glBindFragDataLocation',['../namespaceabcg.html#a3f007c8f6d4d4ed049b66e03328d5b30',1,'abcg']]], - ['glbindframebuffer_673',['glBindFramebuffer',['../namespaceabcg.html#aaef0756c5e371e4b80f652586438b594',1,'abcg']]], - ['glbindrenderbuffer_674',['glBindRenderbuffer',['../namespaceabcg.html#aa2ee20f9a4dfcf2e740b00b08fb46b3e',1,'abcg']]], - ['glbindsampler_675',['glBindSampler',['../namespaceabcg.html#afb3c84a308e303b503c6f0cdefd5f426',1,'abcg']]], - ['glbindtexture_676',['glBindTexture',['../namespaceabcg.html#adb43c7b544c334de5da3f6c2c30570ae',1,'abcg']]], - ['glbindtransformfeedback_677',['glBindTransformFeedback',['../namespaceabcg.html#a8881b494dbdda2e680d2abf82dccadd9',1,'abcg']]], - ['glbindvertexarray_678',['glBindVertexArray',['../namespaceabcg.html#afe4c4f9e797dcd01910528c13ff471d4',1,'abcg']]], - ['glblendcolor_679',['glBlendColor',['../namespaceabcg.html#af87c9f438750ec5baa88caa3e204469c',1,'abcg']]], - ['glblendequation_680',['glBlendEquation',['../namespaceabcg.html#afa82d1d244c12d3f884e674b79a04f3e',1,'abcg']]], - ['glblendequationseparate_681',['glBlendEquationSeparate',['../namespaceabcg.html#a2e813667e01f4ea1e3a4ca5a16d4847e',1,'abcg']]], - ['glblendfunc_682',['glBlendFunc',['../namespaceabcg.html#a620308c51e62a88d78f44312b8931947',1,'abcg']]], - ['glblendfuncseparate_683',['glBlendFuncSeparate',['../namespaceabcg.html#a1156c925b568620ac51f94893db587ac',1,'abcg']]], - ['glblitframebuffer_684',['glBlitFramebuffer',['../namespaceabcg.html#aee53221fba9cbf13c75d78c9533da27b',1,'abcg']]], - ['glbufferdata_685',['glBufferData',['../namespaceabcg.html#a402e5079e8489cb8df8e3a6c5fcdbebf',1,'abcg']]], - ['glbuffersubdata_686',['glBufferSubData',['../namespaceabcg.html#af7091aa59a245999d277ec71e54b687f',1,'abcg']]], - ['glcheckframebufferstatus_687',['glCheckFramebufferStatus',['../namespaceabcg.html#a14b00e8df85dc5b1930b051be0f6a13d',1,'abcg']]], - ['glclear_688',['glClear',['../namespaceabcg.html#a37cf087e190d68ae489d69c1c7fb8c1a',1,'abcg']]], - ['glclearbufferfi_689',['glClearBufferfi',['../namespaceabcg.html#afd3d4e6a15e37502f806875152c161ec',1,'abcg']]], - ['glclearbufferfv_690',['glClearBufferfv',['../namespaceabcg.html#a4ee2c8db262e80410ae7a854d16c8637',1,'abcg']]], - ['glclearbufferiv_691',['glClearBufferiv',['../namespaceabcg.html#a1b9de47c64a177ed5daf99eeee3c3f05',1,'abcg']]], - ['glclearbufferuiv_692',['glClearBufferuiv',['../namespaceabcg.html#a9e5f02ca43e19e99dc0681be375b453d',1,'abcg']]], - ['glclearcolor_693',['glClearColor',['../namespaceabcg.html#a71881ed09c733ef5db9301bfee7a2f5f',1,'abcg']]], - ['glcleardepthf_694',['glClearDepthf',['../namespaceabcg.html#ace2477348a520f6b554b8b34662c53ac',1,'abcg']]], - ['glclearstencil_695',['glClearStencil',['../namespaceabcg.html#a3a4d7f77a063949bb602ac36ecc44319',1,'abcg']]], - ['glclientwaitsync_696',['glClientWaitSync',['../namespaceabcg.html#a4f8e59d6c10733d194fc5a329e52245f',1,'abcg']]], - ['glcolormask_697',['glColorMask',['../namespaceabcg.html#a41326750eb174903b1bf4119b7f33e96',1,'abcg']]], - ['glcompileshader_698',['glCompileShader',['../namespaceabcg.html#a9ab713ec7c6e93a8f09b5278133dfcf7',1,'abcg']]], - ['glcompressedteximage2d_699',['glCompressedTexImage2D',['../namespaceabcg.html#aca8b5cd79464cb9dcb6bc0c2261407f1',1,'abcg']]], - ['glcompressedteximage3d_700',['glCompressedTexImage3D',['../namespaceabcg.html#ad7bbab39db44f5da2ba62fe1de5a9dba',1,'abcg']]], - ['glcompressedtexsubimage2d_701',['glCompressedTexSubImage2D',['../namespaceabcg.html#a7a481529107e6f722c37ac9d559fc671',1,'abcg']]], - ['glcompressedtexsubimage3d_702',['glCompressedTexSubImage3D',['../namespaceabcg.html#a96b8b60242b097fb74451d423dc79fae',1,'abcg']]], - ['glcopybuffersubdata_703',['glCopyBufferSubData',['../namespaceabcg.html#a914c501ed0eff87b4474d1594ecc2f04',1,'abcg']]], - ['glcopyteximage2d_704',['glCopyTexImage2D',['../namespaceabcg.html#a8788882dedc9d5a598dfad1f21f9d6eb',1,'abcg']]], - ['glcopytexsubimage2d_705',['glCopyTexSubImage2D',['../namespaceabcg.html#ab7826bb1da6c947977b5644c00538540',1,'abcg']]], - ['glcopytexsubimage3d_706',['glCopyTexSubImage3D',['../namespaceabcg.html#a9c896be2e2c6b41db3e1f4891e27bf8d',1,'abcg']]], - ['glcreateprogram_707',['glCreateProgram',['../namespaceabcg.html#a2449fe3ff11796b682ca51d2611e0f8c',1,'abcg']]], - ['glcreateshader_708',['glCreateShader',['../namespaceabcg.html#a62dfd7c0cdb61a2971697e3980094a0e',1,'abcg']]], - ['glcullface_709',['glCullFace',['../namespaceabcg.html#a1daed0c2b70ea52f0436053095125e44',1,'abcg']]], - ['gldeletebuffers_710',['glDeleteBuffers',['../namespaceabcg.html#aab8d9786020b3f0a4a3f3a969579741c',1,'abcg']]], - ['gldeleteframebuffers_711',['glDeleteFramebuffers',['../namespaceabcg.html#a6c490c5eb7640f40ae09f87b0c52d81e',1,'abcg']]], - ['gldeleteprogram_712',['glDeleteProgram',['../namespaceabcg.html#a1c0feac412868f91511bc6cee51c0472',1,'abcg']]], - ['gldeletequeries_713',['glDeleteQueries',['../namespaceabcg.html#a6ce400968a396129fa47a1f2afa4f3da',1,'abcg']]], - ['gldeleterenderbuffers_714',['glDeleteRenderbuffers',['../namespaceabcg.html#aecca79eb3f54538532577cf2a21e067f',1,'abcg']]], - ['gldeletesamplers_715',['glDeleteSamplers',['../namespaceabcg.html#a8d2a8ddcaa0d34736ef16578f2d159a2',1,'abcg']]], - ['gldeleteshader_716',['glDeleteShader',['../namespaceabcg.html#ad378a150bf0c2b569ff5b22cd435acd6',1,'abcg']]], - ['gldeletesync_717',['glDeleteSync',['../namespaceabcg.html#a2f41106aca8b0948e9fb61a623413d08',1,'abcg']]], - ['gldeletetextures_718',['glDeleteTextures',['../namespaceabcg.html#a71fd7066e8b3aba42012e4f0136adc63',1,'abcg']]], - ['gldeletetransformfeedbacks_719',['glDeleteTransformFeedbacks',['../namespaceabcg.html#a65fc031e96cb6e9c23237520f257e174',1,'abcg']]], - ['gldeletevertexarrays_720',['glDeleteVertexArrays',['../namespaceabcg.html#a5c7dcb111f3c739f8948b80a4a2d23e2',1,'abcg']]], - ['gldepthfunc_721',['glDepthFunc',['../namespaceabcg.html#aa46fa714ee9925690a7bb07c3ef52df9',1,'abcg']]], - ['gldepthmask_722',['glDepthMask',['../namespaceabcg.html#a2c2a12a15c7b445dcee3d8656ca6dfbc',1,'abcg']]], - ['gldepthrangef_723',['glDepthRangef',['../namespaceabcg.html#a08dbe7a21733bff43ed976be14f99e9b',1,'abcg']]], - ['gldetachshader_724',['glDetachShader',['../namespaceabcg.html#a045bd908a5989d1ed1b6a4d28cc2bab6',1,'abcg']]], - ['gldisable_725',['glDisable',['../namespaceabcg.html#a84963ee1cf3177d6f23ca4641daf8b9b',1,'abcg']]], - ['gldisablevertexattribarray_726',['glDisableVertexAttribArray',['../namespaceabcg.html#a953dfc9ac20750b998c1b320c9c3177e',1,'abcg']]], - ['gldrawarrays_727',['glDrawArrays',['../namespaceabcg.html#a47e3bd5f6dc82daa656e76b655940338',1,'abcg']]], - ['gldrawarraysinstanced_728',['glDrawArraysInstanced',['../namespaceabcg.html#a32f7f0c0ce76c25248271a64c2b8e52b',1,'abcg']]], - ['gldrawbuffers_729',['glDrawBuffers',['../namespaceabcg.html#ae03a93e0f048e849bb5e37d712d7000c',1,'abcg']]], - ['gldrawelements_730',['glDrawElements',['../namespaceabcg.html#abaa5a136840114161dd2dca5dcfce646',1,'abcg']]], - ['gldrawelementsinstanced_731',['glDrawElementsInstanced',['../namespaceabcg.html#a67e3ae359f4840a60501e01a7ce4fb49',1,'abcg']]], - ['gldrawrangeelements_732',['glDrawRangeElements',['../namespaceabcg.html#aa5e970181c35e076181628df29de48e5',1,'abcg']]], - ['glenable_733',['glEnable',['../namespaceabcg.html#a5ee5802eb4646b281e426e550658124f',1,'abcg']]], - ['glenablevertexattribarray_734',['glEnableVertexAttribArray',['../namespaceabcg.html#a2b8c6c76fcc9d16e4a29551cac8f428f',1,'abcg']]], - ['glendquery_735',['glEndQuery',['../namespaceabcg.html#acebb037ad49e0f3714436346cb370a3e',1,'abcg']]], - ['glendtransformfeedback_736',['glEndTransformFeedback',['../namespaceabcg.html#a1427186fdcf12b9897523589b1ddf20f',1,'abcg']]], - ['glfencesync_737',['glFenceSync',['../namespaceabcg.html#acf7bb9039752df88aba99ed50675ceb6',1,'abcg']]], - ['glfinish_738',['glFinish',['../namespaceabcg.html#a94ad89b8ca10fc632d08f6c9d04d162e',1,'abcg']]], - ['glflush_739',['glFlush',['../namespaceabcg.html#ae0c6f2648cab3d1cd82a7ba910776e2b',1,'abcg']]], - ['glflushmappedbufferrange_740',['glFlushMappedBufferRange',['../namespaceabcg.html#a9280491505581f2f303c3f11442a9d8d',1,'abcg']]], - ['glframebufferrenderbuffer_741',['glFramebufferRenderbuffer',['../namespaceabcg.html#a24715a37b830d861d7cdb1f2f24bd32d',1,'abcg']]], - ['glframebuffertexture_742',['glFramebufferTexture',['../namespaceabcg.html#adb0766367e9364b01040121a4c2c79ed',1,'abcg']]], - ['glframebuffertexture2d_743',['glFramebufferTexture2D',['../namespaceabcg.html#a47dba8957f7121ceccfde94363e707e4',1,'abcg']]], - ['glframebuffertexturelayer_744',['glFramebufferTextureLayer',['../namespaceabcg.html#a399dc5200ed4b1c5ba36bc3aaa58c508',1,'abcg']]], - ['glfrontface_745',['glFrontFace',['../namespaceabcg.html#a6fa8b701a9a5003498e663163fe68729',1,'abcg']]], - ['glgenbuffers_746',['glGenBuffers',['../namespaceabcg.html#a5df92f4a085d8bca0fd0c52feee0128a',1,'abcg']]], - ['glgeneratemipmap_747',['glGenerateMipmap',['../namespaceabcg.html#acc670193ec022e761c4af8976494ed07',1,'abcg']]], - ['glgenframebuffers_748',['glGenFramebuffers',['../namespaceabcg.html#a5fb50995430e196812ba5fa75a9bf25a',1,'abcg']]], - ['glgenqueries_749',['glGenQueries',['../namespaceabcg.html#a86c415c268d7669e07339991c608e60b',1,'abcg']]], - ['glgenrenderbuffers_750',['glGenRenderbuffers',['../namespaceabcg.html#a4c9b0c886972e7d983e58c367787572c',1,'abcg']]], - ['glgensamplers_751',['glGenSamplers',['../namespaceabcg.html#ada23095347757d96190b853daddf8434',1,'abcg']]], - ['glgentextures_752',['glGenTextures',['../namespaceabcg.html#ae1015bd07641da254a331d9b3238d96f',1,'abcg']]], - ['glgentransformfeedbacks_753',['glGenTransformFeedbacks',['../namespaceabcg.html#a251e7d7579160c8fad43d5ce06ee9b06',1,'abcg']]], - ['glgenvertexarrays_754',['glGenVertexArrays',['../namespaceabcg.html#a7cc7561e9541d7841342173bec200d0d',1,'abcg']]], - ['glgetactiveattrib_755',['glGetActiveAttrib',['../namespaceabcg.html#ae0cdaa8143c25fdc5dd90b375a362816',1,'abcg']]], - ['glgetactiveuniform_756',['glGetActiveUniform',['../namespaceabcg.html#ac5aac5887d3a23fdd9e62db27eac53db',1,'abcg']]], - ['glgetactiveuniformblockiv_757',['glGetActiveUniformBlockiv',['../namespaceabcg.html#aac48b45e3026be3bc4270b9b98dd1b81',1,'abcg']]], - ['glgetactiveuniformblockname_758',['glGetActiveUniformBlockName',['../namespaceabcg.html#a242378c05d9480103f5375c8a8826c28',1,'abcg']]], - ['glgetactiveuniformsiv_759',['glGetActiveUniformsiv',['../namespaceabcg.html#aaf5e44d65badbc70664b1f392b0fb36f',1,'abcg']]], - ['glgetattachedshaders_760',['glGetAttachedShaders',['../namespaceabcg.html#a69e507a360bcf1ef4061f8c9a2731727',1,'abcg']]], - ['glgetattriblocation_761',['glGetAttribLocation',['../namespaceabcg.html#aa28b9cf639287662cb747a5f48e62ac7',1,'abcg']]], - ['glgetbooleanv_762',['glGetBooleanv',['../namespaceabcg.html#a96a319c6482b3dfc7e3375e5d2339ea8',1,'abcg']]], - ['glgetbufferparameteri64v_763',['glGetBufferParameteri64v',['../namespaceabcg.html#a6b33c9c6944be9a18490575915090e22',1,'abcg']]], - ['glgetbufferparameteriv_764',['glGetBufferParameteriv',['../namespaceabcg.html#ac96ad909a86ceba40b0a92e7b227f992',1,'abcg']]], - ['glgetbufferpointerv_765',['glGetBufferPointerv',['../namespaceabcg.html#ada9205a4af5b2d12c78c16b5176a6a82',1,'abcg']]], - ['glgetdoublev_766',['glGetDoublev',['../namespaceabcg.html#a8bd8be541ec50d33e34248aecd3f25b7',1,'abcg']]], - ['glgetfloatv_767',['glGetFloatv',['../namespaceabcg.html#af0c9e138d135378a3de00663c616cf46',1,'abcg']]], - ['glgetfragdatalocation_768',['glGetFragDataLocation',['../namespaceabcg.html#a1468aeed842d55a612da7a8257f5006f',1,'abcg']]], - ['glgetframebufferattachmentparameteriv_769',['glGetFramebufferAttachmentParameteriv',['../namespaceabcg.html#a4c721ad9d476be58c7fcc04da120288b',1,'abcg']]], - ['glgetinteger64i_5fv_770',['glGetInteger64i_v',['../namespaceabcg.html#ac2e13dc4a2ded3237be1ca90bad68d4e',1,'abcg']]], - ['glgetinteger64v_771',['glGetInteger64v',['../namespaceabcg.html#a59ea90fe9ec82ae3af1b3a29fe98de3f',1,'abcg']]], - ['glgetintegeri_5fv_772',['glGetIntegeri_v',['../namespaceabcg.html#ab3e060569fa74e0509c2a28806e4a847',1,'abcg']]], - ['glgetintegerv_773',['glGetIntegerv',['../namespaceabcg.html#a5fc4ea3f0ee00aec4b4ad39d830b83d5',1,'abcg']]], - ['glgetinternalformativ_774',['glGetInternalformativ',['../namespaceabcg.html#a56430f42fc367519455b993473579b79',1,'abcg']]], - ['glgetprogrambinary_775',['glGetProgramBinary',['../namespaceabcg.html#a70e991b998cd93d8ae0cdf86a145ed37',1,'abcg']]], - ['glgetprograminfolog_776',['glGetProgramInfoLog',['../namespaceabcg.html#a9169273965372bf17961bafe2cd37f8c',1,'abcg']]], - ['glgetprogramiv_777',['glGetProgramiv',['../namespaceabcg.html#afa031f5f52ad88625a88e1410478d892',1,'abcg']]], - ['glgetqueryiv_778',['glGetQueryiv',['../namespaceabcg.html#a9c6d035dae7a9d2137cc484b6704f0c9',1,'abcg']]], - ['glgetqueryobjectuiv_779',['glGetQueryObjectuiv',['../namespaceabcg.html#a73910bf72dd61e452b1776b00cdd7972',1,'abcg']]], - ['glgetrenderbufferparameteriv_780',['glGetRenderbufferParameteriv',['../namespaceabcg.html#a3c9dd56405aa600ef77b3194ddec1c52',1,'abcg']]], - ['glgetsamplerparameterfv_781',['glGetSamplerParameterfv',['../namespaceabcg.html#aa444f01ece43218d34ad9256c88eddf5',1,'abcg']]], - ['glgetsamplerparameteriv_782',['glGetSamplerParameteriv',['../namespaceabcg.html#ae6ea1aa7744033cbe3a10ec3b646e30d',1,'abcg']]], - ['glgetshaderinfolog_783',['glGetShaderInfoLog',['../namespaceabcg.html#a86aec026f1d1e876c7f47dfca141bc03',1,'abcg']]], - ['glgetshaderiv_784',['glGetShaderiv',['../namespaceabcg.html#aa074570fbd8a39ce2e899245b407044b',1,'abcg']]], - ['glgetshaderprecisionformat_785',['glGetShaderPrecisionFormat',['../namespaceabcg.html#a0690d7a9fb1fbe27f1630b51a6ef506f',1,'abcg']]], - ['glgetshadersource_786',['glGetShaderSource',['../namespaceabcg.html#abe63fd43e8ff35c953ca7a58a9f50f24',1,'abcg']]], - ['glgetstring_787',['glGetString',['../namespaceabcg.html#af419f0698487fc55f9fd8b7a424eb633',1,'abcg']]], - ['glgetstringi_788',['glGetStringi',['../namespaceabcg.html#ac2b042cb4fcd350f3efd9925f90bb068',1,'abcg']]], - ['glgetsynciv_789',['glGetSynciv',['../namespaceabcg.html#a57fa9fe8caf214671576ed55b06f239f',1,'abcg']]], - ['glgettexlevelparameterfv_790',['glGetTexLevelParameterfv',['../namespaceabcg.html#a720dffe7d97e8ebaba17b6d87583fd59',1,'abcg']]], - ['glgettexlevelparameteriv_791',['glGetTexLevelParameteriv',['../namespaceabcg.html#aee3c58bf82ea8186bfab4f2942997022',1,'abcg']]], - ['glgettexparameterfv_792',['glGetTexParameterfv',['../namespaceabcg.html#a4a8a224da5a79b1029605b7e77218e7c',1,'abcg']]], - ['glgettexparameteriv_793',['glGetTexParameteriv',['../namespaceabcg.html#ac768bcd240c1d1ad80589e5a248408df',1,'abcg']]], - ['glgettransformfeedbackvarying_794',['glGetTransformFeedbackVarying',['../namespaceabcg.html#a9a5c4567cf69ddd662085c0f86b37fa4',1,'abcg']]], - ['glgetuniformblockindex_795',['glGetUniformBlockIndex',['../namespaceabcg.html#a6710abf9cdd9e78d00280c40a56058da',1,'abcg']]], - ['glgetuniformfv_796',['glGetUniformfv',['../namespaceabcg.html#ae51c6519e4ba4b2a237c148d5606d76c',1,'abcg']]], - ['glgetuniformindices_797',['glGetUniformIndices',['../namespaceabcg.html#ace8f774eff785ea7e9f90c1c6b8e4425',1,'abcg']]], - ['glgetuniformiv_798',['glGetUniformiv',['../namespaceabcg.html#a3ed72ff0a3751e87af8369466f3a1cbf',1,'abcg']]], - ['glgetuniformlocation_799',['glGetUniformLocation',['../namespaceabcg.html#a22cb6b45a1ae2153d289a0ee3ac7729a',1,'abcg']]], - ['glgetuniformuiv_800',['glGetUniformuiv',['../namespaceabcg.html#acffb14045c39d65f3f8bead758313fbc',1,'abcg']]], - ['glgetvertexattribfv_801',['glGetVertexAttribfv',['../namespaceabcg.html#aedab4d42e7085a4bab268099b2d1346d',1,'abcg']]], - ['glgetvertexattribiiv_802',['glGetVertexAttribIiv',['../namespaceabcg.html#ad31542472e21428d05473b3ebe2489ee',1,'abcg']]], - ['glgetvertexattribiuiv_803',['glGetVertexAttribIuiv',['../namespaceabcg.html#a6a360138b05890b13f8439344e08512f',1,'abcg']]], - ['glgetvertexattribiv_804',['glGetVertexAttribiv',['../namespaceabcg.html#a78e9cb3ed811f7863b4a0c304a9fb278',1,'abcg']]], - ['glgetvertexattribpointerv_805',['glGetVertexAttribPointerv',['../namespaceabcg.html#aca5b82d3582454e73b1a86192124d485',1,'abcg']]], - ['glhint_806',['glHint',['../namespaceabcg.html#a97c884a2a934bf40d378024d81be625e',1,'abcg']]], - ['glinvalidateframebuffer_807',['glInvalidateFramebuffer',['../namespaceabcg.html#a619e3d0de44a879aa6db3054c39130ec',1,'abcg']]], - ['glinvalidatesubframebuffer_808',['glInvalidateSubFramebuffer',['../namespaceabcg.html#a47b7481c9fc066c9cd54a0f010258818',1,'abcg']]], - ['glisbuffer_809',['glIsBuffer',['../namespaceabcg.html#afb123afaf46459222024ea041cac15c7',1,'abcg']]], - ['glisenabled_810',['glIsEnabled',['../namespaceabcg.html#a2355d26ca6b32f64dd502ba787074e95',1,'abcg']]], - ['glisframebuffer_811',['glIsFramebuffer',['../namespaceabcg.html#abde059e7926e418ee7676f612480ca2e',1,'abcg']]], - ['glisprogram_812',['glIsProgram',['../namespaceabcg.html#ad8512fcd1782c81aaa121cd7e6c561d1',1,'abcg']]], - ['glisquery_813',['glIsQuery',['../namespaceabcg.html#a7a5eac1646a59b2c8de24b4862d3b2d9',1,'abcg']]], - ['glisrenderbuffer_814',['glIsRenderbuffer',['../namespaceabcg.html#a15acb0b1b9464f294f99aa989c44dc70',1,'abcg']]], - ['glissampler_815',['glIsSampler',['../namespaceabcg.html#ad85c0ff02a8b681ecb188752dd8ce9c0',1,'abcg']]], - ['glisshader_816',['glIsShader',['../namespaceabcg.html#a36db9b553f7422ea79b751c5763d194c',1,'abcg']]], - ['glissync_817',['glIsSync',['../namespaceabcg.html#a6e39dbba1c1d91b8df99ab60da87c364',1,'abcg']]], - ['glistexture_818',['glIsTexture',['../namespaceabcg.html#a913e9b053d880a383d8bf3d55cb5ead3',1,'abcg']]], - ['glistransformfeedback_819',['glIsTransformFeedback',['../namespaceabcg.html#aed892da4fd2e2517f53ca8c902d36a31',1,'abcg']]], - ['glisvertexarray_820',['glIsVertexArray',['../namespaceabcg.html#a5afdcd1166d09049b9bea8f425bbd0db',1,'abcg']]], - ['gllinewidth_821',['glLineWidth',['../namespaceabcg.html#aba2cae07b1fe8e188ff0fcc76ec9db8b',1,'abcg']]], - ['gllinkprogram_822',['glLinkProgram',['../namespaceabcg.html#af84c0f4d0816181cba506f1703c037c2',1,'abcg']]], - ['glmapbufferrange_823',['glMapBufferRange',['../namespaceabcg.html#aaa863c0c9f439036f6d2b58e375ee105',1,'abcg']]], - ['glpausetransformfeedback_824',['glPauseTransformFeedback',['../namespaceabcg.html#a03d850c93d16ad308516bb83bb8ffa0d',1,'abcg']]], - ['glpixelstorei_825',['glPixelStorei',['../namespaceabcg.html#a05ece875ff476f630548c8cf7a0d952b',1,'abcg']]], - ['glpolygonoffset_826',['glPolygonOffset',['../namespaceabcg.html#afa173d8901021cb88486592fcc300a14',1,'abcg']]], - ['glprogrambinary_827',['glProgramBinary',['../namespaceabcg.html#aa836ddfde2ab9014c8322a66b1fc5bcc',1,'abcg']]], - ['glprogramparameteri_828',['glProgramParameteri',['../namespaceabcg.html#ae48fb31c3e26632acba7e1a9753ee5c9',1,'abcg']]], - ['glreadbuffer_829',['glReadBuffer',['../namespaceabcg.html#a9fbd7418dfcde0cdbb4ff58d29e40a4f',1,'abcg']]], - ['glreadpixels_830',['glReadPixels',['../namespaceabcg.html#ae8720c564832cd331d886e24aaf68c29',1,'abcg']]], - ['glreleaseshadercompiler_831',['glReleaseShaderCompiler',['../namespaceabcg.html#a3e97ab629b7cc5d4c7259e521ebe5fb7',1,'abcg']]], - ['glrenderbufferstorage_832',['glRenderbufferStorage',['../namespaceabcg.html#aae32d699a30865e7aa4c4de786a1d593',1,'abcg']]], - ['glrenderbufferstoragemultisample_833',['glRenderbufferStorageMultisample',['../namespaceabcg.html#aee93697e0e0b92b0b73a9c374d4afff0',1,'abcg']]], - ['glresumetransformfeedback_834',['glResumeTransformFeedback',['../namespaceabcg.html#a81e93970a280fc3782f7577db7060458',1,'abcg']]], - ['glsamplecoverage_835',['glSampleCoverage',['../namespaceabcg.html#adee87442b65fa46fe96cceb6a21d496a',1,'abcg']]], - ['glsamplerparameterf_836',['glSamplerParameterf',['../namespaceabcg.html#aa12216132f4a0242e7f0882c99bc98ad',1,'abcg']]], - ['glsamplerparameterfv_837',['glSamplerParameterfv',['../namespaceabcg.html#a03ba96b4728e99b4f58cce1f3e102b49',1,'abcg']]], - ['glsamplerparameteri_838',['glSamplerParameteri',['../namespaceabcg.html#ae9971e1b8abb781440101bac0968a897',1,'abcg']]], - ['glsamplerparameteriv_839',['glSamplerParameteriv',['../namespaceabcg.html#a304af29cf7db15205236d97e1836e79a',1,'abcg']]], - ['glscissor_840',['glScissor',['../namespaceabcg.html#ae1a3e82a002194c222284c5588998cfb',1,'abcg']]], - ['glshaderbinary_841',['glShaderBinary',['../namespaceabcg.html#af1c355ed607c699a2fbe6b56454b84db',1,'abcg']]], - ['glshadersource_842',['glShaderSource',['../namespaceabcg.html#a828f4d3a0f75f391780765df28ce8914',1,'abcg']]], - ['glsltospv_843',['GLSLtoSPV',['../abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a',1,'abcgVulkanShader.cpp']]], - ['glstencilfunc_844',['glStencilFunc',['../namespaceabcg.html#ad1bc3b8d63e3b65fc3a1222ce789db3a',1,'abcg']]], - ['glstencilfuncseparate_845',['glStencilFuncSeparate',['../namespaceabcg.html#a10f604e428c78fad5ca881ecae15f9df',1,'abcg']]], - ['glstencilmask_846',['glStencilMask',['../namespaceabcg.html#a1f1123ce5bc6fade14962343ad3395f0',1,'abcg']]], - ['glstencilmaskseparate_847',['glStencilMaskSeparate',['../namespaceabcg.html#aadbe72b51aec2a1355ab4a9fc312043c',1,'abcg']]], - ['glstencilop_848',['glStencilOp',['../namespaceabcg.html#a7b172b6de78b247898a24c61d6d1d25f',1,'abcg']]], - ['glstencilopseparate_849',['glStencilOpSeparate',['../namespaceabcg.html#a86ed23edfe4b5ef502fe321f5a40b706',1,'abcg']]], - ['glteximage2d_850',['glTexImage2D',['../namespaceabcg.html#ae220fd2c2bd61130ace06f851609903d',1,'abcg']]], - ['glteximage2dmultisample_851',['glTexImage2DMultisample',['../namespaceabcg.html#aea5f1cc76074ee940772a749cd1b57ad',1,'abcg']]], - ['glteximage3d_852',['glTexImage3D',['../namespaceabcg.html#a55111fa9ae85db9d5c62854dc5cfb735',1,'abcg']]], - ['gltexparameterf_853',['glTexParameterf',['../namespaceabcg.html#a3d91ea0fc162e4a0f5f6060418b6d61c',1,'abcg']]], - ['gltexparameterfv_854',['glTexParameterfv',['../namespaceabcg.html#a9f00bcbf608a6489e1bcbffe964574ea',1,'abcg']]], - ['gltexparameteri_855',['glTexParameteri',['../namespaceabcg.html#a4d4aae2bed9b15f89cd6bf9268cfcd0b',1,'abcg']]], - ['gltexparameteriv_856',['glTexParameteriv',['../namespaceabcg.html#aa4c561c1f3f974025cbf25837f5b0b41',1,'abcg']]], - ['gltexstorage2d_857',['glTexStorage2D',['../namespaceabcg.html#a4573fb1a4dd47d4a692b4602a4009918',1,'abcg']]], - ['gltexstorage3d_858',['glTexStorage3D',['../namespaceabcg.html#af9d8885c892cfeadf62c7280254d57f9',1,'abcg']]], - ['gltexsubimage2d_859',['glTexSubImage2D',['../namespaceabcg.html#a7ff895f0b4b215b432009d5a23645b34',1,'abcg']]], - ['gltexsubimage3d_860',['glTexSubImage3D',['../namespaceabcg.html#a7aaad5778d19c5cc07e1259010dd406a',1,'abcg']]], - ['gltransformfeedbackvaryings_861',['glTransformFeedbackVaryings',['../namespaceabcg.html#a0f8299d53f2d5e195444be565301462c',1,'abcg']]], - ['gluniform1f_862',['glUniform1f',['../namespaceabcg.html#a6f815dac65a78efa2afda323b1cadec9',1,'abcg']]], - ['gluniform1fv_863',['glUniform1fv',['../namespaceabcg.html#a0a55fd40d1c8f2dfc0fd072e5b2c5ebc',1,'abcg']]], - ['gluniform1i_864',['glUniform1i',['../namespaceabcg.html#a17c9ec119f0c1c6d101a042131774ef9',1,'abcg']]], - ['gluniform1iv_865',['glUniform1iv',['../namespaceabcg.html#a2ac0fcc475813238eec19657e6d4899d',1,'abcg']]], - ['gluniform1ui_866',['glUniform1ui',['../namespaceabcg.html#a4566f93a590c2437fab4c2ac07ea1454',1,'abcg']]], - ['gluniform1uiv_867',['glUniform1uiv',['../namespaceabcg.html#ae712e6a279573982c1c5e7c569a47add',1,'abcg']]], - ['gluniform2f_868',['glUniform2f',['../namespaceabcg.html#aeed384502019a1ea9c53c5f79387f4a6',1,'abcg']]], - ['gluniform2fv_869',['glUniform2fv',['../namespaceabcg.html#aba238c1971fc805fb79cc9249a4b3979',1,'abcg']]], - ['gluniform2i_870',['glUniform2i',['../namespaceabcg.html#ab923c4f8e4b6a7928d41e2c557083938',1,'abcg']]], - ['gluniform2iv_871',['glUniform2iv',['../namespaceabcg.html#adf14dfa164b234c7fbed7b45426b2d62',1,'abcg']]], - ['gluniform2ui_872',['glUniform2ui',['../namespaceabcg.html#ac9593131eae76be863d98795053363c5',1,'abcg']]], - ['gluniform2uiv_873',['glUniform2uiv',['../namespaceabcg.html#abeafef647d9a881976fb42ecc4756c8d',1,'abcg']]], - ['gluniform3f_874',['glUniform3f',['../namespaceabcg.html#a3ac2b6654fcb536e3d89e695b84d0229',1,'abcg']]], - ['gluniform3fv_875',['glUniform3fv',['../namespaceabcg.html#a97188797e9d2d99c779647cc2e3b1188',1,'abcg']]], - ['gluniform3i_876',['glUniform3i',['../namespaceabcg.html#a8e3f7eba54f08608b79aa8f3b469a970',1,'abcg']]], - ['gluniform3iv_877',['glUniform3iv',['../namespaceabcg.html#a99d565ab142c3aade17d3bf0165dc348',1,'abcg']]], - ['gluniform3ui_878',['glUniform3ui',['../namespaceabcg.html#aea378f4807f17ed76e8129260b35c1a1',1,'abcg']]], - ['gluniform3uiv_879',['glUniform3uiv',['../namespaceabcg.html#a15c8e64b115ca61dc7bd460af8447497',1,'abcg']]], - ['gluniform4f_880',['glUniform4f',['../namespaceabcg.html#a26ef61adcd575428307b9b9a92dc618c',1,'abcg']]], - ['gluniform4fv_881',['glUniform4fv',['../namespaceabcg.html#a3dbe8b9316fce91031a864a1a7b91497',1,'abcg']]], - ['gluniform4i_882',['glUniform4i',['../namespaceabcg.html#a3276a3ae4b0740216d4850df60881cfe',1,'abcg']]], - ['gluniform4iv_883',['glUniform4iv',['../namespaceabcg.html#afb64d90352e53e92718dd7f10a2822a6',1,'abcg']]], - ['gluniform4ui_884',['glUniform4ui',['../namespaceabcg.html#a506182a6eb4e8158ee10567344152470',1,'abcg']]], - ['gluniform4uiv_885',['glUniform4uiv',['../namespaceabcg.html#ac21f205c4a058a639fd695c4b4bf76fc',1,'abcg']]], - ['gluniformblockbinding_886',['glUniformBlockBinding',['../namespaceabcg.html#a81f720eec72780a58bf7719461d97971',1,'abcg']]], - ['gluniformmatrix2fv_887',['glUniformMatrix2fv',['../namespaceabcg.html#abc150697687bc94d1ec422a5f2db1b88',1,'abcg']]], - ['gluniformmatrix2x3fv_888',['glUniformMatrix2x3fv',['../namespaceabcg.html#ad53649314374711d76ff0b032950e9d2',1,'abcg']]], - ['gluniformmatrix2x4fv_889',['glUniformMatrix2x4fv',['../namespaceabcg.html#ae942855746c560463aed347013e2e84f',1,'abcg']]], - ['gluniformmatrix3fv_890',['glUniformMatrix3fv',['../namespaceabcg.html#a5f5c89006586583bd0cbabbace3a1d94',1,'abcg']]], - ['gluniformmatrix3x2fv_891',['glUniformMatrix3x2fv',['../namespaceabcg.html#abb0b676883c3e5c717cea345b043a372',1,'abcg']]], - ['gluniformmatrix3x4fv_892',['glUniformMatrix3x4fv',['../namespaceabcg.html#a8b8f3bffbbf4e2d6ec0afa0f130f2132',1,'abcg']]], - ['gluniformmatrix4fv_893',['glUniformMatrix4fv',['../namespaceabcg.html#a640ca79d0f9c8636c4161cea447a361d',1,'abcg']]], - ['gluniformmatrix4x2fv_894',['glUniformMatrix4x2fv',['../namespaceabcg.html#a549e5d5f67f44712248cf3e26af0ddd6',1,'abcg']]], - ['gluniformmatrix4x3fv_895',['glUniformMatrix4x3fv',['../namespaceabcg.html#a2a4e0b3c0401e2a85fe389191c5d768f',1,'abcg']]], - ['glunmapbuffer_896',['glUnmapBuffer',['../namespaceabcg.html#a1f475772cbe67c5b2370ef179c99b614',1,'abcg']]], - ['gluseprogram_897',['glUseProgram',['../namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0',1,'abcg']]], - ['glvalidateprogram_898',['glValidateProgram',['../namespaceabcg.html#a4ca1b9c8efcec40ef7506d115807a252',1,'abcg']]], - ['glvertexattrib1f_899',['glVertexAttrib1f',['../namespaceabcg.html#af725d24a5b6b6483d1cd3420dc6ec011',1,'abcg']]], - ['glvertexattrib1fv_900',['glVertexAttrib1fv',['../namespaceabcg.html#aeff647ce94259b8e0fbe731595cf1931',1,'abcg']]], - ['glvertexattrib2f_901',['glVertexAttrib2f',['../namespaceabcg.html#ab0c88524f1c60a35e818cd6f8902c2e7',1,'abcg']]], - ['glvertexattrib2fv_902',['glVertexAttrib2fv',['../namespaceabcg.html#a3be34bb76d1f704893e5ae334488f372',1,'abcg']]], - ['glvertexattrib3f_903',['glVertexAttrib3f',['../namespaceabcg.html#afa1466dac879205506b78b021aafff27',1,'abcg']]], - ['glvertexattrib3fv_904',['glVertexAttrib3fv',['../namespaceabcg.html#aad00233878a4e63de78696409cb8cfe7',1,'abcg']]], - ['glvertexattrib4f_905',['glVertexAttrib4f',['../namespaceabcg.html#a16e4ed4c33c7e9abd8eb412c422c7f8a',1,'abcg']]], - ['glvertexattrib4fv_906',['glVertexAttrib4fv',['../namespaceabcg.html#af15b80a8f2eb74ae9de6f26996d3d51d',1,'abcg']]], - ['glvertexattribdivisor_907',['glVertexAttribDivisor',['../namespaceabcg.html#a6bc99961c0b460aff0c6176e08667ad5',1,'abcg']]], - ['glvertexattribi4i_908',['glVertexAttribI4i',['../namespaceabcg.html#a298da5e81cd558e36acc8517f183330a',1,'abcg']]], - ['glvertexattribi4iv_909',['glVertexAttribI4iv',['../namespaceabcg.html#a2f957d37e18d6883d73b0c4d81c7925f',1,'abcg']]], - ['glvertexattribi4ui_910',['glVertexAttribI4ui',['../namespaceabcg.html#a3f20fa49edff456e65bcbbfc40befa92',1,'abcg']]], - ['glvertexattribi4uiv_911',['glVertexAttribI4uiv',['../namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e',1,'abcg']]], - ['glvertexattribipointer_912',['glVertexAttribIPointer',['../namespaceabcg.html#aa76792de0db9acdbb75c5b7a228dc022',1,'abcg']]], - ['glvertexattribpointer_913',['glVertexAttribPointer',['../namespaceabcg.html#af56cc0ad4060e65221188cfa41a59168',1,'abcg']]], - ['glviewport_914',['glViewport',['../namespaceabcg.html#a4488c395e82a5408c4321a611f039c78',1,'abcg']]], - ['glwaitsync_915',['glWaitSync',['../namespaceabcg.html#a14893e8222fcaac3d07be752b3c72c04',1,'abcg']]] + ['getassetspath_622',['getAssetsPath',['../classabcg_1_1Application.html#a0ba09deb85be01372abf095ebccfd90a',1,'abcg::Application']]], + ['getbasepath_623',['getBasePath',['../classabcg_1_1Application.html#a28b5d11e55d9aaef73b329503fe7725d',1,'abcg::Application']]], + ['getcommandpools_624',['getCommandPools',['../classabcg_1_1VulkanDevice.html#a51281adfe9f7d437520c501939017de8',1,'abcg::VulkanDevice']]], + ['getcurrentframe_625',['getCurrentFrame',['../classabcg_1_1VulkanSwapchain.html#a695ca7f8a93eaa5e8a54554fec139217',1,'abcg::VulkanSwapchain']]], + ['getdeltatime_626',['getDeltaTime',['../classabcg_1_1Window.html#a084f822db9d33093e6940e312e3cf5b2',1,'abcg::Window']]], + ['getdepthimage_627',['getDepthImage',['../classabcg_1_1VulkanSwapchain.html#aed0f6c1452d14d397ab8aa0e929c5404',1,'abcg::VulkanSwapchain']]], + ['getdescriptorimageinfo_628',['getDescriptorImageInfo',['../classabcg_1_1VulkanImage.html#a8c7ee844b2493320c6bafa9485e80e8b',1,'abcg::VulkanImage']]], + ['getdevice_629',['getDevice',['../classabcg_1_1VulkanSwapchain.html#af63733016263f2ff3bbe4b3a16eaab6a',1,'abcg::VulkanSwapchain::getDevice()'],['../classabcg_1_1VulkanWindow.html#a5ebbf3a25baa85d38e2d1bde297f085f',1,'abcg::VulkanWindow::getDevice()']]], + ['getdevicememory_630',['getDeviceMemory',['../classabcg_1_1VulkanBuffer.html#a0a16b5a0699b4684cca7d1b2b3536fb8',1,'abcg::VulkanBuffer::getDeviceMemory()'],['../classabcg_1_1VulkanImage.html#a1f0d5d74b39ad1652bb4cafc217456ca',1,'abcg::VulkanImage::getDeviceMemory()']]], + ['getelapsedtime_631',['getElapsedTime',['../classabcg_1_1Window.html#a3f1cb9388f80c5f8c17dd61161f0bcbe',1,'abcg::Window']]], + ['getextent_632',['getExtent',['../classabcg_1_1VulkanSwapchain.html#a935ed2150d5edbe259ebc9559530455d',1,'abcg::VulkanSwapchain']]], + ['getfirstsupportedformat_633',['getFirstSupportedFormat',['../classabcg_1_1VulkanPhysicalDevice.html#a7576b47b13fd9277ab360900b631df32',1,'abcg::VulkanPhysicalDevice']]], + ['getframes_634',['getFrames',['../classabcg_1_1VulkanSwapchain.html#a666836f228c09910e966b5261057582e',1,'abcg::VulkanSwapchain']]], + ['getinstance_635',['getInstance',['../classabcg_1_1VulkanPhysicalDevice.html#a434af1aec8d9971df7d3e5440bca4209',1,'abcg::VulkanPhysicalDevice']]], + ['getlayout_636',['getLayout',['../classabcg_1_1VulkanPipeline.html#a8d36ff10042f814ab8ee85f8d05799e1',1,'abcg::VulkanPipeline']]], + ['getmainrenderpass_637',['getMainRenderPass',['../classabcg_1_1VulkanSwapchain.html#a671cf8a7a7acf3b7cdd40c46b4a04df3',1,'abcg::VulkanSwapchain']]], + ['getmiplevels_638',['getMipLevels',['../classabcg_1_1VulkanImage.html#a22c1075f56f68da84b6e930982ebd5a5',1,'abcg::VulkanImage']]], + ['getmodule_639',['getModule',['../classabcg_1_1VulkanShader.html#af6469274369f268db1bfeac8210ced7d',1,'abcg::VulkanShader']]], + ['getopenglsettings_640',['getOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#a83705042db987f58079d7bb16333ab9e',1,'abcg::OpenGLWindow']]], + ['getphysicaldevice_641',['getPhysicalDevice',['../classabcg_1_1VulkanDevice.html#ac67a735b1d9d9a24de55d8f7e5e13a41',1,'abcg::VulkanDevice::getPhysicalDevice()'],['../classabcg_1_1VulkanWindow.html#abba4a10ebb8d0e2ffa151134ce0d2a1e',1,'abcg::VulkanWindow::getPhysicalDevice()']]], + ['getqueues_642',['getQueues',['../classabcg_1_1VulkanDevice.html#affac11164d370e9c19e85e408dbcb15e',1,'abcg::VulkanDevice']]], + ['getqueuesfamilies_643',['getQueuesFamilies',['../classabcg_1_1VulkanPhysicalDevice.html#af3eba085cd8bb0906582dbd19a453ca6',1,'abcg::VulkanPhysicalDevice']]], + ['getrotation_644',['getRotation',['../classabcg_1_1TrackBall.html#a5801a1f9825c5ee5fae329406f4b4264',1,'abcg::TrackBall']]], + ['getsamplecount_645',['getSampleCount',['../classabcg_1_1VulkanPhysicalDevice.html#abd707cb3aa6541b95d3b7cb81eb111a4',1,'abcg::VulkanPhysicalDevice']]], + ['getsdlwindow_646',['getSDLWindow',['../classabcg_1_1Window.html#a67cdaa1c83259bd7849c4756a730a22c',1,'abcg::Window']]], + ['getsdlwindowid_647',['getSDLWindowID',['../classabcg_1_1Window.html#a6bc85489a6372037ebb5946eb20cbeaf',1,'abcg::Window']]], + ['getstage_648',['getStage',['../classabcg_1_1VulkanShader.html#a6c4ce257ae31cb6a5e1b177a7931abf7',1,'abcg::VulkanShader']]], + ['getsurfacekhr_649',['getSurfaceKHR',['../classabcg_1_1VulkanPhysicalDevice.html#a70a971ebe68c20b730e849c666b067e4',1,'abcg::VulkanPhysicalDevice']]], + ['getswapchain_650',['getSwapchain',['../classabcg_1_1VulkanWindow.html#a1767221e5ba68e35fa0db9f53fd54d2a',1,'abcg::VulkanWindow']]], + ['getuirenderpass_651',['getUIRenderPass',['../classabcg_1_1VulkanSwapchain.html#a9695875598fb7718c64d0ebe43cdf580',1,'abcg::VulkanSwapchain']]], + ['getview_652',['getView',['../classabcg_1_1VulkanImage.html#a9fca443ff07a966aa4cf3fd1fa4aa141',1,'abcg::VulkanImage']]], + ['getvulkansettings_653',['getVulkanSettings',['../classabcg_1_1VulkanWindow.html#a935ae0c0c22ca856ee4c06acca611cb5',1,'abcg::VulkanWindow']]], + ['getwindowsettings_654',['getWindowSettings',['../classabcg_1_1Window.html#a8bbd4003a05c63ace76c08146b734679',1,'abcg::Window']]], + ['getwindowsize_655',['getWindowSize',['../classabcg_1_1Window.html#adf143544a9b62c5c838768a7b446162c',1,'abcg::Window']]], + ['glactivetexture_656',['glActiveTexture',['../namespaceabcg.html#abebf61480d8b46ad61238624521c440c',1,'abcg']]], + ['glattachshader_657',['glAttachShader',['../namespaceabcg.html#aadc675d08443dfb3f52d136d1e867c54',1,'abcg']]], + ['glbeginquery_658',['glBeginQuery',['../namespaceabcg.html#a43ea888d5366cd13f8559ae5c45e503e',1,'abcg']]], + ['glbegintransformfeedback_659',['glBeginTransformFeedback',['../namespaceabcg.html#a4284264dbf0f5c318686f11bce8183cf',1,'abcg']]], + ['glbindattriblocation_660',['glBindAttribLocation',['../namespaceabcg.html#ae5d99843e0bc8a0c59503a2530d56d48',1,'abcg']]], + ['glbindbuffer_661',['glBindBuffer',['../namespaceabcg.html#a3cd63c5a736b0e401ad6e4ab6ea1ec41',1,'abcg']]], + ['glbindbufferbase_662',['glBindBufferBase',['../namespaceabcg.html#aa48f81c11025d9e8fc04c681932392ad',1,'abcg']]], + ['glbindbufferrange_663',['glBindBufferRange',['../namespaceabcg.html#a88b58e0a1d0a1aa9d68a0e19e78657ce',1,'abcg']]], + ['glbindfragdatalocation_664',['glBindFragDataLocation',['../namespaceabcg.html#a3f007c8f6d4d4ed049b66e03328d5b30',1,'abcg']]], + ['glbindframebuffer_665',['glBindFramebuffer',['../namespaceabcg.html#aaef0756c5e371e4b80f652586438b594',1,'abcg']]], + ['glbindrenderbuffer_666',['glBindRenderbuffer',['../namespaceabcg.html#aa2ee20f9a4dfcf2e740b00b08fb46b3e',1,'abcg']]], + ['glbindsampler_667',['glBindSampler',['../namespaceabcg.html#afb3c84a308e303b503c6f0cdefd5f426',1,'abcg']]], + ['glbindtexture_668',['glBindTexture',['../namespaceabcg.html#adb43c7b544c334de5da3f6c2c30570ae',1,'abcg']]], + ['glbindtransformfeedback_669',['glBindTransformFeedback',['../namespaceabcg.html#a8881b494dbdda2e680d2abf82dccadd9',1,'abcg']]], + ['glbindvertexarray_670',['glBindVertexArray',['../namespaceabcg.html#afe4c4f9e797dcd01910528c13ff471d4',1,'abcg']]], + ['glblendcolor_671',['glBlendColor',['../namespaceabcg.html#af87c9f438750ec5baa88caa3e204469c',1,'abcg']]], + ['glblendequation_672',['glBlendEquation',['../namespaceabcg.html#afa82d1d244c12d3f884e674b79a04f3e',1,'abcg']]], + ['glblendequationseparate_673',['glBlendEquationSeparate',['../namespaceabcg.html#a2e813667e01f4ea1e3a4ca5a16d4847e',1,'abcg']]], + ['glblendfunc_674',['glBlendFunc',['../namespaceabcg.html#a620308c51e62a88d78f44312b8931947',1,'abcg']]], + ['glblendfuncseparate_675',['glBlendFuncSeparate',['../namespaceabcg.html#a1156c925b568620ac51f94893db587ac',1,'abcg']]], + ['glblitframebuffer_676',['glBlitFramebuffer',['../namespaceabcg.html#aee53221fba9cbf13c75d78c9533da27b',1,'abcg']]], + ['glbufferdata_677',['glBufferData',['../namespaceabcg.html#a402e5079e8489cb8df8e3a6c5fcdbebf',1,'abcg']]], + ['glbuffersubdata_678',['glBufferSubData',['../namespaceabcg.html#af7091aa59a245999d277ec71e54b687f',1,'abcg']]], + ['glcheckframebufferstatus_679',['glCheckFramebufferStatus',['../namespaceabcg.html#a14b00e8df85dc5b1930b051be0f6a13d',1,'abcg']]], + ['glclear_680',['glClear',['../namespaceabcg.html#a37cf087e190d68ae489d69c1c7fb8c1a',1,'abcg']]], + ['glclearbufferfi_681',['glClearBufferfi',['../namespaceabcg.html#afd3d4e6a15e37502f806875152c161ec',1,'abcg']]], + ['glclearbufferfv_682',['glClearBufferfv',['../namespaceabcg.html#a4ee2c8db262e80410ae7a854d16c8637',1,'abcg']]], + ['glclearbufferiv_683',['glClearBufferiv',['../namespaceabcg.html#a1b9de47c64a177ed5daf99eeee3c3f05',1,'abcg']]], + ['glclearbufferuiv_684',['glClearBufferuiv',['../namespaceabcg.html#a9e5f02ca43e19e99dc0681be375b453d',1,'abcg']]], + ['glclearcolor_685',['glClearColor',['../namespaceabcg.html#a71881ed09c733ef5db9301bfee7a2f5f',1,'abcg']]], + ['glcleardepthf_686',['glClearDepthf',['../namespaceabcg.html#ace2477348a520f6b554b8b34662c53ac',1,'abcg']]], + ['glclearstencil_687',['glClearStencil',['../namespaceabcg.html#a3a4d7f77a063949bb602ac36ecc44319',1,'abcg']]], + ['glclientwaitsync_688',['glClientWaitSync',['../namespaceabcg.html#a4f8e59d6c10733d194fc5a329e52245f',1,'abcg']]], + ['glcolormask_689',['glColorMask',['../namespaceabcg.html#a41326750eb174903b1bf4119b7f33e96',1,'abcg']]], + ['glcompileshader_690',['glCompileShader',['../namespaceabcg.html#a9ab713ec7c6e93a8f09b5278133dfcf7',1,'abcg']]], + ['glcompressedteximage2d_691',['glCompressedTexImage2D',['../namespaceabcg.html#aca8b5cd79464cb9dcb6bc0c2261407f1',1,'abcg']]], + ['glcompressedteximage3d_692',['glCompressedTexImage3D',['../namespaceabcg.html#ad7bbab39db44f5da2ba62fe1de5a9dba',1,'abcg']]], + ['glcompressedtexsubimage2d_693',['glCompressedTexSubImage2D',['../namespaceabcg.html#a7a481529107e6f722c37ac9d559fc671',1,'abcg']]], + ['glcompressedtexsubimage3d_694',['glCompressedTexSubImage3D',['../namespaceabcg.html#a96b8b60242b097fb74451d423dc79fae',1,'abcg']]], + ['glcopybuffersubdata_695',['glCopyBufferSubData',['../namespaceabcg.html#a914c501ed0eff87b4474d1594ecc2f04',1,'abcg']]], + ['glcopyteximage2d_696',['glCopyTexImage2D',['../namespaceabcg.html#a8788882dedc9d5a598dfad1f21f9d6eb',1,'abcg']]], + ['glcopytexsubimage2d_697',['glCopyTexSubImage2D',['../namespaceabcg.html#ab7826bb1da6c947977b5644c00538540',1,'abcg']]], + ['glcopytexsubimage3d_698',['glCopyTexSubImage3D',['../namespaceabcg.html#a9c896be2e2c6b41db3e1f4891e27bf8d',1,'abcg']]], + ['glcreateprogram_699',['glCreateProgram',['../namespaceabcg.html#a2449fe3ff11796b682ca51d2611e0f8c',1,'abcg']]], + ['glcreateshader_700',['glCreateShader',['../namespaceabcg.html#a62dfd7c0cdb61a2971697e3980094a0e',1,'abcg']]], + ['glcullface_701',['glCullFace',['../namespaceabcg.html#a1daed0c2b70ea52f0436053095125e44',1,'abcg']]], + ['gldeletebuffers_702',['glDeleteBuffers',['../namespaceabcg.html#aab8d9786020b3f0a4a3f3a969579741c',1,'abcg']]], + ['gldeleteframebuffers_703',['glDeleteFramebuffers',['../namespaceabcg.html#a6c490c5eb7640f40ae09f87b0c52d81e',1,'abcg']]], + ['gldeleteprogram_704',['glDeleteProgram',['../namespaceabcg.html#a1c0feac412868f91511bc6cee51c0472',1,'abcg']]], + ['gldeletequeries_705',['glDeleteQueries',['../namespaceabcg.html#a6ce400968a396129fa47a1f2afa4f3da',1,'abcg']]], + ['gldeleterenderbuffers_706',['glDeleteRenderbuffers',['../namespaceabcg.html#aecca79eb3f54538532577cf2a21e067f',1,'abcg']]], + ['gldeletesamplers_707',['glDeleteSamplers',['../namespaceabcg.html#a8d2a8ddcaa0d34736ef16578f2d159a2',1,'abcg']]], + ['gldeleteshader_708',['glDeleteShader',['../namespaceabcg.html#ad378a150bf0c2b569ff5b22cd435acd6',1,'abcg']]], + ['gldeletesync_709',['glDeleteSync',['../namespaceabcg.html#a2f41106aca8b0948e9fb61a623413d08',1,'abcg']]], + ['gldeletetextures_710',['glDeleteTextures',['../namespaceabcg.html#a71fd7066e8b3aba42012e4f0136adc63',1,'abcg']]], + ['gldeletetransformfeedbacks_711',['glDeleteTransformFeedbacks',['../namespaceabcg.html#a65fc031e96cb6e9c23237520f257e174',1,'abcg']]], + ['gldeletevertexarrays_712',['glDeleteVertexArrays',['../namespaceabcg.html#a5c7dcb111f3c739f8948b80a4a2d23e2',1,'abcg']]], + ['gldepthfunc_713',['glDepthFunc',['../namespaceabcg.html#aa46fa714ee9925690a7bb07c3ef52df9',1,'abcg']]], + ['gldepthmask_714',['glDepthMask',['../namespaceabcg.html#a2c2a12a15c7b445dcee3d8656ca6dfbc',1,'abcg']]], + ['gldepthrangef_715',['glDepthRangef',['../namespaceabcg.html#a08dbe7a21733bff43ed976be14f99e9b',1,'abcg']]], + ['gldetachshader_716',['glDetachShader',['../namespaceabcg.html#a045bd908a5989d1ed1b6a4d28cc2bab6',1,'abcg']]], + ['gldisable_717',['glDisable',['../namespaceabcg.html#a84963ee1cf3177d6f23ca4641daf8b9b',1,'abcg']]], + ['gldisablevertexattribarray_718',['glDisableVertexAttribArray',['../namespaceabcg.html#a953dfc9ac20750b998c1b320c9c3177e',1,'abcg']]], + ['gldrawarrays_719',['glDrawArrays',['../namespaceabcg.html#a47e3bd5f6dc82daa656e76b655940338',1,'abcg']]], + ['gldrawarraysinstanced_720',['glDrawArraysInstanced',['../namespaceabcg.html#a32f7f0c0ce76c25248271a64c2b8e52b',1,'abcg']]], + ['gldrawbuffers_721',['glDrawBuffers',['../namespaceabcg.html#ae03a93e0f048e849bb5e37d712d7000c',1,'abcg']]], + ['gldrawelements_722',['glDrawElements',['../namespaceabcg.html#abaa5a136840114161dd2dca5dcfce646',1,'abcg']]], + ['gldrawelementsinstanced_723',['glDrawElementsInstanced',['../namespaceabcg.html#a67e3ae359f4840a60501e01a7ce4fb49',1,'abcg']]], + ['gldrawrangeelements_724',['glDrawRangeElements',['../namespaceabcg.html#aa5e970181c35e076181628df29de48e5',1,'abcg']]], + ['glenable_725',['glEnable',['../namespaceabcg.html#a5ee5802eb4646b281e426e550658124f',1,'abcg']]], + ['glenablevertexattribarray_726',['glEnableVertexAttribArray',['../namespaceabcg.html#a2b8c6c76fcc9d16e4a29551cac8f428f',1,'abcg']]], + ['glendquery_727',['glEndQuery',['../namespaceabcg.html#acebb037ad49e0f3714436346cb370a3e',1,'abcg']]], + ['glendtransformfeedback_728',['glEndTransformFeedback',['../namespaceabcg.html#a1427186fdcf12b9897523589b1ddf20f',1,'abcg']]], + ['glfencesync_729',['glFenceSync',['../namespaceabcg.html#acf7bb9039752df88aba99ed50675ceb6',1,'abcg']]], + ['glfinish_730',['glFinish',['../namespaceabcg.html#a94ad89b8ca10fc632d08f6c9d04d162e',1,'abcg']]], + ['glflush_731',['glFlush',['../namespaceabcg.html#ae0c6f2648cab3d1cd82a7ba910776e2b',1,'abcg']]], + ['glflushmappedbufferrange_732',['glFlushMappedBufferRange',['../namespaceabcg.html#a9280491505581f2f303c3f11442a9d8d',1,'abcg']]], + ['glframebufferrenderbuffer_733',['glFramebufferRenderbuffer',['../namespaceabcg.html#a24715a37b830d861d7cdb1f2f24bd32d',1,'abcg']]], + ['glframebuffertexture_734',['glFramebufferTexture',['../namespaceabcg.html#adb0766367e9364b01040121a4c2c79ed',1,'abcg']]], + ['glframebuffertexture2d_735',['glFramebufferTexture2D',['../namespaceabcg.html#a47dba8957f7121ceccfde94363e707e4',1,'abcg']]], + ['glframebuffertexturelayer_736',['glFramebufferTextureLayer',['../namespaceabcg.html#a399dc5200ed4b1c5ba36bc3aaa58c508',1,'abcg']]], + ['glfrontface_737',['glFrontFace',['../namespaceabcg.html#a6fa8b701a9a5003498e663163fe68729',1,'abcg']]], + ['glgenbuffers_738',['glGenBuffers',['../namespaceabcg.html#a5df92f4a085d8bca0fd0c52feee0128a',1,'abcg']]], + ['glgeneratemipmap_739',['glGenerateMipmap',['../namespaceabcg.html#acc670193ec022e761c4af8976494ed07',1,'abcg']]], + ['glgenframebuffers_740',['glGenFramebuffers',['../namespaceabcg.html#a5fb50995430e196812ba5fa75a9bf25a',1,'abcg']]], + ['glgenqueries_741',['glGenQueries',['../namespaceabcg.html#a86c415c268d7669e07339991c608e60b',1,'abcg']]], + ['glgenrenderbuffers_742',['glGenRenderbuffers',['../namespaceabcg.html#a4c9b0c886972e7d983e58c367787572c',1,'abcg']]], + ['glgensamplers_743',['glGenSamplers',['../namespaceabcg.html#ada23095347757d96190b853daddf8434',1,'abcg']]], + ['glgentextures_744',['glGenTextures',['../namespaceabcg.html#ae1015bd07641da254a331d9b3238d96f',1,'abcg']]], + ['glgentransformfeedbacks_745',['glGenTransformFeedbacks',['../namespaceabcg.html#a251e7d7579160c8fad43d5ce06ee9b06',1,'abcg']]], + ['glgenvertexarrays_746',['glGenVertexArrays',['../namespaceabcg.html#a7cc7561e9541d7841342173bec200d0d',1,'abcg']]], + ['glgetactiveattrib_747',['glGetActiveAttrib',['../namespaceabcg.html#ae0cdaa8143c25fdc5dd90b375a362816',1,'abcg']]], + ['glgetactiveuniform_748',['glGetActiveUniform',['../namespaceabcg.html#ac5aac5887d3a23fdd9e62db27eac53db',1,'abcg']]], + ['glgetactiveuniformblockiv_749',['glGetActiveUniformBlockiv',['../namespaceabcg.html#aac48b45e3026be3bc4270b9b98dd1b81',1,'abcg']]], + ['glgetactiveuniformblockname_750',['glGetActiveUniformBlockName',['../namespaceabcg.html#a242378c05d9480103f5375c8a8826c28',1,'abcg']]], + ['glgetactiveuniformsiv_751',['glGetActiveUniformsiv',['../namespaceabcg.html#aaf5e44d65badbc70664b1f392b0fb36f',1,'abcg']]], + ['glgetattachedshaders_752',['glGetAttachedShaders',['../namespaceabcg.html#a69e507a360bcf1ef4061f8c9a2731727',1,'abcg']]], + ['glgetattriblocation_753',['glGetAttribLocation',['../namespaceabcg.html#aa28b9cf639287662cb747a5f48e62ac7',1,'abcg']]], + ['glgetbooleanv_754',['glGetBooleanv',['../namespaceabcg.html#a96a319c6482b3dfc7e3375e5d2339ea8',1,'abcg']]], + ['glgetbufferparameteri64v_755',['glGetBufferParameteri64v',['../namespaceabcg.html#a6b33c9c6944be9a18490575915090e22',1,'abcg']]], + ['glgetbufferparameteriv_756',['glGetBufferParameteriv',['../namespaceabcg.html#ac96ad909a86ceba40b0a92e7b227f992',1,'abcg']]], + ['glgetbufferpointerv_757',['glGetBufferPointerv',['../namespaceabcg.html#ada9205a4af5b2d12c78c16b5176a6a82',1,'abcg']]], + ['glgetdoublev_758',['glGetDoublev',['../namespaceabcg.html#a8bd8be541ec50d33e34248aecd3f25b7',1,'abcg']]], + ['glgetfloatv_759',['glGetFloatv',['../namespaceabcg.html#af0c9e138d135378a3de00663c616cf46',1,'abcg']]], + ['glgetfragdatalocation_760',['glGetFragDataLocation',['../namespaceabcg.html#a1468aeed842d55a612da7a8257f5006f',1,'abcg']]], + ['glgetframebufferattachmentparameteriv_761',['glGetFramebufferAttachmentParameteriv',['../namespaceabcg.html#a4c721ad9d476be58c7fcc04da120288b',1,'abcg']]], + ['glgetinteger64i_5fv_762',['glGetInteger64i_v',['../namespaceabcg.html#ac2e13dc4a2ded3237be1ca90bad68d4e',1,'abcg']]], + ['glgetinteger64v_763',['glGetInteger64v',['../namespaceabcg.html#a59ea90fe9ec82ae3af1b3a29fe98de3f',1,'abcg']]], + ['glgetintegeri_5fv_764',['glGetIntegeri_v',['../namespaceabcg.html#ab3e060569fa74e0509c2a28806e4a847',1,'abcg']]], + ['glgetintegerv_765',['glGetIntegerv',['../namespaceabcg.html#a5fc4ea3f0ee00aec4b4ad39d830b83d5',1,'abcg']]], + ['glgetinternalformativ_766',['glGetInternalformativ',['../namespaceabcg.html#a56430f42fc367519455b993473579b79',1,'abcg']]], + ['glgetprogrambinary_767',['glGetProgramBinary',['../namespaceabcg.html#a70e991b998cd93d8ae0cdf86a145ed37',1,'abcg']]], + ['glgetprograminfolog_768',['glGetProgramInfoLog',['../namespaceabcg.html#a9169273965372bf17961bafe2cd37f8c',1,'abcg']]], + ['glgetprogramiv_769',['glGetProgramiv',['../namespaceabcg.html#afa031f5f52ad88625a88e1410478d892',1,'abcg']]], + ['glgetqueryiv_770',['glGetQueryiv',['../namespaceabcg.html#a9c6d035dae7a9d2137cc484b6704f0c9',1,'abcg']]], + ['glgetqueryobjectuiv_771',['glGetQueryObjectuiv',['../namespaceabcg.html#a73910bf72dd61e452b1776b00cdd7972',1,'abcg']]], + ['glgetrenderbufferparameteriv_772',['glGetRenderbufferParameteriv',['../namespaceabcg.html#a3c9dd56405aa600ef77b3194ddec1c52',1,'abcg']]], + ['glgetsamplerparameterfv_773',['glGetSamplerParameterfv',['../namespaceabcg.html#aa444f01ece43218d34ad9256c88eddf5',1,'abcg']]], + ['glgetsamplerparameteriv_774',['glGetSamplerParameteriv',['../namespaceabcg.html#ae6ea1aa7744033cbe3a10ec3b646e30d',1,'abcg']]], + ['glgetshaderinfolog_775',['glGetShaderInfoLog',['../namespaceabcg.html#a86aec026f1d1e876c7f47dfca141bc03',1,'abcg']]], + ['glgetshaderiv_776',['glGetShaderiv',['../namespaceabcg.html#aa074570fbd8a39ce2e899245b407044b',1,'abcg']]], + ['glgetshaderprecisionformat_777',['glGetShaderPrecisionFormat',['../namespaceabcg.html#a0690d7a9fb1fbe27f1630b51a6ef506f',1,'abcg']]], + ['glgetshadersource_778',['glGetShaderSource',['../namespaceabcg.html#abe63fd43e8ff35c953ca7a58a9f50f24',1,'abcg']]], + ['glgetstring_779',['glGetString',['../namespaceabcg.html#af419f0698487fc55f9fd8b7a424eb633',1,'abcg']]], + ['glgetstringi_780',['glGetStringi',['../namespaceabcg.html#ac2b042cb4fcd350f3efd9925f90bb068',1,'abcg']]], + ['glgetsynciv_781',['glGetSynciv',['../namespaceabcg.html#a57fa9fe8caf214671576ed55b06f239f',1,'abcg']]], + ['glgettexlevelparameterfv_782',['glGetTexLevelParameterfv',['../namespaceabcg.html#a720dffe7d97e8ebaba17b6d87583fd59',1,'abcg']]], + ['glgettexlevelparameteriv_783',['glGetTexLevelParameteriv',['../namespaceabcg.html#aee3c58bf82ea8186bfab4f2942997022',1,'abcg']]], + ['glgettexparameterfv_784',['glGetTexParameterfv',['../namespaceabcg.html#a4a8a224da5a79b1029605b7e77218e7c',1,'abcg']]], + ['glgettexparameteriv_785',['glGetTexParameteriv',['../namespaceabcg.html#ac768bcd240c1d1ad80589e5a248408df',1,'abcg']]], + ['glgettransformfeedbackvarying_786',['glGetTransformFeedbackVarying',['../namespaceabcg.html#a9a5c4567cf69ddd662085c0f86b37fa4',1,'abcg']]], + ['glgetuniformblockindex_787',['glGetUniformBlockIndex',['../namespaceabcg.html#a6710abf9cdd9e78d00280c40a56058da',1,'abcg']]], + ['glgetuniformfv_788',['glGetUniformfv',['../namespaceabcg.html#ae51c6519e4ba4b2a237c148d5606d76c',1,'abcg']]], + ['glgetuniformindices_789',['glGetUniformIndices',['../namespaceabcg.html#ace8f774eff785ea7e9f90c1c6b8e4425',1,'abcg']]], + ['glgetuniformiv_790',['glGetUniformiv',['../namespaceabcg.html#a3ed72ff0a3751e87af8369466f3a1cbf',1,'abcg']]], + ['glgetuniformlocation_791',['glGetUniformLocation',['../namespaceabcg.html#a22cb6b45a1ae2153d289a0ee3ac7729a',1,'abcg']]], + ['glgetuniformuiv_792',['glGetUniformuiv',['../namespaceabcg.html#acffb14045c39d65f3f8bead758313fbc',1,'abcg']]], + ['glgetvertexattribfv_793',['glGetVertexAttribfv',['../namespaceabcg.html#aedab4d42e7085a4bab268099b2d1346d',1,'abcg']]], + ['glgetvertexattribiiv_794',['glGetVertexAttribIiv',['../namespaceabcg.html#ad31542472e21428d05473b3ebe2489ee',1,'abcg']]], + ['glgetvertexattribiuiv_795',['glGetVertexAttribIuiv',['../namespaceabcg.html#a6a360138b05890b13f8439344e08512f',1,'abcg']]], + ['glgetvertexattribiv_796',['glGetVertexAttribiv',['../namespaceabcg.html#a78e9cb3ed811f7863b4a0c304a9fb278',1,'abcg']]], + ['glgetvertexattribpointerv_797',['glGetVertexAttribPointerv',['../namespaceabcg.html#aca5b82d3582454e73b1a86192124d485',1,'abcg']]], + ['glhint_798',['glHint',['../namespaceabcg.html#a97c884a2a934bf40d378024d81be625e',1,'abcg']]], + ['glinvalidateframebuffer_799',['glInvalidateFramebuffer',['../namespaceabcg.html#a619e3d0de44a879aa6db3054c39130ec',1,'abcg']]], + ['glinvalidatesubframebuffer_800',['glInvalidateSubFramebuffer',['../namespaceabcg.html#a47b7481c9fc066c9cd54a0f010258818',1,'abcg']]], + ['glisbuffer_801',['glIsBuffer',['../namespaceabcg.html#afb123afaf46459222024ea041cac15c7',1,'abcg']]], + ['glisenabled_802',['glIsEnabled',['../namespaceabcg.html#a2355d26ca6b32f64dd502ba787074e95',1,'abcg']]], + ['glisframebuffer_803',['glIsFramebuffer',['../namespaceabcg.html#abde059e7926e418ee7676f612480ca2e',1,'abcg']]], + ['glisprogram_804',['glIsProgram',['../namespaceabcg.html#ad8512fcd1782c81aaa121cd7e6c561d1',1,'abcg']]], + ['glisquery_805',['glIsQuery',['../namespaceabcg.html#a7a5eac1646a59b2c8de24b4862d3b2d9',1,'abcg']]], + ['glisrenderbuffer_806',['glIsRenderbuffer',['../namespaceabcg.html#a15acb0b1b9464f294f99aa989c44dc70',1,'abcg']]], + ['glissampler_807',['glIsSampler',['../namespaceabcg.html#ad85c0ff02a8b681ecb188752dd8ce9c0',1,'abcg']]], + ['glisshader_808',['glIsShader',['../namespaceabcg.html#a36db9b553f7422ea79b751c5763d194c',1,'abcg']]], + ['glissync_809',['glIsSync',['../namespaceabcg.html#a6e39dbba1c1d91b8df99ab60da87c364',1,'abcg']]], + ['glistexture_810',['glIsTexture',['../namespaceabcg.html#a913e9b053d880a383d8bf3d55cb5ead3',1,'abcg']]], + ['glistransformfeedback_811',['glIsTransformFeedback',['../namespaceabcg.html#aed892da4fd2e2517f53ca8c902d36a31',1,'abcg']]], + ['glisvertexarray_812',['glIsVertexArray',['../namespaceabcg.html#a5afdcd1166d09049b9bea8f425bbd0db',1,'abcg']]], + ['gllinewidth_813',['glLineWidth',['../namespaceabcg.html#aba2cae07b1fe8e188ff0fcc76ec9db8b',1,'abcg']]], + ['gllinkprogram_814',['glLinkProgram',['../namespaceabcg.html#af84c0f4d0816181cba506f1703c037c2',1,'abcg']]], + ['glmapbufferrange_815',['glMapBufferRange',['../namespaceabcg.html#aaa863c0c9f439036f6d2b58e375ee105',1,'abcg']]], + ['glpausetransformfeedback_816',['glPauseTransformFeedback',['../namespaceabcg.html#a03d850c93d16ad308516bb83bb8ffa0d',1,'abcg']]], + ['glpixelstorei_817',['glPixelStorei',['../namespaceabcg.html#a05ece875ff476f630548c8cf7a0d952b',1,'abcg']]], + ['glpolygonoffset_818',['glPolygonOffset',['../namespaceabcg.html#afa173d8901021cb88486592fcc300a14',1,'abcg']]], + ['glprogrambinary_819',['glProgramBinary',['../namespaceabcg.html#aa836ddfde2ab9014c8322a66b1fc5bcc',1,'abcg']]], + ['glprogramparameteri_820',['glProgramParameteri',['../namespaceabcg.html#ae48fb31c3e26632acba7e1a9753ee5c9',1,'abcg']]], + ['glreadbuffer_821',['glReadBuffer',['../namespaceabcg.html#a9fbd7418dfcde0cdbb4ff58d29e40a4f',1,'abcg']]], + ['glreadpixels_822',['glReadPixels',['../namespaceabcg.html#ae8720c564832cd331d886e24aaf68c29',1,'abcg']]], + ['glreleaseshadercompiler_823',['glReleaseShaderCompiler',['../namespaceabcg.html#a3e97ab629b7cc5d4c7259e521ebe5fb7',1,'abcg']]], + ['glrenderbufferstorage_824',['glRenderbufferStorage',['../namespaceabcg.html#aae32d699a30865e7aa4c4de786a1d593',1,'abcg']]], + ['glrenderbufferstoragemultisample_825',['glRenderbufferStorageMultisample',['../namespaceabcg.html#aee93697e0e0b92b0b73a9c374d4afff0',1,'abcg']]], + ['glresumetransformfeedback_826',['glResumeTransformFeedback',['../namespaceabcg.html#a81e93970a280fc3782f7577db7060458',1,'abcg']]], + ['glsamplecoverage_827',['glSampleCoverage',['../namespaceabcg.html#adee87442b65fa46fe96cceb6a21d496a',1,'abcg']]], + ['glsamplerparameterf_828',['glSamplerParameterf',['../namespaceabcg.html#aa12216132f4a0242e7f0882c99bc98ad',1,'abcg']]], + ['glsamplerparameterfv_829',['glSamplerParameterfv',['../namespaceabcg.html#a03ba96b4728e99b4f58cce1f3e102b49',1,'abcg']]], + ['glsamplerparameteri_830',['glSamplerParameteri',['../namespaceabcg.html#ae9971e1b8abb781440101bac0968a897',1,'abcg']]], + ['glsamplerparameteriv_831',['glSamplerParameteriv',['../namespaceabcg.html#a304af29cf7db15205236d97e1836e79a',1,'abcg']]], + ['glscissor_832',['glScissor',['../namespaceabcg.html#ae1a3e82a002194c222284c5588998cfb',1,'abcg']]], + ['glshaderbinary_833',['glShaderBinary',['../namespaceabcg.html#af1c355ed607c699a2fbe6b56454b84db',1,'abcg']]], + ['glshadersource_834',['glShaderSource',['../namespaceabcg.html#a828f4d3a0f75f391780765df28ce8914',1,'abcg']]], + ['glsltospv_835',['GLSLtoSPV',['../abcgVulkanShader_8cpp.html#a690f9c3849ca028c431f9332c4df888a',1,'abcgVulkanShader.cpp']]], + ['glstencilfunc_836',['glStencilFunc',['../namespaceabcg.html#ad1bc3b8d63e3b65fc3a1222ce789db3a',1,'abcg']]], + ['glstencilfuncseparate_837',['glStencilFuncSeparate',['../namespaceabcg.html#a10f604e428c78fad5ca881ecae15f9df',1,'abcg']]], + ['glstencilmask_838',['glStencilMask',['../namespaceabcg.html#a1f1123ce5bc6fade14962343ad3395f0',1,'abcg']]], + ['glstencilmaskseparate_839',['glStencilMaskSeparate',['../namespaceabcg.html#aadbe72b51aec2a1355ab4a9fc312043c',1,'abcg']]], + ['glstencilop_840',['glStencilOp',['../namespaceabcg.html#a7b172b6de78b247898a24c61d6d1d25f',1,'abcg']]], + ['glstencilopseparate_841',['glStencilOpSeparate',['../namespaceabcg.html#a86ed23edfe4b5ef502fe321f5a40b706',1,'abcg']]], + ['glteximage2d_842',['glTexImage2D',['../namespaceabcg.html#ae220fd2c2bd61130ace06f851609903d',1,'abcg']]], + ['glteximage2dmultisample_843',['glTexImage2DMultisample',['../namespaceabcg.html#aea5f1cc76074ee940772a749cd1b57ad',1,'abcg']]], + ['glteximage3d_844',['glTexImage3D',['../namespaceabcg.html#a55111fa9ae85db9d5c62854dc5cfb735',1,'abcg']]], + ['gltexparameterf_845',['glTexParameterf',['../namespaceabcg.html#a3d91ea0fc162e4a0f5f6060418b6d61c',1,'abcg']]], + ['gltexparameterfv_846',['glTexParameterfv',['../namespaceabcg.html#a9f00bcbf608a6489e1bcbffe964574ea',1,'abcg']]], + ['gltexparameteri_847',['glTexParameteri',['../namespaceabcg.html#a4d4aae2bed9b15f89cd6bf9268cfcd0b',1,'abcg']]], + ['gltexparameteriv_848',['glTexParameteriv',['../namespaceabcg.html#aa4c561c1f3f974025cbf25837f5b0b41',1,'abcg']]], + ['gltexstorage2d_849',['glTexStorage2D',['../namespaceabcg.html#a4573fb1a4dd47d4a692b4602a4009918',1,'abcg']]], + ['gltexstorage3d_850',['glTexStorage3D',['../namespaceabcg.html#af9d8885c892cfeadf62c7280254d57f9',1,'abcg']]], + ['gltexsubimage2d_851',['glTexSubImage2D',['../namespaceabcg.html#a7ff895f0b4b215b432009d5a23645b34',1,'abcg']]], + ['gltexsubimage3d_852',['glTexSubImage3D',['../namespaceabcg.html#a7aaad5778d19c5cc07e1259010dd406a',1,'abcg']]], + ['gltransformfeedbackvaryings_853',['glTransformFeedbackVaryings',['../namespaceabcg.html#a0f8299d53f2d5e195444be565301462c',1,'abcg']]], + ['gluniform1f_854',['glUniform1f',['../namespaceabcg.html#a6f815dac65a78efa2afda323b1cadec9',1,'abcg']]], + ['gluniform1fv_855',['glUniform1fv',['../namespaceabcg.html#a0a55fd40d1c8f2dfc0fd072e5b2c5ebc',1,'abcg']]], + ['gluniform1i_856',['glUniform1i',['../namespaceabcg.html#a17c9ec119f0c1c6d101a042131774ef9',1,'abcg']]], + ['gluniform1iv_857',['glUniform1iv',['../namespaceabcg.html#a2ac0fcc475813238eec19657e6d4899d',1,'abcg']]], + ['gluniform1ui_858',['glUniform1ui',['../namespaceabcg.html#a4566f93a590c2437fab4c2ac07ea1454',1,'abcg']]], + ['gluniform1uiv_859',['glUniform1uiv',['../namespaceabcg.html#ae712e6a279573982c1c5e7c569a47add',1,'abcg']]], + ['gluniform2f_860',['glUniform2f',['../namespaceabcg.html#aeed384502019a1ea9c53c5f79387f4a6',1,'abcg']]], + ['gluniform2fv_861',['glUniform2fv',['../namespaceabcg.html#aba238c1971fc805fb79cc9249a4b3979',1,'abcg']]], + ['gluniform2i_862',['glUniform2i',['../namespaceabcg.html#ab923c4f8e4b6a7928d41e2c557083938',1,'abcg']]], + ['gluniform2iv_863',['glUniform2iv',['../namespaceabcg.html#adf14dfa164b234c7fbed7b45426b2d62',1,'abcg']]], + ['gluniform2ui_864',['glUniform2ui',['../namespaceabcg.html#ac9593131eae76be863d98795053363c5',1,'abcg']]], + ['gluniform2uiv_865',['glUniform2uiv',['../namespaceabcg.html#abeafef647d9a881976fb42ecc4756c8d',1,'abcg']]], + ['gluniform3f_866',['glUniform3f',['../namespaceabcg.html#a3ac2b6654fcb536e3d89e695b84d0229',1,'abcg']]], + ['gluniform3fv_867',['glUniform3fv',['../namespaceabcg.html#a97188797e9d2d99c779647cc2e3b1188',1,'abcg']]], + ['gluniform3i_868',['glUniform3i',['../namespaceabcg.html#a8e3f7eba54f08608b79aa8f3b469a970',1,'abcg']]], + ['gluniform3iv_869',['glUniform3iv',['../namespaceabcg.html#a99d565ab142c3aade17d3bf0165dc348',1,'abcg']]], + ['gluniform3ui_870',['glUniform3ui',['../namespaceabcg.html#aea378f4807f17ed76e8129260b35c1a1',1,'abcg']]], + ['gluniform3uiv_871',['glUniform3uiv',['../namespaceabcg.html#a15c8e64b115ca61dc7bd460af8447497',1,'abcg']]], + ['gluniform4f_872',['glUniform4f',['../namespaceabcg.html#a26ef61adcd575428307b9b9a92dc618c',1,'abcg']]], + ['gluniform4fv_873',['glUniform4fv',['../namespaceabcg.html#a3dbe8b9316fce91031a864a1a7b91497',1,'abcg']]], + ['gluniform4i_874',['glUniform4i',['../namespaceabcg.html#a3276a3ae4b0740216d4850df60881cfe',1,'abcg']]], + ['gluniform4iv_875',['glUniform4iv',['../namespaceabcg.html#afb64d90352e53e92718dd7f10a2822a6',1,'abcg']]], + ['gluniform4ui_876',['glUniform4ui',['../namespaceabcg.html#a506182a6eb4e8158ee10567344152470',1,'abcg']]], + ['gluniform4uiv_877',['glUniform4uiv',['../namespaceabcg.html#ac21f205c4a058a639fd695c4b4bf76fc',1,'abcg']]], + ['gluniformblockbinding_878',['glUniformBlockBinding',['../namespaceabcg.html#a81f720eec72780a58bf7719461d97971',1,'abcg']]], + ['gluniformmatrix2fv_879',['glUniformMatrix2fv',['../namespaceabcg.html#abc150697687bc94d1ec422a5f2db1b88',1,'abcg']]], + ['gluniformmatrix2x3fv_880',['glUniformMatrix2x3fv',['../namespaceabcg.html#ad53649314374711d76ff0b032950e9d2',1,'abcg']]], + ['gluniformmatrix2x4fv_881',['glUniformMatrix2x4fv',['../namespaceabcg.html#ae942855746c560463aed347013e2e84f',1,'abcg']]], + ['gluniformmatrix3fv_882',['glUniformMatrix3fv',['../namespaceabcg.html#a5f5c89006586583bd0cbabbace3a1d94',1,'abcg']]], + ['gluniformmatrix3x2fv_883',['glUniformMatrix3x2fv',['../namespaceabcg.html#abb0b676883c3e5c717cea345b043a372',1,'abcg']]], + ['gluniformmatrix3x4fv_884',['glUniformMatrix3x4fv',['../namespaceabcg.html#a8b8f3bffbbf4e2d6ec0afa0f130f2132',1,'abcg']]], + ['gluniformmatrix4fv_885',['glUniformMatrix4fv',['../namespaceabcg.html#a640ca79d0f9c8636c4161cea447a361d',1,'abcg']]], + ['gluniformmatrix4x2fv_886',['glUniformMatrix4x2fv',['../namespaceabcg.html#a549e5d5f67f44712248cf3e26af0ddd6',1,'abcg']]], + ['gluniformmatrix4x3fv_887',['glUniformMatrix4x3fv',['../namespaceabcg.html#a2a4e0b3c0401e2a85fe389191c5d768f',1,'abcg']]], + ['glunmapbuffer_888',['glUnmapBuffer',['../namespaceabcg.html#a1f475772cbe67c5b2370ef179c99b614',1,'abcg']]], + ['gluseprogram_889',['glUseProgram',['../namespaceabcg.html#ac050825096a0ef3f71c0dd6452f9dfc0',1,'abcg']]], + ['glvalidateprogram_890',['glValidateProgram',['../namespaceabcg.html#a4ca1b9c8efcec40ef7506d115807a252',1,'abcg']]], + ['glvertexattrib1f_891',['glVertexAttrib1f',['../namespaceabcg.html#af725d24a5b6b6483d1cd3420dc6ec011',1,'abcg']]], + ['glvertexattrib1fv_892',['glVertexAttrib1fv',['../namespaceabcg.html#aeff647ce94259b8e0fbe731595cf1931',1,'abcg']]], + ['glvertexattrib2f_893',['glVertexAttrib2f',['../namespaceabcg.html#ab0c88524f1c60a35e818cd6f8902c2e7',1,'abcg']]], + ['glvertexattrib2fv_894',['glVertexAttrib2fv',['../namespaceabcg.html#a3be34bb76d1f704893e5ae334488f372',1,'abcg']]], + ['glvertexattrib3f_895',['glVertexAttrib3f',['../namespaceabcg.html#afa1466dac879205506b78b021aafff27',1,'abcg']]], + ['glvertexattrib3fv_896',['glVertexAttrib3fv',['../namespaceabcg.html#aad00233878a4e63de78696409cb8cfe7',1,'abcg']]], + ['glvertexattrib4f_897',['glVertexAttrib4f',['../namespaceabcg.html#a16e4ed4c33c7e9abd8eb412c422c7f8a',1,'abcg']]], + ['glvertexattrib4fv_898',['glVertexAttrib4fv',['../namespaceabcg.html#af15b80a8f2eb74ae9de6f26996d3d51d',1,'abcg']]], + ['glvertexattribdivisor_899',['glVertexAttribDivisor',['../namespaceabcg.html#a6bc99961c0b460aff0c6176e08667ad5',1,'abcg']]], + ['glvertexattribi4i_900',['glVertexAttribI4i',['../namespaceabcg.html#a298da5e81cd558e36acc8517f183330a',1,'abcg']]], + ['glvertexattribi4iv_901',['glVertexAttribI4iv',['../namespaceabcg.html#a2f957d37e18d6883d73b0c4d81c7925f',1,'abcg']]], + ['glvertexattribi4ui_902',['glVertexAttribI4ui',['../namespaceabcg.html#a3f20fa49edff456e65bcbbfc40befa92',1,'abcg']]], + ['glvertexattribi4uiv_903',['glVertexAttribI4uiv',['../namespaceabcg.html#ac1ce439bbbfbaca867e112c7c75fdf2e',1,'abcg']]], + ['glvertexattribipointer_904',['glVertexAttribIPointer',['../namespaceabcg.html#aa76792de0db9acdbb75c5b7a228dc022',1,'abcg']]], + ['glvertexattribpointer_905',['glVertexAttribPointer',['../namespaceabcg.html#af56cc0ad4060e65221188cfa41a59168',1,'abcg']]], + ['glviewport_906',['glViewport',['../namespaceabcg.html#a4488c395e82a5408c4321a611f039c78',1,'abcg']]], + ['glwaitsync_907',['glWaitSync',['../namespaceabcg.html#a14893e8222fcaac3d07be752b3c72c04',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/functions_6.js b/abcg/doc/html/search/functions_6.js index f39085856..9e90514b8 100644 --- a/abcg/doc/html/search/functions_6.js +++ b/abcg/doc/html/search/functions_6.js @@ -1,6 +1,6 @@ var searchData= [ - ['handleevent_916',['handleEvent',['../classabcg_1_1Window.html#a7e2b0741b0314a4e6472353de3de1633',1,'abcg::Window']]], - ['hashcombine_917',['hashCombine',['../namespaceabcg.html#aed04a19d18acb506c896c2f220d495c1',1,'abcg']]], - ['hashcombineseed_918',['hashCombineSeed',['../namespaceabcg.html#a087b770c423ea0ec8a1e54e655dbb0a0',1,'abcg']]] + ['handleevent_908',['handleEvent',['../classabcg_1_1Window.html#a7e2b0741b0314a4e6472353de3de1633',1,'abcg::Window']]], + ['hashcombine_909',['hashCombine',['../namespaceabcg.html#aed04a19d18acb506c896c2f220d495c1',1,'abcg']]], + ['hashcombineseed_910',['hashCombineSeed',['../namespaceabcg.html#a087b770c423ea0ec8a1e54e655dbb0a0',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/functions_7.js b/abcg/doc/html/search/functions_7.js index 03eb203b5..7d3945248 100644 --- a/abcg/doc/html/search/functions_7.js +++ b/abcg/doc/html/search/functions_7.js @@ -1,6 +1,6 @@ var searchData= [ - ['loaddata_919',['loadData',['../classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b',1,'abcg::VulkanBuffer']]], - ['loadopenglcubemap_920',['loadOpenGLCubemap',['../namespaceabcg.html#a39af18b7fd13bbdcd404b344ca29014e',1,'abcg']]], - ['loadopengltexture_921',['loadOpenGLTexture',['../namespaceabcg.html#ae4a5204a112c5bfabcab65d66f49aa8d',1,'abcg']]] + ['loaddata_911',['loadData',['../classabcg_1_1VulkanBuffer.html#a9e880ba0292183708e7681fb9d28132b',1,'abcg::VulkanBuffer']]], + ['loadopenglcubemap_912',['loadOpenGLCubemap',['../namespaceabcg.html#a39af18b7fd13bbdcd404b344ca29014e',1,'abcg']]], + ['loadopengltexture_913',['loadOpenGLTexture',['../namespaceabcg.html#ae4a5204a112c5bfabcab65d66f49aa8d',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/functions_8.js b/abcg/doc/html/search/functions_8.js index 2e141bf08..bb297a03b 100644 --- a/abcg/doc/html/search/functions_8.js +++ b/abcg/doc/html/search/functions_8.js @@ -1,6 +1,6 @@ var searchData= [ - ['mousemove_922',['mouseMove',['../classabcg_1_1TrackBall.html#ad19937746c776c6d57c649d5fc7ff946',1,'abcg::TrackBall']]], - ['mousepress_923',['mousePress',['../classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b',1,'abcg::TrackBall']]], - ['mouserelease_924',['mouseRelease',['../classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe',1,'abcg::TrackBall']]] + ['mousemove_914',['mouseMove',['../classabcg_1_1TrackBall.html#ad19937746c776c6d57c649d5fc7ff946',1,'abcg::TrackBall']]], + ['mousepress_915',['mousePress',['../classabcg_1_1TrackBall.html#a3aa3387808cfa381b56782afad37534b',1,'abcg::TrackBall']]], + ['mouserelease_916',['mouseRelease',['../classabcg_1_1TrackBall.html#ab107dfd5ea36c76b57ed90fca8d019fe',1,'abcg::TrackBall']]] ]; diff --git a/abcg/doc/html/search/functions_9.js b/abcg/doc/html/search/functions_9.js index c42a63784..3f0cc2025 100644 --- a/abcg/doc/html/search/functions_9.js +++ b/abcg/doc/html/search/functions_9.js @@ -1,19 +1,19 @@ var searchData= [ - ['buffer_20const_20_26_925',['Buffer const &',['../classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e',1,'abcg::VulkanBuffer']]], - ['device_20const_20_26_926',['Device const &',['../classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a',1,'abcg::VulkanDevice']]], - ['image_20const_20_26_927',['Image const &',['../classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986',1,'abcg::VulkanImage']]], - ['instance_20const_20_26_928',['Instance const &',['../classabcg_1_1VulkanInstance.html#a6ec883f5f84307353b0bbfe85e5c749f',1,'abcg::VulkanInstance']]], - ['oncreate_929',['onCreate',['../classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679',1,'abcg::VulkanWindow::onCreate()'],['../classabcg_1_1OpenGLWindow.html#adf60bc348bac241ebaafc74fc958f797',1,'abcg::OpenGLWindow::onCreate()']]], - ['ondestroy_930',['onDestroy',['../classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a',1,'abcg::VulkanWindow::onDestroy()'],['../classabcg_1_1OpenGLWindow.html#a728da166bea2399508752ac30f055fbd',1,'abcg::OpenGLWindow::onDestroy()']]], - ['onevent_931',['onEvent',['../classabcg_1_1VulkanWindow.html#ab8bd7fb6dcf8e770d1108ae6667c4762',1,'abcg::VulkanWindow::onEvent()'],['../classabcg_1_1OpenGLWindow.html#ac883112c71084751a6b6c6bde5ef4882',1,'abcg::OpenGLWindow::onEvent(SDL_Event const &event)']]], - ['onpaint_932',['onPaint',['../classabcg_1_1OpenGLWindow.html#a792a900730690de42f2511b9aa83c016',1,'abcg::OpenGLWindow::onPaint()'],['../classabcg_1_1VulkanWindow.html#a2325095d54d08ec014f4173242565205',1,'abcg::VulkanWindow::onPaint()']]], - ['onpaintui_933',['onPaintUI',['../classabcg_1_1OpenGLWindow.html#ac46e03a19382c3becfb615de33ae8b79',1,'abcg::OpenGLWindow::onPaintUI()'],['../classabcg_1_1VulkanWindow.html#a42ea921c25307e0edcbf6271e52ef3c0',1,'abcg::VulkanWindow::onPaintUI()']]], - ['onresize_934',['onResize',['../classabcg_1_1OpenGLWindow.html#a3752d51b1a5c75ed5a2322aceafbb59e',1,'abcg::OpenGLWindow::onResize()'],['../classabcg_1_1VulkanWindow.html#a9c80fcb8dc6f482a4b440a273ca69902',1,'abcg::VulkanWindow::onResize()']]], - ['onupdate_935',['onUpdate',['../classabcg_1_1OpenGLWindow.html#a71588879a55ea01d33e554d552d2958d',1,'abcg::OpenGLWindow::onUpdate()'],['../classabcg_1_1VulkanWindow.html#ac32aced497100ccc33ae89d6181c2df5',1,'abcg::VulkanWindow::onUpdate()']]], - ['openglerror_936',['OpenGLError',['../classabcg_1_1OpenGLError.html#a6f1a5080226aa9434ef1f5b096710fa0',1,'abcg::OpenGLError']]], - ['operator_3d_937',['operator=',['../classabcg_1_1Window.html#a2cad313eeee01bf3b89e248cd25ed71e',1,'abcg::Window::operator=(Window const &)=delete'],['../classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637',1,'abcg::Window::operator=(Window &&)=default']]], - ['physicaldevice_20const_20_26_938',['PhysicalDevice const &',['../classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1',1,'abcg::VulkanPhysicalDevice']]], - ['pipeline_20const_20_26_939',['Pipeline const &',['../classabcg_1_1VulkanPipeline.html#a49a3fddd5247929486f870e4f4d64419',1,'abcg::VulkanPipeline']]], - ['swapchainkhr_20const_20_26_940',['SwapchainKHR const &',['../classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7',1,'abcg::VulkanSwapchain']]] + ['buffer_20const_20_26_917',['Buffer const &',['../classabcg_1_1VulkanBuffer.html#a4a0191a5b52124471dc6d91e6d85c60e',1,'abcg::VulkanBuffer']]], + ['device_20const_20_26_918',['Device const &',['../classabcg_1_1VulkanDevice.html#a86465597444797c920cf26c81c076f9a',1,'abcg::VulkanDevice']]], + ['image_20const_20_26_919',['Image const &',['../classabcg_1_1VulkanImage.html#af132a68f8fbdcbbc7f7e68f9b07d2986',1,'abcg::VulkanImage']]], + ['instance_20const_20_26_920',['Instance const &',['../classabcg_1_1VulkanInstance.html#a6ec883f5f84307353b0bbfe85e5c749f',1,'abcg::VulkanInstance']]], + ['oncreate_921',['onCreate',['../classabcg_1_1VulkanWindow.html#a2b72506b2279785a2742ba93428cd679',1,'abcg::VulkanWindow::onCreate()'],['../classabcg_1_1OpenGLWindow.html#adf60bc348bac241ebaafc74fc958f797',1,'abcg::OpenGLWindow::onCreate()']]], + ['ondestroy_922',['onDestroy',['../classabcg_1_1VulkanWindow.html#a73d7764772af75c11cd79285a258e28a',1,'abcg::VulkanWindow::onDestroy()'],['../classabcg_1_1OpenGLWindow.html#a728da166bea2399508752ac30f055fbd',1,'abcg::OpenGLWindow::onDestroy()']]], + ['onevent_923',['onEvent',['../classabcg_1_1VulkanWindow.html#ab8bd7fb6dcf8e770d1108ae6667c4762',1,'abcg::VulkanWindow::onEvent()'],['../classabcg_1_1OpenGLWindow.html#ac883112c71084751a6b6c6bde5ef4882',1,'abcg::OpenGLWindow::onEvent(SDL_Event const &event)']]], + ['onpaint_924',['onPaint',['../classabcg_1_1OpenGLWindow.html#a792a900730690de42f2511b9aa83c016',1,'abcg::OpenGLWindow::onPaint()'],['../classabcg_1_1VulkanWindow.html#a2325095d54d08ec014f4173242565205',1,'abcg::VulkanWindow::onPaint()']]], + ['onpaintui_925',['onPaintUI',['../classabcg_1_1OpenGLWindow.html#ac46e03a19382c3becfb615de33ae8b79',1,'abcg::OpenGLWindow::onPaintUI()'],['../classabcg_1_1VulkanWindow.html#a42ea921c25307e0edcbf6271e52ef3c0',1,'abcg::VulkanWindow::onPaintUI()']]], + ['onresize_926',['onResize',['../classabcg_1_1OpenGLWindow.html#a3752d51b1a5c75ed5a2322aceafbb59e',1,'abcg::OpenGLWindow::onResize()'],['../classabcg_1_1VulkanWindow.html#a9c80fcb8dc6f482a4b440a273ca69902',1,'abcg::VulkanWindow::onResize()']]], + ['onupdate_927',['onUpdate',['../classabcg_1_1OpenGLWindow.html#a71588879a55ea01d33e554d552d2958d',1,'abcg::OpenGLWindow::onUpdate()'],['../classabcg_1_1VulkanWindow.html#ac32aced497100ccc33ae89d6181c2df5',1,'abcg::VulkanWindow::onUpdate()']]], + ['openglerror_928',['OpenGLError',['../classabcg_1_1OpenGLError.html#a6f1a5080226aa9434ef1f5b096710fa0',1,'abcg::OpenGLError']]], + ['operator_3d_929',['operator=',['../classabcg_1_1Window.html#a2cad313eeee01bf3b89e248cd25ed71e',1,'abcg::Window::operator=(Window const &)=delete'],['../classabcg_1_1Window.html#a4efa74388a703f1d8dcb4493d4ea4637',1,'abcg::Window::operator=(Window &&)=default']]], + ['physicaldevice_20const_20_26_930',['PhysicalDevice const &',['../classabcg_1_1VulkanPhysicalDevice.html#ae9050f42311da8eb11e2a1656db7c8a1',1,'abcg::VulkanPhysicalDevice']]], + ['pipeline_20const_20_26_931',['Pipeline const &',['../classabcg_1_1VulkanPipeline.html#a49a3fddd5247929486f870e4f4d64419',1,'abcg::VulkanPipeline']]], + ['swapchainkhr_20const_20_26_932',['SwapchainKHR const &',['../classabcg_1_1VulkanSwapchain.html#a902e86fe22ca7541da91daf6a23e53a7',1,'abcg::VulkanSwapchain']]] ]; diff --git a/abcg/doc/html/search/functions_a.js b/abcg/doc/html/search/functions_a.js index 0155128a3..4d3fa6314 100644 --- a/abcg/doc/html/search/functions_a.js +++ b/abcg/doc/html/search/functions_a.js @@ -1,5 +1,5 @@ var searchData= [ - ['paint_941',['paint',['../classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0',1,'abcg::Window']]], - ['present_942',['present',['../classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b',1,'abcg::VulkanSwapchain']]] + ['paint_933',['paint',['../classabcg_1_1Window.html#a62100744ba7d2df02aad4acfba4121b0',1,'abcg::Window']]], + ['present_934',['present',['../classabcg_1_1VulkanSwapchain.html#a666dd09f50b3f9e06b02d99f664c528b',1,'abcg::VulkanSwapchain']]] ]; diff --git a/abcg/doc/html/search/functions_b.js b/abcg/doc/html/search/functions_b.js index afafe588c..6160f7d8b 100644 --- a/abcg/doc/html/search/functions_b.js +++ b/abcg/doc/html/search/functions_b.js @@ -1,9 +1,9 @@ var searchData= [ - ['render_943',['render',['../classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830',1,'abcg::VulkanSwapchain']]], - ['resizeviewport_944',['resizeViewport',['../classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da',1,'abcg::TrackBall']]], - ['resizingeventwatcher_945',['resizingEventWatcher',['../namespaceabcg.html#a6825799aa852dc7612dad9326be2fb3b',1,'abcg']]], - ['restart_946',['restart',['../classabcg_1_1Timer.html#a5cdb94e9a81ed24604079384a40cb56c',1,'abcg::Timer']]], - ['run_947',['run',['../classabcg_1_1Application.html#aa5a85168c861a3502d37a1336f1aae0d',1,'abcg::Application']]], - ['runtimeerror_948',['RuntimeError',['../classabcg_1_1RuntimeError.html#a763cafc3e784884aff12f98e58d189c9',1,'abcg::RuntimeError']]] + ['render_935',['render',['../classabcg_1_1VulkanSwapchain.html#ab5a121bc5ed21c2f6ecabe00464a9830',1,'abcg::VulkanSwapchain']]], + ['resizeviewport_936',['resizeViewport',['../classabcg_1_1TrackBall.html#ad0e7501acd24d9ce7975561fab0092da',1,'abcg::TrackBall']]], + ['resizingeventwatcher_937',['resizingEventWatcher',['../namespaceabcg.html#a6825799aa852dc7612dad9326be2fb3b',1,'abcg']]], + ['restart_938',['restart',['../classabcg_1_1Timer.html#a5cdb94e9a81ed24604079384a40cb56c',1,'abcg::Timer']]], + ['run_939',['run',['../classabcg_1_1Application.html#aa5a85168c861a3502d37a1336f1aae0d',1,'abcg::Application']]], + ['runtimeerror_940',['RuntimeError',['../classabcg_1_1RuntimeError.html#a763cafc3e784884aff12f98e58d189c9',1,'abcg::RuntimeError']]] ]; diff --git a/abcg/doc/html/search/functions_c.js b/abcg/doc/html/search/functions_c.js index 5d02cd9b2..9bb11636e 100644 --- a/abcg/doc/html/search/functions_c.js +++ b/abcg/doc/html/search/functions_c.js @@ -1,12 +1,12 @@ var searchData= [ - ['savescreenshotpng_949',['saveScreenshotPNG',['../classabcg_1_1OpenGLWindow.html#a800dee62e340fda9f5e8cd56a87a92ff',1,'abcg::OpenGLWindow']]], - ['sdlerror_950',['SDLError',['../classabcg_1_1SDLError.html#acda7cd2b446cebf8bc34bdd6b49650ae',1,'abcg::SDLError']]], - ['sdlimageerror_951',['SDLImageError',['../classabcg_1_1SDLImageError.html#aa74124d1d9ad554b40bed725fdeecbf4',1,'abcg::SDLImageError']]], - ['setaxis_952',['setAxis',['../classabcg_1_1TrackBall.html#a77d9bbdf49272b6c04109cfbd8479693',1,'abcg::TrackBall']]], - ['setenableresizingeventwatcher_953',['setEnableResizingEventWatcher',['../classabcg_1_1Window.html#ac78275433807c6bef0d803c025239a6e',1,'abcg::Window']]], - ['setopenglsettings_954',['setOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#ad22c7e5387a252da2f674afbaceb6067',1,'abcg::OpenGLWindow']]], - ['setvelocity_955',['setVelocity',['../classabcg_1_1TrackBall.html#a19087363b152d422ae6b4d3e5bc1df89',1,'abcg::TrackBall']]], - ['setvulkansettings_956',['setVulkanSettings',['../classabcg_1_1VulkanWindow.html#ab3a719010faef282c83eacb999d0c3e6',1,'abcg::VulkanWindow']]], - ['setwindowsettings_957',['setWindowSettings',['../classabcg_1_1Window.html#a893b26152c708ec954c5dd14dcc1e277',1,'abcg::Window']]] + ['savescreenshotpng_941',['saveScreenshotPNG',['../classabcg_1_1OpenGLWindow.html#a800dee62e340fda9f5e8cd56a87a92ff',1,'abcg::OpenGLWindow']]], + ['sdlerror_942',['SDLError',['../classabcg_1_1SDLError.html#acda7cd2b446cebf8bc34bdd6b49650ae',1,'abcg::SDLError']]], + ['sdlimageerror_943',['SDLImageError',['../classabcg_1_1SDLImageError.html#aa74124d1d9ad554b40bed725fdeecbf4',1,'abcg::SDLImageError']]], + ['setaxis_944',['setAxis',['../classabcg_1_1TrackBall.html#a78c570b915dd329448b0a6110da57af8',1,'abcg::TrackBall']]], + ['setenableresizingeventwatcher_945',['setEnableResizingEventWatcher',['../classabcg_1_1Window.html#ac78275433807c6bef0d803c025239a6e',1,'abcg::Window']]], + ['setopenglsettings_946',['setOpenGLSettings',['../classabcg_1_1OpenGLWindow.html#ad22c7e5387a252da2f674afbaceb6067',1,'abcg::OpenGLWindow']]], + ['setvelocity_947',['setVelocity',['../classabcg_1_1TrackBall.html#abdd3ed81210312f961aba9d9a6ab940f',1,'abcg::TrackBall']]], + ['setvulkansettings_948',['setVulkanSettings',['../classabcg_1_1VulkanWindow.html#ab3a719010faef282c83eacb999d0c3e6',1,'abcg::VulkanWindow']]], + ['setwindowsettings_949',['setWindowSettings',['../classabcg_1_1Window.html#a893b26152c708ec954c5dd14dcc1e277',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/functions_d.js b/abcg/doc/html/search/functions_d.js index f346b0321..ee1c39523 100644 --- a/abcg/doc/html/search/functions_d.js +++ b/abcg/doc/html/search/functions_d.js @@ -1,6 +1,9 @@ var searchData= [ - ['togglefullscreen_958',['toggleFullscreen',['../classabcg_1_1Window.html#acc923148257095b1baf454607ef21ad6',1,'abcg::Window']]], - ['triggeropenglshadercompile_959',['triggerOpenGLShaderCompile',['../namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102',1,'abcg']]], - ['triggeropenglshaderlink_960',['triggerOpenGLShaderLink',['../namespaceabcg.html#aee435331b56516022710b8acc098883a',1,'abcg']]] + ['tobluestring_950',['toBlueString',['../namespaceabcg.html#a1b13712894adf3cfdda66dd3ddd14256',1,'abcg']]], + ['togglefullscreen_951',['toggleFullscreen',['../classabcg_1_1Window.html#acc923148257095b1baf454607ef21ad6',1,'abcg::Window']]], + ['toredstring_952',['toRedString',['../namespaceabcg.html#a7ffc0a33678775f855ffa982c00ccb0d',1,'abcg']]], + ['toyellowstring_953',['toYellowString',['../namespaceabcg.html#a9a8a9c73318a69a62645ca5ee239763d',1,'abcg']]], + ['triggeropenglshadercompile_954',['triggerOpenGLShaderCompile',['../namespaceabcg.html#a49e7d7355e5505155f33045df8ab1102',1,'abcg']]], + ['triggeropenglshaderlink_955',['triggerOpenGLShaderLink',['../namespaceabcg.html#aee435331b56516022710b8acc098883a',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/functions_e.js b/abcg/doc/html/search/functions_e.js index fe0c2570b..349e87749 100644 --- a/abcg/doc/html/search/functions_e.js +++ b/abcg/doc/html/search/functions_e.js @@ -1,4 +1,4 @@ var searchData= [ - ['vulkanerror_961',['VulkanError',['../classabcg_1_1VulkanError.html#aa5a0a0656ae43e62cbffd8cf4ce758ce',1,'abcg::VulkanError']]] + ['vulkanerror_956',['VulkanError',['../classabcg_1_1VulkanError.html#aa5a0a0656ae43e62cbffd8cf4ce758ce',1,'abcg::VulkanError']]] ]; diff --git a/abcg/doc/html/search/functions_f.js b/abcg/doc/html/search/functions_f.js index c3a7d7f18..1185a0774 100644 --- a/abcg/doc/html/search/functions_f.js +++ b/abcg/doc/html/search/functions_f.js @@ -1,6 +1,6 @@ var searchData= [ - ['what_962',['what',['../classabcg_1_1Exception.html#ac29321e33a5280ecdc5c59405f08c080',1,'abcg::Exception']]], - ['window_963',['Window',['../classabcg_1_1Window.html#aa702b018021cfe38c189dc966d8ac6cf',1,'abcg::Window::Window()=default'],['../classabcg_1_1Window.html#aa8b9f266a2a760f8c28eedab86bada48',1,'abcg::Window::Window(Window const &)=delete'],['../classabcg_1_1Window.html#a15e6b232cf072323945cf357425b24e0',1,'abcg::Window::Window(Window &&)=default']]], - ['withcommandbuffer_964',['withCommandBuffer',['../classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc',1,'abcg::VulkanDevice']]] + ['what_957',['what',['../classabcg_1_1Exception.html#a2570f60fe3573e51566430f5a7c5f5fb',1,'abcg::Exception']]], + ['window_958',['Window',['../classabcg_1_1Window.html#aa702b018021cfe38c189dc966d8ac6cf',1,'abcg::Window::Window()=default'],['../classabcg_1_1Window.html#aa8b9f266a2a760f8c28eedab86bada48',1,'abcg::Window::Window(Window const &)=delete'],['../classabcg_1_1Window.html#a15e6b232cf072323945cf357425b24e0',1,'abcg::Window::Window(Window &&)=default']]], + ['withcommandbuffer_959',['withCommandBuffer',['../classabcg_1_1VulkanDevice.html#af7d9903814f4f83641f1860fd0d5d0bc',1,'abcg::VulkanDevice']]] ]; diff --git a/abcg/doc/html/search/namespaces_0.js b/abcg/doc/html/search/namespaces_0.js index 480e47bcc..df2de9c69 100644 --- a/abcg/doc/html/search/namespaces_0.js +++ b/abcg/doc/html/search/namespaces_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['abcg_554',['abcg',['../namespaceabcg.html',1,'']]] + ['abcg_551',['abcg',['../namespaceabcg.html',1,'']]] ]; diff --git a/abcg/doc/html/search/pages_0.js b/abcg/doc/html/search/pages_0.js index 7f3b93fa0..7256f72cf 100644 --- a/abcg/doc/html/search/pages_0.js +++ b/abcg/doc/html/search/pages_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['abcg_1047',['ABCg',['../index.html',1,'']]] + ['abcg_1042',['ABCg',['../index.html',1,'']]] ]; diff --git a/abcg/doc/html/search/pages_1.js b/abcg/doc/html/search/pages_1.js index 51319d34b..1ecd70fa2 100644 --- a/abcg/doc/html/search/pages_1.js +++ b/abcg/doc/html/search/pages_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['release_20notes_1048',['Release notes',['../md__home_harlen_dev_abcg_CHANGELOG.html',1,'']]] + ['release_20notes_1043',['Release notes',['../md__home_harlen_dev_abcg_CHANGELOG.html',1,'']]] ]; diff --git a/abcg/doc/html/search/related_0.js b/abcg/doc/html/search/related_0.js index 8f175825f..7c9d72136 100644 --- a/abcg/doc/html/search/related_0.js +++ b/abcg/doc/html/search/related_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['resizingeventwatcher_1040',['resizingEventWatcher',['../classabcg_1_1Window.html#a33a77ed4888300e0008bb92fb5fec509',1,'abcg::Window']]] + ['resizingeventwatcher_1035',['resizingEventWatcher',['../classabcg_1_1Window.html#a33a77ed4888300e0008bb92fb5fec509',1,'abcg::Window']]] ]; diff --git a/abcg/doc/html/search/typedefs_0.js b/abcg/doc/html/search/typedefs_0.js index fee89cef9..641f5f589 100644 --- a/abcg/doc/html/search/typedefs_0.js +++ b/abcg/doc/html/search/typedefs_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['source_5flocation_1020',['source_location',['../namespaceabcg.html#acb1d90de1449e0e743214d0ae8bddff2',1,'abcg']]] + ['source_5flocation_1015',['source_location',['../namespaceabcg.html#acb1d90de1449e0e743214d0ae8bddff2',1,'abcg']]] ]; diff --git a/abcg/doc/html/search/variables_0.js b/abcg/doc/html/search/variables_0.js index 04a0c5ef1..f1f2bbf95 100644 --- a/abcg/doc/html/search/variables_0.js +++ b/abcg/doc/html/search/variables_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['attributedescriptions_966',['attributeDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#a21d205573366e2e553b04b429c129d3f',1,'abcg::VulkanPipelineCreateInfo']]] + ['attributedescriptions_961',['attributeDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#a21d205573366e2e553b04b429c129d3f',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_1.js b/abcg/doc/html/search/variables_1.js index f43f04feb..2063add94 100644 --- a/abcg/doc/html/search/variables_1.js +++ b/abcg/doc/html/search/variables_1.js @@ -1,4 +1,4 @@ var searchData= [ - ['bindingdescriptions_967',['bindingDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#aeceb310b6089dbc7fc03f4d4107a01bc',1,'abcg::VulkanPipelineCreateInfo']]] + ['bindingdescriptions_962',['bindingDescriptions',['../structabcg_1_1VulkanPipelineCreateInfo.html#aeceb310b6089dbc7fc03f4d4107a01bc',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_2.js b/abcg/doc/html/search/variables_2.js index af1262716..25ff989f5 100644 --- a/abcg/doc/html/search/variables_2.js +++ b/abcg/doc/html/search/variables_2.js @@ -1,10 +1,10 @@ var searchData= [ - ['colorblendattachment_968',['colorBlendAttachment',['../structabcg_1_1VulkanPipelineCreateInfo.html#aa5ea15999850fa2dfe34904cc2967dcf',1,'abcg::VulkanPipelineCreateInfo']]], - ['colorblendstate_969',['colorBlendState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a8f619f17d792103695630434e5ffa8b2',1,'abcg::VulkanPipelineCreateInfo']]], - ['colorimage_970',['colorImage',['../structabcg_1_1VulkanFrame.html#a4d4e911f29fb4da4c62f3f7af4607f79',1,'abcg::VulkanFrame']]], - ['commandbuffer_971',['commandBuffer',['../structabcg_1_1VulkanFrame.html#a09e1b9bef7c11ce5217a30e2d60cf020',1,'abcg::VulkanFrame']]], - ['commandbufferui_972',['commandBufferUI',['../structabcg_1_1VulkanFrame.html#a78141c209406580fe7b7b308a89e5aa4',1,'abcg::VulkanFrame']]], - ['commandpool_973',['commandPool',['../structabcg_1_1VulkanFrame.html#aeb73ab1a9f74961233d4b29a563aef89',1,'abcg::VulkanFrame']]], - ['compute_974',['compute',['../structabcg_1_1VulkanCommandPools.html#ae92fad133885626122607f37761b39ca',1,'abcg::VulkanCommandPools::compute()'],['../structabcg_1_1VulkanQueues.html#ad4407f2456a1102537909ac3fef5928a',1,'abcg::VulkanQueues::compute()'],['../structabcg_1_1VulkanQueuesFamilies.html#a5079aa2f106d59fd3c437f0b8d982594',1,'abcg::VulkanQueuesFamilies::compute()']]] + ['colorblendattachment_963',['colorBlendAttachment',['../structabcg_1_1VulkanPipelineCreateInfo.html#aa5ea15999850fa2dfe34904cc2967dcf',1,'abcg::VulkanPipelineCreateInfo']]], + ['colorblendstate_964',['colorBlendState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a8f619f17d792103695630434e5ffa8b2',1,'abcg::VulkanPipelineCreateInfo']]], + ['colorimage_965',['colorImage',['../structabcg_1_1VulkanFrame.html#a4d4e911f29fb4da4c62f3f7af4607f79',1,'abcg::VulkanFrame']]], + ['commandbuffer_966',['commandBuffer',['../structabcg_1_1VulkanFrame.html#a09e1b9bef7c11ce5217a30e2d60cf020',1,'abcg::VulkanFrame']]], + ['commandbufferui_967',['commandBufferUI',['../structabcg_1_1VulkanFrame.html#a78141c209406580fe7b7b308a89e5aa4',1,'abcg::VulkanFrame']]], + ['commandpool_968',['commandPool',['../structabcg_1_1VulkanFrame.html#aeb73ab1a9f74961233d4b29a563aef89',1,'abcg::VulkanFrame']]], + ['compute_969',['compute',['../structabcg_1_1VulkanCommandPools.html#ae92fad133885626122607f37761b39ca',1,'abcg::VulkanCommandPools::compute()'],['../structabcg_1_1VulkanQueues.html#ad4407f2456a1102537909ac3fef5928a',1,'abcg::VulkanQueues::compute()'],['../structabcg_1_1VulkanQueuesFamilies.html#a5079aa2f106d59fd3c437f0b8d982594',1,'abcg::VulkanQueuesFamilies::compute()']]] ]; diff --git a/abcg/doc/html/search/variables_3.js b/abcg/doc/html/search/variables_3.js index a978663d7..30cbb247f 100644 --- a/abcg/doc/html/search/variables_3.js +++ b/abcg/doc/html/search/variables_3.js @@ -1,8 +1,8 @@ var searchData= [ - ['data_975',['data',['../structabcg_1_1VulkanBufferCreateInfo.html#aa4f7f6a94fa3ce7cf7aef99afa16ac5f',1,'abcg::VulkanBufferCreateInfo']]], - ['depthbuffersize_976',['depthBufferSize',['../structabcg_1_1OpenGLSettings.html#a7e55ed42551b900cad40fc62f625350a',1,'abcg::OpenGLSettings::depthBufferSize()'],['../structabcg_1_1VulkanSettings.html#a07bf4a2018e4c5e448aa7e6685a7885b',1,'abcg::VulkanSettings::depthBufferSize()']]], - ['depthstencilstate_977',['depthStencilState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a975155f44a0ef2085102344e6e1f0fa5',1,'abcg::VulkanPipelineCreateInfo']]], - ['doublebuffering_978',['doubleBuffering',['../structabcg_1_1OpenGLSettings.html#a803c16f1fb40cc35f125722fa38e4338',1,'abcg::OpenGLSettings']]], - ['dynamicstates_979',['dynamicStates',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc27c6b72ac275c76b7edc49b00a2ecd',1,'abcg::VulkanPipelineCreateInfo']]] + ['data_970',['data',['../structabcg_1_1VulkanBufferCreateInfo.html#aa4f7f6a94fa3ce7cf7aef99afa16ac5f',1,'abcg::VulkanBufferCreateInfo']]], + ['depthbuffersize_971',['depthBufferSize',['../structabcg_1_1OpenGLSettings.html#a7e55ed42551b900cad40fc62f625350a',1,'abcg::OpenGLSettings::depthBufferSize()'],['../structabcg_1_1VulkanSettings.html#a07bf4a2018e4c5e448aa7e6685a7885b',1,'abcg::VulkanSettings::depthBufferSize()']]], + ['depthstencilstate_972',['depthStencilState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a975155f44a0ef2085102344e6e1f0fa5',1,'abcg::VulkanPipelineCreateInfo']]], + ['doublebuffering_973',['doubleBuffering',['../structabcg_1_1OpenGLSettings.html#a803c16f1fb40cc35f125722fa38e4338',1,'abcg::OpenGLSettings']]], + ['dynamicstates_974',['dynamicStates',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc27c6b72ac275c76b7edc49b00a2ecd',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_4.js b/abcg/doc/html/search/variables_4.js index 696c2cb8d..c4a9e020a 100644 --- a/abcg/doc/html/search/variables_4.js +++ b/abcg/doc/html/search/variables_4.js @@ -1,7 +1,7 @@ var searchData= [ - ['fence_980',['fence',['../structabcg_1_1VulkanFrame.html#a588976a9c273de75dec81028086c6fc3',1,'abcg::VulkanFrame']]], - ['flipupsidedown_981',['flipUpsideDown',['../structabcg_1_1OpenGLTextureCreateInfo.html#addabf0f11e77eb4e2605940ec91a1dad',1,'abcg::OpenGLTextureCreateInfo']]], - ['framebuffermain_982',['framebufferMain',['../structabcg_1_1VulkanFrame.html#aba1f36e936ceaff0f968d8e234d8f820',1,'abcg::VulkanFrame']]], - ['fullscreenelementid_983',['fullscreenElementID',['../structabcg_1_1WindowSettings.html#a63c8ca61aba15173b7875a02ab16b19a',1,'abcg::WindowSettings']]] + ['fence_975',['fence',['../structabcg_1_1VulkanFrame.html#a588976a9c273de75dec81028086c6fc3',1,'abcg::VulkanFrame']]], + ['flipupsidedown_976',['flipUpsideDown',['../structabcg_1_1OpenGLTextureCreateInfo.html#addabf0f11e77eb4e2605940ec91a1dad',1,'abcg::OpenGLTextureCreateInfo']]], + ['framebuffermain_977',['framebufferMain',['../structabcg_1_1VulkanFrame.html#aba1f36e936ceaff0f968d8e234d8f820',1,'abcg::VulkanFrame']]], + ['fullscreenelementid_978',['fullscreenElementID',['../structabcg_1_1WindowSettings.html#a63c8ca61aba15173b7875a02ab16b19a',1,'abcg::WindowSettings']]] ]; diff --git a/abcg/doc/html/search/variables_5.js b/abcg/doc/html/search/variables_5.js index 075320c6d..fe411d51e 100644 --- a/abcg/doc/html/search/variables_5.js +++ b/abcg/doc/html/search/variables_5.js @@ -1,5 +1,5 @@ var searchData= [ - ['generatemipmaps_984',['generateMipmaps',['../structabcg_1_1OpenGLTextureCreateInfo.html#aeb7ce4f29f2ecf6f4866a3448b73313f',1,'abcg::OpenGLTextureCreateInfo::generateMipmaps()'],['../structabcg_1_1OpenGLCubemapCreateInfo.html#affcc0a8f16f52376045888f01dad8563',1,'abcg::OpenGLCubemapCreateInfo::generateMipmaps()']]], - ['graphics_985',['graphics',['../structabcg_1_1VulkanCommandPools.html#a207d9deea08cda2bb99832828a63a44d',1,'abcg::VulkanCommandPools::graphics()'],['../structabcg_1_1VulkanQueues.html#a9c0f22bd376af220feb2ffb92962408d',1,'abcg::VulkanQueues::graphics()'],['../structabcg_1_1VulkanQueuesFamilies.html#afd66ca6fa2734f9789ed51809e74b034',1,'abcg::VulkanQueuesFamilies::graphics()']]] + ['generatemipmaps_979',['generateMipmaps',['../structabcg_1_1OpenGLTextureCreateInfo.html#aeb7ce4f29f2ecf6f4866a3448b73313f',1,'abcg::OpenGLTextureCreateInfo::generateMipmaps()'],['../structabcg_1_1OpenGLCubemapCreateInfo.html#affcc0a8f16f52376045888f01dad8563',1,'abcg::OpenGLCubemapCreateInfo::generateMipmaps()']]], + ['graphics_980',['graphics',['../structabcg_1_1VulkanCommandPools.html#a207d9deea08cda2bb99832828a63a44d',1,'abcg::VulkanCommandPools::graphics()'],['../structabcg_1_1VulkanQueues.html#a9c0f22bd376af220feb2ffb92962408d',1,'abcg::VulkanQueues::graphics()'],['../structabcg_1_1VulkanQueuesFamilies.html#afd66ca6fa2734f9789ed51809e74b034',1,'abcg::VulkanQueuesFamilies::graphics()']]] ]; diff --git a/abcg/doc/html/search/variables_6.js b/abcg/doc/html/search/variables_6.js index 1b967ceb6..f2b66bb4f 100644 --- a/abcg/doc/html/search/variables_6.js +++ b/abcg/doc/html/search/variables_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['height_986',['height',['../structabcg_1_1WindowSettings.html#a7248a419830adea17916558922e05e9d',1,'abcg::WindowSettings']]] + ['height_981',['height',['../structabcg_1_1WindowSettings.html#a7248a419830adea17916558922e05e9d',1,'abcg::WindowSettings']]] ]; diff --git a/abcg/doc/html/search/variables_7.js b/abcg/doc/html/search/variables_7.js index 8a5c71b2f..77444ef03 100644 --- a/abcg/doc/html/search/variables_7.js +++ b/abcg/doc/html/search/variables_7.js @@ -1,6 +1,6 @@ var searchData= [ - ['index_987',['index',['../structabcg_1_1VulkanFrame.html#a13923e36b6699adeac0d6d77303b8cc1',1,'abcg::VulkanFrame']]], - ['info_988',['info',['../structabcg_1_1VulkanImageCreateInfo.html#a23600b7bb3043910f998e6f628a8f8e2',1,'abcg::VulkanImageCreateInfo']]], - ['inputassemblystate_989',['inputAssemblyState',['../structabcg_1_1VulkanPipelineCreateInfo.html#accfcb22092ee18ee7ef87a871f3748c2',1,'abcg::VulkanPipelineCreateInfo']]] + ['index_982',['index',['../structabcg_1_1VulkanFrame.html#a13923e36b6699adeac0d6d77303b8cc1',1,'abcg::VulkanFrame']]], + ['info_983',['info',['../structabcg_1_1VulkanImageCreateInfo.html#a23600b7bb3043910f998e6f628a8f8e2',1,'abcg::VulkanImageCreateInfo']]], + ['inputassemblystate_984',['inputAssemblyState',['../structabcg_1_1VulkanPipelineCreateInfo.html#accfcb22092ee18ee7ef87a871f3748c2',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_8.js b/abcg/doc/html/search/variables_8.js index e4112d3b6..555271568 100644 --- a/abcg/doc/html/search/variables_8.js +++ b/abcg/doc/html/search/variables_8.js @@ -1,6 +1,6 @@ var searchData= [ - ['majorversion_990',['majorVersion',['../structabcg_1_1OpenGLSettings.html#afc7fa9f1313149f8adf2ae0cca988419',1,'abcg::OpenGLSettings']]], - ['minorversion_991',['minorVersion',['../structabcg_1_1OpenGLSettings.html#ab6cd2256bf7a8ba13ca1a9d6d8c5430f',1,'abcg::OpenGLSettings']]], - ['multisamplestate_992',['multisampleState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a706358a130780833d6142a57c44d8e6b',1,'abcg::VulkanPipelineCreateInfo']]] + ['majorversion_985',['majorVersion',['../structabcg_1_1OpenGLSettings.html#afc7fa9f1313149f8adf2ae0cca988419',1,'abcg::OpenGLSettings']]], + ['minorversion_986',['minorVersion',['../structabcg_1_1OpenGLSettings.html#ab6cd2256bf7a8ba13ca1a9d6d8c5430f',1,'abcg::OpenGLSettings']]], + ['multisamplestate_987',['multisampleState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a706358a130780833d6142a57c44d8e6b',1,'abcg::VulkanPipelineCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_9.js b/abcg/doc/html/search/variables_9.js index 2a500d565..01d2d59df 100644 --- a/abcg/doc/html/search/variables_9.js +++ b/abcg/doc/html/search/variables_9.js @@ -1,10 +1,10 @@ var searchData= [ - ['path_993',['path',['../structabcg_1_1OpenGLTextureCreateInfo.html#aa530e14dd1ebe827bdbb1e12c2fde9eb',1,'abcg::OpenGLTextureCreateInfo']]], - ['paths_994',['paths',['../structabcg_1_1OpenGLCubemapCreateInfo.html#aa7c351d152aa3cbe2489d1c0a3321cf0',1,'abcg::OpenGLCubemapCreateInfo']]], - ['pipelinecache_995',['pipelineCache',['../structabcg_1_1VulkanPipelineCreateInfo.html#a458a37fb1c02f8e8f38e225e03958e4b',1,'abcg::VulkanPipelineCreateInfo']]], - ['pipelinelayout_996',['pipelineLayout',['../structabcg_1_1VulkanPipelineCreateInfo.html#af6f17be735d6640f8ba1acca984888b7',1,'abcg::VulkanPipelineCreateInfo']]], - ['present_997',['present',['../structabcg_1_1VulkanQueues.html#ae2266d17e17ae1aaa598c1401a9d5693',1,'abcg::VulkanQueues::present()'],['../structabcg_1_1VulkanQueuesFamilies.html#af4cb4d7aaea6ea89c19a416d4bbb396e',1,'abcg::VulkanQueuesFamilies::present()']]], - ['profile_998',['profile',['../structabcg_1_1OpenGLSettings.html#aea12bf2d9cab8d22450248f53cc53c06',1,'abcg::OpenGLSettings']]], - ['properties_999',['properties',['../structabcg_1_1VulkanBufferCreateInfo.html#aaf7fd4b23a9eebef487087cca6150465',1,'abcg::VulkanBufferCreateInfo::properties()'],['../structabcg_1_1VulkanImageCreateInfo.html#ad7e70aa61a2a45bbd88470c0cb299430',1,'abcg::VulkanImageCreateInfo::properties()']]] + ['path_988',['path',['../structabcg_1_1OpenGLTextureCreateInfo.html#aa530e14dd1ebe827bdbb1e12c2fde9eb',1,'abcg::OpenGLTextureCreateInfo']]], + ['paths_989',['paths',['../structabcg_1_1OpenGLCubemapCreateInfo.html#aa7c351d152aa3cbe2489d1c0a3321cf0',1,'abcg::OpenGLCubemapCreateInfo']]], + ['pipelinecache_990',['pipelineCache',['../structabcg_1_1VulkanPipelineCreateInfo.html#a458a37fb1c02f8e8f38e225e03958e4b',1,'abcg::VulkanPipelineCreateInfo']]], + ['pipelinelayout_991',['pipelineLayout',['../structabcg_1_1VulkanPipelineCreateInfo.html#af6f17be735d6640f8ba1acca984888b7',1,'abcg::VulkanPipelineCreateInfo']]], + ['present_992',['present',['../structabcg_1_1VulkanQueues.html#ae2266d17e17ae1aaa598c1401a9d5693',1,'abcg::VulkanQueues::present()'],['../structabcg_1_1VulkanQueuesFamilies.html#af4cb4d7aaea6ea89c19a416d4bbb396e',1,'abcg::VulkanQueuesFamilies::present()']]], + ['profile_993',['profile',['../structabcg_1_1OpenGLSettings.html#aea12bf2d9cab8d22450248f53cc53c06',1,'abcg::OpenGLSettings']]], + ['properties_994',['properties',['../structabcg_1_1VulkanBufferCreateInfo.html#aaf7fd4b23a9eebef487087cca6150465',1,'abcg::VulkanBufferCreateInfo::properties()'],['../structabcg_1_1VulkanImageCreateInfo.html#ad7e70aa61a2a45bbd88470c0cb299430',1,'abcg::VulkanImageCreateInfo::properties()']]] ]; diff --git a/abcg/doc/html/search/variables_a.js b/abcg/doc/html/search/variables_a.js index c8198c927..17dbf593c 100644 --- a/abcg/doc/html/search/variables_a.js +++ b/abcg/doc/html/search/variables_a.js @@ -1,5 +1,5 @@ var searchData= [ - ['rasterizationstate_1000',['rasterizationState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3ac302c83e1a05758d9fe1efb4d593be',1,'abcg::VulkanPipelineCreateInfo']]], - ['righthandedsystem_1001',['rightHandedSystem',['../structabcg_1_1OpenGLCubemapCreateInfo.html#a243dcbc334ab16177e9a1c602da5b137',1,'abcg::OpenGLCubemapCreateInfo']]] + ['rasterizationstate_995',['rasterizationState',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3ac302c83e1a05758d9fe1efb4d593be',1,'abcg::VulkanPipelineCreateInfo']]], + ['righthandedsystem_996',['rightHandedSystem',['../structabcg_1_1OpenGLCubemapCreateInfo.html#a243dcbc334ab16177e9a1c602da5b137',1,'abcg::OpenGLCubemapCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_b.js b/abcg/doc/html/search/variables_b.js index 16baf64dc..47910c702 100644 --- a/abcg/doc/html/search/variables_b.js +++ b/abcg/doc/html/search/variables_b.js @@ -1,14 +1,14 @@ var searchData= [ - ['samples_1002',['samples',['../structabcg_1_1OpenGLSettings.html#a638f3bdcce5d64d33af0ea962e1d442b',1,'abcg::OpenGLSettings::samples()'],['../structabcg_1_1VulkanSettings.html#a2313becf3db6422e7e21db4c85a6ca3e',1,'abcg::VulkanSettings::samples()']]], - ['scissors_1003',['scissors',['../structabcg_1_1VulkanPipelineCreateInfo.html#a1e14b7422be45775bd1f32d6b7b781f6',1,'abcg::VulkanPipelineCreateInfo']]], - ['shader_1004',['shader',['../structabcg_1_1OpenGLShader.html#a11bf84aa5bd59ff6922c8dd7e2584d0a',1,'abcg::OpenGLShader']]], - ['shaders_1005',['shaders',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3e96b2025d8cc1ffba218670c2403fa9',1,'abcg::VulkanPipelineCreateInfo']]], - ['showfps_1006',['showFPS',['../structabcg_1_1WindowSettings.html#aabd375c2547aa72f935e2424001aa028',1,'abcg::WindowSettings']]], - ['showfullscreenbutton_1007',['showFullscreenButton',['../structabcg_1_1WindowSettings.html#a1e5f889ea5ca8aff15df1a14f394a95c',1,'abcg::WindowSettings']]], - ['size_1008',['size',['../structabcg_1_1VulkanBufferCreateInfo.html#a862c279c01a8d9d85f1e90b6f12d0dc3',1,'abcg::VulkanBufferCreateInfo']]], - ['source_1009',['source',['../structabcg_1_1ShaderSource.html#acbbc27c5cbecd70681a56edf39f5ff47',1,'abcg::ShaderSource']]], - ['srgbtolinear_1010',['sRGBToLinear',['../structabcg_1_1OpenGLTextureCreateInfo.html#acee939c3416c3b9c6ca3263740063f3c',1,'abcg::OpenGLTextureCreateInfo']]], - ['stage_1011',['stage',['../structabcg_1_1OpenGLShader.html#a7b8598c453a1d9a6f9013ceba863cc53',1,'abcg::OpenGLShader::stage()'],['../structabcg_1_1ShaderSource.html#aea139da85d000dcb2b3127081d26423e',1,'abcg::ShaderSource::stage()']]], - ['stencilbuffersize_1012',['stencilBufferSize',['../structabcg_1_1OpenGLSettings.html#ada0db76607a2f84573763ceeeeb882c9',1,'abcg::OpenGLSettings::stencilBufferSize()'],['../structabcg_1_1VulkanSettings.html#ac946ad39a7588eb5a960cd3b3fbf2092',1,'abcg::VulkanSettings::stencilBufferSize()']]] + ['samples_997',['samples',['../structabcg_1_1OpenGLSettings.html#a638f3bdcce5d64d33af0ea962e1d442b',1,'abcg::OpenGLSettings::samples()'],['../structabcg_1_1VulkanSettings.html#a2313becf3db6422e7e21db4c85a6ca3e',1,'abcg::VulkanSettings::samples()']]], + ['scissors_998',['scissors',['../structabcg_1_1VulkanPipelineCreateInfo.html#a1e14b7422be45775bd1f32d6b7b781f6',1,'abcg::VulkanPipelineCreateInfo']]], + ['shader_999',['shader',['../structabcg_1_1OpenGLShader.html#a11bf84aa5bd59ff6922c8dd7e2584d0a',1,'abcg::OpenGLShader']]], + ['shaders_1000',['shaders',['../structabcg_1_1VulkanPipelineCreateInfo.html#a3e96b2025d8cc1ffba218670c2403fa9',1,'abcg::VulkanPipelineCreateInfo']]], + ['showfps_1001',['showFPS',['../structabcg_1_1WindowSettings.html#aabd375c2547aa72f935e2424001aa028',1,'abcg::WindowSettings']]], + ['showfullscreenbutton_1002',['showFullscreenButton',['../structabcg_1_1WindowSettings.html#a1e5f889ea5ca8aff15df1a14f394a95c',1,'abcg::WindowSettings']]], + ['size_1003',['size',['../structabcg_1_1VulkanBufferCreateInfo.html#a862c279c01a8d9d85f1e90b6f12d0dc3',1,'abcg::VulkanBufferCreateInfo']]], + ['source_1004',['source',['../structabcg_1_1ShaderSource.html#acbbc27c5cbecd70681a56edf39f5ff47',1,'abcg::ShaderSource']]], + ['srgbtolinear_1005',['sRGBToLinear',['../structabcg_1_1OpenGLTextureCreateInfo.html#acee939c3416c3b9c6ca3263740063f3c',1,'abcg::OpenGLTextureCreateInfo']]], + ['stage_1006',['stage',['../structabcg_1_1OpenGLShader.html#a7b8598c453a1d9a6f9013ceba863cc53',1,'abcg::OpenGLShader::stage()'],['../structabcg_1_1ShaderSource.html#aea139da85d000dcb2b3127081d26423e',1,'abcg::ShaderSource::stage()']]], + ['stencilbuffersize_1007',['stencilBufferSize',['../structabcg_1_1OpenGLSettings.html#ada0db76607a2f84573763ceeeeb882c9',1,'abcg::OpenGLSettings::stencilBufferSize()'],['../structabcg_1_1VulkanSettings.html#ac946ad39a7588eb5a960cd3b3fbf2092',1,'abcg::VulkanSettings::stencilBufferSize()']]] ]; diff --git a/abcg/doc/html/search/variables_c.js b/abcg/doc/html/search/variables_c.js index 331337c95..245df1ee8 100644 --- a/abcg/doc/html/search/variables_c.js +++ b/abcg/doc/html/search/variables_c.js @@ -1,5 +1,5 @@ var searchData= [ - ['title_1013',['title',['../structabcg_1_1WindowSettings.html#a8136786953b8042eda46ff55298a4d9d',1,'abcg::WindowSettings']]], - ['transfer_1014',['transfer',['../structabcg_1_1VulkanCommandPools.html#aa0c7811d81fa0c51293bd3f6dbe3f4f4',1,'abcg::VulkanCommandPools::transfer()'],['../structabcg_1_1VulkanQueues.html#a70263f2f8818d99a550e9a070e2486c4',1,'abcg::VulkanQueues::transfer()'],['../structabcg_1_1VulkanQueuesFamilies.html#a6b157e8e7c13fe4033ee2b0cf8b8d7ab',1,'abcg::VulkanQueuesFamilies::transfer()']]] + ['title_1008',['title',['../structabcg_1_1WindowSettings.html#a8136786953b8042eda46ff55298a4d9d',1,'abcg::WindowSettings']]], + ['transfer_1009',['transfer',['../structabcg_1_1VulkanCommandPools.html#aa0c7811d81fa0c51293bd3f6dbe3f4f4',1,'abcg::VulkanCommandPools::transfer()'],['../structabcg_1_1VulkanQueues.html#a70263f2f8818d99a550e9a070e2486c4',1,'abcg::VulkanQueues::transfer()'],['../structabcg_1_1VulkanQueuesFamilies.html#a6b157e8e7c13fe4033ee2b0cf8b8d7ab',1,'abcg::VulkanQueuesFamilies::transfer()']]] ]; diff --git a/abcg/doc/html/search/variables_d.js b/abcg/doc/html/search/variables_d.js index a5a6a1275..619788092 100644 --- a/abcg/doc/html/search/variables_d.js +++ b/abcg/doc/html/search/variables_d.js @@ -1,4 +1,4 @@ var searchData= [ - ['usage_1015',['usage',['../structabcg_1_1VulkanBufferCreateInfo.html#aac514269f34a7e48e58d483ed6936ba5',1,'abcg::VulkanBufferCreateInfo']]] + ['usage_1010',['usage',['../structabcg_1_1VulkanBufferCreateInfo.html#aac514269f34a7e48e58d483ed6936ba5',1,'abcg::VulkanBufferCreateInfo']]] ]; diff --git a/abcg/doc/html/search/variables_e.js b/abcg/doc/html/search/variables_e.js index 5e1ebdd93..82897454c 100644 --- a/abcg/doc/html/search/variables_e.js +++ b/abcg/doc/html/search/variables_e.js @@ -1,6 +1,6 @@ var searchData= [ - ['viewinfo_1016',['viewInfo',['../structabcg_1_1VulkanImageCreateInfo.html#a586c6bdaa5adc45d20f905dd145aa5d6',1,'abcg::VulkanImageCreateInfo']]], - ['viewports_1017',['viewports',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc507b1cea2ca3b5234548575955c40f',1,'abcg::VulkanPipelineCreateInfo']]], - ['vsync_1018',['vSync',['../structabcg_1_1OpenGLSettings.html#a6b44d787ebf56ea516cfb5a0c87f9672',1,'abcg::OpenGLSettings::vSync()'],['../structabcg_1_1VulkanSettings.html#a835e8a78a2b87f3839af4fde3a4a6da3',1,'abcg::VulkanSettings::vSync()']]] + ['viewinfo_1011',['viewInfo',['../structabcg_1_1VulkanImageCreateInfo.html#a586c6bdaa5adc45d20f905dd145aa5d6',1,'abcg::VulkanImageCreateInfo']]], + ['viewports_1012',['viewports',['../structabcg_1_1VulkanPipelineCreateInfo.html#afc507b1cea2ca3b5234548575955c40f',1,'abcg::VulkanPipelineCreateInfo']]], + ['vsync_1013',['vSync',['../structabcg_1_1OpenGLSettings.html#a6b44d787ebf56ea516cfb5a0c87f9672',1,'abcg::OpenGLSettings::vSync()'],['../structabcg_1_1VulkanSettings.html#a835e8a78a2b87f3839af4fde3a4a6da3',1,'abcg::VulkanSettings::vSync()']]] ]; diff --git a/abcg/doc/html/search/variables_f.js b/abcg/doc/html/search/variables_f.js index bcfa3d899..d5ba32b12 100644 --- a/abcg/doc/html/search/variables_f.js +++ b/abcg/doc/html/search/variables_f.js @@ -1,4 +1,4 @@ var searchData= [ - ['width_1019',['width',['../structabcg_1_1WindowSettings.html#ada062b6fe2f5b26d0088af70bb790c36',1,'abcg::WindowSettings']]] + ['width_1014',['width',['../structabcg_1_1WindowSettings.html#ada062b6fe2f5b26d0088af70bb790c36',1,'abcg::WindowSettings']]] ]; diff --git a/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo-members.html b/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo-members.html index ca09fb3b5..a4a3fdbba 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo-members.html +++ b/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo-members.html @@ -43,7 +43,7 @@
      ABCg -  v3.0.0 +  v3.1.0
      Development framework for MCTA008-17
      diff --git a/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo.html b/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo.html index 9a0d376e6..ee0f5fc3e 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo.html +++ b/abcg/doc/html/structabcg_1_1OpenGLCubemapCreateInfo.html @@ -43,7 +43,7 @@
      ABCg -  v3.0.0 +  v3.1.0
      Development framework for MCTA008-17
      @@ -107,7 +107,7 @@
-

Configuration settings for creating an OpenGL 2D texture. +

Configuration settings for creating a cubemap texture for OpenGL. More...

#include <abcgOpenGLImage.hpp>

@@ -115,7 +115,7 @@

Public Attributes

std::array< std::string_view, 6 > paths {} - Array of paths to the texture files containing the sides of the cube map, given in the order +x, -y, +y, -y, +z, -z. More...
+ Array of paths to the image files (PNG or JPEG) containing the sides of the cube map, given in the order +x, -y, +y, -y, +z, -z. More...
  bool generateMipmaps {true}  Whether to generate mipmap levels. More...
@@ -125,7 +125,7 @@  

Detailed Description

-

Configuration settings for creating an OpenGL 2D texture.

+

Configuration settings for creating a cubemap texture for OpenGL.

Member Data Documentation

◆ generateMipmaps

@@ -155,7 +155,7 @@

-

Array of paths to the texture files containing the sides of the cube map, given in the order +x, -y, +y, -y, +z, -z.

+

Array of paths to the image files (PNG or JPEG) containing the sides of the cube map, given in the order +x, -y, +y, -y, +z, -z.

diff --git a/abcg/doc/html/structabcg_1_1OpenGLSettings-members.html b/abcg/doc/html/structabcg_1_1OpenGLSettings-members.html index ac1d747f6..745edd4fa 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLSettings-members.html +++ b/abcg/doc/html/structabcg_1_1OpenGLSettings-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1OpenGLSettings.html b/abcg/doc/html/structabcg_1_1OpenGLSettings.html index 6a7aa74b8..d4194e0af 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLSettings.html +++ b/abcg/doc/html/structabcg_1_1OpenGLSettings.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1OpenGLShader-members.html b/abcg/doc/html/structabcg_1_1OpenGLShader-members.html index 578b53c36..dccf03cba 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLShader-members.html +++ b/abcg/doc/html/structabcg_1_1OpenGLShader-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1OpenGLShader.html b/abcg/doc/html/structabcg_1_1OpenGLShader.html index 4aea3c34e..2c02678d9 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLShader.html +++ b/abcg/doc/html/structabcg_1_1OpenGLShader.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo-members.html b/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo-members.html index ea5de61a9..1ce11ea0e 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo-members.html +++ b/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo.html b/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo.html index 818d3104d..6b9c85d71 100644 --- a/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo.html +++ b/abcg/doc/html/structabcg_1_1OpenGLTextureCreateInfo.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -107,7 +107,7 @@

-

Configuration settings for creating an OpenGL 2D texture. +

Configuration settings for creating a 2D texture for OpenGL. More...

#include <abcgOpenGLImage.hpp>

@@ -115,7 +115,7 @@

Public Attributes

std::string_view path {} - Path to the texture file. More...
+ Path to the image file (PNG or JPEG). More...
  bool generateMipmaps {true}  Whether to generate mipmap levels. More...
@@ -128,7 +128,7 @@  

Detailed Description

-

Configuration settings for creating an OpenGL 2D texture.

+

Configuration settings for creating a 2D texture for OpenGL.

Member Data Documentation

◆ flipUpsideDown

@@ -174,7 +174,7 @@

-

Path to the texture file.

+

Path to the image file (PNG or JPEG).

diff --git a/abcg/doc/html/structabcg_1_1ShaderSource-members.html b/abcg/doc/html/structabcg_1_1ShaderSource-members.html index e3f4fe938..00b8f568d 100644 --- a/abcg/doc/html/structabcg_1_1ShaderSource-members.html +++ b/abcg/doc/html/structabcg_1_1ShaderSource-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1ShaderSource.html b/abcg/doc/html/structabcg_1_1ShaderSource.html index d5aa83d48..b0734f5c2 100644 --- a/abcg/doc/html/structabcg_1_1ShaderSource.html +++ b/abcg/doc/html/structabcg_1_1ShaderSource.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo-members.html b/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo-members.html index c671721d5..22c9a12c8 100644 --- a/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo.html b/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo.html index 056054efb..719fa3dbf 100644 --- a/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo.html +++ b/abcg/doc/html/structabcg_1_1VulkanBufferCreateInfo.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanCommandPools-members.html b/abcg/doc/html/structabcg_1_1VulkanCommandPools-members.html index 61f6db6de..28c2b36c4 100644 --- a/abcg/doc/html/structabcg_1_1VulkanCommandPools-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanCommandPools-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanCommandPools.html b/abcg/doc/html/structabcg_1_1VulkanCommandPools.html index 0df751e84..3630e6965 100644 --- a/abcg/doc/html/structabcg_1_1VulkanCommandPools.html +++ b/abcg/doc/html/structabcg_1_1VulkanCommandPools.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -114,11 +114,11 @@ - + - + - +

Public Attributes

vk::CommandPool compute {}
vk::CommandPool compute
 
vk::CommandPool graphics {}
vk::CommandPool graphics
 
vk::CommandPool transfer {}
vk::CommandPool transfer
 

Detailed Description

@@ -131,7 +131,7 @@

- +
vk::CommandPool abcg::VulkanCommandPools::compute {}vk::CommandPool abcg::VulkanCommandPools::compute

uint32_t index {}   -vk::CommandPool commandPool {} +vk::CommandPool commandPool   -vk::CommandBuffer commandBuffer {} +vk::CommandBuffer commandBuffer   -vk::CommandBuffer commandBufferUI {} +vk::CommandBuffer commandBufferUI   -vk::Fence fence {} +vk::Fence fence   -VulkanImage colorImage {} +VulkanImage colorImage   -vk::Framebuffer framebufferMain {} +vk::Framebuffer framebufferMain  

Detailed Description

@@ -144,7 +144,7 @@

- +
VulkanImage abcg::VulkanFrame::colorImage {}VulkanImage abcg::VulkanFrame::colorImage

diff --git a/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo-members.html b/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo-members.html index cf3701858..1d75c8528 100644 --- a/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo.html b/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo.html index ebc8fd594..8567c9c15 100644 --- a/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo.html +++ b/abcg/doc/html/structabcg_1_1VulkanImageCreateInfo.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo-members.html b/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo-members.html index 8cfbb9b49..2e75ef49b 100644 --- a/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo.html b/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo.html index ae5f92b06..d6c0752ef 100644 --- a/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo.html +++ b/abcg/doc/html/structabcg_1_1VulkanPipelineCreateInfo.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanQueues-members.html b/abcg/doc/html/structabcg_1_1VulkanQueues-members.html index d4b7edd48..5b77b008a 100644 --- a/abcg/doc/html/structabcg_1_1VulkanQueues-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanQueues-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanQueues.html b/abcg/doc/html/structabcg_1_1VulkanQueues.html index ec8873a8d..5c42f37f5 100644 --- a/abcg/doc/html/structabcg_1_1VulkanQueues.html +++ b/abcg/doc/html/structabcg_1_1VulkanQueues.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
@@ -114,13 +114,13 @@ - + - + - + - +

Public Attributes

vk::Queue compute {}
vk::Queue compute
 
vk::Queue graphics {}
vk::Queue graphics
 
vk::Queue present {}
vk::Queue present
 
vk::Queue transfer {}
vk::Queue transfer
 

Detailed Description

@@ -133,7 +133,7 @@

- +
vk::Queue abcg::VulkanQueues::compute {}vk::Queue abcg::VulkanQueues::compute

diff --git a/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies-members.html b/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies-members.html index 668ee7d68..5494b057e 100644 --- a/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies.html b/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies.html index d5dc5a6af..38e0cf8c2 100644 --- a/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies.html +++ b/abcg/doc/html/structabcg_1_1VulkanQueuesFamilies.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanSettings-members.html b/abcg/doc/html/structabcg_1_1VulkanSettings-members.html index 12bca768a..c103db1c4 100644 --- a/abcg/doc/html/structabcg_1_1VulkanSettings-members.html +++ b/abcg/doc/html/structabcg_1_1VulkanSettings-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1VulkanSettings.html b/abcg/doc/html/structabcg_1_1VulkanSettings.html index c6af921c9..24139707f 100644 --- a/abcg/doc/html/structabcg_1_1VulkanSettings.html +++ b/abcg/doc/html/structabcg_1_1VulkanSettings.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1WindowSettings-members.html b/abcg/doc/html/structabcg_1_1WindowSettings-members.html index e7cb6d035..a74c08de1 100644 --- a/abcg/doc/html/structabcg_1_1WindowSettings-members.html +++ b/abcg/doc/html/structabcg_1_1WindowSettings-members.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/doc/html/structabcg_1_1WindowSettings.html b/abcg/doc/html/structabcg_1_1WindowSettings.html index 1910432bf..93cfe562d 100644 --- a/abcg/doc/html/structabcg_1_1WindowSettings.html +++ b/abcg/doc/html/structabcg_1_1WindowSettings.html @@ -43,7 +43,7 @@
ABCg -  v3.0.0 +  v3.1.0
Development framework for MCTA008-17
diff --git a/abcg/external/fmt/core.h b/abcg/external/fmt/core.h index 92a7aa1df..ae80287e6 100644 --- a/abcg/external/fmt/core.h +++ b/abcg/external/fmt/core.h @@ -10,14 +10,14 @@ #include // std::byte #include // std::FILE -#include +#include // std::strlen #include #include #include #include // The fmt library version in the form major * 10000 + minor * 100 + patch. -#define FMT_VERSION 80101 +#define FMT_VERSION 100001 #if defined(__clang__) && !defined(__ibmxl__) # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) @@ -49,29 +49,27 @@ # define FMT_ICC_VERSION 0 #endif -#ifdef __NVCC__ -# define FMT_NVCC __NVCC__ -#else -# define FMT_NVCC 0 -#endif - #ifdef _MSC_VER -# define FMT_MSC_VER _MSC_VER +# define FMT_MSC_VERSION _MSC_VER # define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__)) #else -# define FMT_MSC_VER 0 +# define FMT_MSC_VERSION 0 # define FMT_MSC_WARNING(...) #endif +#ifdef _MSVC_LANG +# define FMT_CPLUSPLUS _MSVC_LANG +#else +# define FMT_CPLUSPLUS __cplusplus +#endif + #ifdef __has_feature # define FMT_HAS_FEATURE(x) __has_feature(x) #else # define FMT_HAS_FEATURE(x) 0 #endif -#if defined(__has_include) && \ - (!defined(__INTELLISENSE__) || FMT_MSC_VER > 1900) && \ - (!FMT_ICC_VERSION || FMT_ICC_VERSION >= 1600) +#if defined(__has_include) || FMT_ICC_VERSION >= 1600 || FMT_MSC_VERSION > 1900 # define FMT_HAS_INCLUDE(x) __has_include(x) #else # define FMT_HAS_INCLUDE(x) 0 @@ -83,12 +81,6 @@ # define FMT_HAS_CPP_ATTRIBUTE(x) 0 #endif -#ifdef _MSVC_LANG -# define FMT_CPLUSPLUS _MSVC_LANG -#else -# define FMT_CPLUSPLUS __cplusplus -#endif - #define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ (FMT_CPLUSPLUS >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) @@ -98,37 +90,38 @@ // Check if relaxed C++14 constexpr is supported. // GCC doesn't allow throw in constexpr until version 6 (bug 67371). #ifndef FMT_USE_CONSTEXPR -# define FMT_USE_CONSTEXPR \ - (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1912 || \ - (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) && \ - !FMT_NVCC && !FMT_ICC_VERSION +# if (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VERSION >= 1912 || \ + (FMT_GCC_VERSION >= 600 && FMT_CPLUSPLUS >= 201402L)) && \ + !FMT_ICC_VERSION && !defined(__NVCC__) +# define FMT_USE_CONSTEXPR 1 +# else +# define FMT_USE_CONSTEXPR 0 +# endif #endif #if FMT_USE_CONSTEXPR # define FMT_CONSTEXPR constexpr -# define FMT_CONSTEXPR_DECL constexpr #else # define FMT_CONSTEXPR -# define FMT_CONSTEXPR_DECL #endif -#if ((__cplusplus >= 202002L) && \ +#if ((FMT_CPLUSPLUS >= 202002L) && \ (!defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE > 9)) || \ - (__cplusplus >= 201709L && FMT_GCC_VERSION >= 1002) + (FMT_CPLUSPLUS >= 201709L && FMT_GCC_VERSION >= 1002) # define FMT_CONSTEXPR20 constexpr #else # define FMT_CONSTEXPR20 #endif -// Check if constexpr std::char_traits<>::compare,length is supported. +// Check if constexpr std::char_traits<>::{compare,length} are supported. #if defined(__GLIBCXX__) -# if __cplusplus >= 201703L && defined(_GLIBCXX_RELEASE) && \ +# if FMT_CPLUSPLUS >= 201703L && defined(_GLIBCXX_RELEASE) && \ _GLIBCXX_RELEASE >= 7 // GCC 7+ libstdc++ has _GLIBCXX_RELEASE. # define FMT_CONSTEXPR_CHAR_TRAITS constexpr # endif -#elif defined(_LIBCPP_VERSION) && __cplusplus >= 201703L && \ +#elif defined(_LIBCPP_VERSION) && FMT_CPLUSPLUS >= 201703L && \ _LIBCPP_VERSION >= 4000 # define FMT_CONSTEXPR_CHAR_TRAITS constexpr -#elif FMT_MSC_VER >= 1914 && _MSVC_LANG >= 201703L +#elif FMT_MSC_VERSION >= 1914 && FMT_CPLUSPLUS >= 201703L # define FMT_CONSTEXPR_CHAR_TRAITS constexpr #endif #ifndef FMT_CONSTEXPR_CHAR_TRAITS @@ -138,61 +131,21 @@ // Check if exceptions are disabled. #ifndef FMT_EXCEPTIONS # if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ - FMT_MSC_VER && !_HAS_EXCEPTIONS + (FMT_MSC_VERSION && !_HAS_EXCEPTIONS) # define FMT_EXCEPTIONS 0 # else # define FMT_EXCEPTIONS 1 # endif #endif -// Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature). -#ifndef FMT_USE_NOEXCEPT -# define FMT_USE_NOEXCEPT 0 -#endif - -#if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ - FMT_GCC_VERSION >= 408 || FMT_MSC_VER >= 1900 -# define FMT_DETECTED_NOEXCEPT noexcept -# define FMT_HAS_CXX11_NOEXCEPT 1 -#else -# define FMT_DETECTED_NOEXCEPT throw() -# define FMT_HAS_CXX11_NOEXCEPT 0 -#endif - -#ifndef FMT_NOEXCEPT -# if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT -# define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT -# else -# define FMT_NOEXCEPT -# endif -#endif - -// [[noreturn]] is disabled on MSVC and NVCC because of bogus unreachable code -// warnings. -#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VER && \ - !FMT_NVCC +// Disable [[noreturn]] on MSVC/NVCC because of bogus unreachable code warnings. +#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VERSION && \ + !defined(__NVCC__) # define FMT_NORETURN [[noreturn]] #else # define FMT_NORETURN #endif -#if __cplusplus == 201103L || __cplusplus == 201402L -# if defined(__INTEL_COMPILER) || defined(__PGI) -# define FMT_FALLTHROUGH -# elif defined(__clang__) -# define FMT_FALLTHROUGH [[clang::fallthrough]] -# elif FMT_GCC_VERSION >= 700 && \ - (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) -# define FMT_FALLTHROUGH [[gnu::fallthrough]] -# else -# define FMT_FALLTHROUGH -# endif -#elif FMT_HAS_CPP17_ATTRIBUTE(fallthrough) -# define FMT_FALLTHROUGH [[fallthrough]] -#else -# define FMT_FALLTHROUGH -#endif - #ifndef FMT_NODISCARD # if FMT_HAS_CPP17_ATTRIBUTE(nodiscard) # define FMT_NODISCARD [[nodiscard]] @@ -201,16 +154,6 @@ # endif #endif -#ifndef FMT_USE_FLOAT -# define FMT_USE_FLOAT 1 -#endif -#ifndef FMT_USE_DOUBLE -# define FMT_USE_DOUBLE 1 -#endif -#ifndef FMT_USE_LONG_DOUBLE -# define FMT_USE_LONG_DOUBLE 1 -#endif - #ifndef FMT_INLINE # if FMT_GCC_VERSION || FMT_CLANG_VERSION # define FMT_INLINE inline __attribute__((always_inline)) @@ -219,47 +162,36 @@ # endif #endif -#ifndef FMT_DEPRECATED -# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900 -# define FMT_DEPRECATED [[deprecated]] -# else -# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) -# define FMT_DEPRECATED __attribute__((deprecated)) -# elif FMT_MSC_VER -# define FMT_DEPRECATED __declspec(deprecated) -# else -# define FMT_DEPRECATED /* deprecated */ -# endif -# endif +#ifdef _MSC_VER +# define FMT_UNCHECKED_ITERATOR(It) \ + using _Unchecked_type = It // Mark iterator as checked. +#else +# define FMT_UNCHECKED_ITERATOR(It) using unchecked_type = It #endif #ifndef FMT_BEGIN_NAMESPACE # define FMT_BEGIN_NAMESPACE \ namespace fmt { \ - inline namespace v8 { + inline namespace v10 { # define FMT_END_NAMESPACE \ } \ } #endif -#ifndef FMT_MODULE_EXPORT -# define FMT_MODULE_EXPORT -# define FMT_MODULE_EXPORT_BEGIN -# define FMT_MODULE_EXPORT_END -# define FMT_BEGIN_DETAIL_NAMESPACE namespace detail { -# define FMT_END_DETAIL_NAMESPACE } +#ifndef FMT_EXPORT +# define FMT_EXPORT +# define FMT_BEGIN_EXPORT +# define FMT_END_EXPORT #endif #if !defined(FMT_HEADER_ONLY) && defined(_WIN32) -# define FMT_CLASS_API FMT_MSC_WARNING(suppress : 4275) -# ifdef FMT_EXPORT +# ifdef FMT_LIB_EXPORT # define FMT_API __declspec(dllexport) # elif defined(FMT_SHARED) # define FMT_API __declspec(dllimport) # endif #else -# define FMT_CLASS_API -# if defined(FMT_EXPORT) || defined(FMT_SHARED) +# if defined(FMT_LIB_EXPORT) || defined(FMT_SHARED) # if defined(__GNUC__) || defined(__clang__) # define FMT_API __attribute__((visibility("default"))) # endif @@ -270,26 +202,27 @@ #endif // libc++ supports string_view in pre-c++17. -#if (FMT_HAS_INCLUDE() && \ - (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ - (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) +#if FMT_HAS_INCLUDE() && \ + (FMT_CPLUSPLUS >= 201703L || defined(_LIBCPP_VERSION)) # include # define FMT_USE_STRING_VIEW -#elif FMT_HAS_INCLUDE("experimental/string_view") && __cplusplus >= 201402L +#elif FMT_HAS_INCLUDE("experimental/string_view") && FMT_CPLUSPLUS >= 201402L # include # define FMT_USE_EXPERIMENTAL_STRING_VIEW #endif #ifndef FMT_UNICODE -# define FMT_UNICODE !FMT_MSC_VER +# define FMT_UNICODE !FMT_MSC_VERSION #endif #ifndef FMT_CONSTEVAL -# if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) && \ - __cplusplus > 201703L && !defined(__apple_build_version__)) || \ - (defined(__cpp_consteval) && \ - (!FMT_MSC_VER || _MSC_FULL_VER >= 193030704)) -// consteval is broken in MSVC before VS2022 and Apple clang 13. +# if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) && \ + (!defined(__apple_build_version__) || \ + __apple_build_version__ >= 14000029L) && \ + FMT_CPLUSPLUS >= 202002L) || \ + (defined(__cpp_consteval) && \ + (!FMT_MSC_VERSION || _MSC_FULL_VER >= 193030704)) +// consteval is broken in MSVC before VS2022 and Apple clang before 14. # define FMT_CONSTEVAL consteval # define FMT_HAS_CONSTEVAL # else @@ -297,24 +230,25 @@ # endif #endif -#ifndef FMT_USE_NONTYPE_TEMPLATE_PARAMETERS -# if defined(__cpp_nontype_template_args) && \ - ((FMT_GCC_VERSION >= 903 && __cplusplus >= 201709L) || \ - __cpp_nontype_template_args >= 201911L) -# define FMT_USE_NONTYPE_TEMPLATE_PARAMETERS 1 +#ifndef FMT_USE_NONTYPE_TEMPLATE_ARGS +# if defined(__cpp_nontype_template_args) && \ + ((FMT_GCC_VERSION >= 903 && FMT_CPLUSPLUS >= 201709L) || \ + __cpp_nontype_template_args >= 201911L) && \ + !defined(__NVCOMPILER) && !defined(__LCC__) +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 # else -# define FMT_USE_NONTYPE_TEMPLATE_PARAMETERS 0 +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 0 # endif #endif // Enable minimal optimizations for more compact code in debug mode. FMT_GCC_PRAGMA("GCC push_options") -#ifndef __OPTIMIZE__ +#if !defined(__OPTIMIZE__) && !defined(__NVCOMPILER) && !defined(__LCC__) && \ + !defined(__CUDACC__) FMT_GCC_PRAGMA("GCC optimize(\"Og\")") #endif FMT_BEGIN_NAMESPACE -FMT_MODULE_EXPORT_BEGIN // Implementations of enable_if_t and other metafunctions for older systems. template @@ -330,6 +264,13 @@ template using remove_cvref_t = typename std::remove_cv>::type; template struct type_identity { using type = T; }; template using type_identity_t = typename type_identity::type; +template +using underlying_t = typename std::underlying_type::type; + +// Checks whether T is a container with contiguous storage. +template struct is_contiguous : std::false_type {}; +template +struct is_contiguous> : std::true_type {}; struct monostate { constexpr monostate() {} @@ -341,19 +282,35 @@ struct monostate { #ifdef FMT_DOC # define FMT_ENABLE_IF(...) #else -# define FMT_ENABLE_IF(...) enable_if_t<(__VA_ARGS__), int> = 0 +# define FMT_ENABLE_IF(...) fmt::enable_if_t<(__VA_ARGS__), int> = 0 #endif -FMT_BEGIN_DETAIL_NAMESPACE +// This is defined in core.h instead of format.h to avoid injecting in std. +// It is a template to avoid undesirable implicit conversions to std::byte. +#ifdef __cpp_lib_byte +template ::value)> +inline auto format_as(T b) -> unsigned char { + return static_cast(b); +} +#endif -// Suppress "unused variable" warnings with the method described in +namespace detail { +// Suppresses "unused variable" warnings with the method described in // https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/. // (void)var does not work on many Intel compilers. template FMT_CONSTEXPR void ignore_unused(const T&...) {} -constexpr FMT_INLINE auto is_constant_evaluated(bool default_value = false) - FMT_NOEXCEPT -> bool { -#ifdef __cpp_lib_is_constant_evaluated +constexpr FMT_INLINE auto is_constant_evaluated( + bool default_value = false) noexcept -> bool { +// Workaround for incompatibility between libstdc++ consteval-based +// std::is_constant_evaluated() implementation and clang-14. +// https://github.com/fmtlib/fmt/issues/3247 +#if FMT_CPLUSPLUS >= 202002L && defined(_GLIBCXX_RELEASE) && \ + _GLIBCXX_RELEASE >= 12 && \ + (FMT_CLANG_VERSION >= 1400 && FMT_CLANG_VERSION < 1500) + ignore_unused(default_value); + return __builtin_is_constant_evaluated(); +#elif defined(__cpp_lib_is_constant_evaluated) ignore_unused(default_value); return std::is_constant_evaluated(); #else @@ -361,7 +318,7 @@ constexpr FMT_INLINE auto is_constant_evaluated(bool default_value = false) #endif } -// A function to suppress "conditional expression is constant" warnings. +// Suppresses "conditional expression is constant" warnings. template constexpr FMT_INLINE auto const_check(T value) -> T { return value; } @@ -371,23 +328,17 @@ FMT_NORETURN FMT_API void assert_fail(const char* file, int line, #ifndef FMT_ASSERT # ifdef NDEBUG -// FMT_ASSERT is not empty to avoid -Werror=empty-body. +// FMT_ASSERT is not empty to avoid -Wempty-body. # define FMT_ASSERT(condition, message) \ - ::fmt::detail::ignore_unused((condition), (message)) + fmt::detail::ignore_unused((condition), (message)) # else # define FMT_ASSERT(condition, message) \ ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ ? (void)0 \ - : ::fmt::detail::assert_fail(__FILE__, __LINE__, (message))) + : fmt::detail::assert_fail(__FILE__, __LINE__, (message))) # endif #endif -#ifdef __cpp_lib_byte -using byte = std::byte; -#else -enum class byte : unsigned char {}; -#endif - #if defined(FMT_USE_STRING_VIEW) template using std_string_view = std::basic_string_view; #elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) @@ -399,11 +350,11 @@ template struct std_string_view {}; #ifdef FMT_USE_INT128 // Do nothing. -#elif defined(__SIZEOF_INT128__) && !FMT_NVCC && \ - !(FMT_CLANG_VERSION && FMT_MSC_VER) +#elif defined(__SIZEOF_INT128__) && !defined(__NVCC__) && \ + !(FMT_CLANG_VERSION && FMT_MSC_VERSION) # define FMT_USE_INT128 1 -using int128_t = __int128_t; -using uint128_t = __uint128_t; +using int128_opt = __int128_t; // An optional native 128-bit integer. +using uint128_opt = __uint128_t; template inline auto convert_for_visit(T value) -> T { return value; } @@ -411,32 +362,29 @@ template inline auto convert_for_visit(T value) -> T { # define FMT_USE_INT128 0 #endif #if !FMT_USE_INT128 -enum class int128_t {}; -enum class uint128_t {}; +enum class int128_opt {}; +enum class uint128_opt {}; // Reduce template instantiations. -template inline auto convert_for_visit(T) -> monostate { - return {}; -} +template auto convert_for_visit(T) -> monostate { return {}; } #endif // Casts a nonnegative integer to unsigned. template FMT_CONSTEXPR auto to_unsigned(Int value) -> typename std::make_unsigned::type { - FMT_ASSERT(value >= 0, "negative value"); + FMT_ASSERT(std::is_unsigned::value || value >= 0, "negative value"); return static_cast::type>(value); } -FMT_MSC_WARNING(suppress : 4566) constexpr unsigned char micro[] = "\u00B5"; +FMT_CONSTEXPR inline auto is_utf8() -> bool { + FMT_MSC_WARNING(suppress : 4566) constexpr unsigned char section[] = "\u00A7"; -constexpr auto is_utf8() -> bool { - // Avoid buggy sign extensions in MSVC's constant evaluation mode. - // https://developercommunity.visualstudio.com/t/C-difference-in-behavior-for-unsigned/1233612 + // Avoid buggy sign extensions in MSVC's constant evaluation mode (#2297). using uchar = unsigned char; - return FMT_UNICODE || (sizeof(micro) == 3 && uchar(micro[0]) == 0xC2 && - uchar(micro[1]) == 0xB5); + return FMT_UNICODE || (sizeof(section) == 3 && uchar(section[0]) == 0xC2 && + uchar(section[1]) == 0xA7); } -FMT_END_DETAIL_NAMESPACE +} // namespace detail /** An implementation of ``std::basic_string_view`` for pre-C++17. It provides a @@ -445,6 +393,7 @@ FMT_END_DETAIL_NAMESPACE compiled with a different ``-std`` option than the client code (which is not recommended). */ +FMT_EXPORT template class basic_string_view { private: const Char* data_; @@ -454,12 +403,11 @@ template class basic_string_view { using value_type = Char; using iterator = const Char*; - constexpr basic_string_view() FMT_NOEXCEPT : data_(nullptr), size_(0) {} + constexpr basic_string_view() noexcept : data_(nullptr), size_(0) {} /** Constructs a string reference object from a C string and a size. */ - constexpr basic_string_view(const Char* s, size_t count) FMT_NOEXCEPT - : data_(s), - size_(count) {} + constexpr basic_string_view(const Char* s, size_t count) noexcept + : data_(s), size_(count) {} /** \rst @@ -479,33 +427,44 @@ template class basic_string_view { /** Constructs a string reference from a ``std::basic_string`` object. */ template FMT_CONSTEXPR basic_string_view( - const std::basic_string& s) FMT_NOEXCEPT - : data_(s.data()), - size_(s.size()) {} + const std::basic_string& s) noexcept + : data_(s.data()), size_(s.size()) {} template >::value)> - FMT_CONSTEXPR basic_string_view(S s) FMT_NOEXCEPT : data_(s.data()), - size_(s.size()) {} + FMT_CONSTEXPR basic_string_view(S s) noexcept + : data_(s.data()), size_(s.size()) {} /** Returns a pointer to the string data. */ - constexpr auto data() const FMT_NOEXCEPT -> const Char* { return data_; } + constexpr auto data() const noexcept -> const Char* { return data_; } /** Returns the string size. */ - constexpr auto size() const FMT_NOEXCEPT -> size_t { return size_; } + constexpr auto size() const noexcept -> size_t { return size_; } - constexpr auto begin() const FMT_NOEXCEPT -> iterator { return data_; } - constexpr auto end() const FMT_NOEXCEPT -> iterator { return data_ + size_; } + constexpr auto begin() const noexcept -> iterator { return data_; } + constexpr auto end() const noexcept -> iterator { return data_ + size_; } - constexpr auto operator[](size_t pos) const FMT_NOEXCEPT -> const Char& { + constexpr auto operator[](size_t pos) const noexcept -> const Char& { return data_[pos]; } - FMT_CONSTEXPR void remove_prefix(size_t n) FMT_NOEXCEPT { + FMT_CONSTEXPR void remove_prefix(size_t n) noexcept { data_ += n; size_ -= n; } + FMT_CONSTEXPR_CHAR_TRAITS bool starts_with( + basic_string_view sv) const noexcept { + return size_ >= sv.size_ && + std::char_traits::compare(data_, sv.data_, sv.size_) == 0; + } + FMT_CONSTEXPR_CHAR_TRAITS bool starts_with(Char c) const noexcept { + return size_ >= 1 && std::char_traits::eq(*data_, c); + } + FMT_CONSTEXPR_CHAR_TRAITS bool starts_with(const Char* s) const { + return starts_with(basic_string_view(s)); + } + // Lexicographically compare this string reference to other. FMT_CONSTEXPR_CHAR_TRAITS auto compare(basic_string_view other) const -> int { size_t str_size = size_ < other.size_ ? size_ : other.size_; @@ -537,13 +496,22 @@ template class basic_string_view { } }; +FMT_EXPORT using string_view = basic_string_view; /** Specifies if ``T`` is a character type. Can be specialized by users. */ +FMT_EXPORT template struct is_char : std::false_type {}; template <> struct is_char : std::true_type {}; -// Returns a string view of `s`. +namespace detail { + +// A base class for compile-time strings. +struct compile_string {}; + +template +struct is_compile_string : std::is_base_of {}; + template ::value)> FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view { return s; @@ -559,36 +527,24 @@ constexpr auto to_string_view(basic_string_view s) return s; } template >::value)> -inline auto to_string_view(detail::std_string_view s) - -> basic_string_view { + FMT_ENABLE_IF(!std::is_empty>::value)> +inline auto to_string_view(std_string_view s) -> basic_string_view { return s; } - -// A base class for compile-time strings. It is defined in the fmt namespace to -// make formatting functions visible via ADL, e.g. format(FMT_STRING("{}"), 42). -struct compile_string {}; - -template -struct is_compile_string : std::is_base_of {}; - template ::value)> constexpr auto to_string_view(const S& s) -> basic_string_view { return basic_string_view(s); } - -FMT_BEGIN_DETAIL_NAMESPACE - void to_string_view(...); -using fmt::to_string_view; // Specifies whether S is a string type convertible to fmt::basic_string_view. // It should be a constexpr function but MSVC 2017 fails to compile it in // enable_if and MSVC 2015 fails to compile it as an alias template. +// ADL is intentionally disabled as to_string_view is not an extension point. template -struct is_string : std::is_class()))> { -}; +struct is_string + : std::is_class()))> {}; template struct char_t_impl {}; template struct char_t_impl::value>> { @@ -596,28 +552,91 @@ template struct char_t_impl::value>> { using type = typename result::value_type; }; -// Reports a compile-time error if S is not a valid format string. -template ::value)> -FMT_INLINE void check_format_string(const S&) { -#ifdef FMT_ENFORCE_COMPILE_STRING - static_assert(is_compile_string::value, - "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " - "FMT_STRING."); -#endif +enum class type { + none_type, + // Integer types should go first, + int_type, + uint_type, + long_long_type, + ulong_long_type, + int128_type, + uint128_type, + bool_type, + char_type, + last_integer_type = char_type, + // followed by floating-point types. + float_type, + double_type, + long_double_type, + last_numeric_type = long_double_type, + cstring_type, + string_type, + pointer_type, + custom_type +}; + +// Maps core type T to the corresponding type enum constant. +template +struct type_constant : std::integral_constant {}; + +#define FMT_TYPE_CONSTANT(Type, constant) \ + template \ + struct type_constant \ + : std::integral_constant {} + +FMT_TYPE_CONSTANT(int, int_type); +FMT_TYPE_CONSTANT(unsigned, uint_type); +FMT_TYPE_CONSTANT(long long, long_long_type); +FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); +FMT_TYPE_CONSTANT(int128_opt, int128_type); +FMT_TYPE_CONSTANT(uint128_opt, uint128_type); +FMT_TYPE_CONSTANT(bool, bool_type); +FMT_TYPE_CONSTANT(Char, char_type); +FMT_TYPE_CONSTANT(float, float_type); +FMT_TYPE_CONSTANT(double, double_type); +FMT_TYPE_CONSTANT(long double, long_double_type); +FMT_TYPE_CONSTANT(const Char*, cstring_type); +FMT_TYPE_CONSTANT(basic_string_view, string_type); +FMT_TYPE_CONSTANT(const void*, pointer_type); + +constexpr bool is_integral_type(type t) { + return t > type::none_type && t <= type::last_integer_type; +} +constexpr bool is_arithmetic_type(type t) { + return t > type::none_type && t <= type::last_numeric_type; } -template ::value)> -void check_format_string(S); + +constexpr auto set(type rhs) -> int { return 1 << static_cast(rhs); } +constexpr auto in(type t, int set) -> bool { + return ((set >> static_cast(t)) & 1) != 0; +} + +// Bitsets of types. +enum { + sint_set = + set(type::int_type) | set(type::long_long_type) | set(type::int128_type), + uint_set = set(type::uint_type) | set(type::ulong_long_type) | + set(type::uint128_type), + bool_set = set(type::bool_type), + char_set = set(type::char_type), + float_set = set(type::float_type) | set(type::double_type) | + set(type::long_double_type), + string_set = set(type::string_type), + cstring_set = set(type::cstring_type), + pointer_set = set(type::pointer_type) +}; FMT_NORETURN FMT_API void throw_format_error(const char* message); struct error_handler { constexpr error_handler() = default; - constexpr error_handler(const error_handler&) = default; // This function is intentionally not constexpr to give a compile-time error. - FMT_NORETURN FMT_API void on_error(const char* message); + FMT_NORETURN void on_error(const char* message) { + throw_format_error(message); + } }; -FMT_END_DETAIL_NAMESPACE +} // namespace detail /** String's character type. */ template using char_t = typename detail::char_t_impl::type; @@ -629,35 +648,34 @@ template using char_t = typename detail::char_t_impl::type; You can use the ``format_parse_context`` type alias for ``char`` instead. \endrst */ -template -class basic_format_parse_context : private ErrorHandler { +FMT_EXPORT +template class basic_format_parse_context { private: basic_string_view format_str_; int next_arg_id_; + FMT_CONSTEXPR void do_check_arg_id(int id); + public: using char_type = Char; - using iterator = typename basic_string_view::iterator; + using iterator = const Char*; explicit constexpr basic_format_parse_context( - basic_string_view format_str, ErrorHandler eh = {}, - int next_arg_id = 0) - : ErrorHandler(eh), format_str_(format_str), next_arg_id_(next_arg_id) {} + basic_string_view format_str, int next_arg_id = 0) + : format_str_(format_str), next_arg_id_(next_arg_id) {} /** Returns an iterator to the beginning of the format string range being parsed. */ - constexpr auto begin() const FMT_NOEXCEPT -> iterator { + constexpr auto begin() const noexcept -> iterator { return format_str_.begin(); } /** Returns an iterator past the end of the format string range being parsed. */ - constexpr auto end() const FMT_NOEXCEPT -> iterator { - return format_str_.end(); - } + constexpr auto end() const noexcept -> iterator { return format_str_.end(); } /** Advances the begin iterator to ``it``. */ FMT_CONSTEXPR void advance_to(iterator it) { @@ -669,85 +687,83 @@ class basic_format_parse_context : private ErrorHandler { the next argument index and switches to the automatic indexing. */ FMT_CONSTEXPR auto next_arg_id() -> int { - // Don't check if the argument id is valid to avoid overhead and because it - // will be checked during formatting anyway. - if (next_arg_id_ >= 0) return next_arg_id_++; - on_error("cannot switch from manual to automatic argument indexing"); - return 0; + if (next_arg_id_ < 0) { + detail::throw_format_error( + "cannot switch from manual to automatic argument indexing"); + return 0; + } + int id = next_arg_id_++; + do_check_arg_id(id); + return id; } /** Reports an error if using the automatic argument indexing; otherwise switches to the manual indexing. */ - FMT_CONSTEXPR void check_arg_id(int) { - if (next_arg_id_ > 0) - on_error("cannot switch from automatic to manual argument indexing"); - else - next_arg_id_ = -1; + FMT_CONSTEXPR void check_arg_id(int id) { + if (next_arg_id_ > 0) { + detail::throw_format_error( + "cannot switch from automatic to manual argument indexing"); + return; + } + next_arg_id_ = -1; + do_check_arg_id(id); } - FMT_CONSTEXPR void check_arg_id(basic_string_view) {} - - FMT_CONSTEXPR void on_error(const char* message) { - ErrorHandler::on_error(message); - } - - constexpr auto error_handler() const -> ErrorHandler { return *this; } + FMT_CONSTEXPR void check_dynamic_spec(int arg_id); }; +FMT_EXPORT using format_parse_context = basic_format_parse_context; -template class basic_format_arg; -template class basic_format_args; -template class dynamic_format_arg_store; - -// A formatter for objects of type T. -template -struct formatter { - // A deleted default constructor indicates a disabled formatter. - formatter() = delete; -}; +namespace detail { +// A parse context with extra data used only in compile-time checks. +template +class compile_parse_context : public basic_format_parse_context { + private: + int num_args_; + const type* types_; + using base = basic_format_parse_context; -// Specifies if T has an enabled formatter specialization. A type can be -// formattable even if it doesn't have a formatter e.g. via a conversion. -template -using has_formatter = - std::is_constructible>; + public: + explicit FMT_CONSTEXPR compile_parse_context( + basic_string_view format_str, int num_args, const type* types, + int next_arg_id = 0) + : base(format_str, next_arg_id), num_args_(num_args), types_(types) {} -// Checks whether T is a container with contiguous storage. -template struct is_contiguous : std::false_type {}; -template -struct is_contiguous> : std::true_type {}; + constexpr auto num_args() const -> int { return num_args_; } + constexpr auto arg_type(int id) const -> type { return types_[id]; } -class appender; + FMT_CONSTEXPR auto next_arg_id() -> int { + int id = base::next_arg_id(); + if (id >= num_args_) throw_format_error("argument not found"); + return id; + } -FMT_BEGIN_DETAIL_NAMESPACE + FMT_CONSTEXPR void check_arg_id(int id) { + base::check_arg_id(id); + if (id >= num_args_) throw_format_error("argument not found"); + } + using base::check_arg_id; -template -constexpr auto has_const_formatter_impl(T*) - -> decltype(typename Context::template formatter_type().format( - std::declval(), std::declval()), - true) { - return true; -} -template -constexpr auto has_const_formatter_impl(...) -> bool { - return false; -} -template -constexpr auto has_const_formatter() -> bool { - return has_const_formatter_impl(static_cast(nullptr)); -} + FMT_CONSTEXPR void check_dynamic_spec(int arg_id) { + detail::ignore_unused(arg_id); +#if !defined(__LCC__) + if (arg_id < num_args_ && types_ && !is_integral_type(types_[arg_id])) + throw_format_error("width/precision is not integer"); +#endif + } +}; // Extracts a reference to the container from back_insert_iterator. template inline auto get_container(std::back_insert_iterator it) -> Container& { - using bi_iterator = std::back_insert_iterator; - struct accessor : bi_iterator { - accessor(bi_iterator iter) : bi_iterator(iter) {} - using bi_iterator::container; + using base = std::back_insert_iterator; + struct accessor : base { + accessor(base b) : base(b) {} + using base::container; }; return *accessor(it).container; } @@ -765,7 +781,7 @@ template U* { if (is_constant_evaluated()) return copy_str(begin, end, out); auto size = to_unsigned(end - begin); - memcpy(out, begin, size * sizeof(U)); + if (size > 0) memcpy(out, begin, size * sizeof(U)); return out + size; } @@ -784,18 +800,16 @@ template class buffer { protected: // Don't initialize ptr_ since it is not accessed to save a few cycles. FMT_MSC_WARNING(suppress : 26495) - buffer(size_t sz) FMT_NOEXCEPT : size_(sz), capacity_(sz) {} + buffer(size_t sz) noexcept : size_(sz), capacity_(sz) {} - FMT_CONSTEXPR20 buffer(T* p = nullptr, size_t sz = 0, - size_t cap = 0) FMT_NOEXCEPT : ptr_(p), - size_(sz), - capacity_(cap) {} + FMT_CONSTEXPR20 buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) noexcept + : ptr_(p), size_(sz), capacity_(cap) {} FMT_CONSTEXPR20 ~buffer() = default; buffer(buffer&&) = default; /** Sets the buffer data and capacity. */ - FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) FMT_NOEXCEPT { + FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept { ptr_ = buf_data; capacity_ = buf_capacity; } @@ -810,23 +824,23 @@ template class buffer { buffer(const buffer&) = delete; void operator=(const buffer&) = delete; - auto begin() FMT_NOEXCEPT -> T* { return ptr_; } - auto end() FMT_NOEXCEPT -> T* { return ptr_ + size_; } + FMT_INLINE auto begin() noexcept -> T* { return ptr_; } + FMT_INLINE auto end() noexcept -> T* { return ptr_ + size_; } - auto begin() const FMT_NOEXCEPT -> const T* { return ptr_; } - auto end() const FMT_NOEXCEPT -> const T* { return ptr_ + size_; } + FMT_INLINE auto begin() const noexcept -> const T* { return ptr_; } + FMT_INLINE auto end() const noexcept -> const T* { return ptr_ + size_; } /** Returns the size of this buffer. */ - constexpr auto size() const FMT_NOEXCEPT -> size_t { return size_; } + constexpr auto size() const noexcept -> size_t { return size_; } /** Returns the capacity of this buffer. */ - constexpr auto capacity() const FMT_NOEXCEPT -> size_t { return capacity_; } + constexpr auto capacity() const noexcept -> size_t { return capacity_; } /** Returns a pointer to the buffer data. */ - FMT_CONSTEXPR auto data() FMT_NOEXCEPT -> T* { return ptr_; } + FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; } /** Returns a pointer to the buffer data. */ - FMT_CONSTEXPR auto data() const FMT_NOEXCEPT -> const T* { return ptr_; } + FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; } /** Clears this buffer. */ void clear() { size_ = 0; } @@ -854,11 +868,11 @@ template class buffer { /** Appends data to the end of the buffer. */ template void append(const U* begin, const U* end); - template FMT_CONSTEXPR auto operator[](I index) -> T& { + template FMT_CONSTEXPR auto operator[](Idx index) -> T& { return ptr_[index]; } - template - FMT_CONSTEXPR auto operator[](I index) const -> const T& { + template + FMT_CONSTEXPR auto operator[](Idx index) const -> const T& { return ptr_[index]; } }; @@ -993,6 +1007,7 @@ class iterator_buffer, : buffer(c.size()), container_(c) {} explicit iterator_buffer(std::back_insert_iterator out, size_t = 0) : iterator_buffer(get_container(out)) {} + auto out() -> std::back_insert_iterator { return std::back_inserter(container_); } @@ -1017,6 +1032,79 @@ template class counting_buffer final : public buffer { auto count() -> size_t { return count_ + this->size(); } }; +} // namespace detail + +template +FMT_CONSTEXPR void basic_format_parse_context::do_check_arg_id(int id) { + // Argument id is only checked at compile-time during parsing because + // formatting has its own validation. + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + if (id >= static_cast(this)->num_args()) + detail::throw_format_error("argument not found"); + } +} + +template +FMT_CONSTEXPR void basic_format_parse_context::check_dynamic_spec( + int arg_id) { + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + static_cast(this)->check_dynamic_spec(arg_id); + } +} + +FMT_EXPORT template class basic_format_arg; +FMT_EXPORT template class basic_format_args; +FMT_EXPORT template class dynamic_format_arg_store; + +// A formatter for objects of type T. +FMT_EXPORT +template +struct formatter { + // A deleted default constructor indicates a disabled formatter. + formatter() = delete; +}; + +// Specifies if T has an enabled formatter specialization. A type can be +// formattable even if it doesn't have a formatter e.g. via a conversion. +template +using has_formatter = + std::is_constructible>; + +// An output iterator that appends to a buffer. +// It is used to reduce symbol sizes for the common case. +class appender : public std::back_insert_iterator> { + using base = std::back_insert_iterator>; + + public: + using std::back_insert_iterator>::back_insert_iterator; + appender(base it) noexcept : base(it) {} + FMT_UNCHECKED_ITERATOR(appender); + + auto operator++() noexcept -> appender& { return *this; } + auto operator++(int) noexcept -> appender { return *this; } +}; + +namespace detail { + +template +constexpr auto has_const_formatter_impl(T*) + -> decltype(typename Context::template formatter_type().format( + std::declval(), std::declval()), + true) { + return true; +} +template +constexpr auto has_const_formatter_impl(...) -> bool { + return false; +} +template +constexpr auto has_const_formatter() -> bool { + return has_const_formatter_impl(static_cast(nullptr)); +} template using buffer_appender = conditional_t::value, appender, @@ -1027,26 +1115,22 @@ template auto get_buffer(OutputIt out) -> iterator_buffer { return iterator_buffer(out); } +template , Buf>::value)> +auto get_buffer(std::back_insert_iterator out) -> buffer& { + return get_container(out); +} -template -auto get_iterator(Buffer& buf) -> decltype(buf.out()) { +template +FMT_INLINE auto get_iterator(Buf& buf, OutputIt) -> decltype(buf.out()) { return buf.out(); } -template auto get_iterator(buffer& buf) -> buffer_appender { - return buffer_appender(buf); +template +auto get_iterator(buffer&, OutputIt out) -> OutputIt { + return out; } -template -struct fallback_formatter { - fallback_formatter() = delete; -}; - -// Specifies if T has an enabled fallback_formatter specialization. -template -using has_fallback_formatter = - std::is_constructible>; - -struct view {}; +struct view {}; template struct named_arg : view { const Char* name; @@ -1128,64 +1212,8 @@ constexpr auto count_statically_named_args() -> size_t { return count::value...>(); } -enum class type { - none_type, - // Integer types should go first, - int_type, - uint_type, - long_long_type, - ulong_long_type, - int128_type, - uint128_type, - bool_type, - char_type, - last_integer_type = char_type, - // followed by floating-point types. - float_type, - double_type, - long_double_type, - last_numeric_type = long_double_type, - cstring_type, - string_type, - pointer_type, - custom_type -}; - -// Maps core type T to the corresponding type enum constant. -template -struct type_constant : std::integral_constant {}; - -#define FMT_TYPE_CONSTANT(Type, constant) \ - template \ - struct type_constant \ - : std::integral_constant {} - -FMT_TYPE_CONSTANT(int, int_type); -FMT_TYPE_CONSTANT(unsigned, uint_type); -FMT_TYPE_CONSTANT(long long, long_long_type); -FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); -FMT_TYPE_CONSTANT(int128_t, int128_type); -FMT_TYPE_CONSTANT(uint128_t, uint128_type); -FMT_TYPE_CONSTANT(bool, bool_type); -FMT_TYPE_CONSTANT(Char, char_type); -FMT_TYPE_CONSTANT(float, float_type); -FMT_TYPE_CONSTANT(double, double_type); -FMT_TYPE_CONSTANT(long double, long_double_type); -FMT_TYPE_CONSTANT(const Char*, cstring_type); -FMT_TYPE_CONSTANT(basic_string_view, string_type); -FMT_TYPE_CONSTANT(const void*, pointer_type); - -constexpr bool is_integral_type(type t) { - return t > type::none_type && t <= type::last_integer_type; -} - -constexpr bool is_arithmetic_type(type t) { - return t > type::none_type && t <= type::last_numeric_type; -} - struct unformattable {}; struct unformattable_char : unformattable {}; -struct unformattable_const : unformattable {}; struct unformattable_pointer : unformattable {}; template struct string_value { @@ -1215,8 +1243,8 @@ template class value { unsigned uint_value; long long long_long_value; unsigned long long ulong_long_value; - int128_t int128_value; - uint128_t uint128_value; + int128_opt int128_value; + uint128_opt uint128_value; bool bool_value; char_type char_value; float float_value; @@ -1233,8 +1261,8 @@ template class value { constexpr FMT_INLINE value(unsigned val) : uint_value(val) {} constexpr FMT_INLINE value(long long val) : long_long_value(val) {} constexpr FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {} - FMT_INLINE value(int128_t val) : int128_value(val) {} - FMT_INLINE value(uint128_t val) : uint128_value(val) {} + FMT_INLINE value(int128_opt val) : int128_value(val) {} + FMT_INLINE value(uint128_opt val) : uint128_value(val) {} constexpr FMT_INLINE value(float val) : float_value(val) {} constexpr FMT_INLINE value(double val) : double_value(val) {} FMT_INLINE value(long double val) : long_double_value(val) {} @@ -1253,20 +1281,16 @@ template class value { : named_args{args, size} {} template FMT_CONSTEXPR FMT_INLINE value(T& val) { - using value_type = remove_cvref_t; + using value_type = remove_const_t; custom.value = const_cast(&val); // Get the formatter type through the context to allow different contexts // have different extension points, e.g. `formatter` for `format` and // `printf_formatter` for `printf`. custom.format = format_custom_arg< - value_type, - conditional_t::value, - typename Context::template formatter_type, - fallback_formatter>>; + value_type, typename Context::template formatter_type>; } value(unformattable); value(unformattable_char); - value(unformattable_const); value(unformattable_pointer); private: @@ -1283,15 +1307,26 @@ template class value { } }; -template -FMT_CONSTEXPR auto make_arg(const T& value) -> basic_format_arg; - // To minimize the number of types we need to deal with, long is translated // either to int or to long long depending on its size. enum { long_short = sizeof(long) == sizeof(int) }; using long_type = conditional_t; using ulong_type = conditional_t; +template struct format_as_result { + template ::value || std::is_class::value)> + static auto map(U*) -> decltype(format_as(std::declval())); + static auto map(...) -> void; + + using type = decltype(map(static_cast(nullptr))); +}; +template using format_as_t = typename format_as_result::type; + +template +struct has_format_as + : bool_constant, void>::value> {}; + // Maps formatting arguments to core types. // arg_mapper reports errors by returning unformattable instead of using // static_assert because it's used in the is_formattable trait. @@ -1317,8 +1352,12 @@ template struct arg_mapper { -> unsigned long long { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(int128_t val) -> int128_t { return val; } - FMT_CONSTEXPR FMT_INLINE auto map(uint128_t val) -> uint128_t { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(int128_opt val) -> int128_opt { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(uint128_opt val) -> uint128_opt { + return val; + } FMT_CONSTEXPR FMT_INLINE auto map(bool val) -> bool { return val; } template ::value || @@ -1363,46 +1402,6 @@ template struct arg_mapper { FMT_CONSTEXPR FMT_INLINE auto map(const T&) -> unformattable_char { return {}; } - template , T>::value && - !is_string::value && !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - return basic_string_view(val); - } - template < - typename T, - FMT_ENABLE_IF( - std::is_constructible, T>::value && - !std::is_constructible, T>::value && - !is_string::value && !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> basic_string_view { - return std_string_view(val); - } - - using cstring_result = conditional_t::value, - const char*, unformattable_pointer>; - - FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(const signed char* val) - -> cstring_result { - return map(reinterpret_cast(val)); - } - FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(const unsigned char* val) - -> cstring_result { - return map(reinterpret_cast(val)); - } - FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(signed char* val) - -> cstring_result { - return map(reinterpret_cast(val)); - } - FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(unsigned char* val) - -> cstring_result { - return map(reinterpret_cast(val)); - } FMT_CONSTEXPR FMT_INLINE auto map(void* val) -> const void* { return val; } FMT_CONSTEXPR FMT_INLINE auto map(const void* val) -> const void* { @@ -1412,15 +1411,16 @@ template struct arg_mapper { return val; } - // We use SFINAE instead of a const T* parameter to avoid conflicting with - // the C array overload. + // Use SFINAE instead of a const T* parameter to avoid a conflict with the + // array overload. template < typename T, FMT_ENABLE_IF( - std::is_member_pointer::value || + std::is_pointer::value || std::is_member_pointer::value || std::is_function::type>::value || (std::is_convertible::value && - !std::is_convertible::value))> + !std::is_convertible::value && + !has_formatter::value))> FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer { return {}; } @@ -1431,56 +1431,40 @@ template struct arg_mapper { return values; } - template ::value&& std::is_convertible::value && - !has_formatter::value && - !has_fallback_formatter::value)> - FMT_CONSTEXPR FMT_INLINE auto map(const T& val) - -> decltype(std::declval().map( - static_cast::type>(val))) { - return map(static_cast::type>(val)); - } - - FMT_CONSTEXPR FMT_INLINE auto map(detail::byte val) -> unsigned { - return map(static_cast(val)); + // Only map owning types because mapping views can be unsafe. + template , + FMT_ENABLE_IF(std::is_arithmetic::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T& val) -> decltype(this->map(U())) { + return map(format_as(val)); } - template > - struct formattable - : bool_constant() || - !std::is_const>::value || - has_fallback_formatter::value> {}; + template > + struct formattable : bool_constant() || + (has_formatter::value && + !std::is_const::value)> {}; -#if FMT_MSC_VER != 0 && FMT_MSC_VER < 1910 - // Workaround a bug in MSVC. - template FMT_CONSTEXPR FMT_INLINE auto do_map(T&& val) -> T& { - return val; - } -#else template ::value)> - FMT_CONSTEXPR FMT_INLINE auto do_map(T&& val) -> T& { + FMT_CONSTEXPR FMT_INLINE auto do_map(T& val) -> T& { return val; } template ::value)> - FMT_CONSTEXPR FMT_INLINE auto do_map(T&&) -> unformattable_const { + FMT_CONSTEXPR FMT_INLINE auto do_map(T&) -> unformattable { return {}; } -#endif - template , - FMT_ENABLE_IF(!is_string::value && !is_char::value && - !std::is_array::value && - (has_formatter::value || - has_fallback_formatter::value))> - FMT_CONSTEXPR FMT_INLINE auto map(T&& val) - -> decltype(this->do_map(std::forward(val))) { - return do_map(std::forward(val)); + template , + FMT_ENABLE_IF((std::is_class::value || std::is_enum::value || + std::is_union::value) && + !is_string::value && !is_char::value && + !is_named_arg::value && + !std::is_arithmetic>::value)> + FMT_CONSTEXPR FMT_INLINE auto map(T& val) -> decltype(this->do_map(val)) { + return do_map(val); } template ::value)> FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) - -> decltype(std::declval().map(named_arg.value)) { + -> decltype(this->map(named_arg.value)) { return map(named_arg.value); } @@ -1499,28 +1483,120 @@ enum { max_packed_args = 62 / packed_arg_bits }; enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; enum : unsigned long long { has_named_args_bit = 1ULL << 62 }; -FMT_END_DETAIL_NAMESPACE +template +auto copy_str(InputIt begin, InputIt end, appender out) -> appender { + get_container(out).append(begin, end); + return out; +} +template +auto copy_str(InputIt begin, InputIt end, + std::back_insert_iterator out) + -> std::back_insert_iterator { + get_container(out).append(begin, end); + return out; +} + +template +FMT_CONSTEXPR auto copy_str(R&& rng, OutputIt out) -> OutputIt { + return detail::copy_str(rng.begin(), rng.end(), out); +} -// An output iterator that appends to a buffer. -// It is used to reduce symbol sizes for the common case. -class appender : public std::back_insert_iterator> { - using base = std::back_insert_iterator>; +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 +// A workaround for gcc 4.8 to make void_t work in a SFINAE context. +template struct void_t_impl { using type = void; }; +template using void_t = typename void_t_impl::type; +#else +template using void_t = void; +#endif - template - friend auto get_buffer(appender out) -> detail::buffer& { - return detail::get_container(out); - } +template +struct is_output_iterator : std::false_type {}; + +template +struct is_output_iterator< + It, T, + void_t::iterator_category, + decltype(*std::declval() = std::declval())>> + : std::true_type {}; + +template struct is_back_insert_iterator : std::false_type {}; +template +struct is_back_insert_iterator> + : std::true_type {}; + +// A type-erased reference to an std::locale to avoid a heavy include. +class locale_ref { + private: + const void* locale_; // A type-erased pointer to std::locale. public: - using std::back_insert_iterator>::back_insert_iterator; - appender(base it) FMT_NOEXCEPT : base(it) {} - using _Unchecked_type = appender; // Mark iterator as checked. + constexpr FMT_INLINE locale_ref() : locale_(nullptr) {} + template explicit locale_ref(const Locale& loc); - auto operator++() FMT_NOEXCEPT -> appender& { return *this; } + explicit operator bool() const noexcept { return locale_ != nullptr; } - auto operator++(int) FMT_NOEXCEPT -> appender { return *this; } + template auto get() const -> Locale; }; +template constexpr auto encode_types() -> unsigned long long { + return 0; +} + +template +constexpr auto encode_types() -> unsigned long long { + return static_cast(mapped_type_constant::value) | + (encode_types() << packed_arg_bits); +} + +#if defined(__cpp_if_constexpr) +// This type is intentionally undefined, only used for errors +template struct type_is_unformattable_for; +#endif + +template +FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { + using arg_type = remove_cvref_t().map(val))>; + + constexpr bool formattable_char = + !std::is_same::value; + static_assert(formattable_char, "Mixing character types is disallowed."); + + // Formatting of arbitrary pointers is disallowed. If you want to format a + // pointer cast it to `void*` or `const void*`. In particular, this forbids + // formatting of `[const] volatile char*` printed as bool by iostreams. + constexpr bool formattable_pointer = + !std::is_same::value; + static_assert(formattable_pointer, + "Formatting of non-void pointers is disallowed."); + + constexpr bool formattable = !std::is_same::value; +#if defined(__cpp_if_constexpr) + if constexpr (!formattable) { + type_is_unformattable_for _; + } +#endif + static_assert( + formattable, + "Cannot format an argument. To make type T formattable provide a " + "formatter specialization: https://fmt.dev/latest/api.html#udt"); + return {arg_mapper().map(val)}; +} + +template +FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg { + auto arg = basic_format_arg(); + arg.type_ = mapped_type_constant::value; + arg.value_ = make_arg(val); + return arg; +} + +template +FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg { + return make_arg(val); +} +} // namespace detail +FMT_BEGIN_EXPORT + // A formatting argument. It is a trivially copyable/constructible type to // allow storage in basic_memory_buffer. template class basic_format_arg { @@ -1529,7 +1605,7 @@ template class basic_format_arg { detail::type type_; template - friend FMT_CONSTEXPR auto detail::make_arg(const T& value) + friend FMT_CONSTEXPR auto detail::make_arg(T& value) -> basic_format_arg; template @@ -1564,7 +1640,7 @@ template class basic_format_arg { constexpr basic_format_arg() : type_(detail::type::none_type) {} - constexpr explicit operator bool() const FMT_NOEXCEPT { + constexpr explicit operator bool() const noexcept { return type_ != detail::type::none_type; } @@ -1583,6 +1659,7 @@ template class basic_format_arg { ``vis(value)`` will be called with the value of type ``double``. \endrst */ +FMT_EXPORT template FMT_CONSTEXPR FMT_INLINE auto visit_format_arg( Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { @@ -1624,126 +1701,8 @@ FMT_CONSTEXPR FMT_INLINE auto visit_format_arg( return vis(monostate()); } -FMT_BEGIN_DETAIL_NAMESPACE - -template -auto copy_str(InputIt begin, InputIt end, appender out) -> appender { - get_container(out).append(begin, end); - return out; -} - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 -// A workaround for gcc 4.8 to make void_t work in a SFINAE context. -template struct void_t_impl { using type = void; }; -template -using void_t = typename detail::void_t_impl::type; -#else -template using void_t = void; -#endif - -template -struct is_output_iterator : std::false_type {}; - -template -struct is_output_iterator< - It, T, - void_t::iterator_category, - decltype(*std::declval() = std::declval())>> - : std::true_type {}; - -template -struct is_back_insert_iterator : std::false_type {}; -template -struct is_back_insert_iterator> - : std::true_type {}; - -template -struct is_contiguous_back_insert_iterator : std::false_type {}; -template -struct is_contiguous_back_insert_iterator> - : is_contiguous {}; -template <> -struct is_contiguous_back_insert_iterator : std::true_type {}; - -// A type-erased reference to an std::locale to avoid heavy include. -class locale_ref { - private: - const void* locale_; // A type-erased pointer to std::locale. - - public: - constexpr locale_ref() : locale_(nullptr) {} - template explicit locale_ref(const Locale& loc); - - explicit operator bool() const FMT_NOEXCEPT { return locale_ != nullptr; } - - template auto get() const -> Locale; -}; - -template constexpr auto encode_types() -> unsigned long long { - return 0; -} - -template -constexpr auto encode_types() -> unsigned long long { - return static_cast(mapped_type_constant::value) | - (encode_types() << packed_arg_bits); -} - -template -FMT_CONSTEXPR auto make_arg(const T& value) -> basic_format_arg { - basic_format_arg arg; - arg.type_ = mapped_type_constant::value; - arg.value_ = arg_mapper().map(value); - return arg; -} - -// The type template parameter is there to avoid an ODR violation when using -// a fallback formatter in one translation unit and an implicit conversion in -// another (not recommended). -template -FMT_CONSTEXPR FMT_INLINE auto make_arg(T&& val) -> value { - const auto& arg = arg_mapper().map(std::forward(val)); - - constexpr bool formattable_char = - !std::is_same::value; - static_assert(formattable_char, "Mixing character types is disallowed."); - - constexpr bool formattable_const = - !std::is_same::value; - static_assert(formattable_const, "Cannot format a const argument."); - - // Formatting of arbitrary pointers is disallowed. If you want to output - // a pointer cast it to "void *" or "const void *". In particular, this - // forbids formatting of "[const] volatile char *" which is printed as bool - // by iostreams. - constexpr bool formattable_pointer = - !std::is_same::value; - static_assert(formattable_pointer, - "Formatting of non-void pointers is disallowed."); - - constexpr bool formattable = - !std::is_same::value; - static_assert( - formattable, - "Cannot format an argument. To make type T formattable provide a " - "formatter specialization: https://fmt.dev/latest/api.html#udt"); - return {arg}; -} - -template -inline auto make_arg(const T& value) -> basic_format_arg { - return make_arg(value); -} -FMT_END_DETAIL_NAMESPACE - // Formatting context. template class basic_format_context { - public: - /** The character type for the output. */ - using char_type = Char; - private: OutputIt out_; basic_format_args args_; @@ -1752,31 +1711,32 @@ template class basic_format_context { public: using iterator = OutputIt; using format_arg = basic_format_arg; + using format_args = basic_format_args; using parse_context_type = basic_format_parse_context; - template using formatter_type = formatter; + template using formatter_type = formatter; + + /** The character type for the output. */ + using char_type = Char; basic_format_context(basic_format_context&&) = default; basic_format_context(const basic_format_context&) = delete; void operator=(const basic_format_context&) = delete; /** - Constructs a ``basic_format_context`` object. References to the arguments are - stored in the object so make sure they have appropriate lifetimes. + Constructs a ``basic_format_context`` object. References to the arguments + are stored in the object so make sure they have appropriate lifetimes. */ - constexpr basic_format_context( - OutputIt out, basic_format_args ctx_args, - detail::locale_ref loc = detail::locale_ref()) + constexpr basic_format_context(OutputIt out, format_args ctx_args, + detail::locale_ref loc = {}) : out_(out), args_(ctx_args), loc_(loc) {} constexpr auto arg(int id) const -> format_arg { return args_.get(id); } - FMT_CONSTEXPR auto arg(basic_string_view name) -> format_arg { + FMT_CONSTEXPR auto arg(basic_string_view name) -> format_arg { return args_.get(name); } - FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { + FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { return args_.get_id(name); } - auto args() const -> const basic_format_args& { - return args_; - } + auto args() const -> const format_args& { return args_; } FMT_CONSTEXPR auto error_handler() -> detail::error_handler { return {}; } void on_error(const char* message) { error_handler().on_error(message); } @@ -1797,16 +1757,10 @@ using buffer_context = basic_format_context, Char>; using format_context = buffer_context; -// Workaround an alias issue: https://stackoverflow.com/q/62767544/471164. -#define FMT_BUFFER_CONTEXT(Char) \ - basic_format_context, Char> - template -using is_formattable = bool_constant< - !std::is_base_of>().map( - std::declval()))>::value && - !detail::has_fallback_formatter::value>; +using is_formattable = bool_constant>() + .map(std::declval()))>::value>; /** \rst @@ -1824,7 +1778,7 @@ class format_arg_store { private: static const size_t num_args = sizeof...(Args); - static const size_t num_named_args = detail::count_named_args(); + static constexpr size_t num_named_args = detail::count_named_args(); static const bool is_packed = num_args <= detail::max_packed_args; using value_type = conditional_t, @@ -1845,16 +1799,14 @@ class format_arg_store public: template - FMT_CONSTEXPR FMT_INLINE format_arg_store(T&&... args) + FMT_CONSTEXPR FMT_INLINE format_arg_store(T&... args) : #if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 basic_format_args(*this), #endif - data_{detail::make_arg< - is_packed, Context, - detail::mapped_type_constant, Context>::value>( - std::forward(args))...} { - detail::init_named_args(data_.named_args(), 0, 0, args...); + data_{detail::make_arg(args)...} { + if (detail::const_check(num_named_args != 0)) + detail::init_named_args(data_.named_args(), 0, 0, args...); } }; @@ -1862,14 +1814,15 @@ class format_arg_store \rst Constructs a `~fmt::format_arg_store` object that contains references to arguments and can be implicitly converted to `~fmt::format_args`. `Context` - can be omitted in which case it defaults to `~fmt::context`. + can be omitted in which case it defaults to `~fmt::format_context`. See `~fmt::arg` for lifetime considerations. \endrst */ -template -constexpr auto make_format_args(Args&&... args) - -> format_arg_store...> { - return {std::forward(args)...}; +// Arguments are taken by lvalue references to avoid some lifetime issues. +template +constexpr auto make_format_args(T&... args) + -> format_arg_store...> { + return {args...}; } /** @@ -1888,6 +1841,7 @@ inline auto arg(const Char* name, const T& arg) -> detail::named_arg { static_assert(!detail::is_named_arg(), "nested named arguments"); return {name, arg}; } +FMT_END_EXPORT /** \rst @@ -1896,7 +1850,7 @@ inline auto arg(const Char* name, const T& arg) -> detail::named_arg { ``vformat``:: void vlog(string_view format_str, format_args args); // OK - format_args args = make_format_args(42); // Error: dangling reference + format_args args = make_format_args(); // Error: dangling reference \endrst */ template class basic_format_args { @@ -2013,20 +1967,28 @@ template class basic_format_args { /** An alias to ``basic_format_args``. */ // A separate type would result in shorter symbols but break ABI compatibility // between clang and gcc on ARM (#1919). -using format_args = basic_format_args; - -// We cannot use enum classes as bit fields because of a gcc bug -// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414. +FMT_EXPORT using format_args = basic_format_args; + +// We cannot use enum classes as bit fields because of a gcc bug, so we put them +// in namespaces instead (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414). +// Additionally, if an underlying type is specified, older gcc incorrectly warns +// that the type is too small. Both bugs are fixed in gcc 9.3. +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 903 +# define FMT_ENUM_UNDERLYING_TYPE(type) +#else +# define FMT_ENUM_UNDERLYING_TYPE(type) : type +#endif namespace align { -enum type { none, left, right, center, numeric }; +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, left, right, center, + numeric}; } using align_t = align::type; namespace sign { -enum type { none, minus, plus, space }; +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, minus, plus, space}; } using sign_t = sign::type; -FMT_BEGIN_DETAIL_NAMESPACE +namespace detail { // Workaround an array initialization issue in gcc 4.8. template struct fill_t { @@ -2038,7 +2000,7 @@ template struct fill_t { public: FMT_CONSTEXPR void operator=(basic_string_view s) { auto size = s.size(); - if (size > max_size) return throw_format_error("invalid fill"); + FMT_ASSERT(size <= max_size, "invalid fill"); for (size_t i = 0; i < size; ++i) data_[i] = s[i]; size_ = static_cast(size); } @@ -2051,11 +2013,10 @@ template struct fill_t { return data_[index]; } }; -FMT_END_DETAIL_NAMESPACE +} // namespace detail enum class presentation_type : unsigned char { none, - // Integer types should go first, dec, // 'd' oct, // 'o' hex_lower, // 'x' @@ -2072,11 +2033,12 @@ enum class presentation_type : unsigned char { general_upper, // 'G' chr, // 'c' string, // 's' - pointer // 'p' + pointer, // 'p' + debug // '?' }; // Format specifiers for built-in and string types. -template struct basic_format_specs { +template struct format_specs { int width; int precision; presentation_type type; @@ -2086,7 +2048,7 @@ template struct basic_format_specs { bool localized : 1; detail::fill_t fill; - constexpr basic_format_specs() + constexpr format_specs() : width(0), precision(-1), type(presentation_type::none), @@ -2096,9 +2058,7 @@ template struct basic_format_specs { localized(false) {} }; -using format_specs = basic_format_specs; - -FMT_BEGIN_DETAIL_NAMESPACE +namespace detail { enum class arg_id_kind { none, index, name }; @@ -2119,7 +2079,7 @@ template struct arg_ref { arg_id_kind kind; union value { - FMT_CONSTEXPR value(int id = 0) : index{id} {} + FMT_CONSTEXPR value(int idx = 0) : index(idx) {} FMT_CONSTEXPR value(basic_string_view n) : name(n) {} int index; @@ -2128,129 +2088,30 @@ template struct arg_ref { }; // Format specifiers with width and precision resolved at formatting rather -// than parsing time to allow re-using the same parsed specifiers with +// than parsing time to allow reusing the same parsed specifiers with // different sets of arguments (precompilation of format strings). -template -struct dynamic_format_specs : basic_format_specs { +template +struct dynamic_format_specs : format_specs { arg_ref width_ref; arg_ref precision_ref; }; -struct auto_id {}; - -// A format specifier handler that sets fields in basic_format_specs. -template class specs_setter { - protected: - basic_format_specs& specs_; - - public: - explicit FMT_CONSTEXPR specs_setter(basic_format_specs& specs) - : specs_(specs) {} - - FMT_CONSTEXPR specs_setter(const specs_setter& other) - : specs_(other.specs_) {} - - FMT_CONSTEXPR void on_align(align_t align) { specs_.align = align; } - FMT_CONSTEXPR void on_fill(basic_string_view fill) { - specs_.fill = fill; - } - FMT_CONSTEXPR void on_sign(sign_t s) { specs_.sign = s; } - FMT_CONSTEXPR void on_hash() { specs_.alt = true; } - FMT_CONSTEXPR void on_localized() { specs_.localized = true; } - - FMT_CONSTEXPR void on_zero() { - if (specs_.align == align::none) specs_.align = align::numeric; - specs_.fill[0] = Char('0'); - } - - FMT_CONSTEXPR void on_width(int width) { specs_.width = width; } - FMT_CONSTEXPR void on_precision(int precision) { - specs_.precision = precision; - } - FMT_CONSTEXPR void end_precision() {} - - FMT_CONSTEXPR void on_type(presentation_type type) { specs_.type = type; } -}; - -// Format spec handler that saves references to arguments representing dynamic -// width and precision to be resolved at formatting time. -template -class dynamic_specs_handler - : public specs_setter { - public: - using char_type = typename ParseContext::char_type; - - FMT_CONSTEXPR dynamic_specs_handler(dynamic_format_specs& specs, - ParseContext& ctx) - : specs_setter(specs), specs_(specs), context_(ctx) {} - - FMT_CONSTEXPR dynamic_specs_handler(const dynamic_specs_handler& other) - : specs_setter(other), - specs_(other.specs_), - context_(other.context_) {} - - template FMT_CONSTEXPR void on_dynamic_width(Id arg_id) { - specs_.width_ref = make_arg_ref(arg_id); - } - - template FMT_CONSTEXPR void on_dynamic_precision(Id arg_id) { - specs_.precision_ref = make_arg_ref(arg_id); - } - - FMT_CONSTEXPR void on_error(const char* message) { - context_.on_error(message); - } - - private: - dynamic_format_specs& specs_; - ParseContext& context_; - - using arg_ref_type = arg_ref; - - FMT_CONSTEXPR auto make_arg_ref(int arg_id) -> arg_ref_type { - context_.check_arg_id(arg_id); - return arg_ref_type(arg_id); - } - - FMT_CONSTEXPR auto make_arg_ref(auto_id) -> arg_ref_type { - return arg_ref_type(context_.next_arg_id()); - } - - FMT_CONSTEXPR auto make_arg_ref(basic_string_view arg_id) - -> arg_ref_type { - context_.check_arg_id(arg_id); - basic_string_view format_str( - context_.begin(), to_unsigned(context_.end() - context_.begin())); - return arg_ref_type(arg_id); - } -}; - -template constexpr bool is_ascii_letter(Char c) { - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} - -// Converts a character to ASCII. Returns a number > 127 on conversion failure. +// Converts a character to ASCII. Returns '\0' on conversion failure. template ::value)> -constexpr auto to_ascii(Char value) -> Char { - return value; +constexpr auto to_ascii(Char c) -> char { + return c <= 0xff ? static_cast(c) : '\0'; } template ::value)> -constexpr auto to_ascii(Char value) -> - typename std::underlying_type::type { - return value; +constexpr auto to_ascii(Char c) -> char { + return c <= 0xff ? static_cast(c) : '\0'; } +// Returns the number of code units in a code point or 1 on error. template FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int { if (const_check(sizeof(Char) != 1)) return 1; - auto lengths = - "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\2\2\2\2\3\3\4"; - int len = lengths[static_cast(*begin) >> 3]; - - // Compute the pointer to the next character early so that the next - // iteration can start working on the next character. Neither Clang - // nor GCC figure out this reordering on their own. - return len + !len; + auto c = static_cast(*begin); + return static_cast((0x3a55000000000000ull >> (2 * (c >> 3))) & 0x3) + 1; } // Return the result via the out param to workaround gcc bug 77539. @@ -2295,277 +2156,284 @@ FMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end, : error_value; } -// Parses fill and alignment. -template -FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - FMT_ASSERT(begin != end, ""); - auto align = align::none; - auto p = begin + code_point_length(begin); - if (p >= end) p = begin; - for (;;) { - switch (to_ascii(*p)) { - case '<': - align = align::left; - break; - case '>': - align = align::right; - break; - case '^': - align = align::center; - break; - default: - break; - } - if (align != align::none) { - if (p != begin) { - auto c = *begin; - if (c == '{') - return handler.on_error("invalid fill character '{'"), begin; - handler.on_fill(basic_string_view(begin, to_unsigned(p - begin))); - begin = p + 1; - } else - ++begin; - handler.on_align(align); - break; - } else if (p == begin) { - break; - } - p = begin; +FMT_CONSTEXPR inline auto parse_align(char c) -> align_t { + switch (c) { + case '<': + return align::left; + case '>': + return align::right; + case '^': + return align::center; } - return begin; + return align::none; } -template FMT_CONSTEXPR bool is_name_start(Char c) { - return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || '_' == c; +template constexpr auto is_name_start(Char c) -> bool { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_'; } -template +template FMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end, - IDHandler&& handler) -> const Char* { - FMT_ASSERT(begin != end, ""); + Handler&& handler) -> const Char* { Char c = *begin; if (c >= '0' && c <= '9') { int index = 0; + constexpr int max = (std::numeric_limits::max)(); if (c != '0') - index = - parse_nonnegative_int(begin, end, (std::numeric_limits::max)()); + index = parse_nonnegative_int(begin, end, max); else ++begin; if (begin == end || (*begin != '}' && *begin != ':')) - handler.on_error("invalid format string"); + throw_format_error("invalid format string"); else - handler(index); + handler.on_index(index); return begin; } if (!is_name_start(c)) { - handler.on_error("invalid format string"); + throw_format_error("invalid format string"); return begin; } auto it = begin; do { ++it; - } while (it != end && (is_name_start(c = *it) || ('0' <= c && c <= '9'))); - handler(basic_string_view(begin, to_unsigned(it - begin))); + } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9'))); + handler.on_name({begin, to_unsigned(it - begin)}); return it; } -template +template FMT_CONSTEXPR FMT_INLINE auto parse_arg_id(const Char* begin, const Char* end, - IDHandler&& handler) -> const Char* { + Handler&& handler) -> const Char* { + FMT_ASSERT(begin != end, ""); Char c = *begin; if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler); - handler(); + handler.on_auto(); return begin; } -template -FMT_CONSTEXPR auto parse_width(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - using detail::auto_id; - struct width_adapter { - Handler& handler; +template struct dynamic_spec_id_handler { + basic_format_parse_context& ctx; + arg_ref& ref; - FMT_CONSTEXPR void operator()() { handler.on_dynamic_width(auto_id()); } - FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_width(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { - handler.on_dynamic_width(id); - } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } - }; + FMT_CONSTEXPR void on_auto() { + int id = ctx.next_arg_id(); + ref = arg_ref(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_index(int id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_name(basic_string_view id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + } +}; +// Parses [integer | "{" [arg_id] "}"]. +template +FMT_CONSTEXPR auto parse_dynamic_spec(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) + -> const Char* { FMT_ASSERT(begin != end, ""); if ('0' <= *begin && *begin <= '9') { - int width = parse_nonnegative_int(begin, end, -1); - if (width != -1) - handler.on_width(width); + int val = parse_nonnegative_int(begin, end, -1); + if (val != -1) + value = val; else - handler.on_error("number is too big"); + throw_format_error("number is too big"); } else if (*begin == '{') { ++begin; - if (begin != end) begin = parse_arg_id(begin, end, width_adapter{handler}); - if (begin == end || *begin != '}') - return handler.on_error("invalid format string"), begin; - ++begin; - } - return begin; -} - -template -FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, - Handler&& handler) -> const Char* { - using detail::auto_id; - struct precision_adapter { - Handler& handler; - - FMT_CONSTEXPR void operator()() { handler.on_dynamic_precision(auto_id()); } - FMT_CONSTEXPR void operator()(int id) { handler.on_dynamic_precision(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { - handler.on_dynamic_precision(id); - } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } - }; - - ++begin; - auto c = begin != end ? *begin : Char(); - if ('0' <= c && c <= '9') { - auto precision = parse_nonnegative_int(begin, end, -1); - if (precision != -1) - handler.on_precision(precision); - else - handler.on_error("number is too big"); - } else if (c == '{') { - ++begin; - if (begin != end) - begin = parse_arg_id(begin, end, precision_adapter{handler}); - if (begin == end || *begin++ != '}') - return handler.on_error("invalid format string"), begin; - } else { - return handler.on_error("missing precision specifier"), begin; + auto handler = dynamic_spec_id_handler{ctx, ref}; + if (begin != end) begin = parse_arg_id(begin, end, handler); + if (begin != end && *begin == '}') return ++begin; + throw_format_error("invalid format string"); } - handler.end_precision(); return begin; } template -FMT_CONSTEXPR auto parse_presentation_type(Char type) -> presentation_type { - switch (to_ascii(type)) { - case 'd': - return presentation_type::dec; - case 'o': - return presentation_type::oct; - case 'x': - return presentation_type::hex_lower; - case 'X': - return presentation_type::hex_upper; - case 'b': - return presentation_type::bin_lower; - case 'B': - return presentation_type::bin_upper; - case 'a': - return presentation_type::hexfloat_lower; - case 'A': - return presentation_type::hexfloat_upper; - case 'e': - return presentation_type::exp_lower; - case 'E': - return presentation_type::exp_upper; - case 'f': - return presentation_type::fixed_lower; - case 'F': - return presentation_type::fixed_upper; - case 'g': - return presentation_type::general_lower; - case 'G': - return presentation_type::general_upper; - case 'c': - return presentation_type::chr; - case 's': - return presentation_type::string; - case 'p': - return presentation_type::pointer; - default: - return presentation_type::none; - } -} - -// Parses standard format specifiers and sends notifications about parsed -// components to handler. -template -FMT_CONSTEXPR FMT_INLINE auto parse_format_specs(const Char* begin, - const Char* end, - SpecHandler&& handler) +FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) -> const Char* { - if (1 < end - begin && begin[1] == '}' && is_ascii_letter(*begin) && - *begin != 'L') { - presentation_type type = parse_presentation_type(*begin++); - if (type == presentation_type::none) - handler.on_error("invalid type specifier"); - handler.on_type(type); + ++begin; + if (begin == end || *begin == '}') { + throw_format_error("invalid precision"); return begin; } + return parse_dynamic_spec(begin, end, value, ref, ctx); +} - if (begin == end) return begin; - - begin = parse_align(begin, end, handler); - if (begin == end) return begin; - - // Parse sign. - switch (to_ascii(*begin)) { - case '+': - handler.on_sign(sign::plus); - ++begin; - break; - case '-': - handler.on_sign(sign::minus); - ++begin; - break; - case ' ': - handler.on_sign(sign::space); - ++begin; - break; - default: - break; - } - if (begin == end) return begin; - - if (*begin == '#') { - handler.on_hash(); - if (++begin == end) return begin; - } - - // Parse zero flag. - if (*begin == '0') { - handler.on_zero(); - if (++begin == end) return begin; - } - - begin = parse_width(begin, end, handler); - if (begin == end) return begin; +enum class state { start, align, sign, hash, zero, width, precision, locale }; - // Parse precision. - if (*begin == '.') { - begin = parse_precision(begin, end, handler); +// Parses standard format specifiers. +template +FMT_CONSTEXPR FMT_INLINE auto parse_format_specs( + const Char* begin, const Char* end, dynamic_format_specs& specs, + basic_format_parse_context& ctx, type arg_type) -> const Char* { + auto c = '\0'; + if (end - begin > 1) { + auto next = to_ascii(begin[1]); + c = parse_align(next) == align::none ? to_ascii(*begin) : '\0'; + } else { if (begin == end) return begin; + c = to_ascii(*begin); } - if (*begin == 'L') { - handler.on_localized(); - ++begin; - } + struct { + state current_state = state::start; + FMT_CONSTEXPR void operator()(state s, bool valid = true) { + if (current_state >= s || !valid) + throw_format_error("invalid format specifier"); + current_state = s; + } + } enter_state; + + using pres = presentation_type; + constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; + struct { + const Char*& begin; + dynamic_format_specs& specs; + type arg_type; + + FMT_CONSTEXPR auto operator()(pres type, int set) -> const Char* { + if (!in(arg_type, set)) throw_format_error("invalid format specifier"); + specs.type = type; + return begin + 1; + } + } parse_presentation_type{begin, specs, arg_type}; - // Parse type. - if (begin != end && *begin != '}') { - presentation_type type = parse_presentation_type(*begin++); - if (type == presentation_type::none) - handler.on_error("invalid type specifier"); - handler.on_type(type); + for (;;) { + switch (c) { + case '<': + case '>': + case '^': + enter_state(state::align); + specs.align = parse_align(c); + ++begin; + break; + case '+': + case '-': + case ' ': + enter_state(state::sign, in(arg_type, sint_set | float_set)); + switch (c) { + case '+': + specs.sign = sign::plus; + break; + case '-': + specs.sign = sign::minus; + break; + case ' ': + specs.sign = sign::space; + break; + } + ++begin; + break; + case '#': + enter_state(state::hash, is_arithmetic_type(arg_type)); + specs.alt = true; + ++begin; + break; + case '0': + enter_state(state::zero); + if (!is_arithmetic_type(arg_type)) + throw_format_error("format specifier requires numeric argument"); + if (specs.align == align::none) { + // Ignore 0 if align is specified for compatibility with std::format. + specs.align = align::numeric; + specs.fill[0] = Char('0'); + } + ++begin; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '{': + enter_state(state::width); + begin = parse_dynamic_spec(begin, end, specs.width, specs.width_ref, ctx); + break; + case '.': + enter_state(state::precision, + in(arg_type, float_set | string_set | cstring_set)); + begin = parse_precision(begin, end, specs.precision, specs.precision_ref, + ctx); + break; + case 'L': + enter_state(state::locale, is_arithmetic_type(arg_type)); + specs.localized = true; + ++begin; + break; + case 'd': + return parse_presentation_type(pres::dec, integral_set); + case 'o': + return parse_presentation_type(pres::oct, integral_set); + case 'x': + return parse_presentation_type(pres::hex_lower, integral_set); + case 'X': + return parse_presentation_type(pres::hex_upper, integral_set); + case 'b': + return parse_presentation_type(pres::bin_lower, integral_set); + case 'B': + return parse_presentation_type(pres::bin_upper, integral_set); + case 'a': + return parse_presentation_type(pres::hexfloat_lower, float_set); + case 'A': + return parse_presentation_type(pres::hexfloat_upper, float_set); + case 'e': + return parse_presentation_type(pres::exp_lower, float_set); + case 'E': + return parse_presentation_type(pres::exp_upper, float_set); + case 'f': + return parse_presentation_type(pres::fixed_lower, float_set); + case 'F': + return parse_presentation_type(pres::fixed_upper, float_set); + case 'g': + return parse_presentation_type(pres::general_lower, float_set); + case 'G': + return parse_presentation_type(pres::general_upper, float_set); + case 'c': + return parse_presentation_type(pres::chr, integral_set); + case 's': + return parse_presentation_type(pres::string, + bool_set | string_set | cstring_set); + case 'p': + return parse_presentation_type(pres::pointer, pointer_set | cstring_set); + case '?': + return parse_presentation_type(pres::debug, + char_set | string_set | cstring_set); + case '}': + return begin; + default: { + if (*begin == '}') return begin; + // Parse fill and alignment. + auto fill_end = begin + code_point_length(begin); + if (end - fill_end <= 0) { + throw_format_error("invalid format specifier"); + return begin; + } + if (*begin == '{') { + throw_format_error("invalid fill character '{'"); + return begin; + } + auto align = parse_align(to_ascii(*fill_end)); + enter_state(state::align, align != align::none); + specs.fill = {begin, to_unsigned(fill_end - begin)}; + specs.align = align; + begin = fill_end + 1; + } + } + if (begin == end) return begin; + c = to_ascii(*begin); } - return begin; } template @@ -2575,14 +2443,11 @@ FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, Handler& handler; int arg_id; - FMT_CONSTEXPR void operator()() { arg_id = handler.on_arg_id(); } - FMT_CONSTEXPR void operator()(int id) { arg_id = handler.on_arg_id(id); } - FMT_CONSTEXPR void operator()(basic_string_view id) { + FMT_CONSTEXPR void on_auto() { arg_id = handler.on_arg_id(); } + FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); } + FMT_CONSTEXPR void on_name(basic_string_view id) { arg_id = handler.on_arg_id(id); } - FMT_CONSTEXPR void on_error(const char* message) { - if (message) handler.on_error(message); - } }; ++begin; @@ -2611,9 +2476,6 @@ FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, template FMT_CONSTEXPR FMT_INLINE void parse_format_string( basic_string_view format_str, Handler&& handler) { - // Workaround a name-lookup bug in MSVC's modules implementation. - using detail::find; - auto begin = format_str.data(); auto end = begin + format_str.size(); if (end - begin < 32) { @@ -2635,21 +2497,21 @@ FMT_CONSTEXPR FMT_INLINE void parse_format_string( return; } struct writer { - FMT_CONSTEXPR void operator()(const Char* pbegin, const Char* pend) { - if (pbegin == pend) return; + FMT_CONSTEXPR void operator()(const Char* from, const Char* to) { + if (from == to) return; for (;;) { const Char* p = nullptr; - if (!find(pbegin, pend, Char('}'), p)) - return handler_.on_text(pbegin, pend); + if (!find(from, to, Char('}'), p)) + return handler_.on_text(from, to); ++p; - if (p == pend || *p != '}') + if (p == to || *p != '}') return handler_.on_error("unmatched '}' in format string"); - handler_.on_text(pbegin, p); - pbegin = p + 1; + handler_.on_text(from, p); + from = p + 1; } } Handler& handler_; - } write{handler}; + } write = {handler}; while (begin != end) { // Doing two passes with memchr (one for '{' and another for '}') is up to // 2.5x faster than the naive one-pass implementation on big format strings. @@ -2661,6 +2523,13 @@ FMT_CONSTEXPR FMT_INLINE void parse_format_string( } } +template ::value> struct strip_named_arg { + using type = T; +}; +template struct strip_named_arg { + using type = remove_cvref_t; +}; + template FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) -> decltype(ctx.begin()) { @@ -2668,242 +2537,77 @@ FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) using context = buffer_context; using mapped_type = conditional_t< mapped_type_constant::value != type::custom_type, - decltype(arg_mapper().map(std::declval())), T>; - auto f = conditional_t::value, - formatter, - fallback_formatter>(); - return f.parse(ctx); -} - -// A parse context with extra argument id checks. It is only used at compile -// time because adding checks at runtime would introduce substantial overhead -// and would be redundant since argument ids are checked when arguments are -// retrieved anyway. -template -class compile_parse_context - : public basic_format_parse_context { - private: - int num_args_; - using base = basic_format_parse_context; - - public: - explicit FMT_CONSTEXPR compile_parse_context( - basic_string_view format_str, - int num_args = (std::numeric_limits::max)(), ErrorHandler eh = {}) - : base(format_str, eh), num_args_(num_args) {} - - FMT_CONSTEXPR auto next_arg_id() -> int { - int id = base::next_arg_id(); - if (id >= num_args_) this->on_error("argument not found"); - return id; - } - - FMT_CONSTEXPR void check_arg_id(int id) { - base::check_arg_id(id); - if (id >= num_args_) this->on_error("argument not found"); + decltype(arg_mapper().map(std::declval())), + typename strip_named_arg::type>; +#if defined(__cpp_if_constexpr) + if constexpr (std::is_default_constructible_v< + formatter>) { + return formatter().parse(ctx); + } else { + type_is_unformattable_for _; + return ctx.begin(); } - using base::check_arg_id; -}; - -template -FMT_CONSTEXPR void check_int_type_spec(presentation_type type, - ErrorHandler&& eh) { - if (type > presentation_type::bin_upper && type != presentation_type::chr) - eh.on_error("invalid type specifier"); +#else + return formatter().parse(ctx); +#endif } -// Checks char specs and returns true if the type spec is char (and not int). -template -FMT_CONSTEXPR auto check_char_specs(const basic_format_specs& specs, - ErrorHandler&& eh = {}) -> bool { +// Checks char specs and returns true iff the presentation type is char-like. +template +FMT_CONSTEXPR auto check_char_specs(const format_specs& specs) -> bool { if (specs.type != presentation_type::none && - specs.type != presentation_type::chr) { - check_int_type_spec(specs.type, eh); + specs.type != presentation_type::chr && + specs.type != presentation_type::debug) { return false; } if (specs.align == align::numeric || specs.sign != sign::none || specs.alt) - eh.on_error("invalid format specifier for char"); + throw_format_error("invalid format specifier for char"); return true; } -// A floating-point presentation format. -enum class float_format : unsigned char { - general, // General: exponent notation or fixed point based on magnitude. - exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. - fixed, // Fixed point with the default precision of 6, e.g. 0.0012. - hex -}; - -struct float_specs { - int precision; - float_format format : 8; - sign_t sign : 8; - bool upper : 1; - bool locale : 1; - bool binary32 : 1; - bool fallback : 1; - bool showpoint : 1; -}; - -template -FMT_CONSTEXPR auto parse_float_type_spec(const basic_format_specs& specs, - ErrorHandler&& eh = {}) - -> float_specs { - auto result = float_specs(); - result.showpoint = specs.alt; - result.locale = specs.localized; - switch (specs.type) { - case presentation_type::none: - result.format = float_format::general; - break; - case presentation_type::general_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::general_lower: - result.format = float_format::general; - break; - case presentation_type::exp_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::exp_lower: - result.format = float_format::exp; - result.showpoint |= specs.precision != 0; - break; - case presentation_type::fixed_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::fixed_lower: - result.format = float_format::fixed; - result.showpoint |= specs.precision != 0; - break; - case presentation_type::hexfloat_upper: - result.upper = true; - FMT_FALLTHROUGH; - case presentation_type::hexfloat_lower: - result.format = float_format::hex; - break; - default: - eh.on_error("invalid type specifier"); - break; - } - return result; -} - -template -FMT_CONSTEXPR auto check_cstring_type_spec(presentation_type type, - ErrorHandler&& eh = {}) -> bool { - if (type == presentation_type::none || type == presentation_type::string) - return true; - if (type != presentation_type::pointer) eh.on_error("invalid type specifier"); - return false; -} - -template -FMT_CONSTEXPR void check_string_type_spec(presentation_type type, - ErrorHandler&& eh = {}) { - if (type != presentation_type::none && type != presentation_type::string) - eh.on_error("invalid type specifier"); -} - -template -FMT_CONSTEXPR void check_pointer_type_spec(presentation_type type, - ErrorHandler&& eh) { - if (type != presentation_type::none && type != presentation_type::pointer) - eh.on_error("invalid type specifier"); -} - -// A parse_format_specs handler that checks if specifiers are consistent with -// the argument type. -template class specs_checker : public Handler { - private: - detail::type arg_type_; - - FMT_CONSTEXPR void require_numeric_argument() { - if (!is_arithmetic_type(arg_type_)) - this->on_error("format specifier requires numeric argument"); - } - - public: - FMT_CONSTEXPR specs_checker(const Handler& handler, detail::type arg_type) - : Handler(handler), arg_type_(arg_type) {} - - FMT_CONSTEXPR void on_align(align_t align) { - if (align == align::numeric) require_numeric_argument(); - Handler::on_align(align); - } - - FMT_CONSTEXPR void on_sign(sign_t s) { - require_numeric_argument(); - if (is_integral_type(arg_type_) && arg_type_ != type::int_type && - arg_type_ != type::long_long_type && arg_type_ != type::char_type) { - this->on_error("format specifier requires signed argument"); - } - Handler::on_sign(s); - } - - FMT_CONSTEXPR void on_hash() { - require_numeric_argument(); - Handler::on_hash(); - } - - FMT_CONSTEXPR void on_localized() { - require_numeric_argument(); - Handler::on_localized(); - } - - FMT_CONSTEXPR void on_zero() { - require_numeric_argument(); - Handler::on_zero(); - } - - FMT_CONSTEXPR void end_precision() { - if (is_integral_type(arg_type_) || arg_type_ == type::pointer_type) - this->on_error("precision not allowed for this argument type"); - } -}; - -constexpr int invalid_arg_index = -1; - -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS +#if FMT_USE_NONTYPE_TEMPLATE_ARGS template constexpr auto get_arg_index_by_name(basic_string_view name) -> int { - if constexpr (detail::is_statically_named_arg()) { + if constexpr (is_statically_named_arg()) { if (name == T::name) return N; } if constexpr (sizeof...(Args) > 0) return get_arg_index_by_name(name); (void)name; // Workaround an MSVC bug about "unused" parameter. - return invalid_arg_index; + return -1; } #endif template FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view name) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS +#if FMT_USE_NONTYPE_TEMPLATE_ARGS if constexpr (sizeof...(Args) > 0) return get_arg_index_by_name<0, Args...>(name); #endif (void)name; - return invalid_arg_index; + return -1; } -template -class format_string_checker { +template class format_string_checker { private: - using parse_context_type = compile_parse_context; - enum { num_args = sizeof...(Args) }; + using parse_context_type = compile_parse_context; + static constexpr int num_args = sizeof...(Args); // Format specifier parsing function. + // In the future basic_format_parse_context will replace compile_parse_context + // here and will use is_constant_evaluated and downcasting to access the data + // needed for compile-time checks: https://godbolt.org/z/GvWzcTjh1. using parse_func = const Char* (*)(parse_context_type&); parse_context_type context_; - parse_func parse_funcs_[num_args > 0 ? num_args : 1]; + parse_func parse_funcs_[num_args > 0 ? static_cast(num_args) : 1]; + type types_[num_args > 0 ? static_cast(num_args) : 1]; public: - explicit FMT_CONSTEXPR format_string_checker( - basic_string_view format_str, ErrorHandler eh) - : context_(format_str, num_args, eh), - parse_funcs_{&parse_format_specs...} {} + explicit FMT_CONSTEXPR format_string_checker(basic_string_view fmt) + : context_(fmt, num_args, types_), + parse_funcs_{&parse_format_specs...}, + types_{mapped_type_constant>::value...} {} FMT_CONSTEXPR void on_text(const Char*, const Char*) {} @@ -2912,10 +2616,10 @@ class format_string_checker { return context_.check_arg_id(id), id; } FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS +#if FMT_USE_NONTYPE_TEMPLATE_ARGS auto index = get_arg_index_by_name(id); - if (index == invalid_arg_index) on_error("named argument is not found"); - return context_.check_arg_id(index), index; + if (index < 0) on_error("named argument is not found"); + return index; #else (void)id; on_error("compile-time checks for named arguments require C++20 support"); @@ -2927,41 +2631,55 @@ class format_string_checker { FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*) -> const Char* { - context_.advance_to(context_.begin() + (begin - &*context_.begin())); + context_.advance_to(begin); // id >= 0 check is a workaround for gcc 10 bug (#2065). return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; } FMT_CONSTEXPR void on_error(const char* message) { - context_.on_error(message); + throw_format_error(message); } }; +// Reports a compile-time error if S is not a valid format string. +template ::value)> +FMT_INLINE void check_format_string(const S&) { +#ifdef FMT_ENFORCE_COMPILE_STRING + static_assert(is_compile_string::value, + "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " + "FMT_STRING."); +#endif +} template ::value), int>> + FMT_ENABLE_IF(is_compile_string::value)> void check_format_string(S format_str) { - FMT_CONSTEXPR auto s = to_string_view(format_str); - using checker = format_string_checker...>; - FMT_CONSTEXPR bool invalid_format = - (parse_format_string(s, checker(s, {})), true); - ignore_unused(invalid_format); + using char_t = typename S::char_type; + FMT_CONSTEXPR auto s = basic_string_view(format_str); + using checker = format_string_checker...>; + FMT_CONSTEXPR bool error = (parse_format_string(s, checker(s)), true); + ignore_unused(error); } +template struct vformat_args { + using type = basic_format_args< + basic_format_context>, Char>>; +}; +template <> struct vformat_args { using type = format_args; }; + +// Use vformat_args and avoid type_identity to keep symbols short. template -void vformat_to( - buffer& buf, basic_string_view fmt, - basic_format_args)> args, - locale_ref loc = {}); +void vformat_to(buffer& buf, basic_string_view fmt, + typename vformat_args::type args, locale_ref loc = {}); FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); #ifndef _WIN32 inline void vprint_mojibake(std::FILE*, string_view, format_args) {} #endif -FMT_END_DETAIL_NAMESPACE +} // namespace detail -// A formatter specialization for the core types corresponding to detail::type -// constants. +FMT_BEGIN_EXPORT + +// A formatter specialization for natively supported types. template struct formatter::value != @@ -2970,72 +2688,21 @@ struct formatter specs_; public: - // Parses format specifiers stopping either at the end of the range or at the - // terminating '}'. template - FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { - auto begin = ctx.begin(), end = ctx.end(); - if (begin == end) return begin; - using handler_type = detail::dynamic_specs_handler; + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { auto type = detail::type_constant::value; - auto checker = - detail::specs_checker(handler_type(specs_, ctx), type); - auto it = detail::parse_format_specs(begin, end, checker); - auto eh = ctx.error_handler(); - switch (type) { - case detail::type::none_type: - FMT_ASSERT(false, "invalid argument type"); - break; - case detail::type::bool_type: - if (specs_.type == presentation_type::none || - specs_.type == presentation_type::string) { - break; - } - FMT_FALLTHROUGH; - case detail::type::int_type: - case detail::type::uint_type: - case detail::type::long_long_type: - case detail::type::ulong_long_type: - case detail::type::int128_type: - case detail::type::uint128_type: - detail::check_int_type_spec(specs_.type, eh); - break; - case detail::type::char_type: - detail::check_char_specs(specs_, eh); - break; - case detail::type::float_type: - if (detail::const_check(FMT_USE_FLOAT)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "float support disabled"); - break; - case detail::type::double_type: - if (detail::const_check(FMT_USE_DOUBLE)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "double support disabled"); - break; - case detail::type::long_double_type: - if (detail::const_check(FMT_USE_LONG_DOUBLE)) - detail::parse_float_type_spec(specs_, eh); - else - FMT_ASSERT(false, "long double support disabled"); - break; - case detail::type::cstring_type: - detail::check_cstring_type_spec(specs_.type, eh); - break; - case detail::type::string_type: - detail::check_string_type_spec(specs_.type, eh); - break; - case detail::type::pointer_type: - detail::check_pointer_type_spec(specs_.type, eh); - break; - case detail::type::custom_type: - // Custom format specifiers are checked in parse functions of - // formatter specializations. - break; - } - return it; + auto end = + detail::parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, type); + if (type == detail::type::char_type) detail::check_char_specs(specs_); + return end; + } + + template ::value, + FMT_ENABLE_IF(U == detail::type::string_type || + U == detail::type::cstring_type || + U == detail::type::char_type)> + FMT_CONSTEXPR void set_debug_format(bool set = true) { + specs_.type = set ? presentation_type::debug : presentation_type::none; } template @@ -3043,7 +2710,9 @@ struct formatter decltype(ctx.out()); }; -template struct basic_runtime { basic_string_view str; }; +template struct runtime_format_string { + basic_string_view str; +}; /** A compile-time format string. */ template class basic_format_string { @@ -3063,25 +2732,24 @@ template class basic_format_string { #ifdef FMT_HAS_CONSTEVAL if constexpr (detail::count_named_args() == detail::count_statically_named_args()) { - using checker = detail::format_string_checker...>; - detail::parse_format_string(str_, checker(s, {})); + using checker = + detail::format_string_checker...>; + detail::parse_format_string(str_, checker(s)); } #else detail::check_format_string(s); #endif } - basic_format_string(basic_runtime r) : str_(r.str) {} + basic_format_string(runtime_format_string fmt) : str_(fmt.str) {} FMT_INLINE operator basic_string_view() const { return str_; } + FMT_INLINE auto get() const -> basic_string_view { return str_; } }; #if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 // Workaround broken conversion on older gcc. -template using format_string = string_view; -template auto runtime(const S& s) -> basic_string_view> { - return s; -} +template using format_string = string_view; +inline auto runtime(string_view s) -> string_view { return s; } #else template using format_string = basic_format_string...>; @@ -3095,9 +2763,7 @@ using format_string = basic_format_string...>; fmt::print(fmt::runtime("{:d}"), "I am not a number"); \endrst */ -template auto runtime(const S& s) -> basic_runtime> { - return {{s}}; -} +inline auto runtime(string_view s) -> runtime_format_string<> { return {{s}}; } #endif FMT_API auto vformat(string_view fmt, format_args args) -> std::string; @@ -3123,10 +2789,9 @@ FMT_NODISCARD FMT_INLINE auto format(format_string fmt, T&&... args) template ::value)> auto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt { - using detail::get_buffer; - auto&& buf = get_buffer(out); + auto&& buf = detail::get_buffer(out); detail::vformat_to(buf, fmt, args, {}); - return detail::get_iterator(buf); + return detail::get_iterator(buf, out); } /** @@ -3185,7 +2850,7 @@ template FMT_NODISCARD FMT_INLINE auto formatted_size(format_string fmt, T&&... args) -> size_t { auto buf = detail::counting_buffer<>(); - detail::vformat_to(buf, string_view(fmt), fmt::make_format_args(args...), {}); + detail::vformat_to(buf, fmt, fmt::make_format_args(args...), {}); return buf.count(); } @@ -3226,7 +2891,25 @@ FMT_INLINE void print(std::FILE* f, format_string fmt, T&&... args) { : detail::vprint_mojibake(f, fmt, vargs); } -FMT_MODULE_EXPORT_END +/** + Formats ``args`` according to specifications in ``fmt`` and writes the + output to the file ``f`` followed by a newline. + */ +template +FMT_INLINE void println(std::FILE* f, format_string fmt, T&&... args) { + return fmt::print(f, "{}\n", fmt::format(fmt, std::forward(args)...)); +} + +/** + Formats ``args`` according to specifications in ``fmt`` and writes the output + to ``stdout`` followed by a newline. + */ +template +FMT_INLINE void println(format_string fmt, T&&... args) { + return fmt::println(stdout, fmt, std::forward(args)...); +} + +FMT_END_EXPORT FMT_GCC_PRAGMA("GCC pop_options") FMT_END_NAMESPACE diff --git a/abcg/external/fmt/format-inl.h b/abcg/external/fmt/format-inl.h index 39f4728d0..f9e4975db 100644 --- a/abcg/external/fmt/format-inl.h +++ b/abcg/external/fmt/format-inl.h @@ -9,13 +9,9 @@ #define FMT_FORMAT_INL_H_ #include -#include #include // errno #include #include -#include -#include // std::memmove -#include #include #ifndef FMT_STATIC_THOUSANDS_SEPARATOR @@ -44,21 +40,8 @@ FMT_FUNC void throw_format_error(const char* message) { FMT_THROW(format_error(message)); } -#ifndef _MSC_VER -# define FMT_SNPRINTF snprintf -#else // _MSC_VER -inline int fmt_snprintf(char* buffer, size_t size, const char* format, ...) { - va_list args; - va_start(args, format); - int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args); - va_end(args); - return result; -} -# define FMT_SNPRINTF fmt_snprintf -#endif // _MSC_VER - FMT_FUNC void format_error_code(detail::buffer& out, int error_code, - string_view message) FMT_NOEXCEPT { + string_view message) noexcept { // Report error code making sure that the output fits into // inline_buffer_size to avoid dynamic memory allocation and potential // bad_alloc. @@ -81,7 +64,7 @@ FMT_FUNC void format_error_code(detail::buffer& out, int error_code, } FMT_FUNC void report_error(format_func func, int error_code, - const char* message) FMT_NOEXCEPT { + const char* message) noexcept { memory_buffer full_message; func(full_message, error_code, message); // Don't use fwrite_fully because the latter may throw. @@ -93,7 +76,8 @@ FMT_FUNC void report_error(format_func func, int error_code, inline void fwrite_fully(const void* ptr, size_t size, size_t count, FILE* stream) { size_t written = std::fwrite(ptr, size, count, stream); - if (written < count) FMT_THROW(system_error(errno, "cannot write to file")); + if (written < count) + FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); } #ifndef FMT_STATIC_THOUSANDS_SEPARATOR @@ -127,928 +111,151 @@ template FMT_FUNC Char decimal_point_impl(locale_ref) { return '.'; } #endif -} // namespace detail -#if !FMT_MSC_VER -FMT_API FMT_FUNC format_error::~format_error() FMT_NOEXCEPT = default; +FMT_FUNC auto write_loc(appender out, loc_value value, + const format_specs<>& specs, locale_ref loc) -> bool { +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR + auto locale = loc.get(); + // We cannot use the num_put facet because it may produce output in + // a wrong encoding. + using facet = format_facet; + if (std::has_facet(locale)) + return std::use_facet(locale).put(out, value, specs); + return facet(locale).put(out, value, specs); #endif - -FMT_FUNC std::system_error vsystem_error(int error_code, string_view format_str, - format_args args) { - auto ec = std::error_code(error_code, std::generic_category()); - return std::system_error(ec, vformat(format_str, args)); + return false; } +} // namespace detail -namespace detail { - -template <> FMT_FUNC int count_digits<4>(detail::fallback_uintptr n) { - // fallback_uintptr is always stored in little endian. - int i = static_cast(sizeof(void*)) - 1; - while (i > 0 && n.value[i] == 0) --i; - auto char_digits = std::numeric_limits::digits / 4; - return i >= 0 ? i * char_digits + count_digits<4, unsigned>(n.value[i]) : 1; -} - -// log10(2) = 0x0.4d104d427de7fbcc... -static constexpr uint64_t log10_2_significand = 0x4d104d427de7fbcc; - -template struct basic_impl_data { - // Normalized 64-bit significands of pow(10, k), for k = -348, -340, ..., 340. - // These are generated by support/compute-powers.py. - static constexpr uint64_t pow10_significands[87] = { - 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76, - 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df, - 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c, - 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5, - 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57, - 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7, - 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e, - 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996, - 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126, - 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053, - 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f, - 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b, - 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06, - 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb, - 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000, - 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984, - 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068, - 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8, - 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758, - 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85, - 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d, - 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25, - 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2, - 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a, - 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410, - 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129, - 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85, - 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841, - 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b, - }; - -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wnarrowing" -#endif - // Binary exponents of pow(10, k), for k = -348, -340, ..., 340, corresponding - // to significands above. - static constexpr int16_t pow10_exponents[87] = { - -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954, - -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661, - -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369, - -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77, - -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216, - 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508, - 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800, - 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066}; -#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 -# pragma GCC diagnostic pop -#endif - - static constexpr uint64_t power_of_10_64[20] = { - 1, FMT_POWERS_OF_10(1ULL), FMT_POWERS_OF_10(1000000000ULL), - 10000000000000000000ULL}; -}; - -// This is a struct rather than an alias to avoid shadowing warnings in gcc. -struct impl_data : basic_impl_data<> {}; +template typename Locale::id format_facet::id; -#if __cplusplus < 201703L -template -constexpr uint64_t basic_impl_data::pow10_significands[]; -template constexpr int16_t basic_impl_data::pow10_exponents[]; -template constexpr uint64_t basic_impl_data::power_of_10_64[]; -#endif - -template struct bits { - static FMT_CONSTEXPR_DECL const int value = - static_cast(sizeof(T) * std::numeric_limits::digits); -}; - -// Returns the number of significand bits in Float excluding the implicit bit. -template constexpr int num_significand_bits() { - // Subtract 1 to account for an implicit most significant bit in the - // normalized form. - return std::numeric_limits::digits - 1; +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR +template format_facet::format_facet(Locale& loc) { + auto& numpunct = std::use_facet>(loc); + grouping_ = numpunct.grouping(); + if (!grouping_.empty()) separator_ = std::string(1, numpunct.thousands_sep()); } -// A floating-point number f * pow(2, e). -struct fp { - uint64_t f; - int e; - - static constexpr const int num_significand_bits = bits::value; - - constexpr fp() : f(0), e(0) {} - constexpr fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} - - // Constructs fp from an IEEE754 floating-point number. It is a template to - // prevent compile errors on systems where n is not IEEE754. - template explicit FMT_CONSTEXPR fp(Float n) { assign(n); } - - template - using is_supported = bool_constant; - - // Assigns d to this and return true iff predecessor is closer than successor. - template ::value)> - FMT_CONSTEXPR bool assign(Float n) { - // Assume float is in the format [sign][exponent][significand]. - const int num_float_significand_bits = - detail::num_significand_bits(); - const uint64_t implicit_bit = 1ULL << num_float_significand_bits; - const uint64_t significand_mask = implicit_bit - 1; - constexpr bool is_double = sizeof(Float) == sizeof(uint64_t); - auto u = bit_cast>(n); - f = u & significand_mask; - const uint64_t exponent_mask = (~0ULL >> 1) & ~significand_mask; - int biased_e = - static_cast((u & exponent_mask) >> num_float_significand_bits); - // The predecessor is closer if n is a normalized power of 2 (f == 0) other - // than the smallest normalized number (biased_e > 1). - bool is_predecessor_closer = f == 0 && biased_e > 1; - if (biased_e != 0) - f += implicit_bit; - else - biased_e = 1; // Subnormals use biased exponent 1 (min exponent). - const int exponent_bias = std::numeric_limits::max_exponent - 1; - e = biased_e - exponent_bias - num_float_significand_bits; - return is_predecessor_closer; - } - - template ::value)> - bool assign(Float) { - FMT_ASSERT(false, ""); - return false; - } -}; - -// Normalizes the value converted from double and multiplied by (1 << SHIFT). -template FMT_CONSTEXPR fp normalize(fp value) { - // Handle subnormals. - const uint64_t implicit_bit = 1ULL << num_significand_bits(); - const auto shifted_implicit_bit = implicit_bit << SHIFT; - while ((value.f & shifted_implicit_bit) == 0) { - value.f <<= 1; - --value.e; - } - // Subtract 1 to account for hidden bit. - const auto offset = - fp::num_significand_bits - num_significand_bits() - SHIFT - 1; - value.f <<= offset; - value.e -= offset; - return value; +template <> +FMT_API FMT_FUNC auto format_facet::do_put( + appender out, loc_value val, const format_specs<>& specs) const -> bool { + return val.visit( + detail::loc_writer<>{out, specs, separator_, grouping_, decimal_point_}); } - -inline bool operator==(fp x, fp y) { return x.f == y.f && x.e == y.e; } - -// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking. -FMT_CONSTEXPR inline uint64_t multiply(uint64_t lhs, uint64_t rhs) { -#if FMT_USE_INT128 - auto product = static_cast<__uint128_t>(lhs) * rhs; - auto f = static_cast(product >> 64); - return (static_cast(product) & (1ULL << 63)) != 0 ? f + 1 : f; -#else - // Multiply 32-bit parts of significands. - uint64_t mask = (1ULL << 32) - 1; - uint64_t a = lhs >> 32, b = lhs & mask; - uint64_t c = rhs >> 32, d = rhs & mask; - uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; - // Compute mid 64-bit of result and round. - uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); - return ac + (ad >> 32) + (bc >> 32) + (mid >> 32); #endif -} - -FMT_CONSTEXPR inline fp operator*(fp x, fp y) { - return {multiply(x.f, y.f), x.e + y.e + 64}; -} -// Returns a cached power of 10 `c_k = c_k.f * pow(2, c_k.e)` such that its -// (binary) exponent satisfies `min_exponent <= c_k.e <= min_exponent + 28`. -FMT_CONSTEXPR inline fp get_cached_power(int min_exponent, - int& pow10_exponent) { - const int shift = 32; - const auto significand = static_cast(log10_2_significand); - int index = static_cast( - ((min_exponent + fp::num_significand_bits - 1) * (significand >> shift) + - ((int64_t(1) << shift) - 1)) // ceil - >> 32 // arithmetic shift - ); - // Decimal exponent of the first (smallest) cached power of 10. - const int first_dec_exp = -348; - // Difference between 2 consecutive decimal exponents in cached powers of 10. - const int dec_exp_step = 8; - index = (index - first_dec_exp - 1) / dec_exp_step + 1; - pow10_exponent = first_dec_exp + index * dec_exp_step; - return {impl_data::pow10_significands[index], - impl_data::pow10_exponents[index]}; +FMT_FUNC std::system_error vsystem_error(int error_code, string_view fmt, + format_args args) { + auto ec = std::error_code(error_code, std::generic_category()); + return std::system_error(ec, vformat(fmt, args)); } -// A simple accumulator to hold the sums of terms in bigint::square if uint128_t -// is not available. -struct accumulator { - uint64_t lower; - uint64_t upper; - - constexpr accumulator() : lower(0), upper(0) {} - constexpr explicit operator uint32_t() const { - return static_cast(lower); - } - - FMT_CONSTEXPR void operator+=(uint64_t n) { - lower += n; - if (lower < n) ++upper; - } - FMT_CONSTEXPR void operator>>=(int shift) { - FMT_ASSERT(shift == 32, ""); - (void)shift; - lower = (upper << 32) | (lower >> 32); - upper >>= 32; - } -}; - -class bigint { - private: - // A bigint is stored as an array of bigits (big digits), with bigit at index - // 0 being the least significant one. - using bigit = uint32_t; - using double_bigit = uint64_t; - enum { bigits_capacity = 32 }; - basic_memory_buffer bigits_; - int exp_; - - FMT_CONSTEXPR20 bigit operator[](int index) const { - return bigits_[to_unsigned(index)]; - } - FMT_CONSTEXPR20 bigit& operator[](int index) { - return bigits_[to_unsigned(index)]; - } - - static FMT_CONSTEXPR_DECL const int bigit_bits = bits::value; - - friend struct formatter; - - FMT_CONSTEXPR20 void subtract_bigits(int index, bigit other, bigit& borrow) { - auto result = static_cast((*this)[index]) - other - borrow; - (*this)[index] = static_cast(result); - borrow = static_cast(result >> (bigit_bits * 2 - 1)); - } - - FMT_CONSTEXPR20 void remove_leading_zeros() { - int num_bigits = static_cast(bigits_.size()) - 1; - while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits; - bigits_.resize(to_unsigned(num_bigits + 1)); - } - - // Computes *this -= other assuming aligned bigints and *this >= other. - FMT_CONSTEXPR20 void subtract_aligned(const bigint& other) { - FMT_ASSERT(other.exp_ >= exp_, "unaligned bigints"); - FMT_ASSERT(compare(*this, other) >= 0, ""); - bigit borrow = 0; - int i = other.exp_ - exp_; - for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j) - subtract_bigits(i, other.bigits_[j], borrow); - while (borrow > 0) subtract_bigits(i, 0, borrow); - remove_leading_zeros(); - } - - FMT_CONSTEXPR20 void multiply(uint32_t value) { - const double_bigit wide_value = value; - bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - double_bigit result = bigits_[i] * wide_value + carry; - bigits_[i] = static_cast(result); - carry = static_cast(result >> bigit_bits); - } - if (carry != 0) bigits_.push_back(carry); - } - - FMT_CONSTEXPR20 void multiply(uint64_t value) { - const bigit mask = ~bigit(0); - const double_bigit lower = value & mask; - const double_bigit upper = value >> bigit_bits; - double_bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - double_bigit result = bigits_[i] * lower + (carry & mask); - carry = - bigits_[i] * upper + (result >> bigit_bits) + (carry >> bigit_bits); - bigits_[i] = static_cast(result); - } - while (carry != 0) { - bigits_.push_back(carry & mask); - carry >>= bigit_bits; - } - } - - public: - FMT_CONSTEXPR20 bigint() : exp_(0) {} - explicit bigint(uint64_t n) { assign(n); } - FMT_CONSTEXPR20 ~bigint() { - FMT_ASSERT(bigits_.capacity() <= bigits_capacity, ""); - } - - bigint(const bigint&) = delete; - void operator=(const bigint&) = delete; - - FMT_CONSTEXPR20 void assign(const bigint& other) { - auto size = other.bigits_.size(); - bigits_.resize(size); - auto data = other.bigits_.data(); - std::copy(data, data + size, make_checked(bigits_.data(), size)); - exp_ = other.exp_; - } - - FMT_CONSTEXPR20 void assign(uint64_t n) { - size_t num_bigits = 0; - do { - bigits_[num_bigits++] = n & ~bigit(0); - n >>= bigit_bits; - } while (n != 0); - bigits_.resize(num_bigits); - exp_ = 0; - } - - FMT_CONSTEXPR20 int num_bigits() const { - return static_cast(bigits_.size()) + exp_; - } - - FMT_NOINLINE FMT_CONSTEXPR20 bigint& operator<<=(int shift) { - FMT_ASSERT(shift >= 0, ""); - exp_ += shift / bigit_bits; - shift %= bigit_bits; - if (shift == 0) return *this; - bigit carry = 0; - for (size_t i = 0, n = bigits_.size(); i < n; ++i) { - bigit c = bigits_[i] >> (bigit_bits - shift); - bigits_[i] = (bigits_[i] << shift) + carry; - carry = c; - } - if (carry != 0) bigits_.push_back(carry); - return *this; - } - - template FMT_CONSTEXPR20 bigint& operator*=(Int value) { - FMT_ASSERT(value > 0, ""); - multiply(uint32_or_64_or_128_t(value)); - return *this; - } - - friend FMT_CONSTEXPR20 int compare(const bigint& lhs, const bigint& rhs) { - int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits(); - if (num_lhs_bigits != num_rhs_bigits) - return num_lhs_bigits > num_rhs_bigits ? 1 : -1; - int i = static_cast(lhs.bigits_.size()) - 1; - int j = static_cast(rhs.bigits_.size()) - 1; - int end = i - j; - if (end < 0) end = 0; - for (; i >= end; --i, --j) { - bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j]; - if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1; - } - if (i != j) return i > j ? 1 : -1; - return 0; - } - - // Returns compare(lhs1 + lhs2, rhs). - friend FMT_CONSTEXPR20 int add_compare(const bigint& lhs1, const bigint& lhs2, - const bigint& rhs) { - int max_lhs_bigits = (std::max)(lhs1.num_bigits(), lhs2.num_bigits()); - int num_rhs_bigits = rhs.num_bigits(); - if (max_lhs_bigits + 1 < num_rhs_bigits) return -1; - if (max_lhs_bigits > num_rhs_bigits) return 1; - auto get_bigit = [](const bigint& n, int i) -> bigit { - return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0; - }; - double_bigit borrow = 0; - int min_exp = (std::min)((std::min)(lhs1.exp_, lhs2.exp_), rhs.exp_); - for (int i = num_rhs_bigits - 1; i >= min_exp; --i) { - double_bigit sum = - static_cast(get_bigit(lhs1, i)) + get_bigit(lhs2, i); - bigit rhs_bigit = get_bigit(rhs, i); - if (sum > rhs_bigit + borrow) return 1; - borrow = rhs_bigit + borrow - sum; - if (borrow > 1) return -1; - borrow <<= bigit_bits; - } - return borrow != 0 ? -1 : 0; - } - - // Assigns pow(10, exp) to this bigint. - FMT_CONSTEXPR20 void assign_pow10(int exp) { - FMT_ASSERT(exp >= 0, ""); - if (exp == 0) return assign(1); - // Find the top bit. - int bitmask = 1; - while (exp >= bitmask) bitmask <<= 1; - bitmask >>= 1; - // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by - // repeated squaring and multiplication. - assign(5); - bitmask >>= 1; - while (bitmask != 0) { - square(); - if ((exp & bitmask) != 0) *this *= 5; - bitmask >>= 1; - } - *this <<= exp; // Multiply by pow(2, exp) by shifting. - } - - FMT_CONSTEXPR20 void square() { - int num_bigits = static_cast(bigits_.size()); - int num_result_bigits = 2 * num_bigits; - basic_memory_buffer n(std::move(bigits_)); - bigits_.resize(to_unsigned(num_result_bigits)); - using accumulator_t = conditional_t; - auto sum = accumulator_t(); - for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) { - // Compute bigit at position bigit_index of the result by adding - // cross-product terms n[i] * n[j] such that i + j == bigit_index. - for (int i = 0, j = bigit_index; j >= 0; ++i, --j) { - // Most terms are multiplied twice which can be optimized in the future. - sum += static_cast(n[i]) * n[j]; - } - (*this)[bigit_index] = static_cast(sum); - sum >>= bits::value; // Compute the carry. - } - // Do the same for the top half. - for (int bigit_index = num_bigits; bigit_index < num_result_bigits; - ++bigit_index) { - for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;) - sum += static_cast(n[i++]) * n[j--]; - (*this)[bigit_index] = static_cast(sum); - sum >>= bits::value; - } - remove_leading_zeros(); - exp_ *= 2; - } - - // If this bigint has a bigger exponent than other, adds trailing zero to make - // exponents equal. This simplifies some operations such as subtraction. - FMT_CONSTEXPR20 void align(const bigint& other) { - int exp_difference = exp_ - other.exp_; - if (exp_difference <= 0) return; - int num_bigits = static_cast(bigits_.size()); - bigits_.resize(to_unsigned(num_bigits + exp_difference)); - for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) - bigits_[j] = bigits_[i]; - std::uninitialized_fill_n(bigits_.data(), exp_difference, 0); - exp_ -= exp_difference; - } - - // Divides this bignum by divisor, assigning the remainder to this and - // returning the quotient. - FMT_CONSTEXPR20 int divmod_assign(const bigint& divisor) { - FMT_ASSERT(this != &divisor, ""); - if (compare(*this, divisor) < 0) return 0; - FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, ""); - align(divisor); - int quotient = 0; - do { - subtract_aligned(divisor); - ++quotient; - } while (compare(*this, divisor) >= 0); - return quotient; - } -}; +namespace detail { -enum class round_direction { unknown, up, down }; - -// Given the divisor (normally a power of 10), the remainder = v % divisor for -// some number v and the error, returns whether v should be rounded up, down, or -// whether the rounding direction can't be determined due to error. -// error should be less than divisor / 2. -FMT_CONSTEXPR inline round_direction get_round_direction(uint64_t divisor, - uint64_t remainder, - uint64_t error) { - FMT_ASSERT(remainder < divisor, ""); // divisor - remainder won't overflow. - FMT_ASSERT(error < divisor, ""); // divisor - error won't overflow. - FMT_ASSERT(error < divisor - error, ""); // error * 2 won't overflow. - // Round down if (remainder + error) * 2 <= divisor. - if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2) - return round_direction::down; - // Round up if (remainder - error) * 2 >= divisor. - if (remainder >= error && - remainder - error >= divisor - (remainder - error)) { - return round_direction::up; - } - return round_direction::unknown; +template inline bool operator==(basic_fp x, basic_fp y) { + return x.f == y.f && x.e == y.e; } -namespace digits { -enum result { - more, // Generate more digits. - done, // Done generating digits. - error // Digit generation cancelled due to an error. -}; +// Compilers should be able to optimize this into the ror instruction. +FMT_CONSTEXPR inline uint32_t rotr(uint32_t n, uint32_t r) noexcept { + r &= 31; + return (n >> r) | (n << (32 - r)); } - -struct gen_digits_handler { - char* buf; - int size; - int precision; - int exp10; - bool fixed; - - FMT_CONSTEXPR digits::result on_digit(char digit, uint64_t divisor, - uint64_t remainder, uint64_t error, - bool integral) { - FMT_ASSERT(remainder < divisor, ""); - buf[size++] = digit; - if (!integral && error >= remainder) return digits::error; - if (size < precision) return digits::more; - if (!integral) { - // Check if error * 2 < divisor with overflow prevention. - // The check is not needed for the integral part because error = 1 - // and divisor > (1 << 32) there. - if (error >= divisor || error >= divisor - error) return digits::error; - } else { - FMT_ASSERT(error == 1 && divisor > 2, ""); - } - auto dir = get_round_direction(divisor, remainder, error); - if (dir != round_direction::up) - return dir == round_direction::down ? digits::done : digits::error; - ++buf[size - 1]; - for (int i = size - 1; i > 0 && buf[i] > '9'; --i) { - buf[i] = '0'; - ++buf[i - 1]; - } - if (buf[0] > '9') { - buf[0] = '1'; - if (fixed) - buf[size++] = '0'; - else - ++exp10; - } - return digits::done; - } -}; - -// Generates output using the Grisu digit-gen algorithm. -// error: the size of the region (lower, upper) outside of which numbers -// definitely do not round to value (Delta in Grisu3). -FMT_INLINE FMT_CONSTEXPR20 digits::result grisu_gen_digits( - fp value, uint64_t error, int& exp, gen_digits_handler& handler) { - const fp one(1ULL << -value.e, value.e); - // The integral part of scaled value (p1 in Grisu) = value / one. It cannot be - // zero because it contains a product of two 64-bit numbers with MSB set (due - // to normalization) - 1, shifted right by at most 60 bits. - auto integral = static_cast(value.f >> -one.e); - FMT_ASSERT(integral != 0, ""); - FMT_ASSERT(integral == value.f >> -one.e, ""); - // The fractional part of scaled value (p2 in Grisu) c = value % one. - uint64_t fractional = value.f & (one.f - 1); - exp = count_digits(integral); // kappa in Grisu. - // Non-fixed formats require at least one digit and no precision adjustment. - if (handler.fixed) { - // Adjust fixed precision by exponent because it is relative to decimal - // point. - int precision_offset = exp + handler.exp10; - if (precision_offset > 0 && - handler.precision > max_value() - precision_offset) { - FMT_THROW(format_error("number is too big")); - } - handler.precision += precision_offset; - // Check if precision is satisfied just by leading zeros, e.g. - // format("{:.2f}", 0.001) gives "0.00" without generating any digits. - if (handler.precision <= 0) { - if (handler.precision < 0) return digits::done; - // Divide by 10 to prevent overflow. - uint64_t divisor = impl_data::power_of_10_64[exp - 1] << -one.e; - auto dir = get_round_direction(divisor, value.f / 10, error * 10); - if (dir == round_direction::unknown) return digits::error; - handler.buf[handler.size++] = dir == round_direction::up ? '1' : '0'; - return digits::done; - } - } - // Generate digits for the integral part. This can produce up to 10 digits. - do { - uint32_t digit = 0; - auto divmod_integral = [&](uint32_t divisor) { - digit = integral / divisor; - integral %= divisor; - }; - // This optimization by Milo Yip reduces the number of integer divisions by - // one per iteration. - switch (exp) { - case 10: - divmod_integral(1000000000); - break; - case 9: - divmod_integral(100000000); - break; - case 8: - divmod_integral(10000000); - break; - case 7: - divmod_integral(1000000); - break; - case 6: - divmod_integral(100000); - break; - case 5: - divmod_integral(10000); - break; - case 4: - divmod_integral(1000); - break; - case 3: - divmod_integral(100); - break; - case 2: - divmod_integral(10); - break; - case 1: - digit = integral; - integral = 0; - break; - default: - FMT_ASSERT(false, "invalid number of digits"); - } - --exp; - auto remainder = (static_cast(integral) << -one.e) + fractional; - auto result = handler.on_digit(static_cast('0' + digit), - impl_data::power_of_10_64[exp] << -one.e, - remainder, error, true); - if (result != digits::more) return result; - } while (exp > 0); - // Generate digits for the fractional part. - for (;;) { - fractional *= 10; - error *= 10; - char digit = static_cast('0' + (fractional >> -one.e)); - fractional &= one.f - 1; - --exp; - auto result = handler.on_digit(digit, one.f, fractional, error, false); - if (result != digits::more) return result; - } +FMT_CONSTEXPR inline uint64_t rotr(uint64_t n, uint32_t r) noexcept { + r &= 63; + return (n >> r) | (n << (64 - r)); } -// A 128-bit integer type used internally, -struct uint128_wrapper { - uint128_wrapper() = default; - -#if FMT_USE_INT128 - uint128_t internal_; - - constexpr uint128_wrapper(uint64_t high, uint64_t low) FMT_NOEXCEPT - : internal_{static_cast(low) | - (static_cast(high) << 64)} {} - - constexpr uint128_wrapper(uint128_t u) : internal_{u} {} - - constexpr uint64_t high() const FMT_NOEXCEPT { - return uint64_t(internal_ >> 64); - } - constexpr uint64_t low() const FMT_NOEXCEPT { return uint64_t(internal_); } - - uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT { - internal_ += n; - return *this; - } -#else - uint64_t high_; - uint64_t low_; - - constexpr uint128_wrapper(uint64_t high, uint64_t low) FMT_NOEXCEPT - : high_{high}, - low_{low} {} - - constexpr uint64_t high() const FMT_NOEXCEPT { return high_; } - constexpr uint64_t low() const FMT_NOEXCEPT { return low_; } - - uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT { -# if defined(_MSC_VER) && defined(_M_X64) - unsigned char carry = _addcarry_u64(0, low_, n, &low_); - _addcarry_u64(carry, high_, 0, &high_); - return *this; -# else - uint64_t sum = low_ + n; - high_ += (sum < low_ ? 1 : 0); - low_ = sum; - return *this; -# endif - } -#endif -}; - // Implementation of Dragonbox algorithm: https://github.com/jk-jeon/dragonbox. namespace dragonbox { -// Computes 128-bit result of multiplication of two 64-bit unsigned integers. -inline uint128_wrapper umul128(uint64_t x, uint64_t y) FMT_NOEXCEPT { -#if FMT_USE_INT128 - return static_cast(x) * static_cast(y); -#elif defined(_MSC_VER) && defined(_M_X64) - uint128_wrapper result; - result.low_ = _umul128(x, y, &result.high_); - return result; -#else - const uint64_t mask = (uint64_t(1) << 32) - uint64_t(1); - - uint64_t a = x >> 32; - uint64_t b = x & mask; - uint64_t c = y >> 32; - uint64_t d = y & mask; - - uint64_t ac = a * c; - uint64_t bc = b * c; - uint64_t ad = a * d; - uint64_t bd = b * d; - - uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask); - - return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32), - (intermediate << 32) + (bd & mask)}; -#endif -} - -// Computes upper 64 bits of multiplication of two 64-bit unsigned integers. -inline uint64_t umul128_upper64(uint64_t x, uint64_t y) FMT_NOEXCEPT { -#if FMT_USE_INT128 - auto p = static_cast(x) * static_cast(y); - return static_cast(p >> 64); -#elif defined(_MSC_VER) && defined(_M_X64) - return __umulh(x, y); -#else - return umul128(x, y).high(); -#endif -} - -// Computes upper 64 bits of multiplication of a 64-bit unsigned integer and a -// 128-bit unsigned integer. -inline uint64_t umul192_upper64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT { - uint128_wrapper g0 = umul128(x, y.high()); - g0 += umul128_upper64(x, y.low()); - return g0.high(); -} - -// Computes upper 32 bits of multiplication of a 32-bit unsigned integer and a +// Computes upper 64 bits of multiplication of a 32-bit unsigned integer and a // 64-bit unsigned integer. -inline uint32_t umul96_upper32(uint32_t x, uint64_t y) FMT_NOEXCEPT { - return static_cast(umul128_upper64(x, y)); +inline uint64_t umul96_upper64(uint32_t x, uint64_t y) noexcept { + return umul128_upper64(static_cast(x) << 32, y); } -// Computes middle 64 bits of multiplication of a 64-bit unsigned integer and a +// Computes lower 128 bits of multiplication of a 64-bit unsigned integer and a // 128-bit unsigned integer. -inline uint64_t umul192_middle64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT { - uint64_t g01 = x * y.high(); - uint64_t g10 = umul128_upper64(x, y.low()); - return g01 + g10; +inline uint128_fallback umul192_lower128(uint64_t x, + uint128_fallback y) noexcept { + uint64_t high = x * y.high(); + uint128_fallback high_low = umul128(x, y.low()); + return {high + high_low.high(), high_low.low()}; } // Computes lower 64 bits of multiplication of a 32-bit unsigned integer and a // 64-bit unsigned integer. -inline uint64_t umul96_lower64(uint32_t x, uint64_t y) FMT_NOEXCEPT { +inline uint64_t umul96_lower64(uint32_t x, uint64_t y) noexcept { return x * y; } -// Computes floor(log10(pow(2, e))) for e in [-1700, 1700] using the method from -// https://fmt.dev/papers/Grisu-Exact.pdf#page=5, section 3.4. -inline int floor_log10_pow2(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1700 && e >= -1700, "too large exponent"); - const int shift = 22; - return (e * static_cast(log10_2_significand >> (64 - shift))) >> shift; -} - // Various fast log computations. -inline int floor_log2_pow10(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1233 && e >= -1233, "too large exponent"); - const uint64_t log2_10_integer_part = 3; - const uint64_t log2_10_fractional_digits = 0x5269e12f346e2bf9; - const int shift_amount = 19; - return (e * static_cast( - (log2_10_integer_part << shift_amount) | - (log2_10_fractional_digits >> (64 - shift_amount)))) >> - shift_amount; -} -inline int floor_log10_pow2_minus_log10_4_over_3(int e) FMT_NOEXCEPT { - FMT_ASSERT(e <= 1700 && e >= -1700, "too large exponent"); - const uint64_t log10_4_over_3_fractional_digits = 0x1ffbfc2bbc780375; - const int shift_amount = 22; - return (e * static_cast(log10_2_significand >> (64 - shift_amount)) - - static_cast(log10_4_over_3_fractional_digits >> - (64 - shift_amount))) >> - shift_amount; +inline int floor_log10_pow2_minus_log10_4_over_3(int e) noexcept { + FMT_ASSERT(e <= 2936 && e >= -2985, "too large exponent"); + return (e * 631305 - 261663) >> 21; } -// Returns true iff x is divisible by pow(2, exp). -inline bool divisible_by_power_of_2(uint32_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp >= 1, ""); - FMT_ASSERT(x != 0, ""); -#ifdef FMT_BUILTIN_CTZ - return FMT_BUILTIN_CTZ(x) >= exp; -#else - return exp < num_bits() && x == ((x >> exp) << exp); -#endif -} -inline bool divisible_by_power_of_2(uint64_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp >= 1, ""); - FMT_ASSERT(x != 0, ""); -#ifdef FMT_BUILTIN_CTZLL - return FMT_BUILTIN_CTZLL(x) >= exp; -#else - return exp < num_bits() && x == ((x >> exp) << exp); -#endif -} - -// Table entry type for divisibility test. -template struct divtest_table_entry { - T mod_inv; - T max_quotient; -}; +FMT_INLINE_VARIABLE constexpr struct { + uint32_t divisor; + int shift_amount; +} div_small_pow10_infos[] = {{10, 16}, {100, 16}}; -// Returns true iff x is divisible by pow(5, exp). -inline bool divisible_by_power_of_5(uint32_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp <= 10, "too large exponent"); - static constexpr const divtest_table_entry divtest_table[] = { - {0x00000001, 0xffffffff}, {0xcccccccd, 0x33333333}, - {0xc28f5c29, 0x0a3d70a3}, {0x26e978d5, 0x020c49ba}, - {0x3afb7e91, 0x0068db8b}, {0x0bcbe61d, 0x0014f8b5}, - {0x68c26139, 0x000431bd}, {0xae8d46a5, 0x0000d6bf}, - {0x22e90e21, 0x00002af3}, {0x3a2e9c6d, 0x00000897}, - {0x3ed61f49, 0x000001b7}}; - return x * divtest_table[exp].mod_inv <= divtest_table[exp].max_quotient; -} -inline bool divisible_by_power_of_5(uint64_t x, int exp) FMT_NOEXCEPT { - FMT_ASSERT(exp <= 23, "too large exponent"); - static constexpr const divtest_table_entry divtest_table[] = { - {0x0000000000000001, 0xffffffffffffffff}, - {0xcccccccccccccccd, 0x3333333333333333}, - {0x8f5c28f5c28f5c29, 0x0a3d70a3d70a3d70}, - {0x1cac083126e978d5, 0x020c49ba5e353f7c}, - {0xd288ce703afb7e91, 0x0068db8bac710cb2}, - {0x5d4e8fb00bcbe61d, 0x0014f8b588e368f0}, - {0x790fb65668c26139, 0x000431bde82d7b63}, - {0xe5032477ae8d46a5, 0x0000d6bf94d5e57a}, - {0xc767074b22e90e21, 0x00002af31dc46118}, - {0x8e47ce423a2e9c6d, 0x0000089705f4136b}, - {0x4fa7f60d3ed61f49, 0x000001b7cdfd9d7b}, - {0x0fee64690c913975, 0x00000057f5ff85e5}, - {0x3662e0e1cf503eb1, 0x000000119799812d}, - {0xa47a2cf9f6433fbd, 0x0000000384b84d09}, - {0x54186f653140a659, 0x00000000b424dc35}, - {0x7738164770402145, 0x0000000024075f3d}, - {0xe4a4d1417cd9a041, 0x000000000734aca5}, - {0xc75429d9e5c5200d, 0x000000000170ef54}, - {0xc1773b91fac10669, 0x000000000049c977}, - {0x26b172506559ce15, 0x00000000000ec1e4}, - {0xd489e3a9addec2d1, 0x000000000002f394}, - {0x90e860bb892c8d5d, 0x000000000000971d}, - {0x502e79bf1b6f4f79, 0x0000000000001e39}, - {0xdcd618596be30fe5, 0x000000000000060b}}; - return x * divtest_table[exp].mod_inv <= divtest_table[exp].max_quotient; -} - -// Replaces n by floor(n / pow(5, N)) returning true if and only if n is -// divisible by pow(5, N). -// Precondition: n <= 2 * pow(5, N + 1). +// Replaces n by floor(n / pow(10, N)) returning true if and only if n is +// divisible by pow(10, N). +// Precondition: n <= pow(10, N + 1). template -bool check_divisibility_and_divide_by_pow5(uint32_t& n) FMT_NOEXCEPT { - static constexpr struct { - uint32_t magic_number; - int bits_for_comparison; - uint32_t threshold; - int shift_amount; - } infos[] = {{0xcccd, 16, 0x3333, 18}, {0xa429, 8, 0x0a, 20}}; - constexpr auto info = infos[N - 1]; - n *= info.magic_number; - const uint32_t comparison_mask = (1u << info.bits_for_comparison) - 1; - bool result = (n & comparison_mask) <= info.threshold; +bool check_divisibility_and_divide_by_pow10(uint32_t& n) noexcept { + // The numbers below are chosen such that: + // 1. floor(n/d) = floor(nm / 2^k) where d=10 or d=100, + // 2. nm mod 2^k < m if and only if n is divisible by d, + // where m is magic_number, k is shift_amount + // and d is divisor. + // + // Item 1 is a common technique of replacing division by a constant with + // multiplication, see e.g. "Division by Invariant Integers Using + // Multiplication" by Granlund and Montgomery (1994). magic_number (m) is set + // to ceil(2^k/d) for large enough k. + // The idea for item 2 originates from Schubfach. + constexpr auto info = div_small_pow10_infos[N - 1]; + FMT_ASSERT(n <= info.divisor * 10, "n is too large"); + constexpr uint32_t magic_number = + (1u << info.shift_amount) / info.divisor + 1; + n *= magic_number; + const uint32_t comparison_mask = (1u << info.shift_amount) - 1; + bool result = (n & comparison_mask) < magic_number; n >>= info.shift_amount; return result; } // Computes floor(n / pow(10, N)) for small n and N. // Precondition: n <= pow(10, N + 1). -template uint32_t small_division_by_pow10(uint32_t n) FMT_NOEXCEPT { - static constexpr struct { - uint32_t magic_number; - int shift_amount; - uint32_t divisor_times_10; - } infos[] = {{0xcccd, 19, 100}, {0xa3d8, 22, 1000}}; - constexpr auto info = infos[N - 1]; - FMT_ASSERT(n <= info.divisor_times_10, "n is too large"); - return n * info.magic_number >> info.shift_amount; +template uint32_t small_division_by_pow10(uint32_t n) noexcept { + constexpr auto info = div_small_pow10_infos[N - 1]; + FMT_ASSERT(n <= info.divisor * 10, "n is too large"); + constexpr uint32_t magic_number = + (1u << info.shift_amount) / info.divisor + 1; + return (n * magic_number) >> info.shift_amount; } // Computes floor(n / 10^(kappa + 1)) (float) -inline uint32_t divide_by_10_to_kappa_plus_1(uint32_t n) FMT_NOEXCEPT { - return n / float_info::big_divisor; +inline uint32_t divide_by_10_to_kappa_plus_1(uint32_t n) noexcept { + // 1374389535 = ceil(2^37/100) + return static_cast((static_cast(n) * 1374389535) >> 37); } // Computes floor(n / 10^(kappa + 1)) (double) -inline uint64_t divide_by_10_to_kappa_plus_1(uint64_t n) FMT_NOEXCEPT { - return umul128_upper64(n, 0x83126e978d4fdf3c) >> 9; +inline uint64_t divide_by_10_to_kappa_plus_1(uint64_t n) noexcept { + // 2361183241434822607 = ceil(2^(64+7)/1000) + return umul128_upper64(n, 2361183241434822607ull) >> 7; } // Various subroutines using pow10 cache -template struct cache_accessor; +template struct cache_accessor; template <> struct cache_accessor { using carrier_uint = float_info::carrier_uint; using cache_entry_type = uint64_t; - static uint64_t get_cached_power(int k) FMT_NOEXCEPT { + static uint64_t get_cached_power(int k) noexcept { FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, "k is out of range"); static constexpr const uint64_t pow10_significands[] = { @@ -1071,54 +278,65 @@ template <> struct cache_accessor { 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000, 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000, 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0, - 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940984, - 0xa18f07d736b90be5, 0xc9f2c9cd04674ede, 0xfc6f7c4045812296, - 0x9dc5ada82b70b59d, 0xc5371912364ce305, 0xf684df56c3e01bc6, - 0x9a130b963a6c115c, 0xc097ce7bc90715b3, 0xf0bdc21abb48db20, - 0x96769950b50d88f4, 0xbc143fa4e250eb31, 0xeb194f8e1ae525fd, - 0x92efd1b8d0cf37be, 0xb7abc627050305ad, 0xe596b7b0c643c719, - 0x8f7e32ce7bea5c6f, 0xb35dbf821ae4f38b, 0xe0352f62a19e306e}; + 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940985, + 0xa18f07d736b90be6, 0xc9f2c9cd04674edf, 0xfc6f7c4045812297, + 0x9dc5ada82b70b59e, 0xc5371912364ce306, 0xf684df56c3e01bc7, + 0x9a130b963a6c115d, 0xc097ce7bc90715b4, 0xf0bdc21abb48db21, + 0x96769950b50d88f5, 0xbc143fa4e250eb32, 0xeb194f8e1ae525fe, + 0x92efd1b8d0cf37bf, 0xb7abc627050305ae, 0xe596b7b0c643c71a, + 0x8f7e32ce7bea5c70, 0xb35dbf821ae4f38c, 0xe0352f62a19e306f}; return pow10_significands[k - float_info::min_k]; } - static carrier_uint compute_mul(carrier_uint u, - const cache_entry_type& cache) FMT_NOEXCEPT { - return umul96_upper32(u, cache); + struct compute_mul_result { + carrier_uint result; + bool is_integer; + }; + struct compute_mul_parity_result { + bool parity; + bool is_integer; + }; + + static compute_mul_result compute_mul( + carrier_uint u, const cache_entry_type& cache) noexcept { + auto r = umul96_upper64(u, cache); + return {static_cast(r >> 32), + static_cast(r) == 0}; } static uint32_t compute_delta(const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - return static_cast(cache >> (64 - 1 - beta_minus_1)); + int beta) noexcept { + return static_cast(cache >> (64 - 1 - beta)); } - static bool compute_mul_parity(carrier_uint two_f, - const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - FMT_ASSERT(beta_minus_1 >= 1, ""); - FMT_ASSERT(beta_minus_1 < 64, ""); + static compute_mul_parity_result compute_mul_parity( + carrier_uint two_f, const cache_entry_type& cache, int beta) noexcept { + FMT_ASSERT(beta >= 1, ""); + FMT_ASSERT(beta < 64, ""); - return ((umul96_lower64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0; + auto r = umul96_lower64(two_f, cache); + return {((r >> (64 - beta)) & 1) != 0, + static_cast(r >> (32 - beta)) == 0}; } static carrier_uint compute_left_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { + const cache_entry_type& cache, int beta) noexcept { return static_cast( - (cache - (cache >> (float_info::significand_bits + 2))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1)); + (cache - (cache >> (num_significand_bits() + 2))) >> + (64 - num_significand_bits() - 1 - beta)); } static carrier_uint compute_right_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { + const cache_entry_type& cache, int beta) noexcept { return static_cast( - (cache + (cache >> (float_info::significand_bits + 1))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1)); + (cache + (cache >> (num_significand_bits() + 1))) >> + (64 - num_significand_bits() - 1 - beta)); } static carrier_uint compute_round_up_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { + const cache_entry_type& cache, int beta) noexcept { return (static_cast( - cache >> - (64 - float_info::significand_bits - 2 - beta_minus_1)) + + cache >> (64 - num_significand_bits() - 2 - beta)) + 1) / 2; } @@ -1126,13 +344,13 @@ template <> struct cache_accessor { template <> struct cache_accessor { using carrier_uint = float_info::carrier_uint; - using cache_entry_type = uint128_wrapper; + using cache_entry_type = uint128_fallback; - static uint128_wrapper get_cached_power(int k) FMT_NOEXCEPT { + static uint128_fallback get_cached_power(int k) noexcept { FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, "k is out of range"); - static constexpr const uint128_wrapper pow10_significands[] = { + static constexpr const uint128_fallback pow10_significands[] = { #if FMT_USE_FULL_CACHE_DRAGONBOX {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, {0x9faacf3df73609b1, 0x77b191618c54e9ad}, @@ -1482,278 +700,293 @@ template <> struct cache_accessor { {0x85a36366eb71f041, 0x47a6da2b7f864750}, {0xa70c3c40a64e6c51, 0x999090b65f67d924}, {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d}, - {0x82818f1281ed449f, 0xbff8f10e7a8921a4}, - {0xa321f2d7226895c7, 0xaff72d52192b6a0d}, - {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490}, - {0xfee50b7025c36a08, 0x02f236d04753d5b4}, - {0x9f4f2726179a2245, 0x01d762422c946590}, - {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5}, - {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2}, - {0x9b934c3b330c8577, 0x63cc55f49f88eb2f}, - {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb}, - {0xf316271c7fc3908a, 0x8bef464e3945ef7a}, - {0x97edd871cfda3a56, 0x97758bf0e3cbb5ac}, - {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317}, - {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd}, - {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a}, - {0xb975d6b6ee39e436, 0xb3e2fd538e122b44}, - {0xe7d34c64a9c85d44, 0x60dbbca87196b616}, - {0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd}, - {0xb51d13aea4a488dd, 0x6babab6398bdbe41}, - {0xe264589a4dcdab14, 0xc696963c7eed2dd1}, - {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2}, - {0xb0de65388cc8ada8, 0x3b25a55f43294bcb}, - {0xdd15fe86affad912, 0x49ef0eb713f39ebe}, - {0x8a2dbf142dfcc7ab, 0x6e3569326c784337}, - {0xacb92ed9397bf996, 0x49c2c37f07965404}, - {0xd7e77a8f87daf7fb, 0xdc33745ec97be906}, - {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3}, - {0xa8acd7c0222311bc, 0xc40832ea0d68ce0c}, - {0xd2d80db02aabd62b, 0xf50a3fa490c30190}, - {0x83c7088e1aab65db, 0x792667c6da79e0fa}, - {0xa4b8cab1a1563f52, 0x577001b891185938}, - {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86}, - {0x80b05e5ac60b6178, 0x544f8158315b05b4}, - {0xa0dc75f1778e39d6, 0x696361ae3db1c721}, - {0xc913936dd571c84c, 0x03bc3a19cd1e38e9}, - {0xfb5878494ace3a5f, 0x04ab48a04065c723}, - {0x9d174b2dcec0e47b, 0x62eb0d64283f9c76}, - {0xc45d1df942711d9a, 0x3ba5d0bd324f8394}, - {0xf5746577930d6500, 0xca8f44ec7ee36479}, - {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb}, - {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e}, - {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e}, - {0x95d04aee3b80ece5, 0xbba1f1d158724a12}, - {0xbb445da9ca61281f, 0x2a8a6e45ae8edc97}, - {0xea1575143cf97226, 0xf52d09d71a3293bd}, - {0x924d692ca61be758, 0x593c2626705f9c56}, - {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c}, - {0xe498f455c38b997a, 0x0b6dfb9c0f956447}, - {0x8edf98b59a373fec, 0x4724bd4189bd5eac}, - {0xb2977ee300c50fe7, 0x58edec91ec2cb657}, - {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed}, - {0x8b865b215899f46c, 0xbd79e0d20082ee74}, - {0xae67f1e9aec07187, 0xecd8590680a3aa11}, - {0xda01ee641a708de9, 0xe80e6f4820cc9495}, - {0x884134fe908658b2, 0x3109058d147fdcdd}, - {0xaa51823e34a7eede, 0xbd4b46f0599fd415}, - {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a}, - {0x850fadc09923329e, 0x03e2cf6bc604ddb0}, - {0xa6539930bf6bff45, 0x84db8346b786151c}, - {0xcfe87f7cef46ff16, 0xe612641865679a63}, - {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e}, - {0xa26da3999aef7749, 0xe3be5e330f38f09d}, - {0xcb090c8001ab551c, 0x5cadf5bfd3072cc5}, - {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6}, - {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa}, - {0xc646d63501a1511d, 0xb281e1fd541501b8}, - {0xf7d88bc24209a565, 0x1f225a7ca91a4226}, - {0x9ae757596946075f, 0x3375788de9b06958}, - {0xc1a12d2fc3978937, 0x0052d6b1641c83ae}, - {0xf209787bb47d6b84, 0xc0678c5dbd23a49a}, - {0x9745eb4d50ce6332, 0xf840b7ba963646e0}, - {0xbd176620a501fbff, 0xb650e5a93bc3d898}, - {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe}, - {0x93ba47c980e98cdf, 0xc66f336c36b10137}, - {0xb8a8d9bbe123f017, 0xb80b0047445d4184}, - {0xe6d3102ad96cec1d, 0xa60dc059157491e5}, - {0x9043ea1ac7e41392, 0x87c89837ad68db2f}, - {0xb454e4a179dd1877, 0x29babe4598c311fb}, - {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a}, - {0x8ce2529e2734bb1d, 0x1899e4a65f58660c}, - {0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f}, - {0xdc21a1171d42645d, 0x76707543f4fa1f73}, - {0x899504ae72497eba, 0x6a06494a791c53a8}, - {0xabfa45da0edbde69, 0x0487db9d17636892}, - {0xd6f8d7509292d603, 0x45a9d2845d3c42b6}, - {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2}, - {0xa7f26836f282b732, 0x8e6cac7768d7141e}, - {0xd1ef0244af2364ff, 0x3207d795430cd926}, - {0x8335616aed761f1f, 0x7f44e6bd49e807b8}, - {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6}, - {0xcd036837130890a1, 0x36dba887c37a8c0f}, - {0x802221226be55a64, 0xc2494954da2c9789}, - {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c}, - {0xc83553c5c8965d3d, 0x6f92829494e5acc7}, - {0xfa42a8b73abbf48c, 0xcb772339ba1f17f9}, - {0x9c69a97284b578d7, 0xff2a760414536efb}, - {0xc38413cf25e2d70d, 0xfef5138519684aba}, - {0xf46518c2ef5b8cd1, 0x7eb258665fc25d69}, - {0x98bf2f79d5993802, 0xef2f773ffbd97a61}, - {0xbeeefb584aff8603, 0xaafb550ffacfd8fa}, - {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38}, - {0x952ab45cfa97a0b2, 0xdd945a747bf26183}, - {0xba756174393d88df, 0x94f971119aeef9e4}, - {0xe912b9d1478ceb17, 0x7a37cd5601aab85d}, - {0x91abb422ccb812ee, 0xac62e055c10ab33a}, - {0xb616a12b7fe617aa, 0x577b986b314d6009}, - {0xe39c49765fdf9d94, 0xed5a7e85fda0b80b}, - {0x8e41ade9fbebc27d, 0x14588f13be847307}, - {0xb1d219647ae6b31c, 0x596eb2d8ae258fc8}, - {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb}, - {0x8aec23d680043bee, 0x25de7bb9480d5854}, - {0xada72ccc20054ae9, 0xaf561aa79a10ae6a}, - {0xd910f7ff28069da4, 0x1b2ba1518094da04}, - {0x87aa9aff79042286, 0x90fb44d2f05d0842}, - {0xa99541bf57452b28, 0x353a1607ac744a53}, - {0xd3fa922f2d1675f2, 0x42889b8997915ce8}, - {0x847c9b5d7c2e09b7, 0x69956135febada11}, - {0xa59bc234db398c25, 0x43fab9837e699095}, - {0xcf02b2c21207ef2e, 0x94f967e45e03f4bb}, - {0x8161afb94b44f57d, 0x1d1be0eebac278f5}, - {0xa1ba1ba79e1632dc, 0x6462d92a69731732}, - {0xca28a291859bbf93, 0x7d7b8f7503cfdcfe}, - {0xfcb2cb35e702af78, 0x5cda735244c3d43e}, - {0x9defbf01b061adab, 0x3a0888136afa64a7}, - {0xc56baec21c7a1916, 0x088aaa1845b8fdd0}, - {0xf6c69a72a3989f5b, 0x8aad549e57273d45}, - {0x9a3c2087a63f6399, 0x36ac54e2f678864b}, - {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd}, - {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5}, - {0x969eb7c47859e743, 0x9f644ae5a4b1b325}, - {0xbc4665b596706114, 0x873d5d9f0dde1fee}, - {0xeb57ff22fc0c7959, 0xa90cb506d155a7ea}, - {0x9316ff75dd87cbd8, 0x09a7f12442d588f2}, - {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f}, - {0xe5d3ef282a242e81, 0x8f1668c8a86da5fa}, - {0x8fa475791a569d10, 0xf96e017d694487bc}, - {0xb38d92d760ec4455, 0x37c981dcc395a9ac}, - {0xe070f78d3927556a, 0x85bbe253f47b1417}, - {0x8c469ab843b89562, 0x93956d7478ccec8e}, - {0xaf58416654a6babb, 0x387ac8d1970027b2}, - {0xdb2e51bfe9d0696a, 0x06997b05fcc0319e}, - {0x88fcf317f22241e2, 0x441fece3bdf81f03}, - {0xab3c2fddeeaad25a, 0xd527e81cad7626c3}, - {0xd60b3bd56a5586f1, 0x8a71e223d8d3b074}, - {0x85c7056562757456, 0xf6872d5667844e49}, - {0xa738c6bebb12d16c, 0xb428f8ac016561db}, - {0xd106f86e69d785c7, 0xe13336d701beba52}, - {0x82a45b450226b39c, 0xecc0024661173473}, - {0xa34d721642b06084, 0x27f002d7f95d0190}, - {0xcc20ce9bd35c78a5, 0x31ec038df7b441f4}, - {0xff290242c83396ce, 0x7e67047175a15271}, - {0x9f79a169bd203e41, 0x0f0062c6e984d386}, - {0xc75809c42c684dd1, 0x52c07b78a3e60868}, - {0xf92e0c3537826145, 0xa7709a56ccdf8a82}, - {0x9bbcc7a142b17ccb, 0x88a66076400bb691}, - {0xc2abf989935ddbfe, 0x6acff893d00ea435}, - {0xf356f7ebf83552fe, 0x0583f6b8c4124d43}, - {0x98165af37b2153de, 0xc3727a337a8b704a}, - {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c}, - {0xeda2ee1c7064130c, 0x1162def06f79df73}, - {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8}, - {0xb9a74a0637ce2ee1, 0x6d953e2bd7173692}, - {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437}, - {0x910ab1d4db9914a0, 0x1d9c9892400a22a2}, - {0xb54d5e4a127f59c8, 0x2503beb6d00cab4b}, - {0xe2a0b5dc971f303a, 0x2e44ae64840fd61d}, - {0x8da471a9de737e24, 0x5ceaecfed289e5d2}, - {0xb10d8e1456105dad, 0x7425a83e872c5f47}, - {0xdd50f1996b947518, 0xd12f124e28f77719}, - {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f}, - {0xace73cbfdc0bfb7b, 0x636cc64d1001550b}, - {0xd8210befd30efa5a, 0x3c47f7e05401aa4e}, - {0x8714a775e3e95c78, 0x65acfaec34810a71}, - {0xa8d9d1535ce3b396, 0x7f1839a741a14d0d}, - {0xd31045a8341ca07c, 0x1ede48111209a050}, - {0x83ea2b892091e44d, 0x934aed0aab460432}, - {0xa4e4b66b68b65d60, 0xf81da84d5617853f}, - {0xce1de40642e3f4b9, 0x36251260ab9d668e}, - {0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019}, - {0xa1075a24e4421730, 0xb24cf65b8612f81f}, - {0xc94930ae1d529cfc, 0xdee033f26797b627}, - {0xfb9b7cd9a4a7443c, 0x169840ef017da3b1}, - {0x9d412e0806e88aa5, 0x8e1f289560ee864e}, - {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2}, - {0xf5b5d7ec8acb58a2, 0xae10af696774b1db}, - {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29}, - {0xbff610b0cc6edd3f, 0x17fd090a58d32af3}, - {0xeff394dcff8a948e, 0xddfc4b4cef07f5b0}, - {0x95f83d0a1fb69cd9, 0x4abdaf101564f98e}, - {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1}, - {0xea53df5fd18d5513, 0x84c86189216dc5ed}, - {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4}, - {0xb7118682dbb66a77, 0x3fbc8c33221dc2a1}, - {0xe4d5e82392a40515, 0x0fabaf3feaa5334a}, - {0x8f05b1163ba6832d, 0x29cb4d87f2a7400e}, - {0xb2c71d5bca9023f8, 0x743e20e9ef511012}, - {0xdf78e4b2bd342cf6, 0x914da9246b255416}, - {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e}, - {0xae9672aba3d0c320, 0xa184ac2473b529b1}, - {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e}, - {0x8865899617fb1871, 0x7e2fa67c7a658892}, - {0xaa7eebfb9df9de8d, 0xddbb901b98feeab7}, - {0xd51ea6fa85785631, 0x552a74227f3ea565}, - {0x8533285c936b35de, 0xd53a88958f87275f}, - {0xa67ff273b8460356, 0x8a892abaf368f137}, - {0xd01fef10a657842c, 0x2d2b7569b0432d85}, - {0x8213f56a67f6b29b, 0x9c3b29620e29fc73}, - {0xa298f2c501f45f42, 0x8349f3ba91b47b8f}, - {0xcb3f2f7642717713, 0x241c70a936219a73}, - {0xfe0efb53d30dd4d7, 0xed238cd383aa0110}, - {0x9ec95d1463e8a506, 0xf4363804324a40aa}, - {0xc67bb4597ce2ce48, 0xb143c6053edcd0d5}, - {0xf81aa16fdc1b81da, 0xdd94b7868e94050a}, - {0x9b10a4e5e9913128, 0xca7cf2b4191c8326}, - {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0}, - {0xf24a01a73cf2dccf, 0xbc633b39673c8cec}, - {0x976e41088617ca01, 0xd5be0503e085d813}, - {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18}, - {0xec9c459d51852ba2, 0xddf8e7d60ed1219e}, - {0x93e1ab8252f33b45, 0xcabb90e5c942b503}, - {0xb8da1662e7b00a17, 0x3d6a751f3b936243}, - {0xe7109bfba19c0c9d, 0x0cc512670a783ad4}, - {0x906a617d450187e2, 0x27fb2b80668b24c5}, - {0xb484f9dc9641e9da, 0xb1f9f660802dedf6}, - {0xe1a63853bbd26451, 0x5e7873f8a0396973}, - {0x8d07e33455637eb2, 0xdb0b487b6423e1e8}, - {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62}, - {0xdc5c5301c56b75f7, 0x7641a140cc7810fb}, - {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d}, - {0xac2820d9623bf429, 0x546345fa9fbdcd44}, - {0xd732290fbacaf133, 0xa97c177947ad4095}, - {0x867f59a9d4bed6c0, 0x49ed8eabcccc485d}, - {0xa81f301449ee8c70, 0x5c68f256bfff5a74}, - {0xd226fc195c6a2f8c, 0x73832eec6fff3111}, - {0x83585d8fd9c25db7, 0xc831fd53c5ff7eab}, - {0xa42e74f3d032f525, 0xba3e7ca8b77f5e55}, - {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb}, - {0x80444b5e7aa7cf85, 0x7980d163cf5b81b3}, - {0xa0555e361951c366, 0xd7e105bcc332621f}, - {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7}, - {0xfa856334878fc150, 0xb14f98f6f0feb951}, - {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3}, - {0xc3b8358109e84f07, 0x0a862f80ec4700c8}, - {0xf4a642e14c6262c8, 0xcd27bb612758c0fa}, - {0x98e7e9cccfbd7dbd, 0x8038d51cb897789c}, - {0xbf21e44003acdd2c, 0xe0470a63e6bd56c3}, - {0xeeea5d5004981478, 0x1858ccfce06cac74}, - {0x95527a5202df0ccb, 0x0f37801e0c43ebc8}, - {0xbaa718e68396cffd, 0xd30560258f54e6ba}, - {0xe950df20247c83fd, 0x47c6b82ef32a2069}, - {0x91d28b7416cdd27e, 0x4cdc331d57fa5441}, - {0xb6472e511c81471d, 0xe0133fe4adf8e952}, - {0xe3d8f9e563a198e5, 0x58180fddd97723a6}, - {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648}, - {0xb201833b35d63f73, 0x2cd2cc6551e513da}, - {0xde81e40a034bcf4f, 0xf8077f7ea65e58d1}, - {0x8b112e86420f6191, 0xfb04afaf27faf782}, - {0xadd57a27d29339f6, 0x79c5db9af1f9b563}, - {0xd94ad8b1c7380874, 0x18375281ae7822bc}, - {0x87cec76f1c830548, 0x8f2293910d0b15b5}, - {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb22}, - {0xd433179d9c8cb841, 0x5fa60692a46151eb}, - {0x849feec281d7f328, 0xdbc7c41ba6bcd333}, - {0xa5c7ea73224deff3, 0x12b9b522906c0800}, - {0xcf39e50feae16bef, 0xd768226b34870a00}, - {0x81842f29f2cce375, 0xe6a1158300d46640}, - {0xa1e53af46f801c53, 0x60495ae3c1097fd0}, - {0xca5e89b18b602368, 0x385bb19cb14bdfc4}, - {0xfcf62c1dee382c42, 0x46729e03dd9ed7b5}, - {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d1}, - {0xc5a05277621be293, 0xc7098b7305241885}, - { 0xf70867153aa2db38, - 0xb8cbee4fc66d1ea7 } + {0x82818f1281ed449f, 0xbff8f10e7a8921a5}, + {0xa321f2d7226895c7, 0xaff72d52192b6a0e}, + {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764491}, + {0xfee50b7025c36a08, 0x02f236d04753d5b5}, + {0x9f4f2726179a2245, 0x01d762422c946591}, + {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef6}, + {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb3}, + {0x9b934c3b330c8577, 0x63cc55f49f88eb30}, + {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fc}, + {0xf316271c7fc3908a, 0x8bef464e3945ef7b}, + {0x97edd871cfda3a56, 0x97758bf0e3cbb5ad}, + {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea318}, + {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bde}, + {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6b}, + {0xb975d6b6ee39e436, 0xb3e2fd538e122b45}, + {0xe7d34c64a9c85d44, 0x60dbbca87196b617}, + {0x90e40fbeea1d3a4a, 0xbc8955e946fe31ce}, + {0xb51d13aea4a488dd, 0x6babab6398bdbe42}, + {0xe264589a4dcdab14, 0xc696963c7eed2dd2}, + {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca3}, + {0xb0de65388cc8ada8, 0x3b25a55f43294bcc}, + {0xdd15fe86affad912, 0x49ef0eb713f39ebf}, + {0x8a2dbf142dfcc7ab, 0x6e3569326c784338}, + {0xacb92ed9397bf996, 0x49c2c37f07965405}, + {0xd7e77a8f87daf7fb, 0xdc33745ec97be907}, + {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a4}, + {0xa8acd7c0222311bc, 0xc40832ea0d68ce0d}, + {0xd2d80db02aabd62b, 0xf50a3fa490c30191}, + {0x83c7088e1aab65db, 0x792667c6da79e0fb}, + {0xa4b8cab1a1563f52, 0x577001b891185939}, + {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87}, + {0x80b05e5ac60b6178, 0x544f8158315b05b5}, + {0xa0dc75f1778e39d6, 0x696361ae3db1c722}, + {0xc913936dd571c84c, 0x03bc3a19cd1e38ea}, + {0xfb5878494ace3a5f, 0x04ab48a04065c724}, + {0x9d174b2dcec0e47b, 0x62eb0d64283f9c77}, + {0xc45d1df942711d9a, 0x3ba5d0bd324f8395}, + {0xf5746577930d6500, 0xca8f44ec7ee3647a}, + {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecc}, + {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67f}, + {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101f}, + {0x95d04aee3b80ece5, 0xbba1f1d158724a13}, + {0xbb445da9ca61281f, 0x2a8a6e45ae8edc98}, + {0xea1575143cf97226, 0xf52d09d71a3293be}, + {0x924d692ca61be758, 0x593c2626705f9c57}, + {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836d}, + {0xe498f455c38b997a, 0x0b6dfb9c0f956448}, + {0x8edf98b59a373fec, 0x4724bd4189bd5ead}, + {0xb2977ee300c50fe7, 0x58edec91ec2cb658}, + {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ee}, + {0x8b865b215899f46c, 0xbd79e0d20082ee75}, + {0xae67f1e9aec07187, 0xecd8590680a3aa12}, + {0xda01ee641a708de9, 0xe80e6f4820cc9496}, + {0x884134fe908658b2, 0x3109058d147fdcde}, + {0xaa51823e34a7eede, 0xbd4b46f0599fd416}, + {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91b}, + {0x850fadc09923329e, 0x03e2cf6bc604ddb1}, + {0xa6539930bf6bff45, 0x84db8346b786151d}, + {0xcfe87f7cef46ff16, 0xe612641865679a64}, + {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07f}, + {0xa26da3999aef7749, 0xe3be5e330f38f09e}, + {0xcb090c8001ab551c, 0x5cadf5bfd3072cc6}, + {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f7}, + {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afb}, + {0xc646d63501a1511d, 0xb281e1fd541501b9}, + {0xf7d88bc24209a565, 0x1f225a7ca91a4227}, + {0x9ae757596946075f, 0x3375788de9b06959}, + {0xc1a12d2fc3978937, 0x0052d6b1641c83af}, + {0xf209787bb47d6b84, 0xc0678c5dbd23a49b}, + {0x9745eb4d50ce6332, 0xf840b7ba963646e1}, + {0xbd176620a501fbff, 0xb650e5a93bc3d899}, + {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebf}, + {0x93ba47c980e98cdf, 0xc66f336c36b10138}, + {0xb8a8d9bbe123f017, 0xb80b0047445d4185}, + {0xe6d3102ad96cec1d, 0xa60dc059157491e6}, + {0x9043ea1ac7e41392, 0x87c89837ad68db30}, + {0xb454e4a179dd1877, 0x29babe4598c311fc}, + {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67b}, + {0x8ce2529e2734bb1d, 0x1899e4a65f58660d}, + {0xb01ae745b101e9e4, 0x5ec05dcff72e7f90}, + {0xdc21a1171d42645d, 0x76707543f4fa1f74}, + {0x899504ae72497eba, 0x6a06494a791c53a9}, + {0xabfa45da0edbde69, 0x0487db9d17636893}, + {0xd6f8d7509292d603, 0x45a9d2845d3c42b7}, + {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3}, + {0xa7f26836f282b732, 0x8e6cac7768d7141f}, + {0xd1ef0244af2364ff, 0x3207d795430cd927}, + {0x8335616aed761f1f, 0x7f44e6bd49e807b9}, + {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a7}, + {0xcd036837130890a1, 0x36dba887c37a8c10}, + {0x802221226be55a64, 0xc2494954da2c978a}, + {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6d}, + {0xc83553c5c8965d3d, 0x6f92829494e5acc8}, + {0xfa42a8b73abbf48c, 0xcb772339ba1f17fa}, + {0x9c69a97284b578d7, 0xff2a760414536efc}, + {0xc38413cf25e2d70d, 0xfef5138519684abb}, + {0xf46518c2ef5b8cd1, 0x7eb258665fc25d6a}, + {0x98bf2f79d5993802, 0xef2f773ffbd97a62}, + {0xbeeefb584aff8603, 0xaafb550ffacfd8fb}, + {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf39}, + {0x952ab45cfa97a0b2, 0xdd945a747bf26184}, + {0xba756174393d88df, 0x94f971119aeef9e5}, + {0xe912b9d1478ceb17, 0x7a37cd5601aab85e}, + {0x91abb422ccb812ee, 0xac62e055c10ab33b}, + {0xb616a12b7fe617aa, 0x577b986b314d600a}, + {0xe39c49765fdf9d94, 0xed5a7e85fda0b80c}, + {0x8e41ade9fbebc27d, 0x14588f13be847308}, + {0xb1d219647ae6b31c, 0x596eb2d8ae258fc9}, + {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bc}, + {0x8aec23d680043bee, 0x25de7bb9480d5855}, + {0xada72ccc20054ae9, 0xaf561aa79a10ae6b}, + {0xd910f7ff28069da4, 0x1b2ba1518094da05}, + {0x87aa9aff79042286, 0x90fb44d2f05d0843}, + {0xa99541bf57452b28, 0x353a1607ac744a54}, + {0xd3fa922f2d1675f2, 0x42889b8997915ce9}, + {0x847c9b5d7c2e09b7, 0x69956135febada12}, + {0xa59bc234db398c25, 0x43fab9837e699096}, + {0xcf02b2c21207ef2e, 0x94f967e45e03f4bc}, + {0x8161afb94b44f57d, 0x1d1be0eebac278f6}, + {0xa1ba1ba79e1632dc, 0x6462d92a69731733}, + {0xca28a291859bbf93, 0x7d7b8f7503cfdcff}, + {0xfcb2cb35e702af78, 0x5cda735244c3d43f}, + {0x9defbf01b061adab, 0x3a0888136afa64a8}, + {0xc56baec21c7a1916, 0x088aaa1845b8fdd1}, + {0xf6c69a72a3989f5b, 0x8aad549e57273d46}, + {0x9a3c2087a63f6399, 0x36ac54e2f678864c}, + {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7de}, + {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d6}, + {0x969eb7c47859e743, 0x9f644ae5a4b1b326}, + {0xbc4665b596706114, 0x873d5d9f0dde1fef}, + {0xeb57ff22fc0c7959, 0xa90cb506d155a7eb}, + {0x9316ff75dd87cbd8, 0x09a7f12442d588f3}, + {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb30}, + {0xe5d3ef282a242e81, 0x8f1668c8a86da5fb}, + {0x8fa475791a569d10, 0xf96e017d694487bd}, + {0xb38d92d760ec4455, 0x37c981dcc395a9ad}, + {0xe070f78d3927556a, 0x85bbe253f47b1418}, + {0x8c469ab843b89562, 0x93956d7478ccec8f}, + {0xaf58416654a6babb, 0x387ac8d1970027b3}, + {0xdb2e51bfe9d0696a, 0x06997b05fcc0319f}, + {0x88fcf317f22241e2, 0x441fece3bdf81f04}, + {0xab3c2fddeeaad25a, 0xd527e81cad7626c4}, + {0xd60b3bd56a5586f1, 0x8a71e223d8d3b075}, + {0x85c7056562757456, 0xf6872d5667844e4a}, + {0xa738c6bebb12d16c, 0xb428f8ac016561dc}, + {0xd106f86e69d785c7, 0xe13336d701beba53}, + {0x82a45b450226b39c, 0xecc0024661173474}, + {0xa34d721642b06084, 0x27f002d7f95d0191}, + {0xcc20ce9bd35c78a5, 0x31ec038df7b441f5}, + {0xff290242c83396ce, 0x7e67047175a15272}, + {0x9f79a169bd203e41, 0x0f0062c6e984d387}, + {0xc75809c42c684dd1, 0x52c07b78a3e60869}, + {0xf92e0c3537826145, 0xa7709a56ccdf8a83}, + {0x9bbcc7a142b17ccb, 0x88a66076400bb692}, + {0xc2abf989935ddbfe, 0x6acff893d00ea436}, + {0xf356f7ebf83552fe, 0x0583f6b8c4124d44}, + {0x98165af37b2153de, 0xc3727a337a8b704b}, + {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5d}, + {0xeda2ee1c7064130c, 0x1162def06f79df74}, + {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba9}, + {0xb9a74a0637ce2ee1, 0x6d953e2bd7173693}, + {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0438}, + {0x910ab1d4db9914a0, 0x1d9c9892400a22a3}, + {0xb54d5e4a127f59c8, 0x2503beb6d00cab4c}, + {0xe2a0b5dc971f303a, 0x2e44ae64840fd61e}, + {0x8da471a9de737e24, 0x5ceaecfed289e5d3}, + {0xb10d8e1456105dad, 0x7425a83e872c5f48}, + {0xdd50f1996b947518, 0xd12f124e28f7771a}, + {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa70}, + {0xace73cbfdc0bfb7b, 0x636cc64d1001550c}, + {0xd8210befd30efa5a, 0x3c47f7e05401aa4f}, + {0x8714a775e3e95c78, 0x65acfaec34810a72}, + {0xa8d9d1535ce3b396, 0x7f1839a741a14d0e}, + {0xd31045a8341ca07c, 0x1ede48111209a051}, + {0x83ea2b892091e44d, 0x934aed0aab460433}, + {0xa4e4b66b68b65d60, 0xf81da84d56178540}, + {0xce1de40642e3f4b9, 0x36251260ab9d668f}, + {0x80d2ae83e9ce78f3, 0xc1d72b7c6b42601a}, + {0xa1075a24e4421730, 0xb24cf65b8612f820}, + {0xc94930ae1d529cfc, 0xdee033f26797b628}, + {0xfb9b7cd9a4a7443c, 0x169840ef017da3b2}, + {0x9d412e0806e88aa5, 0x8e1f289560ee864f}, + {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e3}, + {0xf5b5d7ec8acb58a2, 0xae10af696774b1dc}, + {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef2a}, + {0xbff610b0cc6edd3f, 0x17fd090a58d32af4}, + {0xeff394dcff8a948e, 0xddfc4b4cef07f5b1}, + {0x95f83d0a1fb69cd9, 0x4abdaf101564f98f}, + {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f2}, + {0xea53df5fd18d5513, 0x84c86189216dc5ee}, + {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb5}, + {0xb7118682dbb66a77, 0x3fbc8c33221dc2a2}, + {0xe4d5e82392a40515, 0x0fabaf3feaa5334b}, + {0x8f05b1163ba6832d, 0x29cb4d87f2a7400f}, + {0xb2c71d5bca9023f8, 0x743e20e9ef511013}, + {0xdf78e4b2bd342cf6, 0x914da9246b255417}, + {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548f}, + {0xae9672aba3d0c320, 0xa184ac2473b529b2}, + {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741f}, + {0x8865899617fb1871, 0x7e2fa67c7a658893}, + {0xaa7eebfb9df9de8d, 0xddbb901b98feeab8}, + {0xd51ea6fa85785631, 0x552a74227f3ea566}, + {0x8533285c936b35de, 0xd53a88958f872760}, + {0xa67ff273b8460356, 0x8a892abaf368f138}, + {0xd01fef10a657842c, 0x2d2b7569b0432d86}, + {0x8213f56a67f6b29b, 0x9c3b29620e29fc74}, + {0xa298f2c501f45f42, 0x8349f3ba91b47b90}, + {0xcb3f2f7642717713, 0x241c70a936219a74}, + {0xfe0efb53d30dd4d7, 0xed238cd383aa0111}, + {0x9ec95d1463e8a506, 0xf4363804324a40ab}, + {0xc67bb4597ce2ce48, 0xb143c6053edcd0d6}, + {0xf81aa16fdc1b81da, 0xdd94b7868e94050b}, + {0x9b10a4e5e9913128, 0xca7cf2b4191c8327}, + {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f1}, + {0xf24a01a73cf2dccf, 0xbc633b39673c8ced}, + {0x976e41088617ca01, 0xd5be0503e085d814}, + {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e19}, + {0xec9c459d51852ba2, 0xddf8e7d60ed1219f}, + {0x93e1ab8252f33b45, 0xcabb90e5c942b504}, + {0xb8da1662e7b00a17, 0x3d6a751f3b936244}, + {0xe7109bfba19c0c9d, 0x0cc512670a783ad5}, + {0x906a617d450187e2, 0x27fb2b80668b24c6}, + {0xb484f9dc9641e9da, 0xb1f9f660802dedf7}, + {0xe1a63853bbd26451, 0x5e7873f8a0396974}, + {0x8d07e33455637eb2, 0xdb0b487b6423e1e9}, + {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda63}, + {0xdc5c5301c56b75f7, 0x7641a140cc7810fc}, + {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9e}, + {0xac2820d9623bf429, 0x546345fa9fbdcd45}, + {0xd732290fbacaf133, 0xa97c177947ad4096}, + {0x867f59a9d4bed6c0, 0x49ed8eabcccc485e}, + {0xa81f301449ee8c70, 0x5c68f256bfff5a75}, + {0xd226fc195c6a2f8c, 0x73832eec6fff3112}, + {0x83585d8fd9c25db7, 0xc831fd53c5ff7eac}, + {0xa42e74f3d032f525, 0xba3e7ca8b77f5e56}, + {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35ec}, + {0x80444b5e7aa7cf85, 0x7980d163cf5b81b4}, + {0xa0555e361951c366, 0xd7e105bcc3326220}, + {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa8}, + {0xfa856334878fc150, 0xb14f98f6f0feb952}, + {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d4}, + {0xc3b8358109e84f07, 0x0a862f80ec4700c9}, + {0xf4a642e14c6262c8, 0xcd27bb612758c0fb}, + {0x98e7e9cccfbd7dbd, 0x8038d51cb897789d}, + {0xbf21e44003acdd2c, 0xe0470a63e6bd56c4}, + {0xeeea5d5004981478, 0x1858ccfce06cac75}, + {0x95527a5202df0ccb, 0x0f37801e0c43ebc9}, + {0xbaa718e68396cffd, 0xd30560258f54e6bb}, + {0xe950df20247c83fd, 0x47c6b82ef32a206a}, + {0x91d28b7416cdd27e, 0x4cdc331d57fa5442}, + {0xb6472e511c81471d, 0xe0133fe4adf8e953}, + {0xe3d8f9e563a198e5, 0x58180fddd97723a7}, + {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7649}, + {0xb201833b35d63f73, 0x2cd2cc6551e513db}, + {0xde81e40a034bcf4f, 0xf8077f7ea65e58d2}, + {0x8b112e86420f6191, 0xfb04afaf27faf783}, + {0xadd57a27d29339f6, 0x79c5db9af1f9b564}, + {0xd94ad8b1c7380874, 0x18375281ae7822bd}, + {0x87cec76f1c830548, 0x8f2293910d0b15b6}, + {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb23}, + {0xd433179d9c8cb841, 0x5fa60692a46151ec}, + {0x849feec281d7f328, 0xdbc7c41ba6bcd334}, + {0xa5c7ea73224deff3, 0x12b9b522906c0801}, + {0xcf39e50feae16bef, 0xd768226b34870a01}, + {0x81842f29f2cce375, 0xe6a1158300d46641}, + {0xa1e53af46f801c53, 0x60495ae3c1097fd1}, + {0xca5e89b18b602368, 0x385bb19cb14bdfc5}, + {0xfcf62c1dee382c42, 0x46729e03dd9ed7b6}, + {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d2}, + {0xc5a05277621be293, 0xc7098b7305241886}, + {0xf70867153aa2db38, 0xb8cbee4fc66d1ea8}, + {0x9a65406d44a5c903, 0x737f74f1dc043329}, + {0xc0fe908895cf3b44, 0x505f522e53053ff3}, + {0xf13e34aabb430a15, 0x647726b9e7c68ff0}, + {0x96c6e0eab509e64d, 0x5eca783430dc19f6}, + {0xbc789925624c5fe0, 0xb67d16413d132073}, + {0xeb96bf6ebadf77d8, 0xe41c5bd18c57e890}, + {0x933e37a534cbaae7, 0x8e91b962f7b6f15a}, + {0xb80dc58e81fe95a1, 0x723627bbb5a4adb1}, + {0xe61136f2227e3b09, 0xcec3b1aaa30dd91d}, + {0x8fcac257558ee4e6, 0x213a4f0aa5e8a7b2}, + {0xb3bd72ed2af29e1f, 0xa988e2cd4f62d19e}, + {0xe0accfa875af45a7, 0x93eb1b80a33b8606}, + {0x8c6c01c9498d8b88, 0xbc72f130660533c4}, + {0xaf87023b9bf0ee6a, 0xeb8fad7c7f8680b5}, + { 0xdb68c2ca82ed2a05, + 0xa67398db9f6820e2 } #else {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, {0xce5d73ff402d98e3, 0xfb0a3d212dc81290}, @@ -1768,17 +1001,17 @@ template <> struct cache_accessor { {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, {0xc350000000000000, 0x0000000000000000}, {0x9dc5ada82b70b59d, 0xf020000000000000}, - {0xfee50b7025c36a08, 0x02f236d04753d5b4}, - {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86}, - {0xa6539930bf6bff45, 0x84db8346b786151c}, - {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2}, - {0xd910f7ff28069da4, 0x1b2ba1518094da04}, - {0xaf58416654a6babb, 0x387ac8d1970027b2}, - {0x8da471a9de737e24, 0x5ceaecfed289e5d2}, - {0xe4d5e82392a40515, 0x0fabaf3feaa5334a}, - {0xb8da1662e7b00a17, 0x3d6a751f3b936243}, - { 0x95527a5202df0ccb, - 0x0f37801e0c43ebc8 } + {0xfee50b7025c36a08, 0x02f236d04753d5b5}, + {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87}, + {0xa6539930bf6bff45, 0x84db8346b786151d}, + {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3}, + {0xd910f7ff28069da4, 0x1b2ba1518094da05}, + {0xaf58416654a6babb, 0x387ac8d1970027b3}, + {0x8da471a9de737e24, 0x5ceaecfed289e5d3}, + {0xe4d5e82392a40515, 0x0fabaf3feaa5334b}, + {0xb8da1662e7b00a17, 0x3d6a751f3b936244}, + {0x95527a5202df0ccb, 0x0f37801e0c43ebc9}, + {0xf13e34aabb430a15, 0x647726b9e7c68ff0} #endif }; @@ -1796,15 +1029,6 @@ template <> struct cache_accessor { 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed, 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9}; - static constexpr const uint32_t pow10_recovery_errors[] = { - 0x50001400, 0x54044100, 0x54014555, 0x55954415, 0x54115555, 0x00000001, - 0x50000000, 0x00104000, 0x54010004, 0x05004001, 0x55555544, 0x41545555, - 0x54040551, 0x15445545, 0x51555514, 0x10000015, 0x00101100, 0x01100015, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04450514, 0x45414110, - 0x55555145, 0x50544050, 0x15040155, 0x11054140, 0x50111514, 0x11451454, - 0x00400541, 0x00000000, 0x55555450, 0x10056551, 0x10054011, 0x55551014, - 0x69514555, 0x05151109, 0x00155555}; - static const int compression_ratio = 27; // Compute base index. @@ -1813,7 +1037,7 @@ template <> struct cache_accessor { int offset = k - kb; // Get base cache. - uint128_wrapper base_cache = pow10_significands[cache_index]; + uint128_fallback base_cache = pow10_significands[cache_index]; if (offset == 0) return base_cache; // Compute the required amount of bit-shift. @@ -1822,9 +1046,8 @@ template <> struct cache_accessor { // Try to recover the real cache. uint64_t pow5 = powers_of_5_64[offset]; - uint128_wrapper recovered_cache = umul128(base_cache.high(), pow5); - uint128_wrapper middle_low = - umul128(base_cache.low() - (kb < 0 ? 1u : 0u), pow5); + uint128_fallback recovered_cache = umul128(base_cache.high(), pow5); + uint128_fallback middle_low = umul128(base_cache.low(), pow5); recovered_cache += middle_low.high(); @@ -1832,227 +1055,153 @@ template <> struct cache_accessor { uint64_t middle_to_low = recovered_cache.low() << (64 - alpha); recovered_cache = - uint128_wrapper{(recovered_cache.low() >> alpha) | high_to_middle, - ((middle_low.low() >> alpha) | middle_to_low)}; - - if (kb < 0) recovered_cache += 1; - - // Get error. - int error_idx = (k - float_info::min_k) / 16; - uint32_t error = (pow10_recovery_errors[error_idx] >> - ((k - float_info::min_k) % 16) * 2) & - 0x3; - - // Add the error back. - FMT_ASSERT(recovered_cache.low() + error >= recovered_cache.low(), ""); - return {recovered_cache.high(), recovered_cache.low() + error}; + uint128_fallback{(recovered_cache.low() >> alpha) | high_to_middle, + ((middle_low.low() >> alpha) | middle_to_low)}; + FMT_ASSERT(recovered_cache.low() + 1 != 0, ""); + return {recovered_cache.high(), recovered_cache.low() + 1}; #endif } - static carrier_uint compute_mul(carrier_uint u, - const cache_entry_type& cache) FMT_NOEXCEPT { - return umul192_upper64(u, cache); + struct compute_mul_result { + carrier_uint result; + bool is_integer; + }; + struct compute_mul_parity_result { + bool parity; + bool is_integer; + }; + + static compute_mul_result compute_mul( + carrier_uint u, const cache_entry_type& cache) noexcept { + auto r = umul192_upper128(u, cache); + return {r.high(), r.low() == 0}; } static uint32_t compute_delta(cache_entry_type const& cache, - int beta_minus_1) FMT_NOEXCEPT { - return static_cast(cache.high() >> (64 - 1 - beta_minus_1)); + int beta) noexcept { + return static_cast(cache.high() >> (64 - 1 - beta)); } - static bool compute_mul_parity(carrier_uint two_f, - const cache_entry_type& cache, - int beta_minus_1) FMT_NOEXCEPT { - FMT_ASSERT(beta_minus_1 >= 1, ""); - FMT_ASSERT(beta_minus_1 < 64, ""); + static compute_mul_parity_result compute_mul_parity( + carrier_uint two_f, const cache_entry_type& cache, int beta) noexcept { + FMT_ASSERT(beta >= 1, ""); + FMT_ASSERT(beta < 64, ""); - return ((umul192_middle64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0; + auto r = umul192_lower128(two_f, cache); + return {((r.high() >> (64 - beta)) & 1) != 0, + ((r.high() << beta) | (r.low() >> (64 - beta))) == 0}; } static carrier_uint compute_left_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { + const cache_entry_type& cache, int beta) noexcept { return (cache.high() - - (cache.high() >> (float_info::significand_bits + 2))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1); + (cache.high() >> (num_significand_bits() + 2))) >> + (64 - num_significand_bits() - 1 - beta); } static carrier_uint compute_right_endpoint_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { + const cache_entry_type& cache, int beta) noexcept { return (cache.high() + - (cache.high() >> (float_info::significand_bits + 1))) >> - (64 - float_info::significand_bits - 1 - beta_minus_1); + (cache.high() >> (num_significand_bits() + 1))) >> + (64 - num_significand_bits() - 1 - beta); } static carrier_uint compute_round_up_for_shorter_interval_case( - const cache_entry_type& cache, int beta_minus_1) FMT_NOEXCEPT { - return ((cache.high() >> - (64 - float_info::significand_bits - 2 - beta_minus_1)) + + const cache_entry_type& cache, int beta) noexcept { + return ((cache.high() >> (64 - num_significand_bits() - 2 - beta)) + 1) / 2; } }; -// Various integer checks -template -bool is_left_endpoint_integer_shorter_interval(int exponent) FMT_NOEXCEPT { - return exponent >= - float_info< - T>::case_shorter_interval_left_endpoint_lower_threshold && - exponent <= - float_info::case_shorter_interval_left_endpoint_upper_threshold; -} -template -bool is_endpoint_integer(typename float_info::carrier_uint two_f, - int exponent, int minus_k) FMT_NOEXCEPT { - if (exponent < float_info::case_fc_pm_half_lower_threshold) return false; - // For k >= 0. - if (exponent <= float_info::case_fc_pm_half_upper_threshold) return true; - // For k < 0. - if (exponent > float_info::divisibility_check_by_5_threshold) return false; - return divisible_by_power_of_5(two_f, minus_k); +FMT_FUNC uint128_fallback get_cached_power(int k) noexcept { + return cache_accessor::get_cached_power(k); } -template -bool is_center_integer(typename float_info::carrier_uint two_f, int exponent, - int minus_k) FMT_NOEXCEPT { - // Exponent for 5 is negative. - if (exponent > float_info::divisibility_check_by_5_threshold) return false; - if (exponent > float_info::case_fc_upper_threshold) - return divisible_by_power_of_5(two_f, minus_k); - // Both exponents are nonnegative. - if (exponent >= float_info::case_fc_lower_threshold) return true; - // Exponent for 2 is negative. - return divisible_by_power_of_2(two_f, minus_k - exponent + 1); +// Various integer checks +template +bool is_left_endpoint_integer_shorter_interval(int exponent) noexcept { + const int case_shorter_interval_left_endpoint_lower_threshold = 2; + const int case_shorter_interval_left_endpoint_upper_threshold = 3; + return exponent >= case_shorter_interval_left_endpoint_lower_threshold && + exponent <= case_shorter_interval_left_endpoint_upper_threshold; } // Remove trailing zeros from n and return the number of zeros removed (float) -FMT_INLINE int remove_trailing_zeros(uint32_t& n) FMT_NOEXCEPT { -#ifdef FMT_BUILTIN_CTZ - int t = FMT_BUILTIN_CTZ(n); -#else - int t = ctz(n); -#endif - if (t > float_info::max_trailing_zeros) - t = float_info::max_trailing_zeros; - - const uint32_t mod_inv1 = 0xcccccccd; - const uint32_t max_quotient1 = 0x33333333; - const uint32_t mod_inv2 = 0xc28f5c29; - const uint32_t max_quotient2 = 0x0a3d70a3; - - int s = 0; - for (; s < t - 1; s += 2) { - if (n * mod_inv2 > max_quotient2) break; - n *= mod_inv2; - } - if (s < t && n * mod_inv1 <= max_quotient1) { - n *= mod_inv1; - ++s; +FMT_INLINE int remove_trailing_zeros(uint32_t& n, int s = 0) noexcept { + FMT_ASSERT(n != 0, ""); + // Modular inverse of 5 (mod 2^32): (mod_inv_5 * 5) mod 2^32 = 1. + constexpr uint32_t mod_inv_5 = 0xcccccccd; + constexpr uint32_t mod_inv_25 = 0xc28f5c29; // = mod_inv_5 * mod_inv_5 + + while (true) { + auto q = rotr(n * mod_inv_25, 2); + if (q > max_value() / 100) break; + n = q; + s += 2; + } + auto q = rotr(n * mod_inv_5, 1); + if (q <= max_value() / 10) { + n = q; + s |= 1; } - n >>= s; return s; } // Removes trailing zeros and returns the number of zeros removed (double) -FMT_INLINE int remove_trailing_zeros(uint64_t& n) FMT_NOEXCEPT { -#ifdef FMT_BUILTIN_CTZLL - int t = FMT_BUILTIN_CTZLL(n); -#else - int t = ctzll(n); -#endif - if (t > float_info::max_trailing_zeros) - t = float_info::max_trailing_zeros; - // Divide by 10^8 and reduce to 32-bits - // Since ret_value.significand <= (2^64 - 1) / 1000 < 10^17, - // both of the quotient and the r should fit in 32-bits - - const uint32_t mod_inv1 = 0xcccccccd; - const uint32_t max_quotient1 = 0x33333333; - const uint64_t mod_inv8 = 0xc767074b22e90e21; - const uint64_t max_quotient8 = 0x00002af31dc46118; - - // If the number is divisible by 1'0000'0000, work with the quotient - if (t >= 8) { - auto quotient_candidate = n * mod_inv8; - - if (quotient_candidate <= max_quotient8) { - auto quotient = static_cast(quotient_candidate >> 8); - - int s = 8; - for (; s < t; ++s) { - if (quotient * mod_inv1 > max_quotient1) break; - quotient *= mod_inv1; - } - quotient >>= (s - 8); - n = quotient; - return s; - } - } - - // Otherwise, work with the remainder - auto quotient = static_cast(n / 100000000); - auto remainder = static_cast(n - 100000000 * quotient); - - if (t == 0 || remainder * mod_inv1 > max_quotient1) { - return 0; - } - remainder *= mod_inv1; +FMT_INLINE int remove_trailing_zeros(uint64_t& n) noexcept { + FMT_ASSERT(n != 0, ""); - if (t == 1 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 1) + quotient * 10000000ull; - return 1; - } - remainder *= mod_inv1; + // This magic number is ceil(2^90 / 10^8). + constexpr uint64_t magic_number = 12379400392853802749ull; + auto nm = umul128(n, magic_number); - if (t == 2 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 2) + quotient * 1000000ull; - return 2; + // Is n is divisible by 10^8? + if ((nm.high() & ((1ull << (90 - 64)) - 1)) == 0 && nm.low() < magic_number) { + // If yes, work with the quotient... + auto n32 = static_cast(nm.high() >> (90 - 64)); + // ... and use the 32 bit variant of the function + int s = remove_trailing_zeros(n32, 8); + n = n32; + return s; } - remainder *= mod_inv1; - if (t == 3 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 3) + quotient * 100000ull; - return 3; - } - remainder *= mod_inv1; - - if (t == 4 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 4) + quotient * 10000ull; - return 4; - } - remainder *= mod_inv1; + // If n is not divisible by 10^8, work with n itself. + constexpr uint64_t mod_inv_5 = 0xcccccccccccccccd; + constexpr uint64_t mod_inv_25 = 0x8f5c28f5c28f5c29; // = mod_inv_5 * mod_inv_5 - if (t == 5 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 5) + quotient * 1000ull; - return 5; + int s = 0; + while (true) { + auto q = rotr(n * mod_inv_25, 2); + if (q > max_value() / 100) break; + n = q; + s += 2; } - remainder *= mod_inv1; - - if (t == 6 || remainder * mod_inv1 > max_quotient1) { - n = (remainder >> 6) + quotient * 100ull; - return 6; + auto q = rotr(n * mod_inv_5, 1); + if (q <= max_value() / 10) { + n = q; + s |= 1; } - remainder *= mod_inv1; - n = (remainder >> 7) + quotient * 10ull; - return 7; + return s; } // The main algorithm for shorter interval case -template -FMT_INLINE decimal_fp shorter_interval_case(int exponent) FMT_NOEXCEPT { +template +FMT_INLINE decimal_fp shorter_interval_case(int exponent) noexcept { decimal_fp ret_value; // Compute k and beta const int minus_k = floor_log10_pow2_minus_log10_4_over_3(exponent); - const int beta_minus_1 = exponent + floor_log2_pow10(-minus_k); + const int beta = exponent + floor_log2_pow10(-minus_k); // Compute xi and zi using cache_entry_type = typename cache_accessor::cache_entry_type; const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); auto xi = cache_accessor::compute_left_endpoint_for_shorter_interval_case( - cache, beta_minus_1); + cache, beta); auto zi = cache_accessor::compute_right_endpoint_for_shorter_interval_case( - cache, beta_minus_1); + cache, beta); // If the left endpoint is not an integer, increase it if (!is_left_endpoint_integer_shorter_interval(exponent)) ++xi; @@ -2069,8 +1218,8 @@ FMT_INLINE decimal_fp shorter_interval_case(int exponent) FMT_NOEXCEPT { // Otherwise, compute the round-up of y ret_value.significand = - cache_accessor::compute_round_up_for_shorter_interval_case( - cache, beta_minus_1); + cache_accessor::compute_round_up_for_shorter_interval_case(cache, + beta); ret_value.exponent = minus_k; // When tie occurs, choose one of them according to the rule @@ -2085,7 +1234,7 @@ FMT_INLINE decimal_fp shorter_interval_case(int exponent) FMT_NOEXCEPT { return ret_value; } -template decimal_fp to_decimal(T x) FMT_NOEXCEPT { +template decimal_fp to_decimal(T x) noexcept { // Step 1: integer promotion & Schubfach multiplier calculation. using carrier_uint = typename float_info::carrier_uint; @@ -2094,23 +1243,25 @@ template decimal_fp to_decimal(T x) FMT_NOEXCEPT { // Extract significand bits and exponent bits. const carrier_uint significand_mask = - (static_cast(1) << float_info::significand_bits) - 1; + (static_cast(1) << num_significand_bits()) - 1; carrier_uint significand = (br & significand_mask); - int exponent = static_cast((br & exponent_mask()) >> - float_info::significand_bits); + int exponent = + static_cast((br & exponent_mask()) >> num_significand_bits()); if (exponent != 0) { // Check if normal. - exponent += float_info::exponent_bias - float_info::significand_bits; + exponent -= exponent_bias() + num_significand_bits(); // Shorter interval case; proceed like Schubfach. + // In fact, when exponent == 1 and significand == 0, the interval is + // regular. However, it can be shown that the end-results are anyway same. if (significand == 0) return shorter_interval_case(exponent); - significand |= - (static_cast(1) << float_info::significand_bits); + significand |= (static_cast(1) << num_significand_bits()); } else { // Subnormal case; the interval is always regular. if (significand == 0) return {0, 0}; - exponent = float_info::min_exponent - float_info::significand_bits; + exponent = + std::numeric_limits::min_exponent - num_significand_bits() - 1; } const bool include_left_endpoint = (significand % 2 == 0); @@ -2119,413 +1270,104 @@ template decimal_fp to_decimal(T x) FMT_NOEXCEPT { // Compute k and beta. const int minus_k = floor_log10_pow2(exponent) - float_info::kappa; const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); - const int beta_minus_1 = exponent + floor_log2_pow10(-minus_k); + const int beta = exponent + floor_log2_pow10(-minus_k); - // Compute zi and deltai + // Compute zi and deltai. // 10^kappa <= deltai < 10^(kappa + 1) - const uint32_t deltai = cache_accessor::compute_delta(cache, beta_minus_1); + const uint32_t deltai = cache_accessor::compute_delta(cache, beta); const carrier_uint two_fc = significand << 1; - const carrier_uint two_fr = two_fc | 1; - const carrier_uint zi = - cache_accessor::compute_mul(two_fr << beta_minus_1, cache); - // Step 2: Try larger divisor; remove trailing zeros if necessary + // For the case of binary32, the result of integer check is not correct for + // 29711844 * 2^-82 + // = 6.1442653300000000008655037797566933477355632930994033813476... * 10^-18 + // and 29711844 * 2^-81 + // = 1.2288530660000000001731007559513386695471126586198806762695... * 10^-17, + // and they are the unique counterexamples. However, since 29711844 is even, + // this does not cause any problem for the endpoints calculations; it can only + // cause a problem when we need to perform integer check for the center. + // Fortunately, with these inputs, that branch is never executed, so we are + // fine. + const typename cache_accessor::compute_mul_result z_mul = + cache_accessor::compute_mul((two_fc | 1) << beta, cache); + + // Step 2: Try larger divisor; remove trailing zeros if necessary. // Using an upper bound on zi, we might be able to optimize the division - // better than the compiler; we are computing zi / big_divisor here + // better than the compiler; we are computing zi / big_divisor here. decimal_fp ret_value; - ret_value.significand = divide_by_10_to_kappa_plus_1(zi); - uint32_t r = static_cast(zi - float_info::big_divisor * - ret_value.significand); + ret_value.significand = divide_by_10_to_kappa_plus_1(z_mul.result); + uint32_t r = static_cast(z_mul.result - float_info::big_divisor * + ret_value.significand); - if (r > deltai) { - goto small_divisor_case_label; - } else if (r < deltai) { - // Exclude the right endpoint if necessary - if (r == 0 && !include_right_endpoint && - is_endpoint_integer(two_fr, exponent, minus_k)) { + if (r < deltai) { + // Exclude the right endpoint if necessary. + if (r == 0 && (z_mul.is_integer & !include_right_endpoint)) { --ret_value.significand; r = float_info::big_divisor; goto small_divisor_case_label; } + } else if (r > deltai) { + goto small_divisor_case_label; } else { - // r == deltai; compare fractional parts - // Check conditions in the order different from the paper - // to take advantage of short-circuiting - const carrier_uint two_fl = two_fc - 1; - if ((!include_left_endpoint || - !is_endpoint_integer(two_fl, exponent, minus_k)) && - !cache_accessor::compute_mul_parity(two_fl, cache, beta_minus_1)) { + // r == deltai; compare fractional parts. + const typename cache_accessor::compute_mul_parity_result x_mul = + cache_accessor::compute_mul_parity(two_fc - 1, cache, beta); + + if (!(x_mul.parity | (x_mul.is_integer & include_left_endpoint))) goto small_divisor_case_label; - } } ret_value.exponent = minus_k + float_info::kappa + 1; - // We may need to remove trailing zeros + // We may need to remove trailing zeros. ret_value.exponent += remove_trailing_zeros(ret_value.significand); return ret_value; - // Step 3: Find the significand with the smaller divisor + // Step 3: Find the significand with the smaller divisor. small_divisor_case_label: ret_value.significand *= 10; ret_value.exponent = minus_k + float_info::kappa; - const uint32_t mask = (1u << float_info::kappa) - 1; - auto dist = r - (deltai / 2) + (float_info::small_divisor / 2); - - // Is dist divisible by 2^kappa? - if ((dist & mask) == 0) { - const bool approx_y_parity = - ((dist ^ (float_info::small_divisor / 2)) & 1) != 0; - dist >>= float_info::kappa; - - // Is dist divisible by 5^kappa? - if (check_divisibility_and_divide_by_pow5::kappa>(dist)) { - ret_value.significand += dist; - - // Check z^(f) >= epsilon^(f) - // We have either yi == zi - epsiloni or yi == (zi - epsiloni) - 1, - // where yi == zi - epsiloni if and only if z^(f) >= epsilon^(f) - // Since there are only 2 possibilities, we only need to care about the - // parity. Also, zi and r should have the same parity since the divisor - // is an even number - if (cache_accessor::compute_mul_parity(two_fc, cache, beta_minus_1) != - approx_y_parity) { - --ret_value.significand; - } else { - // If z^(f) >= epsilon^(f), we might have a tie - // when z^(f) == epsilon^(f), or equivalently, when y is an integer - if (is_center_integer(two_fc, exponent, minus_k)) { - ret_value.significand = ret_value.significand % 2 == 0 - ? ret_value.significand - : ret_value.significand - 1; - } - } - } - // Is dist not divisible by 5^kappa? - else { - ret_value.significand += dist; - } - } - // Is dist not divisible by 2^kappa? - else { - // Since we know dist is small, we might be able to optimize the division - // better than the compiler; we are computing dist / small_divisor here - ret_value.significand += - small_division_by_pow10::kappa>(dist); - } + uint32_t dist = r - (deltai / 2) + (float_info::small_divisor / 2); + const bool approx_y_parity = + ((dist ^ (float_info::small_divisor / 2)) & 1) != 0; + + // Is dist divisible by 10^kappa? + const bool divisible_by_small_divisor = + check_divisibility_and_divide_by_pow10::kappa>(dist); + + // Add dist / 10^kappa to the significand. + ret_value.significand += dist; + + if (!divisible_by_small_divisor) return ret_value; + + // Check z^(f) >= epsilon^(f). + // We have either yi == zi - epsiloni or yi == (zi - epsiloni) - 1, + // where yi == zi - epsiloni if and only if z^(f) >= epsilon^(f). + // Since there are only 2 possibilities, we only need to care about the + // parity. Also, zi and r should have the same parity since the divisor + // is an even number. + const auto y_mul = cache_accessor::compute_mul_parity(two_fc, cache, beta); + + // If z^(f) >= epsilon^(f), we might have a tie when z^(f) == epsilon^(f), + // or equivalently, when y is an integer. + if (y_mul.parity != approx_y_parity) + --ret_value.significand; + else if (y_mul.is_integer & (ret_value.significand % 2 != 0)) + --ret_value.significand; return ret_value; } } // namespace dragonbox - -// Formats a floating-point number using a variation of the Fixed-Precision -// Positive Floating-Point Printout ((FPP)^2) algorithm by Steele & White: -// https://fmt.dev/papers/p372-steele.pdf. -FMT_CONSTEXPR20 inline void format_dragon(fp value, bool is_predecessor_closer, - int num_digits, buffer& buf, - int& exp10) { - bigint numerator; // 2 * R in (FPP)^2. - bigint denominator; // 2 * S in (FPP)^2. - // lower and upper are differences between value and corresponding boundaries. - bigint lower; // (M^- in (FPP)^2). - bigint upper_store; // upper's value if different from lower. - bigint* upper = nullptr; // (M^+ in (FPP)^2). - // Shift numerator and denominator by an extra bit or two (if lower boundary - // is closer) to make lower and upper integers. This eliminates multiplication - // by 2 during later computations. - int shift = is_predecessor_closer ? 2 : 1; - uint64_t significand = value.f << shift; - if (value.e >= 0) { - numerator.assign(significand); - numerator <<= value.e; - lower.assign(1); - lower <<= value.e; - if (shift != 1) { - upper_store.assign(1); - upper_store <<= value.e + 1; - upper = &upper_store; - } - denominator.assign_pow10(exp10); - denominator <<= shift; - } else if (exp10 < 0) { - numerator.assign_pow10(-exp10); - lower.assign(numerator); - if (shift != 1) { - upper_store.assign(numerator); - upper_store <<= 1; - upper = &upper_store; - } - numerator *= significand; - denominator.assign(1); - denominator <<= shift - value.e; - } else { - numerator.assign(significand); - denominator.assign_pow10(exp10); - denominator <<= shift - value.e; - lower.assign(1); - if (shift != 1) { - upper_store.assign(1ULL << 1); - upper = &upper_store; - } - } - // Invariant: value == (numerator / denominator) * pow(10, exp10). - if (num_digits < 0) { - // Generate the shortest representation. - if (!upper) upper = &lower; - bool even = (value.f & 1) == 0; - num_digits = 0; - char* data = buf.data(); - for (;;) { - int digit = numerator.divmod_assign(denominator); - bool low = compare(numerator, lower) - even < 0; // numerator <[=] lower. - // numerator + upper >[=] pow10: - bool high = add_compare(numerator, *upper, denominator) + even > 0; - data[num_digits++] = static_cast('0' + digit); - if (low || high) { - if (!low) { - ++data[num_digits - 1]; - } else if (high) { - int result = add_compare(numerator, numerator, denominator); - // Round half to even. - if (result > 0 || (result == 0 && (digit % 2) != 0)) - ++data[num_digits - 1]; - } - buf.try_resize(to_unsigned(num_digits)); - exp10 -= num_digits - 1; - return; - } - numerator *= 10; - lower *= 10; - if (upper != &lower) *upper *= 10; - } - } - // Generate the given number of digits. - exp10 -= num_digits - 1; - if (num_digits == 0) { - denominator *= 10; - auto digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; - buf.push_back(digit); - return; - } - buf.try_resize(to_unsigned(num_digits)); - for (int i = 0; i < num_digits - 1; ++i) { - int digit = numerator.divmod_assign(denominator); - buf[i] = static_cast('0' + digit); - numerator *= 10; - } - int digit = numerator.divmod_assign(denominator); - auto result = add_compare(numerator, numerator, denominator); - if (result > 0 || (result == 0 && (digit % 2) != 0)) { - if (digit == 9) { - const auto overflow = '0' + 10; - buf[num_digits - 1] = overflow; - // Propagate the carry. - for (int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) { - buf[i] = '0'; - ++buf[i - 1]; - } - if (buf[0] == overflow) { - buf[0] = '1'; - ++exp10; - } - return; - } - ++digit; - } - buf[num_digits - 1] = static_cast('0' + digit); -} - -template -FMT_HEADER_ONLY_CONSTEXPR20 int format_float(Float value, int precision, - float_specs specs, - buffer& buf) { - // float is passed as double to reduce the number of instantiations. - static_assert(!std::is_same::value, ""); - FMT_ASSERT(value >= 0, "value is negative"); - - const bool fixed = specs.format == float_format::fixed; - if (value <= 0) { // <= instead of == to silence a warning. - if (precision <= 0 || !fixed) { - buf.push_back('0'); - return 0; - } - buf.try_resize(to_unsigned(precision)); - fill_n(buf.data(), precision, '0'); - return -precision; - } - - if (specs.fallback) return snprintf_float(value, precision, specs, buf); - - if (!is_constant_evaluated() && precision < 0) { - // Use Dragonbox for the shortest format. - if (specs.binary32) { - auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); - return dec.exponent; - } - auto dec = dragonbox::to_decimal(static_cast(value)); - write(buffer_appender(buf), dec.significand); - return dec.exponent; - } - - int exp = 0; - bool use_dragon = true; - if (is_fast_float()) { - // Use Grisu + Dragon4 for the given precision: - // https://www.cs.tufts.edu/~nr/cs257/archive/florian-loitsch/printf.pdf. - const int min_exp = -60; // alpha in Grisu. - int cached_exp10 = 0; // K in Grisu. - fp normalized = normalize(fp(value)); - const auto cached_pow = get_cached_power( - min_exp - (normalized.e + fp::num_significand_bits), cached_exp10); - normalized = normalized * cached_pow; - gen_digits_handler handler{buf.data(), 0, precision, -cached_exp10, fixed}; - if (grisu_gen_digits(normalized, 1, exp, handler) != digits::error && - !is_constant_evaluated()) { - exp += handler.exp10; - buf.try_resize(to_unsigned(handler.size)); - use_dragon = false; - } else { - exp += handler.size - cached_exp10 - 1; - precision = handler.precision; - } - } - if (use_dragon) { - auto f = fp(); - bool is_predecessor_closer = - specs.binary32 ? f.assign(static_cast(value)) : f.assign(value); - // Limit precision to the maximum possible number of significant digits in - // an IEEE754 double because we don't need to generate zeros. - const int max_double_digits = 767; - if (precision > max_double_digits) precision = max_double_digits; - format_dragon(f, is_predecessor_closer, precision, buf, exp); - } - if (!fixed && !specs.showpoint) { - // Remove trailing zeros. - auto num_digits = buf.size(); - while (num_digits > 0 && buf[num_digits - 1] == '0') { - --num_digits; - ++exp; - } - buf.try_resize(num_digits); - } - return exp; -} - -template -int snprintf_float(T value, int precision, float_specs specs, - buffer& buf) { - // Buffer capacity must be non-zero, otherwise MSVC's vsnprintf_s will fail. - FMT_ASSERT(buf.capacity() > buf.size(), "empty buffer"); - static_assert(!std::is_same::value, ""); - - // Subtract 1 to account for the difference in precision since we use %e for - // both general and exponent format. - if (specs.format == float_format::general || - specs.format == float_format::exp) - precision = (precision >= 0 ? precision : 6) - 1; - - // Build the format string. - enum { max_format_size = 7 }; // The longest format is "%#.*Le". - char format[max_format_size]; - char* format_ptr = format; - *format_ptr++ = '%'; - if (specs.showpoint && specs.format == float_format::hex) *format_ptr++ = '#'; - if (precision >= 0) { - *format_ptr++ = '.'; - *format_ptr++ = '*'; - } - if (std::is_same()) *format_ptr++ = 'L'; - *format_ptr++ = specs.format != float_format::hex - ? (specs.format == float_format::fixed ? 'f' : 'e') - : (specs.upper ? 'A' : 'a'); - *format_ptr = '\0'; - - // Format using snprintf. - auto offset = buf.size(); - for (;;) { - auto begin = buf.data() + offset; - auto capacity = buf.capacity() - offset; -#ifdef FMT_FUZZ - if (precision > 100000) - throw std::runtime_error( - "fuzz mode - avoid large allocation inside snprintf"); -#endif - // Suppress the warning about a nonliteral format string. - // Cannot use auto because of a bug in MinGW (#1532). - int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF; - int result = precision >= 0 - ? snprintf_ptr(begin, capacity, format, precision, value) - : snprintf_ptr(begin, capacity, format, value); - if (result < 0) { - // The buffer will grow exponentially. - buf.try_reserve(buf.capacity() + 1); - continue; - } - auto size = to_unsigned(result); - // Size equal to capacity means that the last character was truncated. - if (size >= capacity) { - buf.try_reserve(size + offset + 1); // Add 1 for the terminating '\0'. - continue; - } - auto is_digit = [](char c) { return c >= '0' && c <= '9'; }; - if (specs.format == float_format::fixed) { - if (precision == 0) { - buf.try_resize(size); - return 0; - } - // Find and remove the decimal point. - auto end = begin + size, p = end; - do { - --p; - } while (is_digit(*p)); - int fraction_size = static_cast(end - p - 1); - std::memmove(p, p + 1, to_unsigned(fraction_size)); - buf.try_resize(size - 1); - return -fraction_size; - } - if (specs.format == float_format::hex) { - buf.try_resize(size + offset); - return 0; - } - // Find and parse the exponent. - auto end = begin + size, exp_pos = end; - do { - --exp_pos; - } while (*exp_pos != 'e'); - char sign = exp_pos[1]; - FMT_ASSERT(sign == '+' || sign == '-', ""); - int exp = 0; - auto p = exp_pos + 2; // Skip 'e' and sign. - do { - FMT_ASSERT(is_digit(*p), ""); - exp = exp * 10 + (*p++ - '0'); - } while (p != end); - if (sign == '-') exp = -exp; - int fraction_size = 0; - if (exp_pos != begin + 1) { - // Remove trailing zeros. - auto fraction_end = exp_pos - 1; - while (*fraction_end == '0') --fraction_end; - // Move the fractional part left to get rid of the decimal point. - fraction_size = static_cast(fraction_end - begin - 1); - std::memmove(begin + 1, begin + 2, to_unsigned(fraction_size)); - } - buf.try_resize(to_unsigned(fraction_size) + offset + 1); - return exp - fraction_size; - } -} } // namespace detail template <> struct formatter { - FMT_CONSTEXPR format_parse_context::iterator parse( - format_parse_context& ctx) { + FMT_CONSTEXPR auto parse(format_parse_context& ctx) + -> format_parse_context::iterator { return ctx.begin(); } - format_context::iterator format(const detail::bigint& n, - format_context& ctx) { + auto format(const detail::bigint& n, format_context& ctx) const + -> format_context::iterator { auto out = ctx.out(); bool first = true; for (auto i = n.bigits_.size(); i > 0; --i) { @@ -2560,7 +1402,7 @@ FMT_FUNC detail::utf8_to_utf16::utf8_to_utf16(string_view s) { } FMT_FUNC void format_system_error(detail::buffer& out, int error_code, - const char* message) FMT_NOEXCEPT { + const char* message) noexcept { FMT_TRY { auto ec = std::error_code(error_code, std::generic_category()); write(std::back_inserter(out), std::system_error(ec, message).what()); @@ -2571,16 +1413,10 @@ FMT_FUNC void format_system_error(detail::buffer& out, int error_code, } FMT_FUNC void report_system_error(int error_code, - const char* message) FMT_NOEXCEPT { + const char* message) noexcept { report_error(format_system_error, error_code, message); } -// DEPRECATED! -// This function is defined here and not inline for ABI compatiblity. -FMT_FUNC void detail::error_handler::on_error(const char* message) { - throw_format_error(message); -} - FMT_FUNC std::string vformat(string_view fmt, format_args args) { // Don't optimize the "{}" case to keep the binary size small and because it // can be better optimized in fmt::format anyway. @@ -2589,62 +1425,239 @@ FMT_FUNC std::string vformat(string_view fmt, format_args args) { return to_string(buffer); } -#ifdef _WIN32 namespace detail { +#ifndef _WIN32 +FMT_FUNC bool write_console(std::FILE*, string_view) { return false; } +#else using dword = conditional_t; extern "C" __declspec(dllimport) int __stdcall WriteConsoleW( // void*, const void*, dword, dword*, void*); -} // namespace detail -#endif -namespace detail { -FMT_FUNC void print(std::FILE* f, string_view text) { -#ifdef _WIN32 +FMT_FUNC bool write_console(std::FILE* f, string_view text) { auto fd = _fileno(f); - if (_isatty(fd)) { - detail::utf8_to_utf16 u16(string_view(text.data(), text.size())); - auto written = detail::dword(); - if (detail::WriteConsoleW(reinterpret_cast(_get_osfhandle(fd)), - u16.c_str(), static_cast(u16.size()), - &written, nullptr)) { - return; - } - // Fallback to fwrite on failure. It can happen if the output has been - // redirected to NUL. - } + if (!_isatty(fd)) return false; + auto u16 = utf8_to_utf16(text); + auto written = dword(); + return WriteConsoleW(reinterpret_cast(_get_osfhandle(fd)), u16.c_str(), + static_cast(u16.size()), &written, nullptr) != 0; +} + +// Print assuming legacy (non-Unicode) encoding. +FMT_FUNC void vprint_mojibake(std::FILE* f, string_view fmt, format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, + basic_format_args>(args)); + fwrite_fully(buffer.data(), 1, buffer.size(), f); +} #endif - detail::fwrite_fully(text.data(), 1, text.size(), f); - -// Workaround for https://github.com/msys2/MSYS2-packages/issues/1490 -// to be used with redirection of output to cat: "foo.exe | cat" -#if defined(_WIN32) && defined(__GNUC__) - fflush(stdout); - fflush(stderr); -#endif + +FMT_FUNC void print(std::FILE* f, string_view text) { + if (!write_console(f, text)) fwrite_fully(text.data(), 1, text.size(), f); } } // namespace detail -FMT_FUNC void vprint(std::FILE* f, string_view format_str, format_args args) { - memory_buffer buffer; - detail::vformat_to(buffer, format_str, args); +FMT_FUNC void vprint(std::FILE* f, string_view fmt, format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, args); detail::print(f, {buffer.data(), buffer.size()}); } -#ifdef _WIN32 -// Print assuming legacy (non-Unicode) encoding. -FMT_FUNC void detail::vprint_mojibake(std::FILE* f, string_view format_str, - format_args args) { - memory_buffer buffer; - detail::vformat_to(buffer, format_str, - basic_format_args>(args)); - fwrite_fully(buffer.data(), 1, buffer.size(), f); +FMT_FUNC void vprint(string_view fmt, format_args args) { + vprint(stdout, fmt, args); + fflush(stdout); +} + +namespace detail { + +struct singleton { + unsigned char upper; + unsigned char lower_count; +}; + +inline auto is_printable(uint16_t x, const singleton* singletons, + size_t singletons_size, + const unsigned char* singleton_lowers, + const unsigned char* normal, size_t normal_size) + -> bool { + auto upper = x >> 8; + auto lower_start = 0; + for (size_t i = 0; i < singletons_size; ++i) { + auto s = singletons[i]; + auto lower_end = lower_start + s.lower_count; + if (upper < s.upper) break; + if (upper == s.upper) { + for (auto j = lower_start; j < lower_end; ++j) { + if (singleton_lowers[j] == (x & 0xff)) return false; + } + } + lower_start = lower_end; + } + + auto xsigned = static_cast(x); + auto current = true; + for (size_t i = 0; i < normal_size; ++i) { + auto v = static_cast(normal[i]); + auto len = (v & 0x80) != 0 ? (v & 0x7f) << 8 | normal[++i] : v; + xsigned -= len; + if (xsigned < 0) break; + current = !current; + } + return current; } -#endif -FMT_FUNC void vprint(string_view format_str, format_args args) { - vprint(stdout, format_str, args); +// This code is generated by support/printable.py. +FMT_FUNC auto is_printable(uint32_t cp) -> bool { + static constexpr singleton singletons0[] = { + {0x00, 1}, {0x03, 5}, {0x05, 6}, {0x06, 3}, {0x07, 6}, {0x08, 8}, + {0x09, 17}, {0x0a, 28}, {0x0b, 25}, {0x0c, 20}, {0x0d, 16}, {0x0e, 13}, + {0x0f, 4}, {0x10, 3}, {0x12, 18}, {0x13, 9}, {0x16, 1}, {0x17, 5}, + {0x18, 2}, {0x19, 3}, {0x1a, 7}, {0x1c, 2}, {0x1d, 1}, {0x1f, 22}, + {0x20, 3}, {0x2b, 3}, {0x2c, 2}, {0x2d, 11}, {0x2e, 1}, {0x30, 3}, + {0x31, 2}, {0x32, 1}, {0xa7, 2}, {0xa9, 2}, {0xaa, 4}, {0xab, 8}, + {0xfa, 2}, {0xfb, 5}, {0xfd, 4}, {0xfe, 3}, {0xff, 9}, + }; + static constexpr unsigned char singletons0_lower[] = { + 0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57, 0x58, 0x8b, 0x8c, 0x90, + 0x1c, 0x1d, 0xdd, 0x0e, 0x0f, 0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f, + 0x5c, 0x5d, 0x5f, 0xb5, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92, 0xa9, 0xb1, + 0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca, 0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04, + 0x11, 0x12, 0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49, 0x4a, 0x5d, + 0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4, 0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf, + 0xe4, 0xe5, 0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a, + 0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e, 0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d, + 0xc9, 0xce, 0xcf, 0x0d, 0x11, 0x29, 0x45, 0x49, 0x57, 0x64, 0x65, 0x8d, + 0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf, 0xe4, 0xe5, 0xf0, 0x0d, + 0x11, 0x45, 0x49, 0x64, 0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5, + 0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6, 0xbe, 0xbf, 0xc5, 0xc7, + 0xce, 0xcf, 0xda, 0xdb, 0x48, 0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49, + 0x4e, 0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f, 0xb1, 0xb6, 0xb7, + 0xbf, 0xc1, 0xc6, 0xc7, 0xd7, 0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7, + 0xfe, 0xff, 0x80, 0x0d, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x0f, 0x1f, 0x6e, + 0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae, 0xaf, 0xbb, 0xbc, 0xfa, 0x16, + 0x17, 0x1e, 0x1f, 0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e, 0x7e, + 0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0, 0xf1, 0xf5, 0x72, 0x73, 0x8f, + 0x74, 0x75, 0x96, 0x2f, 0x5f, 0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf, + 0xc7, 0xcf, 0xd7, 0xdf, 0x9a, 0x40, 0x97, 0x98, 0x30, 0x8f, 0x1f, 0xc0, + 0xc1, 0xce, 0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f, 0x10, 0x27, + 0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37, 0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91, + 0xfe, 0xff, 0x53, 0x67, 0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7, + 0xfe, 0xff, + }; + static constexpr singleton singletons1[] = { + {0x00, 6}, {0x01, 1}, {0x03, 1}, {0x04, 2}, {0x08, 8}, {0x09, 2}, + {0x0a, 5}, {0x0b, 2}, {0x0e, 4}, {0x10, 1}, {0x11, 2}, {0x12, 5}, + {0x13, 17}, {0x14, 1}, {0x15, 2}, {0x17, 2}, {0x19, 13}, {0x1c, 5}, + {0x1d, 8}, {0x24, 1}, {0x6a, 3}, {0x6b, 2}, {0xbc, 2}, {0xd1, 2}, + {0xd4, 12}, {0xd5, 9}, {0xd6, 2}, {0xd7, 2}, {0xda, 1}, {0xe0, 5}, + {0xe1, 2}, {0xe8, 2}, {0xee, 32}, {0xf0, 4}, {0xf8, 2}, {0xf9, 2}, + {0xfa, 2}, {0xfb, 1}, + }; + static constexpr unsigned char singletons1_lower[] = { + 0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e, 0x9e, 0x9f, 0x06, 0x07, + 0x09, 0x36, 0x3d, 0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18, 0x36, + 0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf, 0xbd, 0x35, 0xe0, 0x12, 0x87, + 0x89, 0x8e, 0x9e, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a, + 0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64, 0x65, 0x5c, 0xb6, 0xb7, 0x1b, + 0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36, 0x39, 0x3a, 0xa8, 0xa9, + 0xd8, 0xd9, 0x09, 0x37, 0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66, + 0x69, 0x8f, 0x92, 0x6f, 0x5f, 0xee, 0xef, 0x5a, 0x62, 0x9a, 0x9b, 0x27, + 0x28, 0x55, 0x9d, 0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba, 0xbc, + 0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a, 0x3f, 0x45, 0x51, 0xa6, 0xa7, + 0xcc, 0xcd, 0xa0, 0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xc5, 0xc6, + 0x04, 0x20, 0x23, 0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a, 0x4c, + 0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x66, + 0x6b, 0x73, 0x78, 0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0, 0xd0, + 0xae, 0xaf, 0x79, 0xcc, 0x6e, 0x6f, 0x93, + }; + static constexpr unsigned char normal0[] = { + 0x00, 0x20, 0x5f, 0x22, 0x82, 0xdf, 0x04, 0x82, 0x44, 0x08, 0x1b, 0x04, + 0x06, 0x11, 0x81, 0xac, 0x0e, 0x80, 0xab, 0x35, 0x28, 0x0b, 0x80, 0xe0, + 0x03, 0x19, 0x08, 0x01, 0x04, 0x2f, 0x04, 0x34, 0x04, 0x07, 0x03, 0x01, + 0x07, 0x06, 0x07, 0x11, 0x0a, 0x50, 0x0f, 0x12, 0x07, 0x55, 0x07, 0x03, + 0x04, 0x1c, 0x0a, 0x09, 0x03, 0x08, 0x03, 0x07, 0x03, 0x02, 0x03, 0x03, + 0x03, 0x0c, 0x04, 0x05, 0x03, 0x0b, 0x06, 0x01, 0x0e, 0x15, 0x05, 0x3a, + 0x03, 0x11, 0x07, 0x06, 0x05, 0x10, 0x07, 0x57, 0x07, 0x02, 0x07, 0x15, + 0x0d, 0x50, 0x04, 0x43, 0x03, 0x2d, 0x03, 0x01, 0x04, 0x11, 0x06, 0x0f, + 0x0c, 0x3a, 0x04, 0x1d, 0x25, 0x5f, 0x20, 0x6d, 0x04, 0x6a, 0x25, 0x80, + 0xc8, 0x05, 0x82, 0xb0, 0x03, 0x1a, 0x06, 0x82, 0xfd, 0x03, 0x59, 0x07, + 0x15, 0x0b, 0x17, 0x09, 0x14, 0x0c, 0x14, 0x0c, 0x6a, 0x06, 0x0a, 0x06, + 0x1a, 0x06, 0x59, 0x07, 0x2b, 0x05, 0x46, 0x0a, 0x2c, 0x04, 0x0c, 0x04, + 0x01, 0x03, 0x31, 0x0b, 0x2c, 0x04, 0x1a, 0x06, 0x0b, 0x03, 0x80, 0xac, + 0x06, 0x0a, 0x06, 0x21, 0x3f, 0x4c, 0x04, 0x2d, 0x03, 0x74, 0x08, 0x3c, + 0x03, 0x0f, 0x03, 0x3c, 0x07, 0x38, 0x08, 0x2b, 0x05, 0x82, 0xff, 0x11, + 0x18, 0x08, 0x2f, 0x11, 0x2d, 0x03, 0x20, 0x10, 0x21, 0x0f, 0x80, 0x8c, + 0x04, 0x82, 0x97, 0x19, 0x0b, 0x15, 0x88, 0x94, 0x05, 0x2f, 0x05, 0x3b, + 0x07, 0x02, 0x0e, 0x18, 0x09, 0x80, 0xb3, 0x2d, 0x74, 0x0c, 0x80, 0xd6, + 0x1a, 0x0c, 0x05, 0x80, 0xff, 0x05, 0x80, 0xdf, 0x0c, 0xee, 0x0d, 0x03, + 0x84, 0x8d, 0x03, 0x37, 0x09, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x08, 0x80, + 0xcb, 0x2a, 0x38, 0x03, 0x0a, 0x06, 0x38, 0x08, 0x46, 0x08, 0x0c, 0x06, + 0x74, 0x0b, 0x1e, 0x03, 0x5a, 0x04, 0x59, 0x09, 0x80, 0x83, 0x18, 0x1c, + 0x0a, 0x16, 0x09, 0x4c, 0x04, 0x80, 0x8a, 0x06, 0xab, 0xa4, 0x0c, 0x17, + 0x04, 0x31, 0xa1, 0x04, 0x81, 0xda, 0x26, 0x07, 0x0c, 0x05, 0x05, 0x80, + 0xa5, 0x11, 0x81, 0x6d, 0x10, 0x78, 0x28, 0x2a, 0x06, 0x4c, 0x04, 0x80, + 0x8d, 0x04, 0x80, 0xbe, 0x03, 0x1b, 0x03, 0x0f, 0x0d, + }; + static constexpr unsigned char normal1[] = { + 0x5e, 0x22, 0x7b, 0x05, 0x03, 0x04, 0x2d, 0x03, 0x66, 0x03, 0x01, 0x2f, + 0x2e, 0x80, 0x82, 0x1d, 0x03, 0x31, 0x0f, 0x1c, 0x04, 0x24, 0x09, 0x1e, + 0x05, 0x2b, 0x05, 0x44, 0x04, 0x0e, 0x2a, 0x80, 0xaa, 0x06, 0x24, 0x04, + 0x24, 0x04, 0x28, 0x08, 0x34, 0x0b, 0x01, 0x80, 0x90, 0x81, 0x37, 0x09, + 0x16, 0x0a, 0x08, 0x80, 0x98, 0x39, 0x03, 0x63, 0x08, 0x09, 0x30, 0x16, + 0x05, 0x21, 0x03, 0x1b, 0x05, 0x01, 0x40, 0x38, 0x04, 0x4b, 0x05, 0x2f, + 0x04, 0x0a, 0x07, 0x09, 0x07, 0x40, 0x20, 0x27, 0x04, 0x0c, 0x09, 0x36, + 0x03, 0x3a, 0x05, 0x1a, 0x07, 0x04, 0x0c, 0x07, 0x50, 0x49, 0x37, 0x33, + 0x0d, 0x33, 0x07, 0x2e, 0x08, 0x0a, 0x81, 0x26, 0x52, 0x4e, 0x28, 0x08, + 0x2a, 0x56, 0x1c, 0x14, 0x17, 0x09, 0x4e, 0x04, 0x1e, 0x0f, 0x43, 0x0e, + 0x19, 0x07, 0x0a, 0x06, 0x48, 0x08, 0x27, 0x09, 0x75, 0x0b, 0x3f, 0x41, + 0x2a, 0x06, 0x3b, 0x05, 0x0a, 0x06, 0x51, 0x06, 0x01, 0x05, 0x10, 0x03, + 0x05, 0x80, 0x8b, 0x62, 0x1e, 0x48, 0x08, 0x0a, 0x80, 0xa6, 0x5e, 0x22, + 0x45, 0x0b, 0x0a, 0x06, 0x0d, 0x13, 0x39, 0x07, 0x0a, 0x36, 0x2c, 0x04, + 0x10, 0x80, 0xc0, 0x3c, 0x64, 0x53, 0x0c, 0x48, 0x09, 0x0a, 0x46, 0x45, + 0x1b, 0x48, 0x08, 0x53, 0x1d, 0x39, 0x81, 0x07, 0x46, 0x0a, 0x1d, 0x03, + 0x47, 0x49, 0x37, 0x03, 0x0e, 0x08, 0x0a, 0x06, 0x39, 0x07, 0x0a, 0x81, + 0x36, 0x19, 0x80, 0xb7, 0x01, 0x0f, 0x32, 0x0d, 0x83, 0x9b, 0x66, 0x75, + 0x0b, 0x80, 0xc4, 0x8a, 0xbc, 0x84, 0x2f, 0x8f, 0xd1, 0x82, 0x47, 0xa1, + 0xb9, 0x82, 0x39, 0x07, 0x2a, 0x04, 0x02, 0x60, 0x26, 0x0a, 0x46, 0x0a, + 0x28, 0x05, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x04, 0x39, 0x07, 0x11, + 0x40, 0x05, 0x0b, 0x02, 0x0e, 0x97, 0xf8, 0x08, 0x84, 0xd6, 0x2a, 0x09, + 0xa2, 0xf7, 0x81, 0x1f, 0x31, 0x03, 0x11, 0x04, 0x08, 0x81, 0x8c, 0x89, + 0x04, 0x6b, 0x05, 0x0d, 0x03, 0x09, 0x07, 0x10, 0x93, 0x60, 0x80, 0xf6, + 0x0a, 0x73, 0x08, 0x6e, 0x17, 0x46, 0x80, 0x9a, 0x14, 0x0c, 0x57, 0x09, + 0x19, 0x80, 0x87, 0x81, 0x47, 0x03, 0x85, 0x42, 0x0f, 0x15, 0x85, 0x50, + 0x2b, 0x80, 0xd5, 0x2d, 0x03, 0x1a, 0x04, 0x02, 0x81, 0x70, 0x3a, 0x05, + 0x01, 0x85, 0x00, 0x80, 0xd7, 0x29, 0x4c, 0x04, 0x0a, 0x04, 0x02, 0x83, + 0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x3c, 0x06, 0x01, 0x04, 0x55, 0x05, + 0x1b, 0x34, 0x02, 0x81, 0x0e, 0x2c, 0x04, 0x64, 0x0c, 0x56, 0x0a, 0x80, + 0xae, 0x38, 0x1d, 0x0d, 0x2c, 0x04, 0x09, 0x07, 0x02, 0x0e, 0x06, 0x80, + 0x9a, 0x83, 0xd8, 0x08, 0x0d, 0x03, 0x0d, 0x03, 0x74, 0x0c, 0x59, 0x07, + 0x0c, 0x14, 0x0c, 0x04, 0x38, 0x08, 0x0a, 0x06, 0x28, 0x08, 0x22, 0x4e, + 0x81, 0x54, 0x0c, 0x15, 0x03, 0x03, 0x05, 0x07, 0x09, 0x19, 0x07, 0x07, + 0x09, 0x03, 0x0d, 0x07, 0x29, 0x80, 0xcb, 0x25, 0x0a, 0x84, 0x06, + }; + auto lower = static_cast(cp); + if (cp < 0x10000) { + return is_printable(lower, singletons0, + sizeof(singletons0) / sizeof(*singletons0), + singletons0_lower, normal0, sizeof(normal0)); + } + if (cp < 0x20000) { + return is_printable(lower, singletons1, + sizeof(singletons1) / sizeof(*singletons1), + singletons1_lower, normal1, sizeof(normal1)); + } + if (0x2a6de <= cp && cp < 0x2a700) return false; + if (0x2b735 <= cp && cp < 0x2b740) return false; + if (0x2b81e <= cp && cp < 0x2b820) return false; + if (0x2cea2 <= cp && cp < 0x2ceb0) return false; + if (0x2ebe1 <= cp && cp < 0x2f800) return false; + if (0x2fa1e <= cp && cp < 0x30000) return false; + if (0x3134b <= cp && cp < 0xe0100) return false; + if (0xe01f0 <= cp && cp < 0x110000) return false; + return cp < 0x110000; } +} // namespace detail + FMT_END_NAMESPACE #endif // FMT_FORMAT_INL_H_ diff --git a/abcg/external/fmt/format.cc b/abcg/external/fmt/format.cc index 6452d5c50..d503fe113 100644 --- a/abcg/external/fmt/format.cc +++ b/abcg/external/fmt/format.cc @@ -10,115 +10,34 @@ FMT_BEGIN_NAMESPACE namespace detail { -// DEPRECATED! -template struct basic_data { - FMT_API static constexpr const char digits[100][2] = { - {'0', '0'}, {'0', '1'}, {'0', '2'}, {'0', '3'}, {'0', '4'}, {'0', '5'}, - {'0', '6'}, {'0', '7'}, {'0', '8'}, {'0', '9'}, {'1', '0'}, {'1', '1'}, - {'1', '2'}, {'1', '3'}, {'1', '4'}, {'1', '5'}, {'1', '6'}, {'1', '7'}, - {'1', '8'}, {'1', '9'}, {'2', '0'}, {'2', '1'}, {'2', '2'}, {'2', '3'}, - {'2', '4'}, {'2', '5'}, {'2', '6'}, {'2', '7'}, {'2', '8'}, {'2', '9'}, - {'3', '0'}, {'3', '1'}, {'3', '2'}, {'3', '3'}, {'3', '4'}, {'3', '5'}, - {'3', '6'}, {'3', '7'}, {'3', '8'}, {'3', '9'}, {'4', '0'}, {'4', '1'}, - {'4', '2'}, {'4', '3'}, {'4', '4'}, {'4', '5'}, {'4', '6'}, {'4', '7'}, - {'4', '8'}, {'4', '9'}, {'5', '0'}, {'5', '1'}, {'5', '2'}, {'5', '3'}, - {'5', '4'}, {'5', '5'}, {'5', '6'}, {'5', '7'}, {'5', '8'}, {'5', '9'}, - {'6', '0'}, {'6', '1'}, {'6', '2'}, {'6', '3'}, {'6', '4'}, {'6', '5'}, - {'6', '6'}, {'6', '7'}, {'6', '8'}, {'6', '9'}, {'7', '0'}, {'7', '1'}, - {'7', '2'}, {'7', '3'}, {'7', '4'}, {'7', '5'}, {'7', '6'}, {'7', '7'}, - {'7', '8'}, {'7', '9'}, {'8', '0'}, {'8', '1'}, {'8', '2'}, {'8', '3'}, - {'8', '4'}, {'8', '5'}, {'8', '6'}, {'8', '7'}, {'8', '8'}, {'8', '9'}, - {'9', '0'}, {'9', '1'}, {'9', '2'}, {'9', '3'}, {'9', '4'}, {'9', '5'}, - {'9', '6'}, {'9', '7'}, {'9', '8'}, {'9', '9'}}; - FMT_API static constexpr const char hex_digits[] = "0123456789abcdef"; - FMT_API static constexpr const char signs[4] = {0, '-', '+', ' '}; - FMT_API static constexpr const char left_padding_shifts[5] = {31, 31, 0, 1, - 0}; - FMT_API static constexpr const char right_padding_shifts[5] = {0, 31, 0, 1, - 0}; - FMT_API static constexpr const unsigned prefixes[4] = {0, 0, 0x1000000u | '+', - 0x1000000u | ' '}; -}; - -#ifdef FMT_SHARED -// Required for -flto, -fivisibility=hidden and -shared to work -extern template struct basic_data; -#endif - -#if __cplusplus < 201703L -// DEPRECATED! These are here only for ABI compatiblity. -template constexpr const char basic_data::digits[][2]; -template constexpr const char basic_data::hex_digits[]; -template constexpr const char basic_data::signs[]; -template constexpr const char basic_data::left_padding_shifts[]; -template -constexpr const char basic_data::right_padding_shifts[]; -template constexpr const unsigned basic_data::prefixes[]; -#endif - -template -int format_float(char* buf, std::size_t size, const char* format, int precision, - T value) { -#ifdef FMT_FUZZ - if (precision > 100000) - throw std::runtime_error( - "fuzz mode - avoid large allocation inside snprintf"); -#endif - // Suppress the warning about nonliteral format string. - int (*snprintf_ptr)(char*, size_t, const char*, ...) = FMT_SNPRINTF; - return precision < 0 ? snprintf_ptr(buf, size, format, value) - : snprintf_ptr(buf, size, format, precision, value); -} - -template FMT_API dragonbox::decimal_fp dragonbox::to_decimal(float x) - FMT_NOEXCEPT; -template FMT_API dragonbox::decimal_fp dragonbox::to_decimal(double x) - FMT_NOEXCEPT; -} // namespace detail - -// Workaround a bug in MSVC2013 that prevents instantiation of format_float. -int (*instantiate_format_float)(double, int, detail::float_specs, - detail::buffer&) = detail::format_float; +template FMT_API auto dragonbox::to_decimal(float x) noexcept + -> dragonbox::decimal_fp; +template FMT_API auto dragonbox::to_decimal(double x) noexcept + -> dragonbox::decimal_fp; #ifndef FMT_STATIC_THOUSANDS_SEPARATOR -template FMT_API detail::locale_ref::locale_ref(const std::locale& loc); -template FMT_API std::locale detail::locale_ref::get() const; +template FMT_API locale_ref::locale_ref(const std::locale& loc); +template FMT_API auto locale_ref::get() const -> std::locale; #endif // Explicit instantiations for char. -template FMT_API auto detail::thousands_sep_impl(locale_ref) +template FMT_API auto thousands_sep_impl(locale_ref) -> thousands_sep_result; -template FMT_API char detail::decimal_point_impl(locale_ref); +template FMT_API auto decimal_point_impl(locale_ref) -> char; -template FMT_API void detail::buffer::append(const char*, const char*); +template FMT_API void buffer::append(const char*, const char*); -// DEPRECATED! -// There is no correspondent extern template in format.h because of -// incompatibility between clang and gcc (#2377). -template FMT_API void detail::vformat_to( - detail::buffer&, string_view, - basic_format_args, detail::locale_ref); - -template FMT_API int detail::snprintf_float(double, int, detail::float_specs, - detail::buffer&); -template FMT_API int detail::snprintf_float(long double, int, - detail::float_specs, - detail::buffer&); -template FMT_API int detail::format_float(double, int, detail::float_specs, - detail::buffer&); -template FMT_API int detail::format_float(long double, int, detail::float_specs, - detail::buffer&); +template FMT_API void vformat_to(buffer&, string_view, + typename vformat_args<>::type, locale_ref); // Explicit instantiations for wchar_t. -template FMT_API auto detail::thousands_sep_impl(locale_ref) +template FMT_API auto thousands_sep_impl(locale_ref) -> thousands_sep_result; -template FMT_API wchar_t detail::decimal_point_impl(locale_ref); - -template FMT_API void detail::buffer::append(const wchar_t*, - const wchar_t*); +template FMT_API auto decimal_point_impl(locale_ref) -> wchar_t; -template struct detail::basic_data; +template FMT_API void buffer::append(const wchar_t*, const wchar_t*); +} // namespace detail FMT_END_NAMESPACE diff --git a/abcg/external/fmt/format.h b/abcg/external/fmt/format.h index 1d2306d05..387d64674 100644 --- a/abcg/external/fmt/format.h +++ b/abcg/external/fmt/format.h @@ -1,140 +1,163 @@ /* - Formatting library for C++ - - Copyright (c) 2012 - present, Victor Zverovich - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - --- Optional exception to the license --- - - As an exception, if, as a result of your compiling your source code, portions - of this Software are embedded into a machine-executable object form of such - source code, you may redistribute such embedded portions in such object form - without including the above copyright and permission notices. + Formatting library for C++ + + Copyright (c) 2012 - present, Victor Zverovich + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + --- Optional exception to the license --- + + As an exception, if, as a result of your compiling your source code, portions + of this Software are embedded into a machine-executable object form of such + source code, you may redistribute such embedded portions in such object form + without including the above copyright and permission notices. */ #ifndef FMT_FORMAT_H_ #define FMT_FORMAT_H_ -#include // std::signbit -#include // uint32_t -#include // std::numeric_limits -#include // std::uninitialized_copy -#include // std::runtime_error -#include // std::system_error -#include // std::swap +#include // std::signbit +#include // uint32_t +#include // std::memcpy +#include // std::initializer_list +#include // std::numeric_limits +#include // std::uninitialized_copy +#include // std::runtime_error +#include // std::system_error #ifdef __cpp_lib_bit_cast -#include // std::bitcast +# include // std::bitcast #endif #include "core.h" -#if FMT_GCC_VERSION -#define FMT_GCC_VISIBILITY_HIDDEN __attribute__((visibility("hidden"))) +#if defined __cpp_inline_variables && __cpp_inline_variables >= 201606L +# define FMT_INLINE_VARIABLE inline #else -#define FMT_GCC_VISIBILITY_HIDDEN +# define FMT_INLINE_VARIABLE #endif -#ifdef __NVCC__ -#define FMT_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 100 + __CUDACC_VER_MINOR__) +#if FMT_HAS_CPP17_ATTRIBUTE(fallthrough) +# define FMT_FALLTHROUGH [[fallthrough]] +#elif defined(__clang__) +# define FMT_FALLTHROUGH [[clang::fallthrough]] +#elif FMT_GCC_VERSION >= 700 && \ + (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) +# define FMT_FALLTHROUGH [[gnu::fallthrough]] #else -#define FMT_CUDA_VERSION 0 +# define FMT_FALLTHROUGH #endif -#ifdef __has_builtin -#define FMT_HAS_BUILTIN(x) __has_builtin(x) +#ifndef FMT_DEPRECATED +# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VERSION >= 1900 +# define FMT_DEPRECATED [[deprecated]] +# else +# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) +# define FMT_DEPRECATED __attribute__((deprecated)) +# elif FMT_MSC_VERSION +# define FMT_DEPRECATED __declspec(deprecated) +# else +# define FMT_DEPRECATED /* deprecated */ +# endif +# endif +#endif + +#ifndef FMT_NO_UNIQUE_ADDRESS +# if FMT_CPLUSPLUS >= 202002L +# if FMT_HAS_CPP_ATTRIBUTE(no_unique_address) +# define FMT_NO_UNIQUE_ADDRESS [[no_unique_address]] +# elif FMT_MSC_VERSION >= 1929 // VS2019 v16.10 and later +# define FMT_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]] +# endif +# endif +#endif +#ifndef FMT_NO_UNIQUE_ADDRESS +# define FMT_NO_UNIQUE_ADDRESS +#endif + +#if FMT_GCC_VERSION || defined(__clang__) +# define FMT_VISIBILITY(value) __attribute__((visibility(value))) #else -#define FMT_HAS_BUILTIN(x) 0 +# define FMT_VISIBILITY(value) #endif -#if FMT_GCC_VERSION || FMT_CLANG_VERSION -#define FMT_NOINLINE __attribute__((noinline)) +#ifdef __has_builtin +# define FMT_HAS_BUILTIN(x) __has_builtin(x) #else -#define FMT_NOINLINE +# define FMT_HAS_BUILTIN(x) 0 #endif -#if FMT_MSC_VER -#define FMT_MSC_DEFAULT = default +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_NOINLINE __attribute__((noinline)) #else -#define FMT_MSC_DEFAULT +# define FMT_NOINLINE #endif #ifndef FMT_THROW -#if FMT_EXCEPTIONS -#if FMT_MSC_VER || FMT_NVCC +# if FMT_EXCEPTIONS +# if FMT_MSC_VERSION || defined(__NVCC__) FMT_BEGIN_NAMESPACE namespace detail { -template inline void do_throw(const Exception &x) { +template inline void do_throw(const Exception& x) { // Silence unreachable code warnings in MSVC and NVCC because these // are nearly impossible to fix in a generic code. volatile bool b = true; - if (b) - throw x; + if (b) throw x; } -} // namespace detail +} // namespace detail FMT_END_NAMESPACE -#define FMT_THROW(x) detail::do_throw(x) -#else -#define FMT_THROW(x) throw x -#endif -#else -#define FMT_THROW(x) \ - do { \ - FMT_ASSERT(false, (x).what()); \ - } while (false) -#endif +# define FMT_THROW(x) detail::do_throw(x) +# else +# define FMT_THROW(x) throw x +# endif +# else +# define FMT_THROW(x) \ + ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) +# endif #endif #if FMT_EXCEPTIONS -#define FMT_TRY try -#define FMT_CATCH(x) catch (x) +# define FMT_TRY try +# define FMT_CATCH(x) catch (x) #else -#define FMT_TRY if (true) -#define FMT_CATCH(x) if (false) +# define FMT_TRY if (true) +# define FMT_CATCH(x) if (false) #endif #ifndef FMT_MAYBE_UNUSED -#if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) -#define FMT_MAYBE_UNUSED [[maybe_unused]] -#else -#define FMT_MAYBE_UNUSED -#endif -#endif - -// Workaround broken [[deprecated]] in the Intel, PGI and NVCC compilers. -#if FMT_ICC_VERSION || defined(__PGI) || FMT_NVCC -#define FMT_DEPRECATED_ALIAS -#else -#define FMT_DEPRECATED_ALIAS FMT_DEPRECATED +# if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) +# define FMT_MAYBE_UNUSED [[maybe_unused]] +# else +# define FMT_MAYBE_UNUSED +# endif #endif #ifndef FMT_USE_USER_DEFINED_LITERALS // EDG based compilers (Intel, NVIDIA, Elbrus, etc), GCC and MSVC support UDLs. -#if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \ - FMT_MSC_VER >= 1900) && \ - (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= /* UDL feature */ 480) -#define FMT_USE_USER_DEFINED_LITERALS 1 -#else -#define FMT_USE_USER_DEFINED_LITERALS 0 -#endif +# if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 407 || \ + FMT_MSC_VERSION >= 1900) && \ + (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= /* UDL feature */ 480) +# define FMT_USE_USER_DEFINED_LITERALS 1 +# else +# define FMT_USE_USER_DEFINED_LITERALS 0 +# endif #endif // Defining FMT_REDUCE_INT_INSTANTIATIONS to 1, will reduce the number of @@ -142,50 +165,53 @@ FMT_END_NAMESPACE // largest integer type. This results in a reduction in binary size but will // cause a decrease in integer formatting performance. #if !defined(FMT_REDUCE_INT_INSTANTIATIONS) -#define FMT_REDUCE_INT_INSTANTIATIONS 0 +# define FMT_REDUCE_INT_INSTANTIATIONS 0 #endif // __builtin_clz is broken in clang with Microsoft CodeGen: // https://github.com/fmtlib/fmt/issues/519. -#if !FMT_MSC_VER -#if FMT_HAS_BUILTIN(__builtin_clz) || FMT_GCC_VERSION || FMT_ICC_VERSION -#define FMT_BUILTIN_CLZ(n) __builtin_clz(n) -#endif -#if FMT_HAS_BUILTIN(__builtin_clzll) || FMT_GCC_VERSION || FMT_ICC_VERSION -#define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) -#endif +#if !FMT_MSC_VERSION +# if FMT_HAS_BUILTIN(__builtin_clz) || FMT_GCC_VERSION || FMT_ICC_VERSION +# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) +# endif +# if FMT_HAS_BUILTIN(__builtin_clzll) || FMT_GCC_VERSION || FMT_ICC_VERSION +# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) +# endif #endif // __builtin_ctz is broken in Intel Compiler Classic on Windows: // https://github.com/fmtlib/fmt/issues/2510. #ifndef __ICL -#if FMT_HAS_BUILTIN(__builtin_ctz) || FMT_GCC_VERSION || FMT_ICC_VERSION -#define FMT_BUILTIN_CTZ(n) __builtin_ctz(n) -#endif -#if FMT_HAS_BUILTIN(__builtin_ctzll) || FMT_GCC_VERSION || FMT_ICC_VERSION -#define FMT_BUILTIN_CTZLL(n) __builtin_ctzll(n) -#endif +# if FMT_HAS_BUILTIN(__builtin_ctz) || FMT_GCC_VERSION || FMT_ICC_VERSION || \ + defined(__NVCOMPILER) +# define FMT_BUILTIN_CTZ(n) __builtin_ctz(n) +# endif +# if FMT_HAS_BUILTIN(__builtin_ctzll) || FMT_GCC_VERSION || \ + FMT_ICC_VERSION || defined(__NVCOMPILER) +# define FMT_BUILTIN_CTZLL(n) __builtin_ctzll(n) +# endif #endif -#if FMT_MSC_VER -#include // _BitScanReverse[64], _BitScanForward[64], _umul128 +#if FMT_MSC_VERSION +# include // _BitScanReverse[64], _BitScanForward[64], _umul128 #endif // Some compilers masquerade as both MSVC and GCC-likes or otherwise support // __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the // MSVC intrinsics if the clz and clzll builtins are not available. -#if FMT_MSC_VER && !defined(FMT_BUILTIN_CLZLL) && !defined(FMT_BUILTIN_CTZLL) +#if FMT_MSC_VERSION && !defined(FMT_BUILTIN_CLZLL) && \ + !defined(FMT_BUILTIN_CTZLL) FMT_BEGIN_NAMESPACE namespace detail { // Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning. -#if !defined(__clang__) -#pragma intrinsic(_BitScanForward) -#pragma intrinsic(_BitScanReverse) -#if defined(_WIN64) -#pragma intrinsic(_BitScanForward64) -#pragma intrinsic(_BitScanReverse64) -#endif -#endif +# if !defined(__clang__) +# pragma intrinsic(_BitScanForward) +# pragma intrinsic(_BitScanReverse) +# if defined(_WIN64) +# pragma intrinsic(_BitScanForward64) +# pragma intrinsic(_BitScanReverse64) +# endif +# endif inline auto clz(uint32_t x) -> int { unsigned long r = 0; @@ -197,77 +223,102 @@ inline auto clz(uint32_t x) -> int { FMT_MSC_WARNING(suppress : 6102) return 31 ^ static_cast(r); } -#define FMT_BUILTIN_CLZ(n) detail::clz(n) +# define FMT_BUILTIN_CLZ(n) detail::clz(n) inline auto clzll(uint64_t x) -> int { unsigned long r = 0; -#ifdef _WIN64 +# ifdef _WIN64 _BitScanReverse64(&r, x); -#else +# else // Scan the high 32 bits. if (_BitScanReverse(&r, static_cast(x >> 32))) - return 63 ^ (r + 32); + return 63 ^ static_cast(r + 32); // Scan the low 32 bits. _BitScanReverse(&r, static_cast(x)); -#endif +# endif FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. return 63 ^ static_cast(r); } -#define FMT_BUILTIN_CLZLL(n) detail::clzll(n) +# define FMT_BUILTIN_CLZLL(n) detail::clzll(n) inline auto ctz(uint32_t x) -> int { unsigned long r = 0; _BitScanForward(&r, x); FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. return static_cast(r); } -#define FMT_BUILTIN_CTZ(n) detail::ctz(n) +# define FMT_BUILTIN_CTZ(n) detail::ctz(n) inline auto ctzll(uint64_t x) -> int { unsigned long r = 0; FMT_ASSERT(x != 0, ""); - FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. -#ifdef _WIN64 + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. +# ifdef _WIN64 _BitScanForward64(&r, x); -#else +# else // Scan the low 32 bits. - if (_BitScanForward(&r, static_cast(x))) - return static_cast(r); + if (_BitScanForward(&r, static_cast(x))) return static_cast(r); // Scan the high 32 bits. _BitScanForward(&r, static_cast(x >> 32)); r += 32; -#endif +# endif return static_cast(r); } -#define FMT_BUILTIN_CTZLL(n) detail::ctzll(n) -} // namespace detail +# define FMT_BUILTIN_CTZLL(n) detail::ctzll(n) +} // namespace detail FMT_END_NAMESPACE #endif -#ifdef FMT_HEADER_ONLY -#define FMT_HEADER_ONLY_CONSTEXPR20 FMT_CONSTEXPR20 -#else -#define FMT_HEADER_ONLY_CONSTEXPR20 -#endif - FMT_BEGIN_NAMESPACE + +template struct disjunction : std::false_type {}; +template struct disjunction

: P {}; +template +struct disjunction + : conditional_t> {}; + +template struct conjunction : std::true_type {}; +template struct conjunction

: P {}; +template +struct conjunction + : conditional_t, P1> {}; + namespace detail { +FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) { + ignore_unused(condition); +#ifdef FMT_FUZZ + if (condition) throw std::runtime_error("fuzzing limit reached"); +#endif +} + +template struct string_literal { + static constexpr CharT value[sizeof...(C)] = {C...}; + constexpr operator basic_string_view() const { + return {value, sizeof...(C)}; + } +}; + +#if FMT_CPLUSPLUS < 201703L +template +constexpr CharT string_literal::value[sizeof...(C)]; +#endif + template class formatbuf : public Streambuf { -private: + private: using char_type = typename Streambuf::char_type; using streamsize = decltype(std::declval().sputn(nullptr, 0)); using int_type = typename Streambuf::int_type; using traits_type = typename Streambuf::traits_type; - buffer &buffer_; + buffer& buffer_; -public: - explicit formatbuf(buffer &buf) : buffer_(buf) {} + public: + explicit formatbuf(buffer& buf) : buffer_(buf) {} -protected: + protected: // The put area is always empty. This makes the implementation simpler and has // the advantage that the streambuf and the buffer are always in sync and // sputc never writes into uninitialized memory. A disadvantage is that each @@ -280,22 +331,21 @@ template class formatbuf : public Streambuf { return ch; } - auto xsputn(const char_type *s, streamsize count) -> streamsize override { + auto xsputn(const char_type* s, streamsize count) -> streamsize override { buffer_.append(s, s + count); return count; } }; // Implementation of std::bit_cast for pre-C++20. -template -FMT_CONSTEXPR20 auto bit_cast(const From &from) -> To { - static_assert(sizeof(To) == sizeof(From), "size mismatch"); +template +FMT_CONSTEXPR20 auto bit_cast(const From& from) -> To { #ifdef __cpp_lib_bit_cast - if (is_constant_evaluated()) - return std::bit_cast(from); + if (is_constant_evaluated()) return std::bit_cast(from); #endif auto to = To(); - std::memcpy(&to, &from, sizeof(to)); + // The cast suppresses a bogus -Wclass-memaccess on GCC. + std::memcpy(static_cast(&to), &from, sizeof(to)); return to; } @@ -314,29 +364,125 @@ inline auto is_big_endian() -> bool { #endif } -// A fallback implementation of uintptr_t for systems that lack it. -struct fallback_uintptr { - unsigned char value[sizeof(void *)]; +class uint128_fallback { + private: + uint64_t lo_, hi_; + + friend uint128_fallback umul128(uint64_t x, uint64_t y) noexcept; + + public: + constexpr uint128_fallback(uint64_t hi, uint64_t lo) : lo_(lo), hi_(hi) {} + constexpr uint128_fallback(uint64_t value = 0) : lo_(value), hi_(0) {} + + constexpr uint64_t high() const noexcept { return hi_; } + constexpr uint64_t low() const noexcept { return lo_; } + + template ::value)> + constexpr explicit operator T() const { + return static_cast(lo_); + } + + friend constexpr auto operator==(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return lhs.hi_ == rhs.hi_ && lhs.lo_ == rhs.lo_; + } + friend constexpr auto operator!=(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return !(lhs == rhs); + } + friend constexpr auto operator>(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return lhs.hi_ != rhs.hi_ ? lhs.hi_ > rhs.hi_ : lhs.lo_ > rhs.lo_; + } + friend constexpr auto operator|(const uint128_fallback& lhs, + const uint128_fallback& rhs) + -> uint128_fallback { + return {lhs.hi_ | rhs.hi_, lhs.lo_ | rhs.lo_}; + } + friend constexpr auto operator&(const uint128_fallback& lhs, + const uint128_fallback& rhs) + -> uint128_fallback { + return {lhs.hi_ & rhs.hi_, lhs.lo_ & rhs.lo_}; + } + friend constexpr auto operator~(const uint128_fallback& n) + -> uint128_fallback { + return {~n.hi_, ~n.lo_}; + } + friend auto operator+(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> uint128_fallback { + auto result = uint128_fallback(lhs); + result += rhs; + return result; + } + friend auto operator*(const uint128_fallback& lhs, uint32_t rhs) + -> uint128_fallback { + FMT_ASSERT(lhs.hi_ == 0, ""); + uint64_t hi = (lhs.lo_ >> 32) * rhs; + uint64_t lo = (lhs.lo_ & ~uint32_t()) * rhs; + uint64_t new_lo = (hi << 32) + lo; + return {(hi >> 32) + (new_lo < lo ? 1 : 0), new_lo}; + } + friend auto operator-(const uint128_fallback& lhs, uint64_t rhs) + -> uint128_fallback { + return {lhs.hi_ - (lhs.lo_ < rhs ? 1 : 0), lhs.lo_ - rhs}; + } + FMT_CONSTEXPR auto operator>>(int shift) const -> uint128_fallback { + if (shift == 64) return {0, hi_}; + if (shift > 64) return uint128_fallback(0, hi_) >> (shift - 64); + return {hi_ >> shift, (hi_ << (64 - shift)) | (lo_ >> shift)}; + } + FMT_CONSTEXPR auto operator<<(int shift) const -> uint128_fallback { + if (shift == 64) return {lo_, 0}; + if (shift > 64) return uint128_fallback(lo_, 0) << (shift - 64); + return {hi_ << shift | (lo_ >> (64 - shift)), (lo_ << shift)}; + } + FMT_CONSTEXPR auto operator>>=(int shift) -> uint128_fallback& { + return *this = *this >> shift; + } + FMT_CONSTEXPR void operator+=(uint128_fallback n) { + uint64_t new_lo = lo_ + n.lo_; + uint64_t new_hi = hi_ + n.hi_ + (new_lo < lo_ ? 1 : 0); + FMT_ASSERT(new_hi >= hi_, ""); + lo_ = new_lo; + hi_ = new_hi; + } + FMT_CONSTEXPR void operator&=(uint128_fallback n) { + lo_ &= n.lo_; + hi_ &= n.hi_; + } - fallback_uintptr() = default; - explicit fallback_uintptr(const void *p) { - *this = bit_cast(p); - if (const_check(is_big_endian())) { - for (size_t i = 0, j = sizeof(void *) - 1; i < j; ++i, --j) - std::swap(value[i], value[j]); + FMT_CONSTEXPR20 uint128_fallback& operator+=(uint64_t n) noexcept { + if (is_constant_evaluated()) { + lo_ += n; + hi_ += (lo_ < n ? 1 : 0); + return *this; } +#if FMT_HAS_BUILTIN(__builtin_addcll) && !defined(__ibmxl__) + unsigned long long carry; + lo_ = __builtin_addcll(lo_, n, 0, &carry); + hi_ += carry; +#elif FMT_HAS_BUILTIN(__builtin_ia32_addcarryx_u64) && !defined(__ibmxl__) + unsigned long long result; + auto carry = __builtin_ia32_addcarryx_u64(0, lo_, n, &result); + lo_ = result; + hi_ += carry; +#elif defined(_MSC_VER) && defined(_M_X64) + auto carry = _addcarry_u64(0, lo_, n, &lo_); + _addcarry_u64(carry, hi_, 0, &hi_); +#else + lo_ += n; + hi_ += (lo_ < n ? 1 : 0); +#endif + return *this; } }; + +using uint128_t = conditional_t; + #ifdef UINTPTR_MAX using uintptr_t = ::uintptr_t; -inline auto to_uintptr(const void *p) -> uintptr_t { - return bit_cast(p); -} #else -using uintptr_t = fallback_uintptr; -inline auto to_uintptr(const void *p) -> fallback_uintptr { - return fallback_uintptr(p); -} +using uintptr_t = uint128_t; #endif // Returns the largest possible value for type T. Same as @@ -348,46 +494,82 @@ template constexpr auto num_bits() -> int { return std::numeric_limits::digits; } // std::numeric_limits::digits may return 0 for 128-bit ints. -template <> constexpr auto num_bits() -> int { return 128; } +template <> constexpr auto num_bits() -> int { return 128; } template <> constexpr auto num_bits() -> int { return 128; } -template <> constexpr auto num_bits() -> int { - return static_cast(sizeof(void *) * - std::numeric_limits::digits); + +// A heterogeneous bit_cast used for converting 96-bit long double to uint128_t +// and 128-bit pointers to uint128_fallback. +template sizeof(From))> +inline auto bit_cast(const From& from) -> To { + constexpr auto size = static_cast(sizeof(From) / sizeof(unsigned)); + struct data_t { + unsigned value[static_cast(size)]; + } data = bit_cast(from); + auto result = To(); + if (const_check(is_big_endian())) { + for (int i = 0; i < size; ++i) + result = (result << num_bits()) | data.value[i]; + } else { + for (int i = size - 1; i >= 0; --i) + result = (result << num_bits()) | data.value[i]; + } + return result; +} + +template +FMT_CONSTEXPR20 inline auto countl_zero_fallback(UInt n) -> int { + int lz = 0; + constexpr UInt msb_mask = static_cast(1) << (num_bits() - 1); + for (; (n & msb_mask) == 0; n <<= 1) lz++; + return lz; +} + +FMT_CONSTEXPR20 inline auto countl_zero(uint32_t n) -> int { +#ifdef FMT_BUILTIN_CLZ + if (!is_constant_evaluated()) return FMT_BUILTIN_CLZ(n); +#endif + return countl_zero_fallback(n); +} + +FMT_CONSTEXPR20 inline auto countl_zero(uint64_t n) -> int { +#ifdef FMT_BUILTIN_CLZLL + if (!is_constant_evaluated()) return FMT_BUILTIN_CLZLL(n); +#endif + return countl_zero_fallback(n); } FMT_INLINE void assume(bool condition) { (void)condition; -#if FMT_HAS_BUILTIN(__builtin_assume) +#if FMT_HAS_BUILTIN(__builtin_assume) && !FMT_ICC_VERSION __builtin_assume(condition); #endif } // An approximation of iterator_t for pre-C++20 systems. template -using iterator_t = decltype(std::begin(std::declval())); -template -using sentinel_t = decltype(std::end(std::declval())); +using iterator_t = decltype(std::begin(std::declval())); +template using sentinel_t = decltype(std::end(std::declval())); // A workaround for std::string not having mutable data() until C++17. template -inline auto get_data(std::basic_string &s) -> Char * { +inline auto get_data(std::basic_string& s) -> Char* { return &s[0]; } template -inline auto get_data(Container &c) -> typename Container::value_type * { +inline auto get_data(Container& c) -> typename Container::value_type* { return c.data(); } #if defined(_SECURE_SCL) && _SECURE_SCL // Make a checked iterator to avoid MSVC warnings. -template using checked_ptr = stdext::checked_array_iterator; +template using checked_ptr = stdext::checked_array_iterator; template -constexpr auto make_checked(T *p, size_t size) -> checked_ptr { +constexpr auto make_checked(T* p, size_t size) -> checked_ptr { return {p, size}; } #else -template using checked_ptr = T *; -template constexpr auto make_checked(T *p, size_t) -> T * { +template using checked_ptr = T*; +template constexpr auto make_checked(T* p, size_t) -> T* { return p; } #endif @@ -401,7 +583,7 @@ __attribute__((no_sanitize("undefined"))) inline auto reserve(std::back_insert_iterator it, size_t n) -> checked_ptr { - Container &c = get_container(it); + Container& c = get_container(it); size_t size = c.size(); c.resize(size + n); return make_checked(get_data(c) + size, n); @@ -409,35 +591,34 @@ reserve(std::back_insert_iterator it, size_t n) template inline auto reserve(buffer_appender it, size_t n) -> buffer_appender { - buffer &buf = get_container(it); + buffer& buf = get_container(it); buf.try_reserve(buf.size() + n); return it; } template -constexpr auto reserve(Iterator &it, size_t) -> Iterator & { +constexpr auto reserve(Iterator& it, size_t) -> Iterator& { return it; } template using reserve_iterator = - remove_reference_t(), 0))>; + remove_reference_t(), 0))>; template -constexpr auto to_pointer(OutputIt, size_t) -> T * { +constexpr auto to_pointer(OutputIt, size_t) -> T* { return nullptr; } -template auto to_pointer(buffer_appender it, size_t n) -> T * { - buffer &buf = get_container(it); +template auto to_pointer(buffer_appender it, size_t n) -> T* { + buffer& buf = get_container(it); auto size = buf.size(); - if (buf.capacity() < size + n) - return nullptr; + if (buf.capacity() < size + n) return nullptr; buf.try_resize(size + n); return buf.data() + size; } template ::value)> -inline auto base_iterator(std::back_insert_iterator &it, +inline auto base_iterator(std::back_insert_iterator& it, checked_ptr) -> std::back_insert_iterator { return it; @@ -451,16 +632,15 @@ constexpr auto base_iterator(Iterator, Iterator it) -> Iterator { // is spectacularly slow to compile in C++20 so use a simple fill_n // instead (#1998). template -FMT_CONSTEXPR auto fill_n(OutputIt out, Size count, const T &value) +FMT_CONSTEXPR auto fill_n(OutputIt out, Size count, const T& value) -> OutputIt { - for (Size i = 0; i < count; ++i) - *out++ = value; + for (Size i = 0; i < count; ++i) *out++ = value; return out; } template -FMT_CONSTEXPR20 auto fill_n(T *out, Size count, char value) -> T * { +FMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* { if (is_constant_evaluated()) { - return fill_n(out, count, value); + return fill_n(out, count, value); } std::memset(out, value, to_unsigned(count)); return out + count; @@ -495,69 +675,72 @@ FMT_CONSTEXPR FMT_NOINLINE auto copy_str_noinline(InputIt begin, InputIt end, * occurs, this pointer will be a guess that depends on the particular * error, but it will always advance at least one byte. */ -FMT_CONSTEXPR inline auto utf8_decode(const char *s, uint32_t *c, int *e) - -> const char * { +FMT_CONSTEXPR inline auto utf8_decode(const char* s, uint32_t* c, int* e) + -> const char* { constexpr const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07}; constexpr const uint32_t mins[] = {4194304, 0, 128, 2048, 65536}; constexpr const int shiftc[] = {0, 18, 12, 6, 0}; constexpr const int shifte[] = {0, 6, 4, 2, 0}; - int len = code_point_length(s); - const char *next = s + len; + int len = "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\2\2\2\2\3\3\4" + [static_cast(*s) >> 3]; + // Compute the pointer to the next character early so that the next + // iteration can start working on the next character. Neither Clang + // nor GCC figure out this reordering on their own. + const char* next = s + len + !len; + + using uchar = unsigned char; // Assume a four-byte character and load four bytes. Unused bits are // shifted out. - *c = uint32_t(s[0] & masks[len]) << 18; - *c |= uint32_t(s[1] & 0x3f) << 12; - *c |= uint32_t(s[2] & 0x3f) << 6; - *c |= uint32_t(s[3] & 0x3f) << 0; + *c = uint32_t(uchar(s[0]) & masks[len]) << 18; + *c |= uint32_t(uchar(s[1]) & 0x3f) << 12; + *c |= uint32_t(uchar(s[2]) & 0x3f) << 6; + *c |= uint32_t(uchar(s[3]) & 0x3f) << 0; *c >>= shiftc[len]; // Accumulate the various error conditions. - using uchar = unsigned char; - *e = (*c < mins[len]) << 6; // non-canonical encoding - *e |= ((*c >> 11) == 0x1b) << 7; // surrogate half? - *e |= (*c > 0x10FFFF) << 8; // out of range? + *e = (*c < mins[len]) << 6; // non-canonical encoding + *e |= ((*c >> 11) == 0x1b) << 7; // surrogate half? + *e |= (*c > 0x10FFFF) << 8; // out of range? *e |= (uchar(s[1]) & 0xc0) >> 2; *e |= (uchar(s[2]) & 0xc0) >> 4; *e |= uchar(s[3]) >> 6; - *e ^= 0x2a; // top two bits of each tail byte correct? + *e ^= 0x2a; // top two bits of each tail byte correct? *e >>= shifte[len]; return next; } -constexpr uint32_t invalid_code_point = ~uint32_t(); +constexpr FMT_INLINE_VARIABLE uint32_t invalid_code_point = ~uint32_t(); // Invokes f(cp, sv) for every code point cp in s with sv being the string view // corresponding to the code point. cp is invalid_code_point on error. template FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) { - auto decode = [f](const char *buf_ptr, const char *ptr) { + auto decode = [f](const char* buf_ptr, const char* ptr) { auto cp = uint32_t(); auto error = 0; auto end = utf8_decode(buf_ptr, &cp, &error); bool result = f(error ? invalid_code_point : cp, - string_view(ptr, to_unsigned(end - buf_ptr))); - return result ? end : nullptr; + string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr))); + return result ? (error ? buf_ptr + 1 : end) : nullptr; }; auto p = s.data(); - const size_t block_size = 4; // utf8_decode always reads blocks of 4 chars. + const size_t block_size = 4; // utf8_decode always reads blocks of 4 chars. if (s.size() >= block_size) { for (auto end = p + s.size() - block_size + 1; p < end;) { p = decode(p, p); - if (!p) - return; + if (!p) return; } } if (auto num_chars_left = s.data() + s.size() - p) { char buf[2 * block_size - 1] = {}; copy_str(p, p + num_chars_left, buf); - const char *buf_ptr = buf; + const char* buf_ptr = buf; do { auto end = decode(buf_ptr, p); - if (!end) - return; + if (!end) return; p += end - buf_ptr; buf_ptr = end; } while (buf_ptr - buf < num_chars_left); @@ -574,23 +757,23 @@ FMT_CONSTEXPR inline size_t compute_width(string_view s) { size_t num_code_points = 0; // It is not a lambda for compatibility with C++14. struct count_code_points { - size_t *count; + size_t* count; FMT_CONSTEXPR auto operator()(uint32_t cp, string_view) const -> bool { *count += detail::to_unsigned( 1 + (cp >= 0x1100 && - (cp <= 0x115f || // Hangul Jamo init. consonants - cp == 0x2329 || // LEFT-POINTING ANGLE BRACKET - cp == 0x232a || // RIGHT-POINTING ANGLE BRACKET + (cp <= 0x115f || // Hangul Jamo init. consonants + cp == 0x2329 || // LEFT-POINTING ANGLE BRACKET + cp == 0x232a || // RIGHT-POINTING ANGLE BRACKET // CJK ... Yi except IDEOGRAPHIC HALF FILL SPACE: (cp >= 0x2e80 && cp <= 0xa4cf && cp != 0x303f) || - (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables - (cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs - (cp >= 0xfe10 && cp <= 0xfe19) || // Vertical Forms - (cp >= 0xfe30 && cp <= 0xfe6f) || // CJK Compatibility Forms - (cp >= 0xff00 && cp <= 0xff60) || // Fullwidth Forms - (cp >= 0xffe0 && cp <= 0xffe6) || // Fullwidth Forms - (cp >= 0x20000 && cp <= 0x2fffd) || // CJK + (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables + (cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs + (cp >= 0xfe10 && cp <= 0xfe19) || // Vertical Forms + (cp >= 0xfe30 && cp <= 0xfe6f) || // CJK Compatibility Forms + (cp >= 0xff00 && cp <= 0xff60) || // Fullwidth Forms + (cp >= 0xffe0 && cp <= 0xffe6) || // Fullwidth Forms + (cp >= 0x20000 && cp <= 0x2fffd) || // CJK (cp >= 0x30000 && cp <= 0x3fffd) || // Miscellaneous Symbols and Pictographs + Emoticons: (cp >= 0x1f300 && cp <= 0x1f64f) || @@ -599,13 +782,14 @@ FMT_CONSTEXPR inline size_t compute_width(string_view s) { return true; } }; + // We could avoid branches by using utf8_decode directly. for_each_codepoint(s, count_code_points{&num_code_points}); return num_code_points; } inline auto compute_width(basic_string_view s) -> size_t { - return compute_width(basic_string_view( - reinterpret_cast(s.data()), s.size())); + return compute_width( + string_view(reinterpret_cast(s.data()), s.size())); } template @@ -615,35 +799,94 @@ inline auto code_point_index(basic_string_view s, size_t n) -> size_t { } // Calculates the index of the nth code point in a UTF-8 string. -inline auto code_point_index(basic_string_view s, size_t n) - -> size_t { - const char8_type *data = s.data(); +inline auto code_point_index(string_view s, size_t n) -> size_t { + const char* data = s.data(); size_t num_code_points = 0; for (size_t i = 0, size = s.size(); i != size; ++i) { - if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) - return i; + if ((data[i] & 0xc0) != 0x80 && ++num_code_points > n) return i; } return s.size(); } +inline auto code_point_index(basic_string_view s, size_t n) + -> size_t { + return code_point_index( + string_view(reinterpret_cast(s.data()), s.size()), n); +} + +template struct is_integral : std::is_integral {}; +template <> struct is_integral : std::true_type {}; +template <> struct is_integral : std::true_type {}; + +template +using is_signed = + std::integral_constant::is_signed || + std::is_same::value>; + +template +using is_integer = + bool_constant::value && !std::is_same::value && + !std::is_same::value && + !std::is_same::value>; + +#ifndef FMT_USE_FLOAT +# define FMT_USE_FLOAT 1 +#endif +#ifndef FMT_USE_DOUBLE +# define FMT_USE_DOUBLE 1 +#endif +#ifndef FMT_USE_LONG_DOUBLE +# define FMT_USE_LONG_DOUBLE 1 +#endif + +#ifndef FMT_USE_FLOAT128 +# ifdef __clang__ +// Clang emulates GCC, so it has to appear early. +# if FMT_HAS_INCLUDE() +# define FMT_USE_FLOAT128 1 +# endif +# elif defined(__GNUC__) +// GNU C++: +# if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) +# define FMT_USE_FLOAT128 1 +# endif +# endif +# ifndef FMT_USE_FLOAT128 +# define FMT_USE_FLOAT128 0 +# endif +#endif + +#if FMT_USE_FLOAT128 +using float128 = __float128; +#else +using float128 = void; +#endif +template using is_float128 = std::is_same; + +template +using is_floating_point = + bool_constant::value || is_float128::value>; + template ::value> struct is_fast_float : bool_constant::is_iec559 && sizeof(T) <= sizeof(double)> {}; template struct is_fast_float : std::false_type {}; +template +using is_double_double = bool_constant::digits == 106>; + #ifndef FMT_USE_FULL_CACHE_DRAGONBOX -#define FMT_USE_FULL_CACHE_DRAGONBOX 0 +# define FMT_USE_FULL_CACHE_DRAGONBOX 0 #endif template template -void buffer::append(const U *begin, const U *end) { +void buffer::append(const U* begin, const U* end) { while (begin != end) { auto count = to_unsigned(end - begin); try_reserve(size_ + count); auto free_cap = capacity_ - size_; - if (free_cap < count) - count = free_cap; + if (free_cap < count) count = free_cap; std::uninitialized_copy_n(begin, count, make_checked(ptr_ + size_, count)); size_ += count; begin += count; @@ -654,9 +897,9 @@ template struct is_locale : std::false_type {}; template struct is_locale> : std::true_type {}; -} // namespace detail +} // namespace detail -FMT_MODULE_EXPORT_BEGIN +FMT_BEGIN_EXPORT // The number of characters to store in the basic_memory_buffer object itself // to avoid dynamic memory allocation. @@ -686,69 +929,83 @@ enum { inline_buffer_size = 500 }; template > class basic_memory_buffer final : public detail::buffer { -private: + private: T store_[SIZE]; // Don't inherit from Allocator avoid generating type_info for it. - Allocator alloc_; + FMT_NO_UNIQUE_ADDRESS Allocator alloc_; // Deallocate memory allocated by the buffer. FMT_CONSTEXPR20 void deallocate() { - T *data = this->data(); - if (data != store_) - alloc_.deallocate(data, this->capacity()); + T* data = this->data(); + if (data != store_) alloc_.deallocate(data, this->capacity()); } -protected: - FMT_CONSTEXPR20 void grow(size_t size) override; + protected: + FMT_CONSTEXPR20 void grow(size_t size) override { + detail::abort_fuzzing_if(size > 5000); + const size_t max_size = std::allocator_traits::max_size(alloc_); + size_t old_capacity = this->capacity(); + size_t new_capacity = old_capacity + old_capacity / 2; + if (size > new_capacity) + new_capacity = size; + else if (new_capacity > max_size) + new_capacity = size > max_size ? size : max_size; + T* old_data = this->data(); + T* new_data = + std::allocator_traits::allocate(alloc_, new_capacity); + // Suppress a bogus -Wstringop-overflow in gcc 13.1 (#3481). + FMT_ASSERT(this->size() <= new_capacity, ""); + // The following code doesn't throw, so the raw pointer above doesn't leak. + std::uninitialized_copy(old_data, old_data + this->size(), + detail::make_checked(new_data, new_capacity)); + this->set(new_data, new_capacity); + // deallocate must not throw according to the standard, but even if it does, + // the buffer already uses the new storage and will deallocate it in + // destructor. + if (old_data != store_) alloc_.deallocate(old_data, old_capacity); + } -public: + public: using value_type = T; - using const_reference = const T &; + using const_reference = const T&; FMT_CONSTEXPR20 explicit basic_memory_buffer( - const Allocator &alloc = Allocator()) + const Allocator& alloc = Allocator()) : alloc_(alloc) { this->set(store_, SIZE); - if (detail::is_constant_evaluated()) { - detail::fill_n(store_, SIZE, T{}); - } + if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T()); } FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); } -private: + private: // Move data from other to this buffer. - FMT_CONSTEXPR20 void move(basic_memory_buffer &other) { + FMT_CONSTEXPR20 void move(basic_memory_buffer& other) { alloc_ = std::move(other.alloc_); - T *data = other.data(); + T* data = other.data(); size_t size = other.size(), capacity = other.capacity(); if (data == other.store_) { this->set(store_, capacity); - if (detail::is_constant_evaluated()) { - detail::copy_str(other.store_, other.store_ + size, - detail::make_checked(store_, capacity)); - } else { - std::uninitialized_copy(other.store_, other.store_ + size, - detail::make_checked(store_, capacity)); - } + detail::copy_str(other.store_, other.store_ + size, + detail::make_checked(store_, capacity)); } else { this->set(data, capacity); // Set pointer to the inline array so that delete is not called // when deallocating. other.set(other.store_, 0); + other.clear(); } this->resize(size); } -public: + public: /** \rst Constructs a :class:`fmt::basic_memory_buffer` object moving the content of the other object to it. \endrst */ - FMT_CONSTEXPR20 - basic_memory_buffer(basic_memory_buffer &&other) FMT_NOEXCEPT { + FMT_CONSTEXPR20 basic_memory_buffer(basic_memory_buffer&& other) noexcept { move(other); } @@ -757,8 +1014,7 @@ class basic_memory_buffer final : public detail::buffer { Moves the content of the other ``basic_memory_buffer`` object to this one. \endrst */ - auto operator=(basic_memory_buffer &&other) FMT_NOEXCEPT - -> basic_memory_buffer & { + auto operator=(basic_memory_buffer&& other) noexcept -> basic_memory_buffer& { FMT_ASSERT(this != &other, ""); deallocate(); move(other); @@ -780,93 +1036,43 @@ class basic_memory_buffer final : public detail::buffer { // Directly append data into the buffer using detail::buffer::append; template - void append(const ContiguousRange &range) { + void append(const ContiguousRange& range) { append(range.data(), range.data() + range.size()); } }; -template -FMT_CONSTEXPR20 void -basic_memory_buffer::grow(size_t size) { -#ifdef FMT_FUZZ - if (size > 5000) - throw std::runtime_error("fuzz mode - won't grow that much"); -#endif - const size_t max_size = std::allocator_traits::max_size(alloc_); - size_t old_capacity = this->capacity(); - size_t new_capacity = old_capacity + old_capacity / 2; - if (size > new_capacity) - new_capacity = size; - else if (new_capacity > max_size) - new_capacity = size > max_size ? size : max_size; - T *old_data = this->data(); - T *new_data = - std::allocator_traits::allocate(alloc_, new_capacity); - // The following code doesn't throw, so the raw pointer above doesn't leak. - std::uninitialized_copy(old_data, old_data + this->size(), - detail::make_checked(new_data, new_capacity)); - this->set(new_data, new_capacity); - // deallocate must not throw according to the standard, but even if it does, - // the buffer already uses the new storage and will deallocate it in - // destructor. - if (old_data != store_) - alloc_.deallocate(old_data, old_capacity); -} - using memory_buffer = basic_memory_buffer; template struct is_contiguous> : std::true_type { }; +FMT_END_EXPORT namespace detail { -FMT_API void print(std::FILE *, string_view); -} - -/** A formatting error such as invalid format string. */ -FMT_CLASS_API -class FMT_API format_error : public std::runtime_error { -public: - explicit format_error(const char *message) : std::runtime_error(message) {} - explicit format_error(const std::string &message) - : std::runtime_error(message) {} - format_error(const format_error &) = default; - format_error &operator=(const format_error &) = default; - format_error(format_error &&) = default; - format_error &operator=(format_error &&) = default; - ~format_error() FMT_NOEXCEPT override FMT_MSC_DEFAULT; +FMT_API bool write_console(std::FILE* f, string_view text); +FMT_API void print(std::FILE*, string_view); +} // namespace detail +FMT_BEGIN_EXPORT + +// Suppress a misleading warning in older versions of clang. +#if FMT_CLANG_VERSION +# pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +/** An error reported from a formatting function. */ +class FMT_VISIBILITY("default") format_error : public std::runtime_error { + public: + using std::runtime_error::runtime_error; }; -/** - \rst - Constructs a `~fmt::format_arg_store` object that contains references - to arguments and can be implicitly converted to `~fmt::format_args`. - If ``fmt`` is a compile-time string then `make_args_checked` checks - its validity at compile time. - \endrst - */ -template > -FMT_INLINE auto make_args_checked(const S &fmt, - const remove_reference_t &...args) - -> format_arg_store, remove_reference_t...> { - static_assert( - detail::count<( - std::is_base_of>::value && - std::is_reference::value)...>() == 0, - "passing views as lvalues is disallowed"); - detail::check_format_string(fmt); - return {args...}; -} - -// compile-time support namespace detail_exported { -#if FMT_USE_NONTYPE_TEMPLATE_PARAMETERS +#if FMT_USE_NONTYPE_TEMPLATE_ARGS template struct fixed_string { constexpr fixed_string(const Char (&str)[N]) { - detail::copy_str(static_cast(str), - str + N, data); + detail::copy_str(static_cast(str), + str + N, data); } - Char data[N]{}; + Char data[N] = {}; }; #endif @@ -883,35 +1089,72 @@ constexpr auto compile_string_to_view(detail::std_string_view s) -> basic_string_view { return {s.data(), s.size()}; } -} // namespace detail_exported +} // namespace detail_exported -FMT_BEGIN_DETAIL_NAMESPACE +class loc_value { + private: + basic_format_arg value_; -template struct is_integral : std::is_integral {}; -template <> struct is_integral : std::true_type {}; -template <> struct is_integral : std::true_type {}; + public: + template ::value)> + loc_value(T value) : value_(detail::make_arg(value)) {} -template -using is_signed = - std::integral_constant::is_signed || - std::is_same::value>; + template ::value)> + loc_value(T) {} + + template auto visit(Visitor&& vis) -> decltype(vis(0)) { + return visit_format_arg(vis, value_); + } +}; + +// A locale facet that formats values in UTF-8. +// It is parameterized on the locale to avoid the heavy include. +template class format_facet : public Locale::facet { + private: + std::string separator_; + std::string grouping_; + std::string decimal_point_; + + protected: + virtual auto do_put(appender out, loc_value val, + const format_specs<>& specs) const -> bool; + + public: + static FMT_API typename Locale::id id; + + explicit format_facet(Locale& loc); + explicit format_facet(string_view sep = "", + std::initializer_list g = {3}, + std::string decimal_point = ".") + : separator_(sep.data(), sep.size()), + grouping_(g.begin(), g.end()), + decimal_point_(decimal_point) {} + + auto put(appender out, loc_value val, const format_specs<>& specs) const + -> bool { + return do_put(out, val, specs); + } +}; + +namespace detail { // Returns true if value is negative, false otherwise. // Same as `value < 0` but doesn't produce warnings if T is an unsigned type. template ::value)> -FMT_CONSTEXPR auto is_negative(T value) -> bool { +constexpr auto is_negative(T value) -> bool { return value < 0; } template ::value)> -FMT_CONSTEXPR auto is_negative(T) -> bool { +constexpr auto is_negative(T) -> bool { return false; } -template ::value)> -FMT_CONSTEXPR auto is_supported_floating_point(T) -> uint16_t { - return (std::is_same::value && FMT_USE_FLOAT) || - (std::is_same::value && FMT_USE_DOUBLE) || - (std::is_same::value && FMT_USE_LONG_DOUBLE); +template +FMT_CONSTEXPR auto is_supported_floating_point(T) -> bool { + if (std::is_same()) return FMT_USE_FLOAT; + if (std::is_same()) return FMT_USE_DOUBLE; + if (std::is_same()) return FMT_USE_LONG_DOUBLE; + return true; } // Smallest of uint32_t, uint64_t, uint128_t that is large enough to @@ -924,19 +1167,19 @@ using uint32_or_64_or_128_t = template using uint64_or_128_t = conditional_t() <= 64, uint64_t, uint128_t>; -#define FMT_POWERS_OF_10(factor) \ - factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ - (factor)*1000000, (factor)*10000000, (factor)*100000000, \ +#define FMT_POWERS_OF_10(factor) \ + factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ + (factor)*1000000, (factor)*10000000, (factor)*100000000, \ (factor)*1000000000 // Converts value in the range [0, 100) to a string. -constexpr const char *digits2(size_t value) { +constexpr const char* digits2(size_t value) { // GCC generates slightly better code when value is pointer-size. return &"0001020304050607080910111213141516171819" - "2021222324252627282930313233343536373839" - "4041424344454647484950515253545556575859" - "6061626364656667686970717273747576777879" - "8081828384858687888990919293949596979899"[value * 2]; + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899"[value * 2]; } // Sign is a template parameter to workaround a bug in gcc 4.8. @@ -953,20 +1196,16 @@ template FMT_CONSTEXPR auto count_digits_fallback(T n) -> int { // Integer division is slow so do it for a group of four digits instead // of for every digit. The idea comes from the talk by Alexandrescu // "Three Optimization Tips for C++". See speed-test for a comparison. - if (n < 10) - return count; - if (n < 100) - return count + 1; - if (n < 1000) - return count + 2; - if (n < 10000) - return count + 3; + if (n < 10) return count; + if (n < 100) return count + 1; + if (n < 1000) return count + 2; + if (n < 10000) return count + 3; n /= 10000u; count += 4; } } #if FMT_USE_INT128 -FMT_CONSTEXPR inline auto count_digits(uint128_t n) -> int { +FMT_CONSTEXPR inline auto count_digits(uint128_opt n) -> int { return count_digits_fallback(n); } #endif @@ -1007,7 +1246,7 @@ FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int { template FMT_CONSTEXPR auto count_digits(UInt n) -> int { #ifdef FMT_BUILTIN_CLZ - if (num_bits() == 32) + if (!is_constant_evaluated() && num_bits() == 32) return (FMT_BUILTIN_CLZ(static_cast(n) | 1) ^ 31) / BITS + 1; #endif // Lambda avoids unreachable code warnings from NVHPC. @@ -1020,27 +1259,25 @@ FMT_CONSTEXPR auto count_digits(UInt n) -> int { }(n); } -template <> auto count_digits<4>(detail::fallback_uintptr n) -> int; - #ifdef FMT_BUILTIN_CLZ // It is a separate function rather than a part of count_digits to workaround // the lack of static constexpr in constexpr functions. FMT_INLINE auto do_count_digits(uint32_t n) -> int { // An optimization by Kendall Willets from https://bit.ly/3uOIQrB. // This increments the upper 32 bits (log10(T) - 1) when >= T is added. -#define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T) +# define FMT_INC(T) (((sizeof(# T) - 1ull) << 32) - T) static constexpr uint64_t table[] = { - FMT_INC(0), FMT_INC(0), FMT_INC(0), // 8 - FMT_INC(10), FMT_INC(10), FMT_INC(10), // 64 - FMT_INC(100), FMT_INC(100), FMT_INC(100), // 512 - FMT_INC(1000), FMT_INC(1000), FMT_INC(1000), // 4096 - FMT_INC(10000), FMT_INC(10000), FMT_INC(10000), // 32k - FMT_INC(100000), FMT_INC(100000), FMT_INC(100000), // 256k - FMT_INC(1000000), FMT_INC(1000000), FMT_INC(1000000), // 2048k - FMT_INC(10000000), FMT_INC(10000000), FMT_INC(10000000), // 16M - FMT_INC(100000000), FMT_INC(100000000), FMT_INC(100000000), // 128M - FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000), // 1024M - FMT_INC(1000000000), FMT_INC(1000000000) // 4B + FMT_INC(0), FMT_INC(0), FMT_INC(0), // 8 + FMT_INC(10), FMT_INC(10), FMT_INC(10), // 64 + FMT_INC(100), FMT_INC(100), FMT_INC(100), // 512 + FMT_INC(1000), FMT_INC(1000), FMT_INC(1000), // 4096 + FMT_INC(10000), FMT_INC(10000), FMT_INC(10000), // 32k + FMT_INC(100000), FMT_INC(100000), FMT_INC(100000), // 256k + FMT_INC(1000000), FMT_INC(1000000), FMT_INC(1000000), // 2048k + FMT_INC(10000000), FMT_INC(10000000), FMT_INC(10000000), // 16M + FMT_INC(100000000), FMT_INC(100000000), FMT_INC(100000000), // 128M + FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000), // 1024M + FMT_INC(1000000000), FMT_INC(1000000000) // 4B }; auto inc = table[FMT_BUILTIN_CLZ(n | 1) ^ 31]; return static_cast((n + inc) >> 32); @@ -1057,15 +1294,11 @@ FMT_CONSTEXPR20 inline auto count_digits(uint32_t n) -> int { return count_digits_fallback(n); } -template constexpr auto digits10() FMT_NOEXCEPT -> int { +template constexpr auto digits10() noexcept -> int { return std::numeric_limits::digits10; } -template <> constexpr auto digits10() FMT_NOEXCEPT -> int { - return 38; -} -template <> constexpr auto digits10() FMT_NOEXCEPT -> int { - return 38; -} +template <> constexpr auto digits10() noexcept -> int { return 38; } +template <> constexpr auto digits10() noexcept -> int { return 38; } template struct thousands_sep_result { std::string grouping; @@ -1094,16 +1327,16 @@ template <> inline auto decimal_point(locale_ref loc) -> wchar_t { } // Compares two characters for equality. -template auto equal2(const Char *lhs, const char *rhs) -> bool { +template auto equal2(const Char* lhs, const char* rhs) -> bool { return lhs[0] == Char(rhs[0]) && lhs[1] == Char(rhs[1]); } -inline auto equal2(const char *lhs, const char *rhs) -> bool { +inline auto equal2(const char* lhs, const char* rhs) -> bool { return memcmp(lhs, rhs, 2) == 0; } // Copies two characters from src to dst. template -FMT_CONSTEXPR20 FMT_INLINE void copy2(Char *dst, const char *src) { +FMT_CONSTEXPR20 FMT_INLINE void copy2(Char* dst, const char* src) { if (!is_constant_evaluated() && sizeof(Char) == sizeof(char)) { memcpy(dst, src, 2); return; @@ -1121,11 +1354,11 @@ template struct format_decimal_result { // buffer of specified size. The caller must ensure that the buffer is large // enough. template -FMT_CONSTEXPR20 auto format_decimal(Char *out, UInt value, int size) - -> format_decimal_result { +FMT_CONSTEXPR20 auto format_decimal(Char* out, UInt value, int size) + -> format_decimal_result { FMT_ASSERT(size >= count_digits(value), "invalid digit count"); out += size; - Char *end = out; + Char* end = out; while (value >= 100) { // Integer division is slow so do it for a group of two digits instead // of for every digit. The idea comes from the talk by Alexandrescu @@ -1145,50 +1378,28 @@ FMT_CONSTEXPR20 auto format_decimal(Char *out, UInt value, int size) template >::value)> -inline auto format_decimal(Iterator out, UInt value, int size) +FMT_CONSTEXPR inline auto format_decimal(Iterator out, UInt value, int size) -> format_decimal_result { // Buffer is large enough to hold all digits (digits10 + 1). - Char buffer[digits10() + 1]; + Char buffer[digits10() + 1] = {}; auto end = format_decimal(buffer, value, size).end; return {out, detail::copy_str_noinline(buffer, end, out)}; } template -FMT_CONSTEXPR auto format_uint(Char *buffer, UInt value, int num_digits, - bool upper = false) -> Char * { +FMT_CONSTEXPR auto format_uint(Char* buffer, UInt value, int num_digits, + bool upper = false) -> Char* { buffer += num_digits; - Char *end = buffer; + Char* end = buffer; do { - const char *digits = upper ? "0123456789ABCDEF" : "0123456789abcdef"; - unsigned digit = (value & ((1 << BASE_BITS) - 1)); + const char* digits = upper ? "0123456789ABCDEF" : "0123456789abcdef"; + unsigned digit = static_cast(value & ((1 << BASE_BITS) - 1)); *--buffer = static_cast(BASE_BITS < 4 ? static_cast('0' + digit) : digits[digit]); } while ((value >>= BASE_BITS) != 0); return end; } -template -auto format_uint(Char *buffer, detail::fallback_uintptr n, int num_digits, - bool = false) -> Char * { - auto char_digits = std::numeric_limits::digits / 4; - int start = (num_digits + char_digits - 1) / char_digits - 1; - if (int start_digits = num_digits % char_digits) { - unsigned value = n.value[start--]; - buffer = format_uint(buffer, value, start_digits); - } - for (; start >= 0; --start) { - unsigned value = n.value[start]; - buffer += char_digits; - auto p = buffer; - for (int i = 0; i < char_digits; ++i) { - unsigned digit = (value & ((1 << BASE_BITS) - 1)); - *--p = static_cast("0123456789abcdef"[digit]); - value >>= BASE_BITS; - } - } - return buffer; -} - template inline auto format_uint(It out, UInt value, int num_digits, bool upper = false) -> It { @@ -1204,72 +1415,184 @@ inline auto format_uint(It out, UInt value, int num_digits, bool upper = false) // A converter from UTF-8 to UTF-16. class utf8_to_utf16 { -private: + private: basic_memory_buffer buffer_; -public: + public: FMT_API explicit utf8_to_utf16(string_view s); operator basic_string_view() const { return {&buffer_[0], size()}; } auto size() const -> size_t { return buffer_.size() - 1; } - auto c_str() const -> const wchar_t * { return &buffer_[0]; } + auto c_str() const -> const wchar_t* { return &buffer_[0]; } auto str() const -> std::wstring { return {&buffer_[0], size()}; } }; +// A converter from UTF-16/UTF-32 (host endian) to UTF-8. +template class to_utf8 { + private: + Buffer buffer_; + + public: + to_utf8() {} + explicit to_utf8(basic_string_view s) { + static_assert(sizeof(WChar) == 2 || sizeof(WChar) == 4, + "Expect utf16 or utf32"); + + if (!convert(s)) + FMT_THROW(std::runtime_error(sizeof(WChar) == 2 ? "invalid utf16" + : "invalid utf32")); + } + operator string_view() const { return string_view(&buffer_[0], size()); } + size_t size() const { return buffer_.size() - 1; } + const char* c_str() const { return &buffer_[0]; } + std::string str() const { return std::string(&buffer_[0], size()); } + + // Performs conversion returning a bool instead of throwing exception on + // conversion error. This method may still throw in case of memory allocation + // error. + bool convert(basic_string_view s) { + if (!convert(buffer_, s)) return false; + buffer_.push_back(0); + return true; + } + static bool convert(Buffer& buf, basic_string_view s) { + for (auto p = s.begin(); p != s.end(); ++p) { + uint32_t c = static_cast(*p); + if (sizeof(WChar) == 2 && c >= 0xd800 && c <= 0xdfff) { + // surrogate pair + ++p; + if (p == s.end() || (c & 0xfc00) != 0xd800 || (*p & 0xfc00) != 0xdc00) { + return false; + } + c = (c << 10) + static_cast(*p) - 0x35fdc00; + } + if (c < 0x80) { + buf.push_back(static_cast(c)); + } else if (c < 0x800) { + buf.push_back(static_cast(0xc0 | (c >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else if ((c >= 0x800 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xffff)) { + buf.push_back(static_cast(0xe0 | (c >> 12))); + buf.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else if (c >= 0x10000 && c <= 0x10ffff) { + buf.push_back(static_cast(0xf0 | (c >> 18))); + buf.push_back(static_cast(0x80 | ((c & 0x3ffff) >> 12))); + buf.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else { + return false; + } + } + return true; + } +}; + +// Computes 128-bit result of multiplication of two 64-bit unsigned integers. +inline uint128_fallback umul128(uint64_t x, uint64_t y) noexcept { +#if FMT_USE_INT128 + auto p = static_cast(x) * static_cast(y); + return {static_cast(p >> 64), static_cast(p)}; +#elif defined(_MSC_VER) && defined(_M_X64) + auto result = uint128_fallback(); + result.lo_ = _umul128(x, y, &result.hi_); + return result; +#else + const uint64_t mask = static_cast(max_value()); + + uint64_t a = x >> 32; + uint64_t b = x & mask; + uint64_t c = y >> 32; + uint64_t d = y & mask; + + uint64_t ac = a * c; + uint64_t bc = b * c; + uint64_t ad = a * d; + uint64_t bd = b * d; + + uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask); + + return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32), + (intermediate << 32) + (bd & mask)}; +#endif +} + namespace dragonbox { +// Computes floor(log10(pow(2, e))) for e in [-2620, 2620] using the method from +// https://fmt.dev/papers/Dragonbox.pdf#page=28, section 6.1. +inline int floor_log10_pow2(int e) noexcept { + FMT_ASSERT(e <= 2620 && e >= -2620, "too large exponent"); + static_assert((-1 >> 1) == -1, "right shift is not arithmetic"); + return (e * 315653) >> 20; +} + +inline int floor_log2_pow10(int e) noexcept { + FMT_ASSERT(e <= 1233 && e >= -1233, "too large exponent"); + return (e * 1741647) >> 19; +} + +// Computes upper 64 bits of multiplication of two 64-bit unsigned integers. +inline uint64_t umul128_upper64(uint64_t x, uint64_t y) noexcept { +#if FMT_USE_INT128 + auto p = static_cast(x) * static_cast(y); + return static_cast(p >> 64); +#elif defined(_MSC_VER) && defined(_M_X64) + return __umulh(x, y); +#else + return umul128(x, y).high(); +#endif +} + +// Computes upper 128 bits of multiplication of a 64-bit unsigned integer and a +// 128-bit unsigned integer. +inline uint128_fallback umul192_upper128(uint64_t x, + uint128_fallback y) noexcept { + uint128_fallback r = umul128(x, y.high()); + r += umul128_upper64(x, y.low()); + return r; +} + +FMT_API uint128_fallback get_cached_power(int k) noexcept; // Type-specific information that Dragonbox uses. -template struct float_info; +template struct float_info; template <> struct float_info { using carrier_uint = uint32_t; - static const int significand_bits = 23; static const int exponent_bits = 8; - static const int min_exponent = -126; - static const int max_exponent = 127; - static const int exponent_bias = -127; - static const int decimal_digits = 9; static const int kappa = 1; static const int big_divisor = 100; static const int small_divisor = 10; static const int min_k = -31; static const int max_k = 46; - static const int cache_bits = 64; - static const int divisibility_check_by_5_threshold = 39; - static const int case_fc_pm_half_lower_threshold = -1; - static const int case_fc_pm_half_upper_threshold = 6; - static const int case_fc_lower_threshold = -2; - static const int case_fc_upper_threshold = 6; - static const int case_shorter_interval_left_endpoint_lower_threshold = 2; - static const int case_shorter_interval_left_endpoint_upper_threshold = 3; static const int shorter_interval_tie_lower_threshold = -35; static const int shorter_interval_tie_upper_threshold = -35; - static const int max_trailing_zeros = 7; }; template <> struct float_info { using carrier_uint = uint64_t; - static const int significand_bits = 52; static const int exponent_bits = 11; - static const int min_exponent = -1022; - static const int max_exponent = 1023; - static const int exponent_bias = -1023; - static const int decimal_digits = 17; static const int kappa = 2; static const int big_divisor = 1000; static const int small_divisor = 100; static const int min_k = -292; - static const int max_k = 326; - static const int cache_bits = 128; - static const int divisibility_check_by_5_threshold = 86; - static const int case_fc_pm_half_lower_threshold = -2; - static const int case_fc_pm_half_upper_threshold = 9; - static const int case_fc_lower_threshold = -4; - static const int case_fc_upper_threshold = 9; - static const int case_shorter_interval_left_endpoint_lower_threshold = 2; - static const int case_shorter_interval_left_endpoint_upper_threshold = 3; + static const int max_k = 341; static const int shorter_interval_tie_lower_threshold = -77; static const int shorter_interval_tie_upper_threshold = -77; - static const int max_trailing_zeros = 16; +}; + +// An 80- or 128-bit floating point number. +template +struct float_info::digits == 64 || + std::numeric_limits::digits == 113 || + is_float128::value>> { + using carrier_uint = detail::uint128_t; + static const int exponent_bits = 15; +}; + +// A double-double floating point number. +template +struct float_info::value>> { + using carrier_uint = detail::uint128_t; }; template struct decimal_fp { @@ -1278,16 +1601,35 @@ template struct decimal_fp { int exponent; }; -template -FMT_API auto to_decimal(T x) FMT_NOEXCEPT -> decimal_fp; -} // namespace dragonbox +template FMT_API auto to_decimal(T x) noexcept -> decimal_fp; +} // namespace dragonbox -template +// Returns true iff Float has the implicit bit which is not stored. +template constexpr bool has_implicit_bit() { + // An 80-bit FP number has a 64-bit significand an no implicit bit. + return std::numeric_limits::digits != 64; +} + +// Returns the number of significand bits stored in Float. The implicit bit is +// not counted since it is not stored. +template constexpr int num_significand_bits() { + // std::numeric_limits may not support __float128. + return is_float128() ? 112 + : (std::numeric_limits::digits - + (has_implicit_bit() ? 1 : 0)); +} + +template constexpr auto exponent_mask() -> - typename dragonbox::float_info::carrier_uint { - using uint = typename dragonbox::float_info::carrier_uint; - return ((uint(1) << dragonbox::float_info::exponent_bits) - 1) - << dragonbox::float_info::significand_bits; + typename dragonbox::float_info::carrier_uint { + using float_uint = typename dragonbox::float_info::carrier_uint; + return ((float_uint(1) << dragonbox::float_info::exponent_bits) - 1) + << num_significand_bits(); +} +template constexpr auto exponent_bias() -> int { + // std::numeric_limits may not support __float128. + return is_float128() ? 16383 + : std::numeric_limits::max_exponent - 1; } // Writes the exponent exp in the form "[+-]d{2,3}" to buffer. @@ -1301,41 +1643,143 @@ FMT_CONSTEXPR auto write_exponent(int exp, It it) -> It { *it++ = static_cast('+'); } if (exp >= 100) { - const char *top = digits2(to_unsigned(exp / 100)); - if (exp >= 1000) - *it++ = static_cast(top[0]); + const char* top = digits2(to_unsigned(exp / 100)); + if (exp >= 1000) *it++ = static_cast(top[0]); *it++ = static_cast(top[1]); exp %= 100; } - const char *d = digits2(to_unsigned(exp)); + const char* d = digits2(to_unsigned(exp)); *it++ = static_cast(d[0]); *it++ = static_cast(d[1]); return it; } -template -FMT_HEADER_ONLY_CONSTEXPR20 auto format_float(T value, int precision, - float_specs specs, - buffer &buf) -> int; +// A floating-point number f * pow(2, e) where F is an unsigned type. +template struct basic_fp { + F f; + int e; + + static constexpr const int num_significand_bits = + static_cast(sizeof(F) * num_bits()); + + constexpr basic_fp() : f(0), e(0) {} + constexpr basic_fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} + + // Constructs fp from an IEEE754 floating-point number. + template FMT_CONSTEXPR basic_fp(Float n) { assign(n); } + + // Assigns n to this and return true iff predecessor is closer than successor. + template ::value)> + FMT_CONSTEXPR auto assign(Float n) -> bool { + static_assert(std::numeric_limits::digits <= 113, "unsupported FP"); + // Assume Float is in the format [sign][exponent][significand]. + using carrier_uint = typename dragonbox::float_info::carrier_uint; + const auto num_float_significand_bits = + detail::num_significand_bits(); + const auto implicit_bit = carrier_uint(1) << num_float_significand_bits; + const auto significand_mask = implicit_bit - 1; + auto u = bit_cast(n); + f = static_cast(u & significand_mask); + auto biased_e = static_cast((u & exponent_mask()) >> + num_float_significand_bits); + // The predecessor is closer if n is a normalized power of 2 (f == 0) + // other than the smallest normalized number (biased_e > 1). + auto is_predecessor_closer = f == 0 && biased_e > 1; + if (biased_e == 0) + biased_e = 1; // Subnormals use biased exponent 1 (min exponent). + else if (has_implicit_bit()) + f += static_cast(implicit_bit); + e = biased_e - exponent_bias() - num_float_significand_bits; + if (!has_implicit_bit()) ++e; + return is_predecessor_closer; + } -// Formats a floating-point number with snprintf. -template -auto snprintf_float(T value, int precision, float_specs specs, - buffer &buf) -> int; + template ::value)> + FMT_CONSTEXPR auto assign(Float n) -> bool { + static_assert(std::numeric_limits::is_iec559, "unsupported FP"); + return assign(static_cast(n)); + } +}; -template constexpr auto promote_float(T value) -> T { +using fp = basic_fp; + +// Normalizes the value converted from double and multiplied by (1 << SHIFT). +template +FMT_CONSTEXPR basic_fp normalize(basic_fp value) { + // Handle subnormals. + const auto implicit_bit = F(1) << num_significand_bits(); + const auto shifted_implicit_bit = implicit_bit << SHIFT; + while ((value.f & shifted_implicit_bit) == 0) { + value.f <<= 1; + --value.e; + } + // Subtract 1 to account for hidden bit. + const auto offset = basic_fp::num_significand_bits - + num_significand_bits() - SHIFT - 1; + value.f <<= offset; + value.e -= offset; return value; } -constexpr auto promote_float(float value) -> double { - return static_cast(value); + +// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking. +FMT_CONSTEXPR inline uint64_t multiply(uint64_t lhs, uint64_t rhs) { +#if FMT_USE_INT128 + auto product = static_cast<__uint128_t>(lhs) * rhs; + auto f = static_cast(product >> 64); + return (static_cast(product) & (1ULL << 63)) != 0 ? f + 1 : f; +#else + // Multiply 32-bit parts of significands. + uint64_t mask = (1ULL << 32) - 1; + uint64_t a = lhs >> 32, b = lhs & mask; + uint64_t c = rhs >> 32, d = rhs & mask; + uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; + // Compute mid 64-bit of result and round. + uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); + return ac + (ad >> 32) + (bc >> 32) + (mid >> 32); +#endif +} + +FMT_CONSTEXPR inline fp operator*(fp x, fp y) { + return {multiply(x.f, y.f), x.e + y.e + 64}; +} + +template struct basic_data { + // For checking rounding thresholds. + // The kth entry is chosen to be the smallest integer such that the + // upper 32-bits of 10^(k+1) times it is strictly bigger than 5 * 10^k. + static constexpr uint32_t fractional_part_rounding_thresholds[8] = { + 2576980378, // ceil(2^31 + 2^32/10^1) + 2190433321, // ceil(2^31 + 2^32/10^2) + 2151778616, // ceil(2^31 + 2^32/10^3) + 2147913145, // ceil(2^31 + 2^32/10^4) + 2147526598, // ceil(2^31 + 2^32/10^5) + 2147487943, // ceil(2^31 + 2^32/10^6) + 2147484078, // ceil(2^31 + 2^32/10^7) + 2147483691 // ceil(2^31 + 2^32/10^8) + }; +}; +// This is a struct rather than an alias to avoid shadowing warnings in gcc. +struct data : basic_data<> {}; + +#if FMT_CPLUSPLUS < 201703L +template +constexpr uint32_t basic_data::fractional_part_rounding_thresholds[]; +#endif + +template () == num_bits()> +using convert_float_result = + conditional_t::value || doublish, double, T>; + +template +constexpr auto convert_float(T value) -> convert_float_result { + return static_cast>(value); } template FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, - const fill_t &fill) -> OutputIt { + const fill_t& fill) -> OutputIt { auto fill_size = fill.size(); - if (fill_size == 1) - return detail::fill_n(it, n, fill[0]); + if (fill_size == 1) return detail::fill_n(it, n, fill[0]); auto data = fill.data(); for (size_t i = 0; i < n; ++i) it = copy_str(data, data + fill_size, it); @@ -1347,47 +1791,43 @@ FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, // width: output display width in (terminal) column positions. template -FMT_CONSTEXPR auto write_padded(OutputIt out, - const basic_format_specs &specs, - size_t size, size_t width, F &&f) -> OutputIt { +FMT_CONSTEXPR auto write_padded(OutputIt out, const format_specs& specs, + size_t size, size_t width, F&& f) -> OutputIt { static_assert(align == align::left || align == align::right, ""); unsigned spec_width = to_unsigned(specs.width); size_t padding = spec_width > width ? spec_width - width : 0; // Shifts are encoded as string literals because static constexpr is not // supported in constexpr functions. - auto *shifts = align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01"; + auto* shifts = align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01"; size_t left_padding = padding >> shifts[specs.align]; size_t right_padding = padding - left_padding; auto it = reserve(out, size + padding * specs.fill.size()); - if (left_padding != 0) - it = fill(it, left_padding, specs.fill); + if (left_padding != 0) it = fill(it, left_padding, specs.fill); it = f(it); - if (right_padding != 0) - it = fill(it, right_padding, specs.fill); + if (right_padding != 0) it = fill(it, right_padding, specs.fill); return base_iterator(out, it); } template -constexpr auto write_padded(OutputIt out, const basic_format_specs &specs, - size_t size, F &&f) -> OutputIt { +constexpr auto write_padded(OutputIt out, const format_specs& specs, + size_t size, F&& f) -> OutputIt { return write_padded(out, specs, size, size, f); } template FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, - const basic_format_specs &specs) - -> OutputIt { + const format_specs& specs) -> OutputIt { return write_padded( out, specs, bytes.size(), [bytes](reserve_iterator it) { - const char *data = bytes.data(); + const char* data = bytes.data(); return copy_str(data, data + bytes.size(), it); }); } template -auto write_ptr(OutputIt out, UIntPtr value, - const basic_format_specs *specs) -> OutputIt { +auto write_ptr(OutputIt out, UIntPtr value, const format_specs* specs) + -> OutputIt { int num_digits = count_digits<4>(value); auto size = to_unsigned(num_digits) + size_t(2); auto write = [=](reserve_iterator it) { @@ -1399,35 +1839,196 @@ auto write_ptr(OutputIt out, UIntPtr value, : base_iterator(out, write(reserve(out, size))); } -template -FMT_CONSTEXPR auto write_char(OutputIt out, Char value, - const basic_format_specs &specs) - -> OutputIt { - return write_padded(out, specs, 1, [=](reserve_iterator it) { - *it++ = value; - return it; - }); -} -template -FMT_CONSTEXPR auto write(OutputIt out, Char value, - const basic_format_specs &specs, - locale_ref loc = {}) -> OutputIt { - return check_char_specs(specs) - ? write_char(out, value, specs) - : write(out, static_cast(value), specs, loc); +// Returns true iff the code point cp is printable. +FMT_API auto is_printable(uint32_t cp) -> bool; + +inline auto needs_escape(uint32_t cp) -> bool { + return cp < 0x20 || cp == 0x7f || cp == '"' || cp == '\\' || + !is_printable(cp); } -// Data for write_int that doesn't depend on output iterator type. It is used to -// avoid template code bloat. -template struct write_int_data { - size_t size; - size_t padding; +template struct find_escape_result { + const Char* begin; + const Char* end; + uint32_t cp; +}; - FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix, - const basic_format_specs &specs) - : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) { - if (specs.align == align::numeric) { - auto width = to_unsigned(specs.width); +template +using make_unsigned_char = + typename conditional_t::value, + std::make_unsigned, + type_identity>::type; + +template +auto find_escape(const Char* begin, const Char* end) + -> find_escape_result { + for (; begin != end; ++begin) { + uint32_t cp = static_cast>(*begin); + if (const_check(sizeof(Char) == 1) && cp >= 0x80) continue; + if (needs_escape(cp)) return {begin, begin + 1, cp}; + } + return {begin, nullptr, 0}; +} + +inline auto find_escape(const char* begin, const char* end) + -> find_escape_result { + if (!is_utf8()) return find_escape(begin, end); + auto result = find_escape_result{end, nullptr, 0}; + for_each_codepoint(string_view(begin, to_unsigned(end - begin)), + [&](uint32_t cp, string_view sv) { + if (needs_escape(cp)) { + result = {sv.begin(), sv.end(), cp}; + return false; + } + return true; + }); + return result; +} + +#define FMT_STRING_IMPL(s, base, explicit) \ + [] { \ + /* Use the hidden visibility as a workaround for a GCC bug (#1973). */ \ + /* Use a macro-like name to avoid shadowing warnings. */ \ + struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base { \ + using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t; \ + FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit \ + operator fmt::basic_string_view() const { \ + return fmt::detail_exported::compile_string_to_view(s); \ + } \ + }; \ + return FMT_COMPILE_STRING(); \ + }() + +/** + \rst + Constructs a compile-time format string from a string literal *s*. + + **Example**:: + + // A compile-time error because 'd' is an invalid specifier for strings. + std::string s = fmt::format(FMT_STRING("{:d}"), "foo"); + \endrst + */ +#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) + +template +auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt { + *out++ = static_cast('\\'); + *out++ = static_cast(prefix); + Char buf[width]; + fill_n(buf, width, static_cast('0')); + format_uint<4>(buf, cp, width); + return copy_str(buf, buf + width, out); +} + +template +auto write_escaped_cp(OutputIt out, const find_escape_result& escape) + -> OutputIt { + auto c = static_cast(escape.cp); + switch (escape.cp) { + case '\n': + *out++ = static_cast('\\'); + c = static_cast('n'); + break; + case '\r': + *out++ = static_cast('\\'); + c = static_cast('r'); + break; + case '\t': + *out++ = static_cast('\\'); + c = static_cast('t'); + break; + case '"': + FMT_FALLTHROUGH; + case '\'': + FMT_FALLTHROUGH; + case '\\': + *out++ = static_cast('\\'); + break; + default: + if (escape.cp < 0x100) { + return write_codepoint<2, Char>(out, 'x', escape.cp); + } + if (escape.cp < 0x10000) { + return write_codepoint<4, Char>(out, 'u', escape.cp); + } + if (escape.cp < 0x110000) { + return write_codepoint<8, Char>(out, 'U', escape.cp); + } + for (Char escape_char : basic_string_view( + escape.begin, to_unsigned(escape.end - escape.begin))) { + out = write_codepoint<2, Char>(out, 'x', + static_cast(escape_char) & 0xFF); + } + return out; + } + *out++ = c; + return out; +} + +template +auto write_escaped_string(OutputIt out, basic_string_view str) + -> OutputIt { + *out++ = static_cast('"'); + auto begin = str.begin(), end = str.end(); + do { + auto escape = find_escape(begin, end); + out = copy_str(begin, escape.begin, out); + begin = escape.end; + if (!begin) break; + out = write_escaped_cp(out, escape); + } while (begin != end); + *out++ = static_cast('"'); + return out; +} + +template +auto write_escaped_char(OutputIt out, Char v) -> OutputIt { + *out++ = static_cast('\''); + if ((needs_escape(static_cast(v)) && v != static_cast('"')) || + v == static_cast('\'')) { + out = write_escaped_cp( + out, find_escape_result{&v, &v + 1, static_cast(v)}); + } else { + *out++ = v; + } + *out++ = static_cast('\''); + return out; +} + +template +FMT_CONSTEXPR auto write_char(OutputIt out, Char value, + const format_specs& specs) -> OutputIt { + bool is_debug = specs.type == presentation_type::debug; + return write_padded(out, specs, 1, [=](reserve_iterator it) { + if (is_debug) return write_escaped_char(it, value); + *it++ = value; + return it; + }); +} +template +FMT_CONSTEXPR auto write(OutputIt out, Char value, + const format_specs& specs, locale_ref loc = {}) + -> OutputIt { + // char is formatted as unsigned char for consistency across platforms. + using unsigned_type = + conditional_t::value, unsigned char, unsigned>; + return check_char_specs(specs) + ? write_char(out, value, specs) + : write(out, static_cast(value), specs, loc); +} + +// Data for write_int that doesn't depend on output iterator type. It is used to +// avoid template code bloat. +template struct write_int_data { + size_t size; + size_t padding; + + FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix, + const format_specs& specs) + : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) { + if (specs.align == align::numeric) { + auto width = to_unsigned(specs.width); if (width > size) { padding = width - size; size = width; @@ -1444,9 +2045,10 @@ template struct write_int_data { // where are written by write_digits(it). // prefix contains chars in three lower bytes and the size in the fourth byte. template -FMT_CONSTEXPR FMT_INLINE auto -write_int(OutputIt out, int num_digits, unsigned prefix, - const basic_format_specs &specs, W write_digits) -> OutputIt { +FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits, + unsigned prefix, + const format_specs& specs, + W write_digits) -> OutputIt { // Slightly faster check for specs.width == 0 && specs.precision == -1. if ((specs.width | (specs.precision + 1)) == 0) { auto it = reserve(out, to_unsigned(num_digits) + (prefix >> 24)); @@ -1467,43 +2069,42 @@ write_int(OutputIt out, int num_digits, unsigned prefix, } template class digit_grouping { -private: - thousands_sep_result sep_; + private: + std::string grouping_; + std::basic_string thousands_sep_; struct next_state { std::string::const_iterator group; int pos; }; - next_state initial_state() const { return {sep_.grouping.begin(), 0}; } + next_state initial_state() const { return {grouping_.begin(), 0}; } // Returns the next digit group separator position. - int next(next_state &state) const { - if (!sep_.thousands_sep) - return max_value(); - if (state.group == sep_.grouping.end()) - return state.pos += sep_.grouping.back(); + int next(next_state& state) const { + if (thousands_sep_.empty()) return max_value(); + if (state.group == grouping_.end()) return state.pos += grouping_.back(); if (*state.group <= 0 || *state.group == max_value()) return max_value(); state.pos += *state.group++; return state.pos; } -public: + public: explicit digit_grouping(locale_ref loc, bool localized = true) { - if (localized) - sep_ = thousands_sep(loc); - else - sep_.thousands_sep = Char(); + if (!localized) return; + auto sep = thousands_sep(loc); + grouping_ = sep.grouping; + if (sep.thousands_sep) thousands_sep_.assign(1, sep.thousands_sep); } - explicit digit_grouping(thousands_sep_result sep) : sep_(sep) {} + digit_grouping(std::string grouping, std::basic_string sep) + : grouping_(std::move(grouping)), thousands_sep_(std::move(sep)) {} - Char separator() const { return sep_.thousands_sep; } + bool has_separator() const { return !thousands_sep_.empty(); } int count_separators(int num_digits) const { int count = 0; auto state = initial_state(); - while (num_digits > next(state)) - ++count; + while (num_digits > next(state)) ++count; return count; } @@ -1515,14 +2116,15 @@ template class digit_grouping { separators.push_back(0); auto state = initial_state(); while (int i = next(state)) { - if (i >= num_digits) - break; + if (i >= num_digits) break; separators.push_back(i); } for (int i = 0, sep_index = static_cast(separators.size() - 1); i < num_digits; ++i) { if (num_digits - i == separators[sep_index]) { - *out++ = separator(); + out = + copy_str(thousands_sep_.data(), + thousands_sep_.data() + thousands_sep_.size(), out); --sep_index; } *out++ = static_cast(digits[to_unsigned(i)]); @@ -1531,10 +2133,11 @@ template class digit_grouping { } }; +// Writes a decimal integer with digit grouping. template -auto write_int_localized(OutputIt out, UInt value, unsigned prefix, - const basic_format_specs &specs, - const digit_grouping &grouping) -> OutputIt { +auto write_int(OutputIt out, UInt value, unsigned prefix, + const format_specs& specs, + const digit_grouping& grouping) -> OutputIt { static_assert(std::is_same, UInt>::value, ""); int num_digits = count_digits(value); char digits[40]; @@ -1543,22 +2146,24 @@ auto write_int_localized(OutputIt out, UInt value, unsigned prefix, grouping.count_separators(num_digits)); return write_padded( out, specs, size, size, [&](reserve_iterator it) { - if (prefix != 0) - *it++ = static_cast(prefix); + if (prefix != 0) { + char sign = static_cast(prefix); + *it++ = static_cast(sign); + } return grouping.apply(it, string_view(digits, to_unsigned(num_digits))); }); } -template -auto write_int_localized(OutputIt &out, UInt value, unsigned prefix, - const basic_format_specs &specs, locale_ref loc) - -> bool { - auto grouping = digit_grouping(loc); - out = write_int_localized(out, value, prefix, specs, grouping); - return true; +// Writes a localized value. +FMT_API auto write_loc(appender out, loc_value value, + const format_specs<>& specs, locale_ref loc) -> bool; +template +inline auto write_loc(OutputIt, loc_value, const format_specs&, + locale_ref) -> bool { + return false; } -FMT_CONSTEXPR inline void prefix_append(unsigned &prefix, unsigned value) { +FMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) { prefix |= prefix != 0 ? value << 8 : value; prefix += (1u + (value > 0xff ? 1 : 0)) << 24; } @@ -1584,21 +2189,37 @@ FMT_CONSTEXPR auto make_write_int_arg(T value, sign_t sign) return {abs_value, prefix}; } +template struct loc_writer { + buffer_appender out; + const format_specs& specs; + std::basic_string sep; + std::string grouping; + std::basic_string decimal_point; + + template ::value)> + auto operator()(T value) -> bool { + auto arg = make_write_int_arg(value, specs.sign); + write_int(out, static_cast>(arg.abs_value), arg.prefix, + specs, digit_grouping(grouping, sep)); + return true; + } + + template ::value)> + auto operator()(T) -> bool { + return false; + } +}; + template FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg arg, - const basic_format_specs &specs, - locale_ref loc) -> OutputIt { + const format_specs& specs, + locale_ref) -> OutputIt { static_assert(std::is_same>::value, ""); auto abs_value = arg.abs_value; auto prefix = arg.prefix; switch (specs.type) { case presentation_type::none: case presentation_type::dec: { - if (specs.localized && - write_int_localized(out, static_cast>(abs_value), - prefix, specs, loc)) { - return out; - } auto num_digits = count_digits(abs_value); return write_int( out, num_digits, prefix, specs, [=](reserve_iterator it) { @@ -1641,15 +2262,14 @@ FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg arg, case presentation_type::chr: return write_char(out, static_cast(abs_value), specs); default: - throw_format_error("invalid type specifier"); + throw_format_error("invalid format specifier"); } return out; } template -FMT_CONSTEXPR FMT_NOINLINE auto -write_int_noinline(OutputIt out, write_int_arg arg, - const basic_format_specs &specs, locale_ref loc) - -> OutputIt { +FMT_CONSTEXPR FMT_NOINLINE auto write_int_noinline( + OutputIt out, write_int_arg arg, const format_specs& specs, + locale_ref loc) -> OutputIt { return write_int(out, arg, specs, loc); } template ::value && std::is_same>::value)> FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, - const basic_format_specs &specs, + const format_specs& specs, locale_ref loc) -> OutputIt { + if (specs.localized && write_loc(out, value, specs, loc)) return out; return write_int_noinline(out, make_write_int_arg(value, specs.sign), specs, loc); } @@ -1668,80 +2289,209 @@ template ::value && !std::is_same>::value)> FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, - const basic_format_specs &specs, + const format_specs& specs, locale_ref loc) -> OutputIt { + if (specs.localized && write_loc(out, value, specs, loc)) return out; return write_int(out, make_write_int_arg(value, specs.sign), specs, loc); } +// An output iterator that counts the number of objects written to it and +// discards them. +class counting_iterator { + private: + size_t count_; + + public: + using iterator_category = std::output_iterator_tag; + using difference_type = std::ptrdiff_t; + using pointer = void; + using reference = void; + FMT_UNCHECKED_ITERATOR(counting_iterator); + + struct value_type { + template FMT_CONSTEXPR void operator=(const T&) {} + }; + + FMT_CONSTEXPR counting_iterator() : count_(0) {} + + FMT_CONSTEXPR size_t count() const { return count_; } + + FMT_CONSTEXPR counting_iterator& operator++() { + ++count_; + return *this; + } + FMT_CONSTEXPR counting_iterator operator++(int) { + auto it = *this; + ++*this; + return it; + } + + FMT_CONSTEXPR friend counting_iterator operator+(counting_iterator it, + difference_type n) { + it.count_ += static_cast(n); + return it; + } + + FMT_CONSTEXPR value_type operator*() const { return {}; } +}; + template FMT_CONSTEXPR auto write(OutputIt out, basic_string_view s, - const basic_format_specs &specs) -> OutputIt { + const format_specs& specs) -> OutputIt { auto data = s.data(); auto size = s.size(); if (specs.precision >= 0 && to_unsigned(specs.precision) < size) size = code_point_index(s, to_unsigned(specs.precision)); - auto width = - specs.width != 0 ? compute_width(basic_string_view(data, size)) : 0; + bool is_debug = specs.type == presentation_type::debug; + size_t width = 0; + if (specs.width != 0) { + if (is_debug) + width = write_escaped_string(counting_iterator{}, s).count(); + else + width = compute_width(basic_string_view(data, size)); + } return write_padded(out, specs, size, width, [=](reserve_iterator it) { + if (is_debug) return write_escaped_string(it, s); return copy_str(data, data + size, it); }); } template FMT_CONSTEXPR auto write(OutputIt out, basic_string_view> s, - const basic_format_specs &specs, locale_ref) + const format_specs& specs, locale_ref) -> OutputIt { - check_string_type_spec(specs.type); return write(out, s, specs); } template -FMT_CONSTEXPR auto write(OutputIt out, const Char *s, - const basic_format_specs &specs, locale_ref) +FMT_CONSTEXPR auto write(OutputIt out, const Char* s, + const format_specs& specs, locale_ref) -> OutputIt { - return check_cstring_type_spec(specs.type) + return specs.type != presentation_type::pointer ? write(out, basic_string_view(s), specs, {}) - : write_ptr(out, to_uintptr(s), &specs); + : write_ptr(out, bit_cast(s), &specs); +} + +template ::value && + !std::is_same::value && + !std::is_same::value)> +FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { + auto abs_value = static_cast>(value); + bool negative = is_negative(value); + // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer. + if (negative) abs_value = ~abs_value + 1; + int num_digits = count_digits(abs_value); + auto size = (negative ? 1 : 0) + static_cast(num_digits); + auto it = reserve(out, size); + if (auto ptr = to_pointer(it, size)) { + if (negative) *ptr++ = static_cast('-'); + format_decimal(ptr, abs_value, num_digits); + return out; + } + if (negative) *it++ = static_cast('-'); + it = format_decimal(it, abs_value, num_digits).end; + return base_iterator(out, it); +} + +// A floating-point presentation format. +enum class float_format : unsigned char { + general, // General: exponent notation or fixed point based on magnitude. + exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. + fixed, // Fixed point with the default precision of 6, e.g. 0.0012. + hex +}; + +struct float_specs { + int precision; + float_format format : 8; + sign_t sign : 8; + bool upper : 1; + bool locale : 1; + bool binary32 : 1; + bool showpoint : 1; +}; + +template +FMT_CONSTEXPR auto parse_float_type_spec(const format_specs& specs, + ErrorHandler&& eh = {}) + -> float_specs { + auto result = float_specs(); + result.showpoint = specs.alt; + result.locale = specs.localized; + switch (specs.type) { + case presentation_type::none: + result.format = float_format::general; + break; + case presentation_type::general_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::general_lower: + result.format = float_format::general; + break; + case presentation_type::exp_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::exp_lower: + result.format = float_format::exp; + result.showpoint |= specs.precision != 0; + break; + case presentation_type::fixed_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::fixed_lower: + result.format = float_format::fixed; + result.showpoint |= specs.precision != 0; + break; + case presentation_type::hexfloat_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::hexfloat_lower: + result.format = float_format::hex; + break; + default: + eh.on_error("invalid format specifier"); + break; + } + return result; } template -FMT_CONSTEXPR20 auto write_nonfinite(OutputIt out, bool isinf, - basic_format_specs specs, - const float_specs &fspecs) -> OutputIt { +FMT_CONSTEXPR20 auto write_nonfinite(OutputIt out, bool isnan, + format_specs specs, + const float_specs& fspecs) -> OutputIt { auto str = - isinf ? (fspecs.upper ? "INF" : "inf") : (fspecs.upper ? "NAN" : "nan"); + isnan ? (fspecs.upper ? "NAN" : "nan") : (fspecs.upper ? "INF" : "inf"); constexpr size_t str_size = 3; auto sign = fspecs.sign; auto size = str_size + (sign ? 1 : 0); // Replace '0'-padding with space for non-finite values. const bool is_zero_fill = specs.fill.size() == 1 && *specs.fill.data() == static_cast('0'); - if (is_zero_fill) - specs.fill[0] = static_cast(' '); + if (is_zero_fill) specs.fill[0] = static_cast(' '); return write_padded(out, specs, size, [=](reserve_iterator it) { - if (sign) - *it++ = detail::sign(sign); + if (sign) *it++ = detail::sign(sign); return copy_str(str, str + str_size, it); }); } // A decimal floating-point number significand * pow(10, exp). struct big_decimal_fp { - const char *significand; + const char* significand; int significand_size; int exponent; }; -constexpr auto get_significand_size(const big_decimal_fp &fp) -> int { - return fp.significand_size; +constexpr auto get_significand_size(const big_decimal_fp& f) -> int { + return f.significand_size; } template -inline auto get_significand_size(const dragonbox::decimal_fp &fp) -> int { - return count_digits(fp.significand); +inline auto get_significand_size(const dragonbox::decimal_fp& f) -> int { + return count_digits(f.significand); } template -constexpr auto write_significand(OutputIt out, const char *significand, +constexpr auto write_significand(OutputIt out, const char* significand, int significand_size) -> OutputIt { return copy_str(significand, significand + significand_size, out); } @@ -1753,8 +2503,8 @@ inline auto write_significand(OutputIt out, UInt significand, template FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, int significand_size, int exponent, - const Grouping &grouping) -> OutputIt { - if (!grouping.separator()) { + const Grouping& grouping) -> OutputIt { + if (!grouping.has_separator()) { out = write_significand(out, significand, significand_size); return detail::fill_n(out, exponent, static_cast('0')); } @@ -1766,16 +2516,16 @@ FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, template ::value)> -inline auto write_significand(Char *out, UInt significand, int significand_size, - int integral_size, Char decimal_point) -> Char * { +inline auto write_significand(Char* out, UInt significand, int significand_size, + int integral_size, Char decimal_point) -> Char* { if (!decimal_point) return format_decimal(out, significand, significand_size).end; out += significand_size + 1; - Char *end = out; + Char* end = out; int floating_size = significand_size - integral_size; for (int i = floating_size / 2; i > 0; --i) { out -= 2; - copy2(out, digits2(significand % 100)); + copy2(out, digits2(static_cast(significand % 100))); significand /= 100; } if (floating_size % 2 != 0) { @@ -1800,13 +2550,12 @@ inline auto write_significand(OutputIt out, UInt significand, } template -FMT_CONSTEXPR auto write_significand(OutputIt out, const char *significand, +FMT_CONSTEXPR auto write_significand(OutputIt out, const char* significand, int significand_size, int integral_size, Char decimal_point) -> OutputIt { out = detail::copy_str_noinline(significand, significand + integral_size, out); - if (!decimal_point) - return out; + if (!decimal_point) return out; *out++ = decimal_point; return detail::copy_str_noinline(significand + integral_size, significand + significand_size, out); @@ -1816,8 +2565,8 @@ template FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, int significand_size, int integral_size, Char decimal_point, - const Grouping &grouping) -> OutputIt { - if (!grouping.separator()) { + const Grouping& grouping) -> OutputIt { + if (!grouping.has_separator()) { return write_significand(out, significand, significand_size, integral_size, decimal_point); } @@ -1832,13 +2581,13 @@ FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, template > -FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, - const basic_format_specs &specs, +FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, + const format_specs& specs, float_specs fspecs, locale_ref loc) -> OutputIt { - auto significand = fp.significand; - int significand_size = get_significand_size(fp); - constexpr Char zero = static_cast('0'); + auto significand = f.significand; + int significand_size = get_significand_size(f); + const Char zero = static_cast('0'); auto sign = fspecs.sign; size_t size = to_unsigned(significand_size) + (sign ? 1 : 0); using iterator = reserve_iterator; @@ -1846,12 +2595,10 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, Char decimal_point = fspecs.locale ? detail::decimal_point(loc) : static_cast('.'); - int output_exp = fp.exponent + significand_size - 1; + int output_exp = f.exponent + significand_size - 1; auto use_exp_format = [=]() { - if (fspecs.format == float_format::exp) - return true; - if (fspecs.format != float_format::general) - return false; + if (fspecs.format == float_format::exp) return true; + if (fspecs.format != float_format::general) return false; // Use the fixed notation if the exponent is in [exp_lower, exp_upper), // e.g. 0.0001 instead of 1e-04. Otherwise use the exponent notation. const int exp_lower = -4, exp_upper = 16; @@ -1862,27 +2609,23 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, int num_zeros = 0; if (fspecs.showpoint) { num_zeros = fspecs.precision - significand_size; - if (num_zeros < 0) - num_zeros = 0; + if (num_zeros < 0) num_zeros = 0; size += to_unsigned(num_zeros); } else if (significand_size == 1) { decimal_point = Char(); } auto abs_output_exp = output_exp >= 0 ? output_exp : -output_exp; int exp_digits = 2; - if (abs_output_exp >= 100) - exp_digits = abs_output_exp >= 1000 ? 4 : 3; + if (abs_output_exp >= 100) exp_digits = abs_output_exp >= 1000 ? 4 : 3; size += to_unsigned((decimal_point ? 1 : 0) + 2 + exp_digits); char exp_char = fspecs.upper ? 'E' : 'e'; auto write = [=](iterator it) { - if (sign) - *it++ = detail::sign(sign); + if (sign) *it++ = detail::sign(sign); // Insert a decimal point after the first digit and add an exponent. it = write_significand(it, significand, significand_size, 1, decimal_point); - if (num_zeros > 0) - it = detail::fill_n(it, num_zeros, zero); + if (num_zeros > 0) it = detail::fill_n(it, num_zeros, zero); *it++ = static_cast(exp_char); return write_exponent(output_exp, it); }; @@ -1890,30 +2633,24 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, : base_iterator(out, write(reserve(out, size))); } - int exp = fp.exponent + significand_size; - if (fp.exponent >= 0) { + int exp = f.exponent + significand_size; + if (f.exponent >= 0) { // 1234e5 -> 123400000[.0+] - size += to_unsigned(fp.exponent); + size += to_unsigned(f.exponent); int num_zeros = fspecs.precision - exp; -#ifdef FMT_FUZZ - if (num_zeros > 5000) - throw std::runtime_error("fuzz mode - avoiding excessive cpu use"); -#endif + abort_fuzzing_if(num_zeros > 5000); if (fspecs.showpoint) { - if (num_zeros <= 0 && fspecs.format != float_format::fixed) - num_zeros = 1; - if (num_zeros > 0) - size += to_unsigned(num_zeros) + 1; + ++size; + if (num_zeros <= 0 && fspecs.format != float_format::fixed) num_zeros = 0; + if (num_zeros > 0) size += to_unsigned(num_zeros); } auto grouping = Grouping(loc, fspecs.locale); - size += to_unsigned(grouping.count_separators(significand_size)); + size += to_unsigned(grouping.count_separators(exp)); return write_padded(out, specs, size, [&](iterator it) { - if (sign) - *it++ = detail::sign(sign); + if (sign) *it++ = detail::sign(sign); it = write_significand(it, significand, significand_size, - fp.exponent, grouping); - if (!fspecs.showpoint) - return it; + f.exponent, grouping); + if (!fspecs.showpoint) return it; *it++ = decimal_point; return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; }); @@ -1922,10 +2659,9 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, int num_zeros = fspecs.showpoint ? fspecs.precision - significand_size : 0; size += 1 + to_unsigned(num_zeros > 0 ? num_zeros : 0); auto grouping = Grouping(loc, fspecs.locale); - size += to_unsigned(grouping.count_separators(significand_size)); + size += to_unsigned(grouping.count_separators(exp)); return write_padded(out, specs, size, [&](iterator it) { - if (sign) - *it++ = detail::sign(sign); + if (sign) *it++ = detail::sign(sign); it = write_significand(it, significand, significand_size, exp, decimal_point, grouping); return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; @@ -1940,11 +2676,9 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, bool pointy = num_zeros != 0 || significand_size != 0 || fspecs.showpoint; size += 1 + (pointy ? 1 : 0) + to_unsigned(num_zeros); return write_padded(out, specs, size, [&](iterator it) { - if (sign) - *it++ = detail::sign(sign); + if (sign) *it++ = detail::sign(sign); *it++ = zero; - if (!pointy) - return it; + if (!pointy) return it; *it++ = decimal_point; it = detail::fill_n(it, num_zeros, zero); return write_significand(it, significand, significand_size); @@ -1952,10 +2686,10 @@ FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP &fp, } template class fallback_digit_grouping { -public: + public: constexpr fallback_digit_grouping(locale_ref, bool) {} - constexpr Char separator() const { return Char(); } + constexpr bool has_separator() const { return false; } constexpr int count_separators(int) const { return 0; } @@ -1966,71 +2700,862 @@ template class fallback_digit_grouping { }; template -FMT_CONSTEXPR20 auto write_float(OutputIt out, const DecimalFP &fp, - const basic_format_specs &specs, +FMT_CONSTEXPR20 auto write_float(OutputIt out, const DecimalFP& f, + const format_specs& specs, float_specs fspecs, locale_ref loc) -> OutputIt { if (is_constant_evaluated()) { return do_write_float>(out, fp, specs, fspecs, + fallback_digit_grouping>(out, f, specs, fspecs, loc); } else { - return do_write_float(out, fp, specs, fspecs, loc); + return do_write_float(out, f, specs, fspecs, loc); } } -template ::value)> -FMT_CONSTEXPR20 bool isinf(T value) { - if (is_constant_evaluated()) { -#if defined(__cpp_if_constexpr) - if constexpr (std::numeric_limits::is_iec559) { - auto bits = detail::bit_cast(static_cast(value)); - constexpr auto significand_bits = - dragonbox::float_info::significand_bits; - return (bits & exponent_mask()) && - !(bits & ((uint64_t(1) << significand_bits) - 1)); - } -#endif - } - return std::isinf(value); +template constexpr bool isnan(T value) { + return !(value >= value); // std::isnan doesn't support __float128. } -template ::value)> +template +struct has_isfinite : std::false_type {}; + +template +struct has_isfinite> + : std::true_type {}; + +template ::value&& + has_isfinite::value)> FMT_CONSTEXPR20 bool isfinite(T value) { - if (is_constant_evaluated()) { -#if defined(__cpp_if_constexpr) - if constexpr (std::numeric_limits::is_iec559) { - auto bits = detail::bit_cast(static_cast(value)); - return (bits & exponent_mask()) != exponent_mask(); - } -#endif - } + constexpr T inf = T(std::numeric_limits::infinity()); + if (is_constant_evaluated()) + return !detail::isnan(value) && value < inf && value > -inf; return std::isfinite(value); } +template ::value)> +FMT_CONSTEXPR bool isfinite(T value) { + T inf = T(std::numeric_limits::infinity()); + // std::isfinite doesn't support __float128. + return !detail::isnan(value) && value < inf && value > -inf; +} -template ::value)> +template ::value)> FMT_INLINE FMT_CONSTEXPR bool signbit(T value) { if (is_constant_evaluated()) { #ifdef __cpp_if_constexpr if constexpr (std::numeric_limits::is_iec559) { auto bits = detail::bit_cast(static_cast(value)); - return (bits & (uint64_t(1) << (num_bits() - 1))) != 0; + return (bits >> (num_bits() - 1)) != 0; } #endif } - return std::signbit(value); + return std::signbit(static_cast(value)); } -template ::value)> -FMT_CONSTEXPR20 auto write(OutputIt out, T value, - basic_format_specs specs, locale_ref loc = {}) +inline FMT_CONSTEXPR20 void adjust_precision(int& precision, int exp10) { + // Adjust fixed precision by exponent because it is relative to decimal + // point. + if (exp10 > 0 && precision > max_value() - exp10) + FMT_THROW(format_error("number is too big")); + precision += exp10; +} + +class bigint { + private: + // A bigint is stored as an array of bigits (big digits), with bigit at index + // 0 being the least significant one. + using bigit = uint32_t; + using double_bigit = uint64_t; + enum { bigits_capacity = 32 }; + basic_memory_buffer bigits_; + int exp_; + + FMT_CONSTEXPR20 bigit operator[](int index) const { + return bigits_[to_unsigned(index)]; + } + FMT_CONSTEXPR20 bigit& operator[](int index) { + return bigits_[to_unsigned(index)]; + } + + static constexpr const int bigit_bits = num_bits(); + + friend struct formatter; + + FMT_CONSTEXPR20 void subtract_bigits(int index, bigit other, bigit& borrow) { + auto result = static_cast((*this)[index]) - other - borrow; + (*this)[index] = static_cast(result); + borrow = static_cast(result >> (bigit_bits * 2 - 1)); + } + + FMT_CONSTEXPR20 void remove_leading_zeros() { + int num_bigits = static_cast(bigits_.size()) - 1; + while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits; + bigits_.resize(to_unsigned(num_bigits + 1)); + } + + // Computes *this -= other assuming aligned bigints and *this >= other. + FMT_CONSTEXPR20 void subtract_aligned(const bigint& other) { + FMT_ASSERT(other.exp_ >= exp_, "unaligned bigints"); + FMT_ASSERT(compare(*this, other) >= 0, ""); + bigit borrow = 0; + int i = other.exp_ - exp_; + for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j) + subtract_bigits(i, other.bigits_[j], borrow); + while (borrow > 0) subtract_bigits(i, 0, borrow); + remove_leading_zeros(); + } + + FMT_CONSTEXPR20 void multiply(uint32_t value) { + const double_bigit wide_value = value; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + double_bigit result = bigits_[i] * wide_value + carry; + bigits_[i] = static_cast(result); + carry = static_cast(result >> bigit_bits); + } + if (carry != 0) bigits_.push_back(carry); + } + + template ::value || + std::is_same::value)> + FMT_CONSTEXPR20 void multiply(UInt value) { + using half_uint = + conditional_t::value, uint64_t, uint32_t>; + const int shift = num_bits() - bigit_bits; + const UInt lower = static_cast(value); + const UInt upper = value >> num_bits(); + UInt carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + UInt result = lower * bigits_[i] + static_cast(carry); + carry = (upper * bigits_[i] << shift) + (result >> bigit_bits) + + (carry >> bigit_bits); + bigits_[i] = static_cast(result); + } + while (carry != 0) { + bigits_.push_back(static_cast(carry)); + carry >>= bigit_bits; + } + } + + template ::value || + std::is_same::value)> + FMT_CONSTEXPR20 void assign(UInt n) { + size_t num_bigits = 0; + do { + bigits_[num_bigits++] = static_cast(n); + n >>= bigit_bits; + } while (n != 0); + bigits_.resize(num_bigits); + exp_ = 0; + } + + public: + FMT_CONSTEXPR20 bigint() : exp_(0) {} + explicit bigint(uint64_t n) { assign(n); } + + bigint(const bigint&) = delete; + void operator=(const bigint&) = delete; + + FMT_CONSTEXPR20 void assign(const bigint& other) { + auto size = other.bigits_.size(); + bigits_.resize(size); + auto data = other.bigits_.data(); + std::copy(data, data + size, make_checked(bigits_.data(), size)); + exp_ = other.exp_; + } + + template FMT_CONSTEXPR20 void operator=(Int n) { + FMT_ASSERT(n > 0, ""); + assign(uint64_or_128_t(n)); + } + + FMT_CONSTEXPR20 int num_bigits() const { + return static_cast(bigits_.size()) + exp_; + } + + FMT_NOINLINE FMT_CONSTEXPR20 bigint& operator<<=(int shift) { + FMT_ASSERT(shift >= 0, ""); + exp_ += shift / bigit_bits; + shift %= bigit_bits; + if (shift == 0) return *this; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + bigit c = bigits_[i] >> (bigit_bits - shift); + bigits_[i] = (bigits_[i] << shift) + carry; + carry = c; + } + if (carry != 0) bigits_.push_back(carry); + return *this; + } + + template FMT_CONSTEXPR20 bigint& operator*=(Int value) { + FMT_ASSERT(value > 0, ""); + multiply(uint32_or_64_or_128_t(value)); + return *this; + } + + friend FMT_CONSTEXPR20 int compare(const bigint& lhs, const bigint& rhs) { + int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits(); + if (num_lhs_bigits != num_rhs_bigits) + return num_lhs_bigits > num_rhs_bigits ? 1 : -1; + int i = static_cast(lhs.bigits_.size()) - 1; + int j = static_cast(rhs.bigits_.size()) - 1; + int end = i - j; + if (end < 0) end = 0; + for (; i >= end; --i, --j) { + bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j]; + if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1; + } + if (i != j) return i > j ? 1 : -1; + return 0; + } + + // Returns compare(lhs1 + lhs2, rhs). + friend FMT_CONSTEXPR20 int add_compare(const bigint& lhs1, const bigint& lhs2, + const bigint& rhs) { + auto minimum = [](int a, int b) { return a < b ? a : b; }; + auto maximum = [](int a, int b) { return a > b ? a : b; }; + int max_lhs_bigits = maximum(lhs1.num_bigits(), lhs2.num_bigits()); + int num_rhs_bigits = rhs.num_bigits(); + if (max_lhs_bigits + 1 < num_rhs_bigits) return -1; + if (max_lhs_bigits > num_rhs_bigits) return 1; + auto get_bigit = [](const bigint& n, int i) -> bigit { + return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0; + }; + double_bigit borrow = 0; + int min_exp = minimum(minimum(lhs1.exp_, lhs2.exp_), rhs.exp_); + for (int i = num_rhs_bigits - 1; i >= min_exp; --i) { + double_bigit sum = + static_cast(get_bigit(lhs1, i)) + get_bigit(lhs2, i); + bigit rhs_bigit = get_bigit(rhs, i); + if (sum > rhs_bigit + borrow) return 1; + borrow = rhs_bigit + borrow - sum; + if (borrow > 1) return -1; + borrow <<= bigit_bits; + } + return borrow != 0 ? -1 : 0; + } + + // Assigns pow(10, exp) to this bigint. + FMT_CONSTEXPR20 void assign_pow10(int exp) { + FMT_ASSERT(exp >= 0, ""); + if (exp == 0) return *this = 1; + // Find the top bit. + int bitmask = 1; + while (exp >= bitmask) bitmask <<= 1; + bitmask >>= 1; + // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by + // repeated squaring and multiplication. + *this = 5; + bitmask >>= 1; + while (bitmask != 0) { + square(); + if ((exp & bitmask) != 0) *this *= 5; + bitmask >>= 1; + } + *this <<= exp; // Multiply by pow(2, exp) by shifting. + } + + FMT_CONSTEXPR20 void square() { + int num_bigits = static_cast(bigits_.size()); + int num_result_bigits = 2 * num_bigits; + basic_memory_buffer n(std::move(bigits_)); + bigits_.resize(to_unsigned(num_result_bigits)); + auto sum = uint128_t(); + for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) { + // Compute bigit at position bigit_index of the result by adding + // cross-product terms n[i] * n[j] such that i + j == bigit_index. + for (int i = 0, j = bigit_index; j >= 0; ++i, --j) { + // Most terms are multiplied twice which can be optimized in the future. + sum += static_cast(n[i]) * n[j]; + } + (*this)[bigit_index] = static_cast(sum); + sum >>= num_bits(); // Compute the carry. + } + // Do the same for the top half. + for (int bigit_index = num_bigits; bigit_index < num_result_bigits; + ++bigit_index) { + for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;) + sum += static_cast(n[i++]) * n[j--]; + (*this)[bigit_index] = static_cast(sum); + sum >>= num_bits(); + } + remove_leading_zeros(); + exp_ *= 2; + } + + // If this bigint has a bigger exponent than other, adds trailing zero to make + // exponents equal. This simplifies some operations such as subtraction. + FMT_CONSTEXPR20 void align(const bigint& other) { + int exp_difference = exp_ - other.exp_; + if (exp_difference <= 0) return; + int num_bigits = static_cast(bigits_.size()); + bigits_.resize(to_unsigned(num_bigits + exp_difference)); + for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) + bigits_[j] = bigits_[i]; + std::uninitialized_fill_n(bigits_.data(), exp_difference, 0); + exp_ -= exp_difference; + } + + // Divides this bignum by divisor, assigning the remainder to this and + // returning the quotient. + FMT_CONSTEXPR20 int divmod_assign(const bigint& divisor) { + FMT_ASSERT(this != &divisor, ""); + if (compare(*this, divisor) < 0) return 0; + FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, ""); + align(divisor); + int quotient = 0; + do { + subtract_aligned(divisor); + ++quotient; + } while (compare(*this, divisor) >= 0); + return quotient; + } +}; + +// format_dragon flags. +enum dragon { + predecessor_closer = 1, + fixup = 2, // Run fixup to correct exp10 which can be off by one. + fixed = 4, +}; + +// Formats a floating-point number using a variation of the Fixed-Precision +// Positive Floating-Point Printout ((FPP)^2) algorithm by Steele & White: +// https://fmt.dev/papers/p372-steele.pdf. +FMT_CONSTEXPR20 inline void format_dragon(basic_fp value, + unsigned flags, int num_digits, + buffer& buf, int& exp10) { + bigint numerator; // 2 * R in (FPP)^2. + bigint denominator; // 2 * S in (FPP)^2. + // lower and upper are differences between value and corresponding boundaries. + bigint lower; // (M^- in (FPP)^2). + bigint upper_store; // upper's value if different from lower. + bigint* upper = nullptr; // (M^+ in (FPP)^2). + // Shift numerator and denominator by an extra bit or two (if lower boundary + // is closer) to make lower and upper integers. This eliminates multiplication + // by 2 during later computations. + bool is_predecessor_closer = (flags & dragon::predecessor_closer) != 0; + int shift = is_predecessor_closer ? 2 : 1; + if (value.e >= 0) { + numerator = value.f; + numerator <<= value.e + shift; + lower = 1; + lower <<= value.e; + if (is_predecessor_closer) { + upper_store = 1; + upper_store <<= value.e + 1; + upper = &upper_store; + } + denominator.assign_pow10(exp10); + denominator <<= shift; + } else if (exp10 < 0) { + numerator.assign_pow10(-exp10); + lower.assign(numerator); + if (is_predecessor_closer) { + upper_store.assign(numerator); + upper_store <<= 1; + upper = &upper_store; + } + numerator *= value.f; + numerator <<= shift; + denominator = 1; + denominator <<= shift - value.e; + } else { + numerator = value.f; + numerator <<= shift; + denominator.assign_pow10(exp10); + denominator <<= shift - value.e; + lower = 1; + if (is_predecessor_closer) { + upper_store = 1ULL << 1; + upper = &upper_store; + } + } + int even = static_cast((value.f & 1) == 0); + if (!upper) upper = &lower; + if ((flags & dragon::fixup) != 0) { + if (add_compare(numerator, *upper, denominator) + even <= 0) { + --exp10; + numerator *= 10; + if (num_digits < 0) { + lower *= 10; + if (upper != &lower) *upper *= 10; + } + } + if ((flags & dragon::fixed) != 0) adjust_precision(num_digits, exp10 + 1); + } + // Invariant: value == (numerator / denominator) * pow(10, exp10). + if (num_digits < 0) { + // Generate the shortest representation. + num_digits = 0; + char* data = buf.data(); + for (;;) { + int digit = numerator.divmod_assign(denominator); + bool low = compare(numerator, lower) - even < 0; // numerator <[=] lower. + // numerator + upper >[=] pow10: + bool high = add_compare(numerator, *upper, denominator) + even > 0; + data[num_digits++] = static_cast('0' + digit); + if (low || high) { + if (!low) { + ++data[num_digits - 1]; + } else if (high) { + int result = add_compare(numerator, numerator, denominator); + // Round half to even. + if (result > 0 || (result == 0 && (digit % 2) != 0)) + ++data[num_digits - 1]; + } + buf.try_resize(to_unsigned(num_digits)); + exp10 -= num_digits - 1; + return; + } + numerator *= 10; + lower *= 10; + if (upper != &lower) *upper *= 10; + } + } + // Generate the given number of digits. + exp10 -= num_digits - 1; + if (num_digits == 0) { + denominator *= 10; + auto digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; + buf.push_back(digit); + return; + } + buf.try_resize(to_unsigned(num_digits)); + for (int i = 0; i < num_digits - 1; ++i) { + int digit = numerator.divmod_assign(denominator); + buf[i] = static_cast('0' + digit); + numerator *= 10; + } + int digit = numerator.divmod_assign(denominator); + auto result = add_compare(numerator, numerator, denominator); + if (result > 0 || (result == 0 && (digit % 2) != 0)) { + if (digit == 9) { + const auto overflow = '0' + 10; + buf[num_digits - 1] = overflow; + // Propagate the carry. + for (int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) { + buf[i] = '0'; + ++buf[i - 1]; + } + if (buf[0] == overflow) { + buf[0] = '1'; + ++exp10; + } + return; + } + ++digit; + } + buf[num_digits - 1] = static_cast('0' + digit); +} + +// Formats a floating-point number using the hexfloat format. +template ::value)> +FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, + float_specs specs, buffer& buf) { + // float is passed as double to reduce the number of instantiations and to + // simplify implementation. + static_assert(!std::is_same::value, ""); + + using info = dragonbox::float_info; + + // Assume Float is in the format [sign][exponent][significand]. + using carrier_uint = typename info::carrier_uint; + + constexpr auto num_float_significand_bits = + detail::num_significand_bits(); + + basic_fp f(value); + f.e += num_float_significand_bits; + if (!has_implicit_bit()) --f.e; + + constexpr auto num_fraction_bits = + num_float_significand_bits + (has_implicit_bit() ? 1 : 0); + constexpr auto num_xdigits = (num_fraction_bits + 3) / 4; + + constexpr auto leading_shift = ((num_xdigits - 1) * 4); + const auto leading_mask = carrier_uint(0xF) << leading_shift; + const auto leading_xdigit = + static_cast((f.f & leading_mask) >> leading_shift); + if (leading_xdigit > 1) f.e -= (32 - countl_zero(leading_xdigit) - 1); + + int print_xdigits = num_xdigits - 1; + if (precision >= 0 && print_xdigits > precision) { + const int shift = ((print_xdigits - precision - 1) * 4); + const auto mask = carrier_uint(0xF) << shift; + const auto v = static_cast((f.f & mask) >> shift); + + if (v >= 8) { + const auto inc = carrier_uint(1) << (shift + 4); + f.f += inc; + f.f &= ~(inc - 1); + } + + // Check long double overflow + if (!has_implicit_bit()) { + const auto implicit_bit = carrier_uint(1) << num_float_significand_bits; + if ((f.f & implicit_bit) == implicit_bit) { + f.f >>= 4; + f.e += 4; + } + } + + print_xdigits = precision; + } + + char xdigits[num_bits() / 4]; + detail::fill_n(xdigits, sizeof(xdigits), '0'); + format_uint<4>(xdigits, f.f, num_xdigits, specs.upper); + + // Remove zero tail + while (print_xdigits > 0 && xdigits[print_xdigits] == '0') --print_xdigits; + + buf.push_back('0'); + buf.push_back(specs.upper ? 'X' : 'x'); + buf.push_back(xdigits[0]); + if (specs.showpoint || print_xdigits > 0 || print_xdigits < precision) + buf.push_back('.'); + buf.append(xdigits + 1, xdigits + 1 + print_xdigits); + for (; print_xdigits < precision; ++print_xdigits) buf.push_back('0'); + + buf.push_back(specs.upper ? 'P' : 'p'); + + uint32_t abs_e; + if (f.e < 0) { + buf.push_back('-'); + abs_e = static_cast(-f.e); + } else { + buf.push_back('+'); + abs_e = static_cast(f.e); + } + format_decimal(appender(buf), abs_e, detail::count_digits(abs_e)); +} + +template ::value)> +FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, + float_specs specs, buffer& buf) { + format_hexfloat(static_cast(value), precision, specs, buf); +} + +template +FMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs, + buffer& buf) -> int { + // float is passed as double to reduce the number of instantiations. + static_assert(!std::is_same::value, ""); + FMT_ASSERT(value >= 0, "value is negative"); + auto converted_value = convert_float(value); + + const bool fixed = specs.format == float_format::fixed; + if (value <= 0) { // <= instead of == to silence a warning. + if (precision <= 0 || !fixed) { + buf.push_back('0'); + return 0; + } + buf.try_resize(to_unsigned(precision)); + fill_n(buf.data(), precision, '0'); + return -precision; + } + + int exp = 0; + bool use_dragon = true; + unsigned dragon_flags = 0; + if (!is_fast_float() || is_constant_evaluated()) { + const auto inv_log2_10 = 0.3010299956639812; // 1 / log2(10) + using info = dragonbox::float_info; + const auto f = basic_fp(converted_value); + // Compute exp, an approximate power of 10, such that + // 10^(exp - 1) <= value < 10^exp or 10^exp <= value < 10^(exp + 1). + // This is based on log10(value) == log2(value) / log2(10) and approximation + // of log2(value) by e + num_fraction_bits idea from double-conversion. + auto e = (f.e + count_digits<1>(f.f) - 1) * inv_log2_10 - 1e-10; + exp = static_cast(e); + if (e > exp) ++exp; // Compute ceil. + dragon_flags = dragon::fixup; + } else if (precision < 0) { + // Use Dragonbox for the shortest format. + if (specs.binary32) { + auto dec = dragonbox::to_decimal(static_cast(value)); + write(buffer_appender(buf), dec.significand); + return dec.exponent; + } + auto dec = dragonbox::to_decimal(static_cast(value)); + write(buffer_appender(buf), dec.significand); + return dec.exponent; + } else { + // Extract significand bits and exponent bits. + using info = dragonbox::float_info; + auto br = bit_cast(static_cast(value)); + + const uint64_t significand_mask = + (static_cast(1) << num_significand_bits()) - 1; + uint64_t significand = (br & significand_mask); + int exponent = static_cast((br & exponent_mask()) >> + num_significand_bits()); + + if (exponent != 0) { // Check if normal. + exponent -= exponent_bias() + num_significand_bits(); + significand |= + (static_cast(1) << num_significand_bits()); + significand <<= 1; + } else { + // Normalize subnormal inputs. + FMT_ASSERT(significand != 0, "zeros should not appear here"); + int shift = countl_zero(significand); + FMT_ASSERT(shift >= num_bits() - num_significand_bits(), + ""); + shift -= (num_bits() - num_significand_bits() - 2); + exponent = (std::numeric_limits::min_exponent - + num_significand_bits()) - + shift; + significand <<= shift; + } + + // Compute the first several nonzero decimal significand digits. + // We call the number we get the first segment. + const int k = info::kappa - dragonbox::floor_log10_pow2(exponent); + exp = -k; + const int beta = exponent + dragonbox::floor_log2_pow10(k); + uint64_t first_segment; + bool has_more_segments; + int digits_in_the_first_segment; + { + const auto r = dragonbox::umul192_upper128( + significand << beta, dragonbox::get_cached_power(k)); + first_segment = r.high(); + has_more_segments = r.low() != 0; + + // The first segment can have 18 ~ 19 digits. + if (first_segment >= 1000000000000000000ULL) { + digits_in_the_first_segment = 19; + } else { + // When it is of 18-digits, we align it to 19-digits by adding a bogus + // zero at the end. + digits_in_the_first_segment = 18; + first_segment *= 10; + } + } + + // Compute the actual number of decimal digits to print. + if (fixed) { + adjust_precision(precision, exp + digits_in_the_first_segment); + } + + // Use Dragon4 only when there might be not enough digits in the first + // segment. + if (digits_in_the_first_segment > precision) { + use_dragon = false; + + if (precision <= 0) { + exp += digits_in_the_first_segment; + + if (precision < 0) { + // Nothing to do, since all we have are just leading zeros. + buf.try_resize(0); + } else { + // We may need to round-up. + buf.try_resize(1); + if ((first_segment | static_cast(has_more_segments)) > + 5000000000000000000ULL) { + buf[0] = '1'; + } else { + buf[0] = '0'; + } + } + } // precision <= 0 + else { + exp += digits_in_the_first_segment - precision; + + // When precision > 0, we divide the first segment into three + // subsegments, each with 9, 9, and 0 ~ 1 digits so that each fits + // in 32-bits which usually allows faster calculation than in + // 64-bits. Since some compiler (e.g. MSVC) doesn't know how to optimize + // division-by-constant for large 64-bit divisors, we do it here + // manually. The magic number 7922816251426433760 below is equal to + // ceil(2^(64+32) / 10^10). + const uint32_t first_subsegment = static_cast( + dragonbox::umul128_upper64(first_segment, 7922816251426433760ULL) >> + 32); + const uint64_t second_third_subsegments = + first_segment - first_subsegment * 10000000000ULL; + + uint64_t prod; + uint32_t digits; + bool should_round_up; + int number_of_digits_to_print = precision > 9 ? 9 : precision; + + // Print a 9-digits subsegment, either the first or the second. + auto print_subsegment = [&](uint32_t subsegment, char* buffer) { + int number_of_digits_printed = 0; + + // If we want to print an odd number of digits from the subsegment, + if ((number_of_digits_to_print & 1) != 0) { + // Convert to 64-bit fixed-point fractional form with 1-digit + // integer part. The magic number 720575941 is a good enough + // approximation of 2^(32 + 24) / 10^8; see + // https://jk-jeon.github.io/posts/2022/12/fixed-precision-formatting/#fixed-length-case + // for details. + prod = ((subsegment * static_cast(720575941)) >> 24) + 1; + digits = static_cast(prod >> 32); + *buffer = static_cast('0' + digits); + number_of_digits_printed++; + } + // If we want to print an even number of digits from the + // first_subsegment, + else { + // Convert to 64-bit fixed-point fractional form with 2-digits + // integer part. The magic number 450359963 is a good enough + // approximation of 2^(32 + 20) / 10^7; see + // https://jk-jeon.github.io/posts/2022/12/fixed-precision-formatting/#fixed-length-case + // for details. + prod = ((subsegment * static_cast(450359963)) >> 20) + 1; + digits = static_cast(prod >> 32); + copy2(buffer, digits2(digits)); + number_of_digits_printed += 2; + } + + // Print all digit pairs. + while (number_of_digits_printed < number_of_digits_to_print) { + prod = static_cast(prod) * static_cast(100); + digits = static_cast(prod >> 32); + copy2(buffer + number_of_digits_printed, digits2(digits)); + number_of_digits_printed += 2; + } + }; + + // Print first subsegment. + print_subsegment(first_subsegment, buf.data()); + + // Perform rounding if the first subsegment is the last subsegment to + // print. + if (precision <= 9) { + // Rounding inside the subsegment. + // We round-up if: + // - either the fractional part is strictly larger than 1/2, or + // - the fractional part is exactly 1/2 and the last digit is odd. + // We rely on the following observations: + // - If fractional_part >= threshold, then the fractional part is + // strictly larger than 1/2. + // - If the MSB of fractional_part is set, then the fractional part + // must be at least 1/2. + // - When the MSB of fractional_part is set, either + // second_third_subsegments being nonzero or has_more_segments + // being true means there are further digits not printed, so the + // fractional part is strictly larger than 1/2. + if (precision < 9) { + uint32_t fractional_part = static_cast(prod); + should_round_up = fractional_part >= + data::fractional_part_rounding_thresholds + [8 - number_of_digits_to_print] || + ((fractional_part >> 31) & + ((digits & 1) | (second_third_subsegments != 0) | + has_more_segments)) != 0; + } + // Rounding at the subsegment boundary. + // In this case, the fractional part is at least 1/2 if and only if + // second_third_subsegments >= 5000000000ULL, and is strictly larger + // than 1/2 if we further have either second_third_subsegments > + // 5000000000ULL or has_more_segments == true. + else { + should_round_up = second_third_subsegments > 5000000000ULL || + (second_third_subsegments == 5000000000ULL && + ((digits & 1) != 0 || has_more_segments)); + } + } + // Otherwise, print the second subsegment. + else { + // Compilers are not aware of how to leverage the maximum value of + // second_third_subsegments to find out a better magic number which + // allows us to eliminate an additional shift. 1844674407370955162 = + // ceil(2^64/10) < ceil(2^64*(10^9/(10^10 - 1))). + const uint32_t second_subsegment = + static_cast(dragonbox::umul128_upper64( + second_third_subsegments, 1844674407370955162ULL)); + const uint32_t third_subsegment = + static_cast(second_third_subsegments) - + second_subsegment * 10; + + number_of_digits_to_print = precision - 9; + print_subsegment(second_subsegment, buf.data() + 9); + + // Rounding inside the subsegment. + if (precision < 18) { + // The condition third_subsegment != 0 implies that the segment was + // of 19 digits, so in this case the third segment should be + // consisting of a genuine digit from the input. + uint32_t fractional_part = static_cast(prod); + should_round_up = fractional_part >= + data::fractional_part_rounding_thresholds + [8 - number_of_digits_to_print] || + ((fractional_part >> 31) & + ((digits & 1) | (third_subsegment != 0) | + has_more_segments)) != 0; + } + // Rounding at the subsegment boundary. + else { + // In this case, the segment must be of 19 digits, thus + // the third subsegment should be consisting of a genuine digit from + // the input. + should_round_up = third_subsegment > 5 || + (third_subsegment == 5 && + ((digits & 1) != 0 || has_more_segments)); + } + } + + // Round-up if necessary. + if (should_round_up) { + ++buf[precision - 1]; + for (int i = precision - 1; i > 0 && buf[i] > '9'; --i) { + buf[i] = '0'; + ++buf[i - 1]; + } + if (buf[0] > '9') { + buf[0] = '1'; + if (fixed) + buf[precision++] = '0'; + else + ++exp; + } + } + buf.try_resize(to_unsigned(precision)); + } + } // if (digits_in_the_first_segment > precision) + else { + // Adjust the exponent for its use in Dragon4. + exp += digits_in_the_first_segment - 1; + } + } + if (use_dragon) { + auto f = basic_fp(); + bool is_predecessor_closer = specs.binary32 + ? f.assign(static_cast(value)) + : f.assign(converted_value); + if (is_predecessor_closer) dragon_flags |= dragon::predecessor_closer; + if (fixed) dragon_flags |= dragon::fixed; + // Limit precision to the maximum possible number of significant digits in + // an IEEE754 double because we don't need to generate zeros. + const int max_double_digits = 767; + if (precision > max_double_digits) precision = max_double_digits; + format_dragon(f, dragon_flags, precision, buf, exp); + } + if (!fixed && !specs.showpoint) { + // Remove trailing zeros. + auto num_digits = buf.size(); + while (num_digits > 0 && buf[num_digits - 1] == '0') { + --num_digits; + ++exp; + } + buf.try_resize(num_digits); + } + return exp; +} +template +FMT_CONSTEXPR20 auto write_float(OutputIt out, T value, + format_specs specs, locale_ref loc) -> OutputIt { - if (const_check(!is_supported_floating_point(value))) - return out; float_specs fspecs = parse_float_type_spec(specs); fspecs.sign = specs.sign; - if (detail::signbit(value)) { // value < 0 is false for NaN so use signbit. + if (detail::signbit(value)) { // value < 0 is false for NaN so use signbit. fspecs.sign = sign::minus; value = -value; } else if (fspecs.sign == sign::minus) { @@ -2038,22 +3563,20 @@ FMT_CONSTEXPR20 auto write(OutputIt out, T value, } if (!detail::isfinite(value)) - return write_nonfinite(out, detail::isinf(value), specs, fspecs); + return write_nonfinite(out, detail::isnan(value), specs, fspecs); if (specs.align == align::numeric && fspecs.sign) { auto it = reserve(out, 1); *it++ = detail::sign(fspecs.sign); out = base_iterator(out, it); fspecs.sign = sign::none; - if (specs.width != 0) - --specs.width; + if (specs.width != 0) --specs.width; } memory_buffer buffer; if (fspecs.format == float_format::hex) { - if (fspecs.sign) - buffer.push_back(detail::sign(fspecs.sign)); - snprintf_float(promote_float(value), specs.precision, fspecs, buffer); + if (fspecs.sign) buffer.push_back(detail::sign(fspecs.sign)); + format_hexfloat(convert_float(value), specs.precision, fspecs, buffer); return write_bytes(out, {buffer.data(), buffer.size()}, specs); } @@ -2065,30 +3588,31 @@ FMT_CONSTEXPR20 auto write(OutputIt out, T value, throw_format_error("number is too big"); else ++precision; + } else if (fspecs.format != float_format::fixed && precision == 0) { + precision = 1; } - if (const_check(std::is_same())) - fspecs.binary32 = true; - if (!is_fast_float()) - fspecs.fallback = true; - int exp = format_float(promote_float(value), precision, fspecs, buffer); + if (const_check(std::is_same())) fspecs.binary32 = true; + int exp = format_float(convert_float(value), precision, fspecs, buffer); fspecs.precision = precision; - auto fp = big_decimal_fp{buffer.data(), static_cast(buffer.size()), exp}; - return write_float(out, fp, specs, fspecs, loc); + auto f = big_decimal_fp{buffer.data(), static_cast(buffer.size()), exp}; + return write_float(out, f, specs, fspecs, loc); +} + +template ::value)> +FMT_CONSTEXPR20 auto write(OutputIt out, T value, format_specs specs, + locale_ref loc = {}) -> OutputIt { + if (const_check(!is_supported_floating_point(value))) return out; + return specs.localized && write_loc(out, value, specs, loc) + ? out + : write_float(out, value, specs, loc); } template ::value)> FMT_CONSTEXPR20 auto write(OutputIt out, T value) -> OutputIt { - if (is_constant_evaluated()) { - return write(out, value, basic_format_specs()); - } - - if (const_check(!is_supported_floating_point(value))) - return out; - - using floaty = conditional_t::value, double, T>; - using uint = typename dragonbox::float_info::carrier_uint; - auto bits = bit_cast(value); + if (is_constant_evaluated()) return write(out, value, format_specs()); + if (const_check(!is_supported_floating_point(value))) return out; auto fspecs = float_specs(); if (detail::signbit(value)) { @@ -2096,25 +3620,27 @@ FMT_CONSTEXPR20 auto write(OutputIt out, T value) -> OutputIt { value = -value; } - constexpr auto specs = basic_format_specs(); - uint mask = exponent_mask(); - if ((bits & mask) == mask) - return write_nonfinite(out, std::isinf(value), specs, fspecs); + constexpr auto specs = format_specs(); + using floaty = conditional_t::value, double, T>; + using floaty_uint = typename dragonbox::float_info::carrier_uint; + floaty_uint mask = exponent_mask(); + if ((bit_cast(value) & mask) == mask) + return write_nonfinite(out, std::isnan(value), specs, fspecs); auto dec = dragonbox::to_decimal(static_cast(value)); return write_float(out, dec, specs, fspecs, {}); } template ::value && + FMT_ENABLE_IF(is_floating_point::value && !is_fast_float::value)> inline auto write(OutputIt out, T value) -> OutputIt { - return write(out, value, basic_format_specs()); + return write(out, value, format_specs()); } template -auto write(OutputIt out, monostate, basic_format_specs = {}, - locale_ref = {}) -> OutputIt { +auto write(OutputIt out, monostate, format_specs = {}, locale_ref = {}) + -> OutputIt { FMT_ASSERT(false, ""); return out; } @@ -2129,35 +3655,10 @@ FMT_CONSTEXPR auto write(OutputIt out, basic_string_view value) template ::value)> -constexpr auto write(OutputIt out, const T &value) -> OutputIt { +constexpr auto write(OutputIt out, const T& value) -> OutputIt { return write(out, to_string_view(value)); } -template ::value && - !std::is_same::value && - !std::is_same::value)> -FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { - auto abs_value = static_cast>(value); - bool negative = is_negative(value); - // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer. - if (negative) - abs_value = ~abs_value + 1; - int num_digits = count_digits(abs_value); - auto size = (negative ? 1 : 0) + static_cast(num_digits); - auto it = reserve(out, size); - if (auto ptr = to_pointer(it, size)) { - if (negative) - *ptr++ = static_cast('-'); - format_decimal(ptr, abs_value, num_digits); - return out; - } - if (negative) - *it++ = static_cast('-'); - it = format_decimal(it, abs_value, num_digits).end; - return base_iterator(out, it); -} - // FMT_ENABLE_IF() condition separated to workaround an MSVC bug. template < typename Char, typename OutputIt, typename T, @@ -2167,15 +3668,14 @@ template < type::custom_type, FMT_ENABLE_IF(check)> FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { - return write( - out, static_cast::type>(value)); + return write(out, static_cast>(value)); } template ::value)> FMT_CONSTEXPR auto write(OutputIt out, T value, - const basic_format_specs &specs = {}, - locale_ref = {}) -> OutputIt { + const format_specs& specs = {}, locale_ref = {}) + -> OutputIt { return specs.type != presentation_type::none && specs.type != presentation_type::string ? write(out, value ? 1 : 0, specs, {}) @@ -2190,48 +3690,39 @@ FMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt { } template -FMT_CONSTEXPR_CHAR_TRAITS auto write(OutputIt out, const Char *value) +FMT_CONSTEXPR_CHAR_TRAITS auto write(OutputIt out, const Char* value) -> OutputIt { - if (!value) { - throw_format_error("string pointer is null"); - } else { - out = write(out, basic_string_view(value)); - } + if (value) return write(out, basic_string_view(value)); + throw_format_error("string pointer is null"); return out; } template ::value)> -auto write(OutputIt out, const T *value, - const basic_format_specs &specs = {}, locale_ref = {}) - -> OutputIt { - check_pointer_type_spec(specs.type, error_handler()); - return write_ptr(out, to_uintptr(value), &specs); +auto write(OutputIt out, const T* value, const format_specs& specs = {}, + locale_ref = {}) -> OutputIt { + return write_ptr(out, bit_cast(value), &specs); } // A write overload that handles implicit conversions. template > -FMT_CONSTEXPR auto write(OutputIt out, const T &value) -> enable_if_t< +FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t< std::is_class::value && !is_string::value && - !std::is_same::value && - !std::is_same().map(value))>::value, + !is_floating_point::value && !std::is_same::value && + !std::is_same().map( + value))>>::value, OutputIt> { return write(out, arg_mapper().map(value)); } template > -FMT_CONSTEXPR auto write(OutputIt out, const T &value) +FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t::value == type::custom_type, OutputIt> { - using formatter_type = - conditional_t::value, - typename Context::template formatter_type, - fallback_formatter>; auto ctx = Context(out, {}, {}); - return formatter_type().format(value, ctx); + return typename Context::template formatter_type().format(value, ctx); } // An argument visitor that formats the argument and writes it via the output @@ -2260,7 +3751,7 @@ template struct arg_formatter { using context = buffer_context; iterator out; - const basic_format_specs &specs; + const format_specs& specs; locale_ref locale; template @@ -2275,30 +3766,23 @@ template struct arg_formatter { }; template struct custom_formatter { - basic_format_parse_context &parse_ctx; - buffer_context &ctx; + basic_format_parse_context& parse_ctx; + buffer_context& ctx; - void - operator()(typename basic_format_arg>::handle h) const { + void operator()( + typename basic_format_arg>::handle h) const { h.format(parse_ctx, ctx); } template void operator()(T) const {} }; -template -using is_integer = - bool_constant::value && !std::is_same::value && - !std::is_same::value && - !std::is_same::value>; - template class width_checker { -public: - explicit FMT_CONSTEXPR width_checker(ErrorHandler &eh) : handler_(eh) {} + public: + explicit FMT_CONSTEXPR width_checker(ErrorHandler& eh) : handler_(eh) {} template ::value)> FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) - handler_.on_error("negative width"); + if (is_negative(value)) handler_.on_error("negative width"); return static_cast(value); } @@ -2308,18 +3792,17 @@ template class width_checker { return 0; } -private: - ErrorHandler &handler_; + private: + ErrorHandler& handler_; }; template class precision_checker { -public: - explicit FMT_CONSTEXPR precision_checker(ErrorHandler &eh) : handler_(eh) {} + public: + explicit FMT_CONSTEXPR precision_checker(ErrorHandler& eh) : handler_(eh) {} template ::value)> FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { - if (is_negative(value)) - handler_.on_error("negative precision"); + if (is_negative(value)) handler_.on_error("negative precision"); return static_cast(value); } @@ -2329,132 +3812,52 @@ template class precision_checker { return 0; } -private: - ErrorHandler &handler_; + private: + ErrorHandler& handler_; }; template