Compare commits
2 Commits
43ef6684e9
...
4288c6fa08
| Author | SHA1 | Date | |
|---|---|---|---|
| 4288c6fa08 | |||
| b0d5f9014f |
+39
-1
@@ -7,9 +7,47 @@ set(GLFW_USE_WAYLAND ON)
|
|||||||
find_package(Vulkan REQUIRED)
|
find_package(Vulkan REQUIRED)
|
||||||
find_package(glfw3 3.3 REQUIRED)
|
find_package(glfw3 3.3 REQUIRED)
|
||||||
|
|
||||||
|
# Suche nach dem glslc Compiler
|
||||||
|
find_program(GLSLC glslc)
|
||||||
|
if(NOT GLSLC)
|
||||||
|
message(FATAL_ERROR "glslc compiler not found. Please install the Vulkan SDK.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Alle Shader-Dateien im Verzeichnis ./shaders sammeln
|
||||||
|
file(GLOB SHADER_FILES
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.vert"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/shaders/*.frag"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(SPIRV_SHADERS "")
|
||||||
|
foreach(SHADER ${SHADER_FILES})
|
||||||
|
# Dateiname extrahieren
|
||||||
|
get_filename_component(SHADER_NAME ${SHADER} NAME)
|
||||||
|
# Zielpfad für die kompilierten Shader im Build-Verzeichnis
|
||||||
|
set(SPIRV "${CMAKE_CURRENT_BINARY_DIR}/shaders/${SHADER_NAME}.spv")
|
||||||
|
|
||||||
|
# Custom Command zum Kompilieren des Shaders
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${SPIRV}
|
||||||
|
COMMAND ${GLSLC} ${SHADER} -o ${SPIRV}
|
||||||
|
DEPENDS ${SHADER}
|
||||||
|
COMMENT "Compiling ${SHADER_NAME}"
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND SPIRV_SHADERS ${SPIRV})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
# Custom Target, das alle Shader kompiliert
|
||||||
|
add_custom_target(compile_shaders ALL DEPENDS ${SPIRV_SHADERS})
|
||||||
|
|
||||||
|
# Das eigentliche Executable
|
||||||
add_executable(vulkan_test
|
add_executable(vulkan_test
|
||||||
main.cpp
|
main.cpp
|
||||||
vulkan/vulkan_app.cpp
|
vulkan/vulkan_app.cpp
|
||||||
vulkan/vulkan_app.hpp)
|
vulkan/vulkan_app.hpp
|
||||||
|
)
|
||||||
|
|
||||||
target_link_libraries(vulkan_test PRIVATE Vulkan::Vulkan glfw)
|
target_link_libraries(vulkan_test PRIVATE Vulkan::Vulkan glfw)
|
||||||
|
|
||||||
|
# Sicherstellen, dass die Shader vor dem Bauen des Executables kompiliert werden
|
||||||
|
add_dependencies(vulkan_test compile_shaders)
|
||||||
|
|||||||
+2
-2
@@ -1,2 +1,2 @@
|
|||||||
glslc shader.vert -o vert.spv
|
glslc shader.vert -o shader.vert.spv
|
||||||
glslc shader.frag -o frag.spv
|
glslc shader.frag -o shader.frag.spv
|
||||||
|
|||||||
+1
-1
@@ -9,7 +9,7 @@ vec2 positions[3] = vec2[](
|
|||||||
);
|
);
|
||||||
|
|
||||||
vec3 colors[3] = vec3[](
|
vec3 colors[3] = vec3[](
|
||||||
vec3(1.0, 0.0, 0.0),
|
vec3(0.0, 1.0, 1.0),
|
||||||
vec3(0.0, 1.0, 0.0),
|
vec3(0.0, 1.0, 0.0),
|
||||||
vec3(0.0, 0.0, 1.0)
|
vec3(0.0, 0.0, 1.0)
|
||||||
);
|
);
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -430,13 +430,13 @@ void Vulkan::createGraphicsPipeline(){
|
|||||||
std::vector<char> vertShaderCode;
|
std::vector<char> vertShaderCode;
|
||||||
std::vector<char> fragShaderCode;
|
std::vector<char> fragShaderCode;
|
||||||
try{
|
try{
|
||||||
vertShaderCode = readFile("shaders/vert.spv");
|
vertShaderCode = readFile("shaders/shader.vert.spv");
|
||||||
fragShaderCode = readFile("shaders/frag.spv");
|
fragShaderCode = readFile("shaders/shader.frag.spv");
|
||||||
}
|
}
|
||||||
catch(std::exception e){
|
catch(std::exception e){
|
||||||
std::cout << "Failed to read ./shaders/...\nTrying fallback folders!\n";
|
std::cout << "Failed to read ./shaders/...\nTrying fallback folders!\n";
|
||||||
vertShaderCode = readFile("../shaders/vert.spv");
|
vertShaderCode = readFile("../shaders/shader.vert.spv");
|
||||||
fragShaderCode = readFile("../shaders/frag.spv");
|
fragShaderCode = readFile("../shaders/shader.frag.spv");
|
||||||
}
|
}
|
||||||
|
|
||||||
VkShaderModule vertShaderModule = createShaderModule(vertShaderCode);
|
VkShaderModule vertShaderModule = createShaderModule(vertShaderCode);
|
||||||
@@ -687,7 +687,7 @@ void Vulkan::recordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIn
|
|||||||
renderPassInfo.renderArea.offset = { 0, 0 };
|
renderPassInfo.renderArea.offset = { 0, 0 };
|
||||||
renderPassInfo.renderArea.extent = swapChainExtent;
|
renderPassInfo.renderArea.extent = swapChainExtent;
|
||||||
|
|
||||||
VkClearValue clearColor = {{{0.0f, 0.0f, 0.0f, 1.0f}}}; // Background color after clear (Black 100%)
|
VkClearValue clearColor = {{{0.01f, 0.01f, 0.01f, 1.0f}}}; // Background color after clear (Black 100%)
|
||||||
renderPassInfo.clearValueCount = 1;
|
renderPassInfo.clearValueCount = 1;
|
||||||
renderPassInfo.pClearValues = &clearColor;
|
renderPassInfo.pClearValues = &clearColor;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user