I've introduced the foundational infrastructure for a Vulkan rendering backend in raylib.
Key changes:
- CMake:
- I added a `SUPPORT_VULKAN` option (default OFF) to enable Vulkan.
- It finds the Vulkan SDK and links appropriate libraries when enabled.
- I defined `CF_VULKAN_` (0 by default, 1 if Vulkan enabled) and `GRAPHICS_API_VULKAN` preprocessor macros.
- I updated `LibraryConfigurations.cmake` and `src/CMakeLists.txt` to handle Vulkan as a graphics API.
- Vulkan Abstraction Layer:
- I created `src/rlvk.h` and `src/rlvk.c` with stub implementations for Vulkan rendering functions (e.g., `rlvkInit`, `rlvkClose`, drawing functions). These are compiled only when `SUPPORT_VULKAN` is ON.
- Core Integration:
- `rlgl.h` and `rcore.c` now have conditional code paths for `GRAPHICS_API_VULKAN`.
- `InitWindow` and `CloseWindow` in `rcore.c` call Vulkan-specific platform and backend initialization/deinitialization stubs.
- Platform Layer (GLFW):
- `src/platforms/rcore_desktop_glfw.c` includes stubbed `InitPlatformVulkan` and `ClosePlatformVulkan` to set up GLFW for a Vulkan context (actual Vulkan instance/surface creation is stubbed).
This commit establishes the necessary build system changes and C code structure to allow for the incremental implementation of the Vulkan renderer. Currently, enabling Vulkan will compile the stubs, allowing your application to run but without actual Vulkan rendering. The `CF_VULKAN_` flag controls the compilation and selection of Vulkan as the default renderer when active.
68 lines
2.2 KiB
CMake
68 lines
2.2 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
#this change avoid the warning that appear when we include raylib using Cmake fatch content
|
|
project(raylib)
|
|
|
|
# Avoid excessive expansion of variables in conditionals. In particular, if
|
|
# "PLATFORM" is "DRM" then:
|
|
#
|
|
# if (${PLATFORM} MATCHES "DRM")
|
|
#
|
|
# may expand e.g to:
|
|
#
|
|
# if (/usr/lib/aarch64-linux-gnu/libdrm.so MATCHES "DRM")
|
|
#
|
|
# See https://cmake.org/cmake/help/latest/policy/CMP0054.html
|
|
cmake_policy(SET CMP0054 NEW)
|
|
|
|
# Makes a hidden visibility preset on a static lib respected
|
|
# This is used to hide glfw's symbols from the library exports when building an so/dylib
|
|
# See https://cmake.org/cmake/help/latest/policy/CMP0063.html
|
|
cmake_policy(SET CMP0063 NEW)
|
|
|
|
# Directory for easier includes
|
|
# Anywhere you see include(...) you can check <root>/cmake for that file
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
|
|
# Sets compiler flags and language standard
|
|
include(CompilerFlags)
|
|
|
|
# Registers build options that are exposed to cmake
|
|
option(SUPPORT_VULKAN "Enable Vulkan graphics backend" OFF)
|
|
include(CMakeOptions.txt)
|
|
|
|
if (SUPPORT_VULKAN)
|
|
find_package(Vulkan REQUIRED)
|
|
if (NOT Vulkan_FOUND)
|
|
message(FATAL_ERROR "Vulkan SDK not found, required for SUPPORT_VULKAN option.")
|
|
else()
|
|
message(STATUS "Vulkan SDK found: Headers at ${Vulkan_INCLUDE_DIRS}, Libraries at ${Vulkan_LIBRARIES}")
|
|
endif()
|
|
endif()
|
|
|
|
if (UNIX AND NOT APPLE AND NOT "${PLATFORM}" MATCHES "DRM")
|
|
if (NOT GLFW_BUILD_WAYLAND AND NOT GLFW_BUILD_X11)
|
|
MESSAGE(FATAL_ERROR "Cannot disable both Wayland and X11")
|
|
endif()
|
|
endif()
|
|
|
|
# Main sources directory (the second parameter sets the output directory name to raylib)
|
|
add_subdirectory(src raylib)
|
|
|
|
# Uninstall target, only create when building raylib by itself
|
|
# Avoid conflicting target names when using raylib with other libraries
|
|
if(NOT TARGET uninstall AND PROJECT_IS_TOP_LEVEL)
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
|
endif()
|
|
|
|
if (${BUILD_EXAMPLES})
|
|
MESSAGE(STATUS "Building examples is enabled")
|
|
add_subdirectory(examples)
|
|
endif()
|
|
|
|
enable_testing()
|