diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 46ee31a763391f65d384d091ec906517bf5ccd1d..0000000000000000000000000000000000000000 --- a/.clang-format +++ /dev/null @@ -1,195 +0,0 @@ ---- -Language: Cpp -BasedOnStyle: Google - -AccessModifierOffset: -4 -AlignAfterOpenBracket: BlockIndent -AlignArrayOfStructures: Right -AlignConsecutiveAssignments: - Enabled: true - AcrossEmptyLines: false - AcrossComments: true - AlignCompound: false - PadOperators: true -AlignConsecutiveBitFields: - Enabled: true - AcrossEmptyLines: false - AcrossComments: true -AlignConsecutiveDeclarations: - Enabled: true - AcrossEmptyLines: false - AcrossComments: true -AlignConsecutiveMacros: Consecutive -AlignEscapedNewlines: Left -AlignOperands: AlignAfterOperator -AlignTrailingComments: - Kind: Always - OverEmptyLines: 1 -AllowAllArgumentsOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: Empty -AllowShortCaseLabelsOnASingleLine: true -AllowShortEnumsOnASingleLine: false -AllowShortFunctionsOnASingleLine: Empty -AllowShortIfStatementsOnASingleLine: Never -AllowShortLambdasOnASingleLine: All -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: true -AlwaysBreakTemplateDeclarations: Yes -AttributeMacros: [ ] -BinPackArguments: false -BinPackParameters: false -BitFieldColonSpacing: Both -BraceWrapping: - AfterCaseLabel: false - AfterClass: false - AfterControlStatement: MultiLine - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: false - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: true - BeforeLambdaBody: false - BeforeWhile: false - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyNamespace: true -BreakAfterAttributes: Leave -BreakBeforeBinaryOperators: NonAssignment -BreakBeforeBraces: Custom -BreakBeforeConceptDeclarations: Always -# BreakBeforeInlineASMColon: -BreakBeforeTernaryOperators: true -BreakConstructorInitializers: BeforeColon -BreakInheritanceList: BeforeColon -BreakStringLiterals: true -ColumnLimit: 80 -CommentPragmas: '' -CompactNamespaces: false -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: false -DerivePointerAlignment: false -DisableFormat: false -EmptyLineAfterAccessModifier: Never -EmptyLineBeforeAccessModifier: Always -FixNamespaceComments: true -ForEachMacros: [ 'RANGES_FOR', 'FOREACH' ] -IfMacros: [ 'IF' ] -IncludeBlocks: Regroup -IncludeCategories: - - Regex: '^<glm/' - Priority: 1 - - Regex: '^<vulkan/' - Priority: 2 - - Regex: '<vk_mem_alloc.h>' - Priority: 3 - - Regex: '^<glfw/' - Priority: 4 - - Regex: '^<.*\..*' - Priority: 998 - - Regex: '^<.*' - Priority: 1 - - Regex: '\/.*' - Priority: 999 - - Regex: '.*' - Priority: 1000 -IncludeIsMainRegex: '' -# IncludeIsMainSourceRegex: -IndentAccessModifiers: false -IndentCaseBlocks: false -IndentCaseLabels: true -IndentExternBlock: Indent -IndentGotoLabels: true -IndentPPDirectives: BeforeHash -IndentRequiresClause: true -IndentWidth: 4 -IndentWrappedFunctionNames: true -InsertBraces: true -InsertNewlineAtEOF: true -IntegerLiteralSeparator: - Binary: 4 - Decimal: 3 - Hex: 2 -KeepEmptyLinesAtTheStartOfBlocks: false -LambdaBodyIndentation: Signature -LineEnding: LF -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 2 -NamespaceIndentation: None -NamespaceMacros: [ ] -PPIndentWidth: 2 -PackConstructorInitializers: CurrentLine -#PenaltyBreakAssignment: 10 -#PenaltyBreakBeforeFirstCallParameter: 30 -#PenaltyBreakComment: 10 -#PenaltyBreakFirstLessLess: 0 -#PenaltyBreakOpenParenthesis: 10 -#PenaltyBreakString: 10 -#PenaltyBreakTemplateDeclaration: 20 -#PenaltyExcessCharacter: 1 -#PenaltyIndentedWhitespace: 0 -#PenaltyReturnTypeOnItsOwnLine: 5 -PointerAlignment: Left -QualifierAlignment: Custom -QualifierOrder: [ 'constexpr', 'inline', 'static', 'volatile', 'const', 'type', 'restrict' ] -RawStringFormats: - - Language: Cpp -ReferenceAlignment: Pointer -ReflowComments: true -RemoveBracesLLVM: false -RemoveSemicolon: false -RequiresClausePosition: OwnLine -RequiresExpressionIndentation: OuterScope -SeparateDefinitionBlocks: Always -ShortNamespaceLines: 0 -SortIncludes: CaseInsensitive -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false -SpaceAfterTemplateKeyword: true -SpaceAroundPointerQualifiers: Default -SpaceBeforeAssignmentOperators: true -SpaceBeforeCaseColon: false -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true -SpaceBeforeParens: ControlStatementsExceptControlMacros -SpaceBeforeParensOptions: - AfterControlStatements: true - AfterForeachMacros: false - AfterFunctionDeclarationName: false - AfterFunctionDefinitionName: false - AfterIfMacros: false - AfterOverloadedOperator: false - AfterRequiresInClause: false - AfterRequiresInExpression: true - BeforeNonEmptyParentheses: false -SpaceBeforeRangeBasedForLoopColon: true -SpaceBeforeSquareBrackets: false -SpaceInEmptyBlock: false -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 3 -SpacesInAngles: Never -SpacesInCStyleCastParentheses: false -SpacesInConditionalStatement: false -SpacesInContainerLiterals: false -SpacesInLineCommentPrefix: - Minimum: 1 - Maximum: -1 -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Latest -StatementAttributeLikeMacros: [ ] -StatementMacros: [ ] -TabWidth: 4 -TypenameMacros: [ ] -UseTab: Never -WhitespaceSensitiveMacros: [ ] ---- diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 48a25083bff73e5b01c90dc20a0ca2326dcb20a6..0000000000000000000000000000000000000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,115 +0,0 @@ -cmake_minimum_required(VERSION 3.25) - -include(FetchContent) -set(FETCHCONTENT_QUIET OFF) - -project(renderer C CXX) - - -add_executable(${PROJECT_NAME}) - - -option(engine_debug "Turn on debug mode" ON) - - -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) - - -if (MSVC) - target_compile_options(${PROJECT_NAME} PRIVATE - /W4 - /WX - ) -else () - target_compile_options(${PROJECT_NAME} PRIVATE - -Wall - -Wextra - -Werror - -Wno-missing-field-initializers - ) -endif () - - -target_precompile_headers(${PROJECT_NAME} PRIVATE - <algorithm> - <concepts> - <fstream> - <functional> - <iostream> - <limits> - <memory> - <ranges> - <set> - <span> - <sstream> - <stdexcept> - <string> - <string_view> - <thread> - <type_traits> - <unordered_map> - <utility> - <vector> - <variant> -) - - -# Vulkan -find_package(Vulkan REQUIRED) -target_compile_definitions(${PROJECT_NAME} PRIVATE - VULKAN_HPP_NO_TO_STRING - VULKAN_HPP_NO_CONSTRUCTORS - VULKAN_HPP_NO_SETTERS - VULKAN_HPP_NO_SPACESHIP_OPERATOR -) -if (engine_debug) - target_compile_definitions(${PROJECT_NAME} PRIVATE ENGINE_VULKAN_DEBUG) -endif () -target_precompile_headers(${PROJECT_NAME} PRIVATE <vulkan/vulkan.hpp>) -target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan) - -# VulkanMemoryAllocator -set(STATIC_VULKAN_FUNCTIONS 0) -set(DYNAMIC_VULKAN_FUNCTIONS 1) -FetchContent_Declare(VulkanMemoryAllocator - GIT_REPOSITORY https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git - GIT_TAG 2f382df - GIT_PROGRESS TRUE - SYSTEM -) -FetchContent_MakeAvailable(VulkanMemoryAllocator) -target_compile_definitions(${PROJECT_NAME} PRIVATE - VMA_STATIC_VULKAN_FUNCTIONS=${STATIC_VULKAN_FUNCTIONS} - VMA_DYNAMIC_VULKAN_FUNCTIONS=${DYNAMIC_VULKAN_FUNCTIONS} -) -target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator) - -# GLFW -FetchContent_Declare(GLFW - GIT_REPOSITORY https://github.com/glfw/glfw.git - GIT_TAG 3.3.9 - GIT_PROGRESS TRUE - SYSTEM -) -FetchContent_MakeAvailable(GLFW) -target_compile_definitions(${PROJECT_NAME} PRIVATE - GLFW_INCLUDE_VULKAN -) -target_link_libraries(${PROJECT_NAME} PRIVATE glfw) - -# glm -FetchContent_Declare(glm - GIT_REPOSITORY https://github.com/g-truc/glm.git - GIT_TAG 1.0.0 - GIT_PROGRESS TRUE - SYSTEM -) -FetchContent_MakeAvailable(glm) -target_compile_definitions(${PROJECT_NAME} PRIVATE - GLM_FORCE_DEPTH_ZERO_TO_ONE -) -target_precompile_headers(${PROJECT_NAME} PRIVATE <glm/glm.hpp>) -target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm) - - -add_subdirectory(src) diff --git a/README.md b/README.md index 420c679896887ca3110e28f6e76faa7b32ae8fcc..1caf7e5d8227badedcc9eb985d984a0eabd9efd6 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@ Minden írásos anyag megtalálható a [docs](./docs) mappában. Ezek effektív Ajánlott tanulós menetrend: 1. Szedd le a `starter` *branch*-en lévő kódot, és addig kupáld, amíg nem fordul. Kell hozzá CMake, C++20-as fordító, és Vulkan SDK. -2. Olvasd át a [bevezető előadás diái](./docs/Vulkan Bevezető.pptx)t. +2. Olvasd át a [bevezető előadás diái](./docs/lectures/Bevezető.pptx)t. 3. Menj végig a [lectures](./docs/lectures) mappában található olvasmányokon. (Ehhez ajánlott az mkdocs használata.) -A `master` *branch*-en található kód mindig a legfrissebb alkalmat tükrözi. Más alkalmak befejezett kódjai megtalálhatóak a hozzájuk tartozó *branch*-eken. +A `master` *branch*-en csak dokumentáció van. +Az egyes leckékhez tartozó kódok külön branch-eken vannak. diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index 9ebb656bf34b033eda29a4abfc3c67d608bb7235..0000000000000000000000000000000000000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -target_sources(${PROJECT_NAME} PRIVATE - main.cpp - Renderer.cpp -) diff --git a/src/Renderer.cpp b/src/Renderer.cpp deleted file mode 100644 index 11c6205388f5f19988f67d1e4b38b1120a586e0b..0000000000000000000000000000000000000000 --- a/src/Renderer.cpp +++ /dev/null @@ -1,97 +0,0 @@ -#include "Renderer.hpp" - -#include <algorithm> -#include <ranges> -#include <vector> - -const std::vector<const char*> g_layers{ -#ifdef ENGINE_VULKAN_DEBUG - "VK_LAYER_KHRONOS_validation" -#endif -}; - -[[nodiscard]] static auto create_instance() -> vk::UniqueInstance -{ - constexpr static vk::ApplicationInfo application_info{}; - - const vk::InstanceCreateInfo create_info{ - .pApplicationInfo = &application_info, - .enabledLayerCount = static_cast<uint32_t>(g_layers.size()), - .ppEnabledLayerNames = g_layers.data(), - }; - - return vk::createInstanceUnique(create_info); -} - -[[nodiscard]] static auto choose_physical_device(const vk::Instance t_instance) - -> vk::PhysicalDevice -{ - const auto physical_devices{ t_instance.enumeratePhysicalDevices() }; - - if (std::ranges::empty(physical_devices)) { - throw std::runtime_error{ "No Vulkan physical device is available." }; - } - - auto ranked_devices_view{ - physical_devices - | std::views::transform([](vk::PhysicalDevice t_physical_device) { - switch (t_physical_device.getProperties().deviceType) { - case vk::PhysicalDeviceType::eDiscreteGpu: - return std::make_pair(t_physical_device, 2); - case vk::PhysicalDeviceType::eIntegratedGpu: - return std::make_pair(t_physical_device, 1); - default: return std::make_pair(t_physical_device, 0); - } - }) - }; - std::vector ranked_devices( - ranked_devices_view.begin(), ranked_devices_view.end() - ); - - std::ranges::sort( - ranked_devices, - std::ranges::greater{}, - &std::pair<vk::PhysicalDevice, int>::second - ); - - return ranked_devices.front().first; -} - -[[nodiscard]] static auto find_graphics_queue_family( - const vk::PhysicalDevice t_physical_device -) -> uint32_t -{ - uint32_t index{}; - for (const auto& properties : t_physical_device.getQueueFamilyProperties()) - { - if (properties.queueFlags & vk::QueueFlagBits::eGraphics) { - return index; - } - index++; - } - throw std::runtime_error{ "Could not find graphics queue family" }; -} - -[[nodiscard]] static auto create_device(const vk::PhysicalDevice t_physical_device) - -> vk::UniqueDevice -{ - const vk::DeviceQueueCreateInfo queue_create_info{ - .queueFamilyIndex = find_graphics_queue_family(t_physical_device), - .queueCount = 1, - }; - - vk::DeviceCreateInfo device_create_info{ - .queueCreateInfoCount = 1, - .pQueueCreateInfos = &queue_create_info, - }; - - return t_physical_device.createDeviceUnique(device_create_info); -} - -Renderer::Renderer() - : m_instance{ create_instance() }, - m_physical_device{ choose_physical_device(*m_instance) }, - m_graphics_queue_family{ find_graphics_queue_family(m_physical_device) }, - m_device{ create_device(m_physical_device) }, - m_graphics_queue{ m_device->getQueue(m_graphics_queue_family, 0) } -{} diff --git a/src/Renderer.hpp b/src/Renderer.hpp deleted file mode 100644 index 8a2613fb5c5e954a6aba46f31be4aa2654a449f9..0000000000000000000000000000000000000000 --- a/src/Renderer.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include <vulkan/vulkan.hpp> - -class Renderer { -public: - Renderer(); - -private: - vk::UniqueInstance m_instance; - vk::PhysicalDevice m_physical_device; - uint32_t m_graphics_queue_family; - vk::UniqueDevice m_device; - vk::Queue m_graphics_queue; -}; diff --git a/src/main.cpp b/src/main.cpp deleted file mode 100644 index 54e778569d47041fd567fa669db60c6230d5d6b7..0000000000000000000000000000000000000000 --- a/src/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include <iostream> - -int main() -{ - std::cout << "Hello World!\n"; -}