Rework API graphique Vulkan - EnTT pour ECS + Chargement modèle 3D assimp + SDL3 pour events input et fenetre + mesh texture camera transform ok + attention tous les assets nouveaus ne sont pas commités et il y a du code test en dur dans scene addentity + restructuration globale

This commit is contained in:
Tom Ray
2026-03-14 20:24:17 +01:00
parent 7c352bc280
commit 6695d46bcd
672 changed files with 238656 additions and 1821 deletions

View File

@@ -39,16 +39,6 @@ if(UNIX)
# endif()
# ---------------------------------------
# --------- Inclusion de Vulkan ----------
# Vulkan Lib pour charger Vulkan, fournit avec les drivers, donc se trouve toute seul.
# find_package(Vulkan REQUIRED)
# if(VULKAN_FOUND)
# message("lib OpenGL Trouvé")
# else()
# message("lib OpenGL Introuvable")
# endif()
# ---------------------------------------
# ---------- Inclusion de GLM -----------
# GLM Lib pour mathématique, en mode header only.
set(GLMlib_DIR ./lib/CMake/Linux)
@@ -208,12 +198,12 @@ if(UNIX)
# ---------- Inclusion de ASSIMP -----------
# Assimp Lib import modèles 3D.
# find_package(assimp REQUIRED)
# if(assimp_FOUND)
# message("lib ASSIMP Trouvé")
# else()
# message("lib ASSIMP Introuvable")
# endif()
find_package(assimp REQUIRED)
if(assimp_FOUND)
message("lib ASSIMP Trouvé")
else()
message("lib ASSIMP Introuvable")
endif()
# ---------------------------------------
# ---------- Inclusion de ODE -----------
@@ -265,17 +255,158 @@ else()
message("lib Catch2 Introuvable")
endif()
# ---------- Inclusion de SDL3-----------
# la sdl3
find_package(SDL3 REQUIRED)
# These tests can use the Catch2-provided main
if(SDL3_found)
message("lib Catch2 Trouvé")
else()
message("lib Catch2 Introuvable")
endif()
# ---------- Inclusion de Vulkan-----------
# vulkan
# --------- Inclusion de Vulkan ----------
# Vulkan Lib pour charger Vulkan, fournit avec les drivers, donc se trouve toute seul.
find_package(Vulkan REQUIRED)
if(VULKAN_FOUND)
message("lib OpenGL Trouvé")
else()
message("lib OpenGL Introuvable")
endif()
# ---------------------------------------
# ------- Inclusion de SDL2_IMAGE --------
# SDL2_IMAGE Lib pour charger une image
# Les autre plateforme (Linux...) ont un installateur de paquet, la lib se trouve toute seul.
find_package(SDL3_image QUIET)
# #find_library(SDL2_image libSDL2_image)
if(SDL3_image_FOUND)
message("lib SDL3_IMAGE Trouvé")
else()
message("lib SDL3_IMAGE Introuvable")
endif()
# ---------------------------------------
# ------- Inclusion de SDL3_TTF --------
#SDL3_IMAGE Lib pour charger une police d'écriture.
#set(SDL3_ttf_DIR ./lib/CMake/Linux)
# Les autre plateforme (Linux...) ont un installateur de paquet, la lib se trouve toute seul.
find_package(SDL3_ttf QUIET)
#find_library(SDL2_ttf libSDL2_ttf)
if(SDL3_ttf_FOUND)
message("lib SDL3_TTF Trouvé")
else()
message("lib SDL3_TTF Introuvable")
endif()
# ---------------------------------------
# ------- Inclusion de Spirv-cross --------
#Spirv-cross pour metadonnees shader spirv
# set(spirv_cross_core_DIR ./lib/CMake/Linux/spirv-crossConf)
# set(spirv_cross_glsl_DIR ./lib/CMake/Linux/spirv-crossConf)
# Les autre plateforme (Linux...) ont un installateur de paquet, la lib se trouve toute seul.
# find_package(spirv_cross_core QUIET)
# find_package(spirv_cross_glsl QUIET)
#find_library(SDL2_ttf libSDL2_ttf)
# if(spirv_cross_core_FOUND AND spirv_cross_glsl_FOUND)
# message("lib spirv_cross Trouvé")
# else()
# message("lib spirv_cross Introuvable")
# endif()
# ---------------------------------------
# ------- Inclusion de Spirv-cross --------
#Spirv-cross pour metadonnees shader spirv
set(spirvreflectlib_DIR ./lib/CMake/Linux/)
# Les autre plateforme (Linux...) ont un installateur de paquet, la lib se trouve toute seul.
# find_package(spirv_cross_core QUIET)
find_package(spirvreflectlib QUIET)
if(spirvreflectlib_FOUND)
message("lib spirvReflect Trouvé")
else()
message("lib spirvReflect Introuvable")
endif()
# ---------------------------------------
add_library(spirv-reflect STATIC ${SPIRV_EXT_SRC})
# ------- Inclusion de JSONfMC++ --------
# JSONfMC++ Lib pour gestion fichier JSON, en mode header only.
set(VulkanMemoryAllocatorlib_DIR ./lib/CMake/Linux)
find_package(VulkanMemoryAllocatorlib REQUIRED)
if(VulkanMemoryAllocatorlib_FOUND)
message("lib VulkanMemoryAllocator Trouvé")
else()
message("lib VulkanMemoryAllocator Introuvable")
endif()
# ---------------------------------------
endif()
# Chemin executable
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin/${CMAKE_BUILD_TYPE}")
set(PATH_TO_SHADER_BUILD_TYPE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
function(compile_slang_shaders SLANG_FILES OUTPUT_DIR)
set(SLANG_COMPILER ${CMAKE_CURRENT_SOURCE_DIR}/lib/All/slang/bin/slangc)
set(GENERATED_SPV_FILES "")
set (SHADERS_DIR ${PATH_TO_SHADER_BUILD_TYPE}/assets/shaders/slang)
set (ENTRY_POINTS -entry vertMain -entry fragMain)
foreach(SLANG_FILE ${SLANG_FILES})
get_filename_component(FILE_NAME ${SLANG_FILE} NAME_WE)
# Un seul fichier de sortie par shader source
set(OUTPUT_FILE "${OUTPUT_DIR}/${FILE_NAME}.spv")
# Compiler tout le shader en un seul SPIR-V
add_custom_command(
OUTPUT ${OUTPUT_FILE}
COMMAND ${SLANG_COMPILER}
${SLANG_FILE}
-target spirv
-profile spirv_1_4
-emit-spirv-directly
-o ${OUTPUT_FILE}
DEPENDS ${SLANG_FILE}
COMMENT "Compiling Slang shader ${FILE_NAME} → ${OUTPUT_FILE}"
VERBATIM
)
list(APPEND GENERATED_SPV_FILES ${OUTPUT_FILE})
endforeach()
set(GENERATED_SPV_FILES ${GENERATED_SPV_FILES} PARENT_SCOPE)
endfunction()
# On indique que l'on veut un exécutable nommé PROJECT compilé à partir des fichiers décrits par les variables SRCS et HEADERS.
add_library(Engine SHARED ${SRCS_ENGINE} ${SRCS_EXTERNAL_GLAD})
add_executable(${PROJECT} ${SRCS})
add_dependencies(${PROJECT} Engine)
add_executable(CosmicTest ${SRCS_TESTS})
# On indique que l'on veut un exécutable nommé PROJECT compilé à partir des fichiers décrits par les variables SRCS et HEADERS.
file(GLOB_RECURSE SLANG_SHADERS "${PATH_TO_SHADER_BUILD_TYPE}/assets/shaders/slang/*.slang")
compile_slang_shaders("${SLANG_SHADERS}" "${PATH_TO_SHADER_BUILD_TYPE}/assets/shaders/slang/spv")
message(STATUS "GENERATED_SPV_FILES = ${GENERATED_SPV_FILES}")
# Créer la target ICI, au niveau global
if(GENERATED_SPV_FILES)
add_custom_target(CompileSlangShaders ALL
DEPENDS ${GENERATED_SPV_FILES}
)
endif()
add_dependencies(${PROJECT} Engine)
add_dependencies(Engine CompileSlangShaders)
target_link_libraries(CosmicTest PRIVATE Catch2::Catch2WithMain Engine)
# Fichier include
@@ -295,9 +426,12 @@ include_directories(${GLM_INCLUDE_DIRS})
include_directories(${JSONFMCPP_INCLUDE_DIRS})
#ENTT
include_directories(${ENTT_INCLUDE_DIRS})
#include_directories(${SPIRV_INCLUDE_DIRS})
include_directories(${SPIRV_REFLECT_INCLUDE_DIRS})
include_directories(${VMA_INCLUDE_DIRS})
# ASSIMP
#include_directories(${ASSIMP_INCLUDE_DIRS})
include_directories(${ASSIMP_INCLUDE_DIRS})
# ODE
#include_directories(${ODE_INCLUDE_DIRS})
# SNDFILE
@@ -314,21 +448,28 @@ include_directories(${ENTT_INCLUDE_DIRS})
# SDL2
#target_link_libraries(Engine ${SDL2_LIBRARIES})
target_link_libraries(Engine SDL3::SDL3)
# GLEW
#target_link_libraries(Engine ${GLEW_LIBRARIES})
# SDL2_image
#target_link_libraries(Engine SDL2_image)
target_link_libraries(Engine SDL3_image)
# SDL2_ttf
#target_link_libraries(Engine SDL2_ttf)
target_link_libraries(Engine SDL3_ttf)
# Boost
#Vulkan
target_link_libraries(Engine Vulkan::Vulkan)
target_link_libraries(Engine spirv-reflect)
#target_link_libraries(Engine spirv-cross-glsl spirv-cross-core)
# ASSIMP
#target_link_libraries(Engine ${ASSIMP_LIBRARIES})
target_link_libraries(Engine ${ASSIMP_LIBRARIES})
# ODE
@@ -368,7 +509,7 @@ endif()
# Paramètre de compilation
if (UNIX)
set(CMAKE_CXX_FLAGS "-Wall -ldl -fPIC")
set(CMAKE_CXX_FLAGS "-Wall -fPIC")
endif ()
# Valgrind ne marche que pour Linux...