Compare commits
1 Commits
0f415b6ed6
...
855002687f
| Author | SHA1 | Date | |
|---|---|---|---|
| 855002687f |
272
CMakeLists.txt
272
CMakeLists.txt
@ -409,6 +409,266 @@ set_target_properties(libzip_external_lib PROPERTIES
|
|||||||
INTERFACE_LINK_LIBRARIES zlib_external_lib
|
INTERFACE_LINK_LIBRARIES zlib_external_lib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ===========================================
|
||||||
|
# 5) FreeType (v2.14.1) - Зависимость для SDL2_ttf
|
||||||
|
# ===========================================
|
||||||
|
set(FT_VER "2.14.1")
|
||||||
|
set(FREETYPE_ARCHIVE "${THIRDPARTY_DIR}/freetype-${FT_VER}.tar.gz")
|
||||||
|
set(FREETYPE_SRC_DIR "${THIRDPARTY_DIR}/freetype-${FT_VER}")
|
||||||
|
# set(FREETYPE_BUILD_DIR "${FREETYPE_SRC_DIR}/build")
|
||||||
|
set(FREETYPE_BASE_DIR "${FREETYPE_SRC_DIR}/install")
|
||||||
|
|
||||||
|
if(NOT EXISTS "${FREETYPE_ARCHIVE}")
|
||||||
|
log("Downloading FreeType ${FT_VER}...")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://download.savannah.gnu.org/releases/freetype/freetype-${FT_VER}.tar.gz"
|
||||||
|
"${FREETYPE_ARCHIVE}"
|
||||||
|
SHOW_PROGRESS
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${FREETYPE_SRC_DIR}/CMakeLists.txt")
|
||||||
|
log("Extracting FreeType...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E tar xvf "${FREETYPE_ARCHIVE}"
|
||||||
|
WORKING_DIRECTORY "${THIRDPARTY_DIR}"
|
||||||
|
RESULT_VARIABLE _ft_extract_res
|
||||||
|
)
|
||||||
|
if(NOT _ft_extract_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to extract FreeType")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Проверяем наличие установленной библиотеки
|
||||||
|
set(_have_freetype TRUE)
|
||||||
|
foreach(cfg IN LISTS BUILD_CONFIGS)
|
||||||
|
if(NOT EXISTS "${FREETYPE_BASE_DIR}-${cfg}/lib/freetype.lib" AND
|
||||||
|
NOT EXISTS "${FREETYPE_BASE_DIR}-${cfg}/lib/freetyped.lib")
|
||||||
|
set(_have_freetype FALSE)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(NOT _have_freetype)
|
||||||
|
foreach(cfg IN LISTS BUILD_CONFIGS)
|
||||||
|
log("Configuring FreeType (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-G "${CMAKE_GENERATOR}"
|
||||||
|
-S "${FREETYPE_SRC_DIR}"
|
||||||
|
-B "${FREETYPE_SRC_DIR}/build-${cfg}"
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${FREETYPE_BASE_DIR}-${cfg}
|
||||||
|
-DCMAKE_PREFIX_PATH="${ZLIB_INSTALL_DIR};${LIBPNG_INSTALL_DIR}"
|
||||||
|
-DCMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE
|
||||||
|
-DCMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE
|
||||||
|
-DFT_DISABLE_BROTLI=ON
|
||||||
|
-DBUILD_SHARED_LIBS=OFF
|
||||||
|
RESULT_VARIABLE _ft_cfg_res
|
||||||
|
)
|
||||||
|
if(NOT _ft_cfg_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "FreeType configure failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
log("Building FreeType (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} --build "${FREETYPE_SRC_DIR}/build-${cfg}" --config ${cfg}
|
||||||
|
RESULT_VARIABLE _ft_build_res
|
||||||
|
)
|
||||||
|
if(NOT _ft_build_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "FreeType build failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
log("Installing FreeType (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} --install "${FREETYPE_SRC_DIR}/build-${cfg}" --config ${cfg}
|
||||||
|
RESULT_VARIABLE _ft_inst_res
|
||||||
|
)
|
||||||
|
if(NOT _ft_inst_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "FreeType install failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(_ft_debug_lib "")
|
||||||
|
foreach(cand
|
||||||
|
"${FREETYPE_BASE_DIR}-Debug/lib/freetyped.lib"
|
||||||
|
"${FREETYPE_BASE_DIR}-Debug/lib/freetype.lib"
|
||||||
|
)
|
||||||
|
if(EXISTS "${cand}")
|
||||||
|
set(_ft_debug_lib "${cand}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(_ft_release_lib "")
|
||||||
|
foreach(cand
|
||||||
|
"${FREETYPE_BASE_DIR}-Release/lib/freetype.lib"
|
||||||
|
)
|
||||||
|
if(EXISTS "${cand}")
|
||||||
|
set(_ft_release_lib "${cand}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(_ft_debug_lib STREQUAL "" OR _ft_release_lib STREQUAL "")
|
||||||
|
message(FATAL_ERROR "FreeType libs not found in ${FREETYPE_BASE_DIR}-Debug/Release")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(freetype_external_lib UNKNOWN IMPORTED GLOBAL)
|
||||||
|
set_target_properties(freetype_external_lib PROPERTIES
|
||||||
|
IMPORTED_LOCATION_DEBUG "${_ft_debug_lib}"
|
||||||
|
IMPORTED_LOCATION_RELEASE "${_ft_release_lib}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES
|
||||||
|
"$<IF:$<CONFIG:Debug>,${FREETYPE_BASE_DIR}-Debug/include,${FREETYPE_BASE_DIR}-Release/include>"
|
||||||
|
)
|
||||||
|
|
||||||
|
# ===========================================
|
||||||
|
# 6) SDL2_ttf (v2.24.0)
|
||||||
|
# ===========================================
|
||||||
|
set(SDL2TTF_ARCHIVE "${THIRDPARTY_DIR}/SDL2_ttf-release-2.24.0.zip")
|
||||||
|
set(SDL2TTF_SRC_DIR "${THIRDPARTY_DIR}/SDL_ttf-release-2.24.0")
|
||||||
|
set(SDL2TTF_BASE_DIR "${SDL2TTF_SRC_DIR}/install")
|
||||||
|
|
||||||
|
if(NOT EXISTS "${SDL2TTF_ARCHIVE}")
|
||||||
|
log("Downloading SDL2_ttf 2.24.0...")
|
||||||
|
file(DOWNLOAD
|
||||||
|
"https://github.com/libsdl-org/SDL_ttf/archive/refs/tags/release-2.24.0.zip"
|
||||||
|
"${SDL2TTF_ARCHIVE}"
|
||||||
|
SHOW_PROGRESS
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${SDL2TTF_SRC_DIR}/CMakeLists.txt")
|
||||||
|
log("Extracting SDL2_ttf...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E tar xvf "${SDL2TTF_ARCHIVE}"
|
||||||
|
WORKING_DIRECTORY "${THIRDPARTY_DIR}"
|
||||||
|
RESULT_VARIABLE _ttf_extract_res
|
||||||
|
)
|
||||||
|
if(NOT _ttf_extract_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed to extract SDL2_ttf")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(_have_sdl2ttf TRUE)
|
||||||
|
foreach(cfg IN LISTS BUILD_CONFIGS)
|
||||||
|
if(NOT EXISTS "${SDL2TTF_BASE_DIR}-${cfg}/lib/SDL2_ttf.lib" AND
|
||||||
|
NOT EXISTS "${SDL2TTF_BASE_DIR}-${cfg}/lib/SDL2_ttfd.lib")
|
||||||
|
set(_have_sdl2ttf FALSE)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT _have_sdl2ttf)
|
||||||
|
foreach(cfg IN LISTS BUILD_CONFIGS)
|
||||||
|
|
||||||
|
# SDL2 библиотека под конфигурацию
|
||||||
|
if(cfg STREQUAL "Debug")
|
||||||
|
set(_SDL2_LIB "${SDL2_INSTALL_DIR}/lib/SDL2d.lib")
|
||||||
|
else()
|
||||||
|
set(_SDL2_LIB "${SDL2_INSTALL_DIR}/lib/SDL2.lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# FreeType под конфигурацию
|
||||||
|
set(_FT_PREFIX "${FREETYPE_BASE_DIR}-${cfg}")
|
||||||
|
|
||||||
|
set(_FT_LIB "")
|
||||||
|
foreach(cand
|
||||||
|
"${_FT_PREFIX}/lib/freetyped.lib"
|
||||||
|
"${_FT_PREFIX}/lib/freetype.lib"
|
||||||
|
)
|
||||||
|
if(EXISTS "${cand}")
|
||||||
|
set(_FT_LIB "${cand}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(_FT_LIB STREQUAL "")
|
||||||
|
message(FATAL_ERROR "FreeType library not found for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
log("Configuring SDL2_ttf (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
-G "${CMAKE_GENERATOR}"
|
||||||
|
-S "${SDL2TTF_SRC_DIR}"
|
||||||
|
-B "${SDL2TTF_SRC_DIR}/build-${cfg}"
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${SDL2TTF_BASE_DIR}-${cfg}
|
||||||
|
|
||||||
|
-DCMAKE_PREFIX_PATH=${_FT_PREFIX};${SDL2_INSTALL_DIR}
|
||||||
|
|
||||||
|
-DSDL2_LIBRARY=${_SDL2_LIB}
|
||||||
|
-DSDL2_INCLUDE_DIR=${SDL2_INSTALL_DIR}/include/SDL2
|
||||||
|
|
||||||
|
-DFREETYPE_LIBRARY=${_FT_LIB}
|
||||||
|
-DFREETYPE_INCLUDE_DIR=${_FT_PREFIX}/include
|
||||||
|
-DFREETYPE_INCLUDE_DIRS=${_FT_PREFIX}/include
|
||||||
|
|
||||||
|
-DSDL2TTF_VENDORED=OFF
|
||||||
|
-DSDL2TTF_SAMPLES=OFF
|
||||||
|
RESULT_VARIABLE _ttf_cfg_res
|
||||||
|
)
|
||||||
|
if(NOT _ttf_cfg_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "SDL2_ttf configure failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
log("Building SDL2_ttf (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} --build "${SDL2TTF_SRC_DIR}/build-${cfg}" --config ${cfg}
|
||||||
|
RESULT_VARIABLE _ttf_build_res
|
||||||
|
)
|
||||||
|
if(NOT _ttf_build_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "SDL2_ttf build failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
log("Installing SDL2_ttf (${cfg})...")
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} --install "${SDL2TTF_SRC_DIR}/build-${cfg}" --config ${cfg}
|
||||||
|
RESULT_VARIABLE _ttf_inst_res
|
||||||
|
)
|
||||||
|
if(NOT _ttf_inst_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "SDL2_ttf install failed for ${cfg}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(_ttf_debug_lib "")
|
||||||
|
foreach(cand
|
||||||
|
"${SDL2TTF_BASE_DIR}-Debug/lib/SDL2_ttfd.lib"
|
||||||
|
"${SDL2TTF_BASE_DIR}-Debug/lib/SDL2_ttf.lib"
|
||||||
|
)
|
||||||
|
if(EXISTS "${cand}")
|
||||||
|
set(_ttf_debug_lib "${cand}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(_ttf_release_lib "")
|
||||||
|
foreach(cand
|
||||||
|
"${SDL2TTF_BASE_DIR}-Release/lib/SDL2_ttf.lib"
|
||||||
|
)
|
||||||
|
if(EXISTS "${cand}")
|
||||||
|
set(_ttf_release_lib "${cand}")
|
||||||
|
break()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(_ttf_debug_lib STREQUAL "" OR _ttf_release_lib STREQUAL "")
|
||||||
|
message(FATAL_ERROR "SDL2_ttf libs not found in install-Debug / install-Release")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
add_library(SDL2_ttf_external_lib UNKNOWN IMPORTED GLOBAL)
|
||||||
|
set_target_properties(SDL2_ttf_external_lib PROPERTIES
|
||||||
|
IMPORTED_LOCATION_DEBUG "${_ttf_debug_lib}"
|
||||||
|
IMPORTED_LOCATION_RELEASE "${_ttf_release_lib}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set_property(TARGET SDL2_ttf_external_lib PROPERTY INTERFACE_INCLUDE_DIRECTORIES
|
||||||
|
"$<IF:$<CONFIG:Debug>,${SDL2TTF_BASE_DIR}-Debug/include,${SDL2TTF_BASE_DIR}-Release/include>;$<IF:$<CONFIG:Debug>,${SDL2TTF_BASE_DIR}-Debug/include/SDL2,${SDL2TTF_BASE_DIR}-Release/include/SDL2>"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# ===========================================
|
# ===========================================
|
||||||
# Основной проект space-game001
|
# Основной проект space-game001
|
||||||
# ===========================================
|
# ===========================================
|
||||||
@ -472,6 +732,8 @@ target_link_libraries(space-game001 PRIVATE
|
|||||||
libpng_external_lib
|
libpng_external_lib
|
||||||
zlib_external_lib
|
zlib_external_lib
|
||||||
libzip_external_lib
|
libzip_external_lib
|
||||||
|
freetype_external_lib
|
||||||
|
SDL2_ttf_external_lib
|
||||||
)
|
)
|
||||||
|
|
||||||
# Линкуем OpenGL (Windows)
|
# Линкуем OpenGL (Windows)
|
||||||
@ -491,6 +753,10 @@ if (WIN32)
|
|||||||
|
|
||||||
set(LIBZIP_DLL_SRC "$<IF:$<CONFIG:Debug>,${LIBZIP_BASE_DIR}-Debug/bin/zip.dll,${LIBZIP_BASE_DIR}-Release/bin/zip.dll>")
|
set(LIBZIP_DLL_SRC "$<IF:$<CONFIG:Debug>,${LIBZIP_BASE_DIR}-Debug/bin/zip.dll,${LIBZIP_BASE_DIR}-Release/bin/zip.dll>")
|
||||||
|
|
||||||
|
# SDL2_ttf
|
||||||
|
set(SDL2TTF_DLL_SRC "$<IF:$<CONFIG:Debug>,${SDL2TTF_BASE_DIR}-Debug/bin/SDL2_ttfd.dll,${SDL2TTF_BASE_DIR}-Release/bin/SDL2_ttf.dll>")
|
||||||
|
set(SDL2TTF_DLL_DST "$<TARGET_FILE_DIR:space-game001>")
|
||||||
|
|
||||||
add_custom_command(TARGET space-game001 POST_BUILD
|
add_custom_command(TARGET space-game001 POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "Copying DLLs to output folder..."
|
COMMAND ${CMAKE_COMMAND} -E echo "Copying DLLs to output folder..."
|
||||||
|
|
||||||
@ -503,6 +769,11 @@ if (WIN32)
|
|||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
"${LIBZIP_DLL_SRC}"
|
"${LIBZIP_DLL_SRC}"
|
||||||
"$<TARGET_FILE_DIR:space-game001>/zip.dll"
|
"$<TARGET_FILE_DIR:space-game001>/zip.dll"
|
||||||
|
|
||||||
|
# Копируем SDL2_ttf
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
"${SDL2TTF_DLL_SRC}"
|
||||||
|
"${SDL2TTF_DLL_DST}"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -514,6 +785,7 @@ endif()
|
|||||||
set(RUNTIME_RESOURCE_DIRS
|
set(RUNTIME_RESOURCE_DIRS
|
||||||
"resources"
|
"resources"
|
||||||
"shaders"
|
"shaders"
|
||||||
|
"fonts"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Копируем ресурсы и шейдеры в папку exe и в корень build/
|
# Копируем ресурсы и шейдеры в папку exe и в корень build/
|
||||||
|
|||||||
41
Game.cpp
41
Game.cpp
@ -8,6 +8,7 @@
|
|||||||
#include "TextModel.h"
|
#include "TextModel.h"
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <SDL_ttf.h>
|
||||||
|
|
||||||
namespace ZL
|
namespace ZL
|
||||||
{
|
{
|
||||||
@ -195,6 +196,46 @@ void Game::setup() {
|
|||||||
|
|
||||||
renderer.InitOpenGL();
|
renderer.InitOpenGL();
|
||||||
|
|
||||||
|
|
||||||
|
// ===============================
|
||||||
|
// SDL_ttf / FreeType TEST
|
||||||
|
// ===============================
|
||||||
|
if (TTF_Init() != 0)
|
||||||
|
{
|
||||||
|
std::cerr << "[TTF] Init failed: " << TTF_GetError() << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "[TTF] Initialized successfully" << std::endl;
|
||||||
|
|
||||||
|
TTF_Font* testFont = TTF_OpenFont("./fonts/Roboto-Regular.ttf", 32);
|
||||||
|
|
||||||
|
if (!testFont)
|
||||||
|
{
|
||||||
|
std::cerr << "[TTF] OpenFont failed: " << TTF_GetError() << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "[TTF] Font loaded successfully (FreeType OK)" << std::endl;
|
||||||
|
|
||||||
|
SDL_Color white = { 255, 255, 255, 255 };
|
||||||
|
|
||||||
|
SDL_Surface* textSurface =
|
||||||
|
TTF_RenderUTF8_Blended(testFont, "SDL_ttf + FreeType OK", white);
|
||||||
|
|
||||||
|
if (!textSurface)
|
||||||
|
{
|
||||||
|
std::cerr << "[TTF] Render failed: " << TTF_GetError() << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "[TTF] Text rendered successfully" << std::endl;
|
||||||
|
SDL_FreeSurface(textSurface);
|
||||||
|
}
|
||||||
|
|
||||||
|
TTF_CloseFont(testFont);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::drawCubemap()
|
void Game::drawCubemap()
|
||||||
|
|||||||
BIN
fonts/Roboto-Regular.ttf
Normal file
BIN
fonts/Roboto-Regular.ttf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user