diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..eeb953e3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.11) +project("RedScarfEngine" + VERSION 0.0.1 + DESCRIPTION "Vulkan based 3D engine" + LANGUAGES CXX) + + +# make sure c++ 20 is set +set(CMAKE_CXX_STANDARD 20)# turn on the dynamic depends for ninja +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) +# Enable C++ modules +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "3c375311-a3c9-4396-a187-3227ef642046") + +# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +# include(gcc_modules.cmake) +# endif() + +# string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE +# " " +# " -MT -MD -MF " +# " ${flags_to_scan_deps} -fdep-file= -fdep-output=" +# ) + +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc") +# set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG +# "${compiler_flags_for_module_map} -fmodule-mapper=") + + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) + +add_subdirectory(RedScarfEngine) +add_subdirectory(Utilities) +add_subdirectory(Graphics) \ No newline at end of file diff --git a/Graphics/CMakeLists.txt b/Graphics/CMakeLists.txt new file mode 100644 index 00000000..3109ec6c --- /dev/null +++ b/Graphics/CMakeLists.txt @@ -0,0 +1,51 @@ +add_library(rse_graphics) + +find_package(Vulkan REQUIRED) +find_package(glfw3 REQUIRED) +find_package(glm REQUIRED) + +find_package(Vulkan COMPONENTS glslc) +find_program(glslc_executable NAMES glslc HINTS Vulkan::glslc) + +function(compile_shader) + cmake_parse_arguments(PARSE_ARGV 1 arg "" "ENV;FORMAT" "SOURCES") + foreach(source ${arg_SOURCES}) + add_custom_command( + OUTPUT ${source}.${arg_FORMAT} + DEPENDS ${source} + DEPFILE ${source}.d + COMMAND + ${glslc_executable} + -o ${source}.${arg_FORMAT} + ${CMAKE_CURRENT_SOURCE_DIR}/${source} + ) + endforeach() +endfunction() + + +target_include_directories(rse_graphics PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/third_party/vma/include + ${CMAKE_SOURCE_DIR}/Utilities/include + ${Vulkan_INCLUDE_DIR} + ${glfw3_INCLUDE_DIR} + ${glm_INCLUDE_DIR}) + + +target_sources(rse_graphics PRIVATE + src/window.cpp + src/vulkanBase.cpp) + +target_link_libraries(rse_graphics PRIVATE + rse_utilities + ${Vulkan_LIBRARIES} + glfw + glm) + +compile_shader(rse_graphics + ENV opengl + FORMAT num + SOURCES + shaders/shader.vert + shaders/shader.frag +) diff --git a/include/vulkanBase.hpp b/Graphics/include/vulkanBase.hpp similarity index 100% rename from include/vulkanBase.hpp rename to Graphics/include/vulkanBase.hpp diff --git a/include/window.hpp b/Graphics/include/window.hpp similarity index 100% rename from include/window.hpp rename to Graphics/include/window.hpp diff --git a/shaders/shader.frag b/Graphics/shaders/shader.frag similarity index 100% rename from shaders/shader.frag rename to Graphics/shaders/shader.frag diff --git a/shaders/shader.vert b/Graphics/shaders/shader.vert similarity index 100% rename from shaders/shader.vert rename to Graphics/shaders/shader.vert diff --git a/include/localeVulkan.hpp b/Graphics/src/localeVulkan.hpp similarity index 100% rename from include/localeVulkan.hpp rename to Graphics/src/localeVulkan.hpp diff --git a/include/localeWindow.hpp b/Graphics/src/localeWindow.hpp similarity index 100% rename from include/localeWindow.hpp rename to Graphics/src/localeWindow.hpp diff --git a/src/vulkanBase.cpp b/Graphics/src/vulkanBase.cpp similarity index 99% rename from src/vulkanBase.cpp rename to Graphics/src/vulkanBase.cpp index 75717954..957be17e 100644 --- a/src/vulkanBase.cpp +++ b/Graphics/src/vulkanBase.cpp @@ -176,14 +176,14 @@ const std::vector gEnabledDeviceExtensionsNames = { "VK_KHR_swapchain", }; -const std::map gShaderPaths = { +const std::map gShaderPaths = { /* TODO: When changing to release and install, move those files*/ { ShaderStage::VERTEX, - "./vertex.spv", + "../Graphics/shaders/shader.vert.num", }, { ShaderStage::FRAGMENTS, - "./fragments.spv", + "../Graphics/shaders/shader.frag.num", } }; @@ -1674,16 +1674,17 @@ uint8_t createSyncObjects() */ void updateUniformBuffer(uint32_t currentImage) { - static auto startTime = std::chrono::high_resolution_clock::now(); + // static auto startTime = std::chrono::high_resolution_clock::now(); - auto currentTime = std::chrono::high_resolution_clock::now(); - float time = std::chrono::duration(currentTime - startTime).count(); + // auto currentTime = std::chrono::high_resolution_clock::now(); + // float time = std::chrono::duration(currentTime - startTime).count(); UniformBufferObject ubo{}; - ubo.model = glm::rotate(glm::mat4(1.0f), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f)); + ubo.model = glm::mat4(1.0f); + // ubo.model = glm::rotate(glm::mat4(1.0f), glm::radians(0.0f), glm::vec3(0.0f, 0.0f, 1.0f)); ubo.view = glm::lookAt(glm::vec3(2.0f, 2.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f)); ubo.proj = glm::perspective(glm::radians(45.0f), gSwapchainExtent.width / (float) gSwapchainExtent.height, 0.1f, 10.0f); - ubo.proj[1][1] *= -1; + ubo.proj[1][1] *= -1; /* GLM was developed for OpenGL, where Y coordinate of the clip is inverted */ memcpy(gUniformBuffers[currentImage].allocationInfo.pMappedData, &ubo, sizeof(ubo)); } diff --git a/src/window.cpp b/Graphics/src/window.cpp similarity index 100% rename from src/window.cpp rename to Graphics/src/window.cpp diff --git a/Makefile b/Makefile deleted file mode 100644 index b6df5858..00000000 --- a/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -CC := /usr/bin/g++ -INCLUDE_DIR := -I./include -I./third_party/vma/include -LFLAGS := -lglfw -lvulkan -CFLAGS := -g -Wall -Werror -std=c++20 $(INCLUDE_DIR) $(LFLAGS) -SRC_DIR := src -BUILD_DIR := ./build -TARGET := RedScarfEngine -SOURCES := main.cpp \ - vulkanBase.cpp \ - window.cpp \ - logger.cpp \ - -OBJECTS := $(SOURCES:%=$(BUILD_DIR)/%) -OBJECTS := $(OBJECTS:cpp=o) - -SHADERS_DIR := ./shaders - -SHADER_OBJECTS := vertex.spv \ - fragments.spv \ - -all: prepare_dirs $(OBJECTS) $(SHADER_OBJECTS) - $(CC) $(CFLAGS) -o $(BUILD_DIR)/$(TARGET) $(OBJECTS) - -# Build shader files -vertex.spv: $(SHADERS_DIR)/shader.vert - glslc $^ -o $(BUILD_DIR)/$@ - -fragments.spv: $(SHADERS_DIR)/shader.frag - glslc $^ -o $(BUILD_DIR)/$@ - -$(BUILD_DIR)/%.spv: - echo $(basename $^) - glslc $^ -o $@ - -# Generic build command -$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp - $(CC) $(CFLAGS) -c $^ -o $@ - -.PHONY: prepare_dirs -prepare_dirs: - mkdir -p ./build - -.PHONY: clean -clean: - rm -rf ./build diff --git a/RedScarfEngine/CMakeLists.txt b/RedScarfEngine/CMakeLists.txt new file mode 100644 index 00000000..f19c1321 --- /dev/null +++ b/RedScarfEngine/CMakeLists.txt @@ -0,0 +1,8 @@ +add_executable(${PROJECT_NAME} src/main.cpp) + +target_include_directories(${PROJECT_NAME} PRIVATE + ${CMAKE_SOURCE_DIR}/Utilities/include + ${CMAKE_SOURCE_DIR}/Graphics/include) + +target_link_libraries(${PROJECT_NAME} PRIVATE + rse_graphics) \ No newline at end of file diff --git a/src/main.cpp b/RedScarfEngine/src/main.cpp similarity index 100% rename from src/main.cpp rename to RedScarfEngine/src/main.cpp diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt new file mode 100644 index 00000000..6e3ec4ee --- /dev/null +++ b/Utilities/CMakeLists.txt @@ -0,0 +1,8 @@ +add_library(rse_utilities) + +target_include_directories(rse_utilities PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) + +target_sources(rse_utilities PRIVATE + src/logger.cpp) diff --git a/include/localization.hpp b/Utilities/include/localization.hpp similarity index 100% rename from include/localization.hpp rename to Utilities/include/localization.hpp diff --git a/include/logger.hpp b/Utilities/include/logger.hpp similarity index 100% rename from include/logger.hpp rename to Utilities/include/logger.hpp diff --git a/src/logger.cpp b/Utilities/src/logger.cpp similarity index 100% rename from src/logger.cpp rename to Utilities/src/logger.cpp