Adds shader class to core and modifies the renderer to use it, while also adding profiling macros and fixing resize issues. The changes ensure the render target is resized only when the requested size is different from the current size and also clears the screen to a dark gray color.
150 lines
3.6 KiB
CMake
150 lines
3.6 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(Onyx VERSION 0.1.0 LANGUAGES C CXX)
|
|
|
|
# Build type (for single-config generators like Make/Ninja)
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the build type (Debug or Release)" FORCE)
|
|
endif()
|
|
|
|
# Language standards
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
set(CMAKE_C_STANDARD 23)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
set(CMAKE_C_EXTENSIONS OFF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
include_directories(${CMAKE_BINARY_DIR}/generated)
|
|
|
|
|
|
|
|
# --- Output directories for multi-config builds ---
|
|
foreach(OUTPUTCONFIG IN ITEMS Debug Release)
|
|
string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG_UPPER)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/bin/${OUTPUTCONFIG})
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib/${OUTPUTCONFIG})
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${CMAKE_BINARY_DIR}/lib/${OUTPUTCONFIG})
|
|
endforeach()
|
|
|
|
# --- External Libraries ---
|
|
include(FetchContent)
|
|
|
|
# GLFW
|
|
FetchContent_Declare(
|
|
glfw
|
|
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
|
GIT_TAG latest
|
|
)
|
|
FetchContent_MakeAvailable(glfw)
|
|
|
|
|
|
|
|
# ImGui (Docking)
|
|
FetchContent_Declare(
|
|
imgui
|
|
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
|
GIT_TAG docking
|
|
)
|
|
FetchContent_MakeAvailable(imgui)
|
|
|
|
# Required packages
|
|
find_package(yaml-cpp REQUIRED)
|
|
find_package(GLEW REQUIRED)
|
|
|
|
# --- ImGui Static Library ---
|
|
add_library(ImGui STATIC
|
|
${imgui_SOURCE_DIR}/imgui.cpp
|
|
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
|
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
|
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
|
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
|
|
)
|
|
|
|
target_include_directories(ImGui PUBLIC
|
|
${imgui_SOURCE_DIR}
|
|
${imgui_SOURCE_DIR}/backends
|
|
)
|
|
|
|
target_compile_definitions(ImGui PUBLIC
|
|
IMGUI_IMPL_OPENGL_LOADER_GLEW
|
|
)
|
|
|
|
# --- Core Engine Library ---
|
|
file(GLOB_RECURSE CORE_SOURCES CONFIGURE_DEPENDS
|
|
src/core/*.cpp
|
|
src/core/*.h
|
|
)
|
|
|
|
add_library(Core STATIC
|
|
${CORE_SOURCES}
|
|
src/core/systems/MACROS.h
|
|
src/core/renderer/Renderer.cpp
|
|
src/core/renderer/Renderer.h
|
|
src/core/systems/AssetManager.cpp
|
|
src/core/systems/AssetManager.h
|
|
src/core/systems/Asset.cpp
|
|
src/core/systems/Asset.h
|
|
src/core/systems/assets/Texture2D.cpp
|
|
src/core/systems/assets/Texture2D.h
|
|
src/core/systems/Shader.cpp
|
|
)
|
|
|
|
target_include_directories(Core PUBLIC src/core)
|
|
|
|
# Add _DEBUG define only for debug builds
|
|
target_compile_definitions(Core PRIVATE
|
|
$<$<CONFIG:Debug>:_DEBUG>
|
|
)
|
|
|
|
# --- Editor Executable ---
|
|
file(GLOB_RECURSE APP_SOURCES CONFIGURE_DEPENDS
|
|
src/editor/*.cpp
|
|
src/editor/*.h
|
|
)
|
|
|
|
add_executable(Editor ${APP_SOURCES}
|
|
main.cpp
|
|
src/editor/Editor.cpp
|
|
src/editor/Editor.h
|
|
src/editor/Windows/LoggerWindow.cpp
|
|
src/editor/Windows/LoggerWindow.h
|
|
src/editor/Windows/Viewport.cpp
|
|
src/editor/Windows/Viewport.h
|
|
src/editor/Windows/FileBrowser.cpp
|
|
src/editor/Windows/FileBrowser.h
|
|
)
|
|
|
|
target_include_directories(Editor PRIVATE
|
|
src/editor
|
|
src/core
|
|
)
|
|
|
|
target_link_libraries(Editor PRIVATE
|
|
Core
|
|
ImGui
|
|
glfw
|
|
GLEW::GLEW
|
|
yaml-cpp
|
|
${CMAKE_DL_LIBS}
|
|
)
|
|
|
|
target_compile_definitions(Editor PRIVATE
|
|
$<$<CONFIG:Debug>:_DEBUG>
|
|
)
|
|
|
|
# --- Install ---
|
|
install(TARGETS Editor RUNTIME DESTINATION bin)
|