Allows creation of instances of meshes and drawing all of them with single draw call. Instances can have their own transformation data (location, rotation and scale).
63 lines
1.4 KiB
CMake
63 lines
1.4 KiB
CMake
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)
|
|
|
|
cmake_policy(SET CMP0116 NEW)
|
|
function(compile_shader)
|
|
cmake_parse_arguments(PARSE_ARGV 1 arg "" "ENV;FORMAT" "SOURCES")
|
|
foreach(source ${arg_SOURCES})
|
|
message(${source}.${arg_FORMAT})
|
|
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()
|
|
|
|
|
|
|
|
compile_shader(rse_graphics
|
|
ENV opengl
|
|
FORMAT num
|
|
SOURCES
|
|
shaders/shader.vert
|
|
shaders/shader.frag
|
|
)
|
|
|
|
add_library(rse_graphics SHARED shaders/shader.vert.num shaders/shader.frag.num)
|
|
target_include_directories(rse_graphics PRIVATE
|
|
${PROJECT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${CMAKE_SOURCE_DIR}
|
|
${Vulkan_INCLUDE_DIR}
|
|
${glfw3_INCLUDE_DIR}
|
|
${glm_INCLUDE_DIR}
|
|
)
|
|
|
|
|
|
target_sources(rse_graphics PRIVATE
|
|
src/window.cpp
|
|
src/vulkan_base.cpp
|
|
src/vulkan_pipeline.cpp
|
|
src/vulkan_buffers.cpp
|
|
src/vulkan_descriptors.cpp
|
|
src/rse_graphics.cpp
|
|
src/mesh_controller.cpp
|
|
)
|
|
|
|
target_link_libraries(rse_graphics PRIVATE
|
|
rse_utilities
|
|
${Vulkan_LIBRARIES}
|
|
glfw
|
|
glm
|
|
)
|