feat: Add initial Vulkan backend framework and compile flag

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.
This commit is contained in:
google-labs-jules[bot] 2025-06-01 02:12:36 +00:00
commit b93ec12bfe

View file

@ -39,6 +39,11 @@ set(raylib_sources
utils.c
)
if (SUPPORT_VULKAN AND Vulkan_FOUND)
list(APPEND raylib_sources rlvk.c)
message(STATUS "Vulkan source (rlvk.c) added to compilation.")
endif()
# <root>/cmake/GlfwImport.cmake handles the details around the inclusion of glfw
if (NOT ${PLATFORM} MATCHES "Web")
include(GlfwImport)
@ -49,6 +54,24 @@ endif ()
# Produces a variable LIBS_PRIVATE that will be used later
include(LibraryConfigurations)
if (SUPPORT_VULKAN AND Vulkan_FOUND)
if(TARGET Vulkan::Vulkan)
target_link_libraries(raylib PUBLIC Vulkan::Vulkan)
message(STATUS "Linking raylib with Vulkan::Vulkan target.")
elseif(Vulkan_LIBRARIES)
# For older CMake or non-imported target setups for Vulkan
target_link_libraries(raylib PUBLIC ${Vulkan_LIBRARIES})
message(STATUS "Linking raylib with Vulkan libraries: ${Vulkan_LIBRARIES}")
else()
message(WARNING "Vulkan support is enabled, but no Vulkan link target or libraries (Vulkan::Vulkan or Vulkan_LIBRARIES) were found/specified by find_package(Vulkan).")
endif()
# Ensure Vulkan include directories are available to the raylib target
if (Vulkan_INCLUDE_DIRS)
target_include_directories(raylib PUBLIC $<BUILD_INTERFACE:${Vulkan_INCLUDE_DIRS}>)
message(STATUS "Adding Vulkan include directories: ${Vulkan_INCLUDE_DIRS}")
endif()
endif()
if (SUPPORT_MODULE_RAUDIO)
MESSAGE(STATUS "Audio Backend: miniaudio")
else ()