From b65058ab3efa093d52449de0bd2797e105fb87dc Mon Sep 17 00:00:00 2001 From: bailwillharr Date: Tue, 8 Nov 2022 13:42:07 +0000 Subject: [PATCH] DO stuff --- .gitmodules | 2 +- CMakeLists.txt | 54 ++++++++++--------- include/components/mesh_renderer.hpp | 3 +- include/components/text_ui_renderer.hpp | 3 ++ include/resources/font.hpp | 5 +- include/resources/texture.hpp | 10 ++-- src/components/text_ui_renderer.cpp | 10 ++-- src/gfx_device_vulkan.cpp | 66 +++++++++++++++++------- src/object.cpp | 3 +- src/resources/font.cpp | 2 + src/resources/shader.cpp | 4 +- src/resources/texture.cpp | 3 ++ src/sceneroot.cpp | 3 +- test/res/shader.frag.spv | Bin 2596 -> 0 bytes test/res/shader.vert.spv | Bin 3264 -> 0 bytes 15 files changed, 105 insertions(+), 63 deletions(-) delete mode 100644 test/res/shader.frag.spv delete mode 100644 test/res/shader.vert.spv diff --git a/.gitmodules b/.gitmodules index d064ea5..f4387cb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -21,4 +21,4 @@ url = https://github.com/zeux/volk [submodule "dependencies/VulkanMemoryAllocator"] path = dependencies/VulkanMemoryAllocator - url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator + url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index bb6e502..9185352 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.8) +cmake_minimum_required(VERSION 3.23) # options option(ENGINE_BUILD_TEST "Compile the test program" ON) @@ -77,10 +77,8 @@ set(INCLUDE_FILES ) add_library(${PROJECT_NAME} STATIC - ${SRC_FILES} ${INCLUDE_FILES} - ) source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/src" PREFIX "Source" FILES ${SRC_FILES}) @@ -131,30 +129,36 @@ if (MINGW) target_link_libraries(${PROJECT_NAME} PUBLIC mingw32) endif() -# GLAD: -set(GLAD_PROFILE "core" CACHE INTERNAL "" FORCE) -set(GLAD_API "gl=3.3" CACHE INTERNAL "" FORCE) -if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(GLAD_GENERATOR "c-debug" CACHE INTERNAL "" FORCE) -else() - set(GLAD_GENERATOR "c" CACHE INTERNAL "" FORCE) +if(ENGINE_BUILD_OPENGL) + # GLAD: + set(GLAD_PROFILE "core" CACHE INTERNAL "" FORCE) + set(GLAD_API "gl=3.3" CACHE INTERNAL "" FORCE) + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(GLAD_GENERATOR "c-debug" CACHE INTERNAL "" FORCE) + else() + set(GLAD_GENERATOR "c" CACHE INTERNAL "" FORCE) + endif() + set(GLAD_SPEC "gl" CACHE INTERNAL "" FORCE) + set(BUILD_SHARED_LIBS OFF) + add_subdirectory(dependencies/glad) + target_link_libraries(${PROJECT_NAME} PUBLIC glad) + target_include_directories(${PROJECT_NAME} PUBLIC dependencies/glad/include) endif() -set(GLAD_SPEC "gl" CACHE INTERNAL "" FORCE) -set(BUILD_SHARED_LIBS OFF) -add_subdirectory(dependencies/glad) -target_link_libraries(${PROJECT_NAME} PUBLIC glad) -target_include_directories(${PROJECT_NAME} PUBLIC dependencies/glad/include) -# Volk -set(VOLK_STATIC_DEFINES "") -set(VOLK_PULL_IN_VULKAN ON) -set(VOLK_INSTALL OFF) -set(VOLK_HEADERS_ONLY ON) -add_subdirectory(dependencies/volk) -target_link_libraries(${PROJECT_NAME} PRIVATE volk_headers) +if(ENGINE_BUILD_VULKAN) -# Vulkan Memory Allocator -target_include_directories(${PROJECT_NAME} PRIVATE dependencies/VulkanMemoryAllocator/include) + # Volk + set(VOLK_STATIC_DEFINES "") + set(VOLK_PULL_IN_VULKAN ON) + set(VOLK_INSTALL OFF) + set(VOLK_HEADERS_ONLY ON) + add_subdirectory(dependencies/volk) + target_link_libraries(${PROJECT_NAME} PRIVATE volk_headers) + + # Vulkan Memory Allocator + target_include_directories(${PROJECT_NAME} PRIVATE dependencies/VulkanMemoryAllocator/include) + +endif() # SDL2: find_package(SDL2) @@ -196,4 +200,4 @@ target_link_libraries(${PROJECT_NAME} PRIVATE freetype) target_include_directories(${PROJECT_NAME} PRIVATE dependencies/freetype/include) # stb -target_include_directories(${PROJECT_NAME} PRIVATE dependencies/stb) +target_include_directories(${PROJECT_NAME} PRIVATE dependencies/stb) \ No newline at end of file diff --git a/include/components/mesh_renderer.hpp b/include/components/mesh_renderer.hpp index a8b86fd..3d108bb 100644 --- a/include/components/mesh_renderer.hpp +++ b/include/components/mesh_renderer.hpp @@ -6,7 +6,6 @@ #include "resources/shader.hpp" #include "resources/mesh.hpp" -#include "resources/texture.hpp" #include #include @@ -27,7 +26,7 @@ public: void setTexture(const std::string& name); std::shared_ptr m_mesh = nullptr; - std::shared_ptr m_texture; +// std::shared_ptr m_texture; glm::vec3 m_color = { 1.0f, 1.0f, 1.0f }; glm::vec3 m_emission = { 0.0f, 0.0f, 0.0f }; diff --git a/include/components/text_ui_renderer.hpp b/include/components/text_ui_renderer.hpp index 420f9d2..4473b19 100644 --- a/include/components/text_ui_renderer.hpp +++ b/include/components/text_ui_renderer.hpp @@ -1,5 +1,7 @@ #pragma once +#if 0 + #include "engine_api.h" #include "component.hpp" @@ -39,3 +41,4 @@ private: }; } +#endif \ No newline at end of file diff --git a/include/resources/font.hpp b/include/resources/font.hpp index 1e868c3..fd115ac 100644 --- a/include/resources/font.hpp +++ b/include/resources/font.hpp @@ -1,11 +1,11 @@ #pragma once +#if 0 + #include "engine_api.h" #include "resource.hpp" -#include - #include #include @@ -33,3 +33,4 @@ public: }; } +#endif \ No newline at end of file diff --git a/include/resources/texture.hpp b/include/resources/texture.hpp index cdfc9a5..1c26f41 100644 --- a/include/resources/texture.hpp +++ b/include/resources/texture.hpp @@ -1,10 +1,11 @@ #pragma once +#if 0 + #include "engine_api.h" #include "resource.hpp" -#include namespace engine::resources { @@ -12,11 +13,6 @@ class ENGINE_API Texture : public Resource { private: - static GLuint s_binded_texture; - - GLuint m_texture; - - public: Texture(const std::filesystem::path& resPath); ~Texture() override; @@ -27,3 +23,5 @@ public: }; } + +#endif \ No newline at end of file diff --git a/src/components/text_ui_renderer.cpp b/src/components/text_ui_renderer.cpp index 2491e24..69393ce 100644 --- a/src/components/text_ui_renderer.cpp +++ b/src/components/text_ui_renderer.cpp @@ -1,3 +1,5 @@ +#if 0 + #include "components/text_ui_renderer.hpp" #include "object.hpp" @@ -12,8 +14,8 @@ UI::UI(Object* parent) : Component(parent, TypeEnum::UI) m_font = parent->res.get(FONTFILE); m_shader = parent->res.get("shaders/font.glsl"); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +// glEnable(GL_BLEND); +// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } UI::~UI() @@ -70,7 +72,7 @@ void UI::render(glm::mat4 transform) {{xpos + w, ypos + h, 0.0f}, {}, {1.0f, 0.0f}}, });*/ - glBindTexture(GL_TEXTURE_2D, glyph.textureID); +// glBindTexture(GL_TEXTURE_2D, glyph.textureID); // mesh.drawMesh(*m_shader); @@ -83,3 +85,5 @@ void UI::render(glm::mat4 transform) } } + +#endif \ No newline at end of file diff --git a/src/gfx_device_vulkan.cpp b/src/gfx_device_vulkan.cpp index 38c2d3d..86845fd 100644 --- a/src/gfx_device_vulkan.cpp +++ b/src/gfx_device_vulkan.cpp @@ -18,6 +18,8 @@ #define VMA_IMPLEMENTATION #include +#include + #include #include @@ -145,6 +147,48 @@ namespace engine { // functions + static VkShaderModule compileShader(VkDevice device, shaderc_shader_kind kind, const std::string& source, const char* filename) + { + + shaderc::Compiler compiler; + shaderc::CompileOptions options; + + options.SetOptimizationLevel(shaderc_optimization_level_performance); + + // preprocess + shaderc::PreprocessedSourceCompilationResult preprocessed = compiler.PreprocessGlsl(source, kind, filename, options); + + if (preprocessed.GetCompilationStatus() != shaderc_compilation_status_success) + { + throw std::runtime_error(preprocessed.GetErrorMessage()); + } + + std::string shaderStr = { preprocessed.cbegin(), preprocessed.cend() }; + + // compile + shaderc::SpvCompilationResult module = compiler.CompileGlslToSpv(shaderStr, kind, filename, options); + + if (module.GetCompilationStatus() != shaderc_compilation_status_success) + { + throw std::runtime_error(module.GetErrorMessage()); + } + + std::vector shaderBytecode = { module.cbegin(), module.cend() };// not sure why sample code copy vector like this + + VkShaderModuleCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + createInfo.codeSize = shaderBytecode.size(); + createInfo.pCode = shaderBytecode.data(); + + VkShaderModule shaderModule; + if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) { + throw std::runtime_error("failed to create shader module!"); + } + + return shaderModule; + + } + static std::vector readFile(const std::string& filename) { std::ifstream file(filename, std::ios::ate | std::ios::binary); @@ -630,21 +674,6 @@ namespace engine { } - static VkShaderModule createShaderModule(VkDevice device, const std::vector& code) - { - VkShaderModuleCreateInfo createInfo{}; - createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - createInfo.codeSize = code.size(); - createInfo.pCode = reinterpret_cast(code.data()); - - VkShaderModule shaderModule; - if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) { - throw std::runtime_error("failed to create shader module!"); - } - - return shaderModule; - } - static void copyBuffer(VkDevice device, VkCommandPool commandPool, VkQueue queue, VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size) { VkResult res; @@ -1135,9 +1164,6 @@ namespace engine { descriptorSetLayoutInfo.pBindings = &pimpl->uboLayoutBinding; res = vkCreateDescriptorSetLayout(pimpl->device, &descriptorSetLayoutInfo, nullptr, &pimpl->uboLayout); assert(res == VK_SUCCESS); - - - } GFXDevice::~GFXDevice() @@ -1426,8 +1452,8 @@ namespace engine { auto fragShaderCode = readFile(fragShaderPath); INFO("Opened shader: {}", std::filesystem::path(vertShaderPath).filename().string()); - VkShaderModule vertShaderModule = createShaderModule(pimpl->device, vertShaderCode); - VkShaderModule fragShaderModule = createShaderModule(pimpl->device, fragShaderCode); + VkShaderModule vertShaderModule = compileShader(pimpl->device, shaderc_vertex_shader, vertShaderCode.data(), vertShaderPath); + VkShaderModule fragShaderModule = compileShader(pimpl->device, shaderc_fragment_shader, fragShaderCode.data(), fragShaderPath); VkPipelineShaderStageCreateInfo vertShaderStageInfo{ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO }; vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; diff --git a/src/object.cpp b/src/object.cpp index 46efc52..6f2b3c5 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -123,7 +123,8 @@ namespace engine { compList.renderers.emplace_back(dynamic_cast(comp), newTransform); break; case Component::TypeEnum::UI: - compList.uis.emplace_back(dynamic_cast(comp), newTransform); +// compList.uis.emplace_back(dynamic_cast(comp), newTransform); + throw std::runtime_error("UI is currently not supported"); break; case Component::TypeEnum::CUSTOM: compList.customs.emplace_back(dynamic_cast(comp), newTransform); diff --git a/src/resources/font.cpp b/src/resources/font.cpp index 8a505aa..c905437 100644 --- a/src/resources/font.cpp +++ b/src/resources/font.cpp @@ -1,3 +1,4 @@ +#if 0 #include "resources/font.hpp" #include @@ -94,3 +95,4 @@ Font::Character Font::getChar(char c) } } +#endif \ No newline at end of file diff --git a/src/resources/shader.cpp b/src/resources/shader.cpp index 25c643e..23cc0f8 100644 --- a/src/resources/shader.cpp +++ b/src/resources/shader.cpp @@ -35,8 +35,8 @@ Shader::Shader(const std::filesystem::path& resPath) : Resource(resPath, "shader vertexFormat.attributeDescriptions.emplace_back(1, gfx::VertexAttribFormat::VEC3, sizeof(glm::vec3)); // norm vertexFormat.attributeDescriptions.emplace_back(2, gfx::VertexAttribFormat::VEC2, sizeof(glm::vec3) + sizeof(glm::vec3)); // uv - const std::string vertexShaderPath = (resPath.parent_path()/std::filesystem::path(resPath.stem().string() + ".vert.spv")).string(); - const std::string fragmentShaderPath = (resPath.parent_path()/std::filesystem::path(resPath.stem().string() + ".frag.spv")).string(); + const std::string vertexShaderPath = (resPath.parent_path()/std::filesystem::path(resPath.stem().string() + ".vert")).string(); + const std::string fragmentShaderPath = (resPath.parent_path()/std::filesystem::path(resPath.stem().string() + ".frag")).string(); m_pipeline = gfxdev->createPipeline(vertexShaderPath.c_str(), fragmentShaderPath.c_str(), vertexFormat, sizeof(UniformBuffer)); diff --git a/src/resources/texture.cpp b/src/resources/texture.cpp index fab9af1..bcf4fa4 100644 --- a/src/resources/texture.cpp +++ b/src/resources/texture.cpp @@ -1,3 +1,5 @@ +#if 0 + #include "resources/texture.hpp" #define STB_IMAGE_IMPLEMENTATION @@ -129,3 +131,4 @@ void Texture::bindTexture() const } } +#endif \ No newline at end of file diff --git a/src/sceneroot.cpp b/src/sceneroot.cpp index acb9e3f..90f1857 100644 --- a/src/sceneroot.cpp +++ b/src/sceneroot.cpp @@ -62,9 +62,10 @@ namespace engine { } } - for (const auto& [c, t] : compList.uis) { +/* for (const auto& [c, t] : compList.uis) { c->render(t); } +*/ } diff --git a/test/res/shader.frag.spv b/test/res/shader.frag.spv deleted file mode 100644 index e936d600ac85e60a81b874da75acbbcf742e6799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2596 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