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.
30 lines
1 KiB
CMake
30 lines
1 KiB
CMake
target_compile_definitions("raylib" PUBLIC "CF_VULKAN_=0")
|
|
# Adding compile definitions
|
|
target_compile_definitions("raylib" PUBLIC "${PLATFORM_CPP}")
|
|
target_compile_definitions("raylib" PUBLIC "${GRAPHICS}")
|
|
|
|
if (SUPPORT_VULKAN AND Vulkan_FOUND)
|
|
target_compile_definitions("raylib" PUBLIC "CF_VULKAN_=1")
|
|
target_compile_definitions("raylib" PUBLIC "GRAPHICS_API_VULKAN")
|
|
message(STATUS "Vulkan backend enabled via CF_VULKAN_ and GRAPHICS_API_VULKAN")
|
|
endif()
|
|
|
|
function(define_if target variable)
|
|
if(${${variable}})
|
|
message(STATUS "${variable}=${${variable}}")
|
|
target_compile_definitions(${target} PRIVATE "${variable}")
|
|
endif()
|
|
endfunction()
|
|
|
|
if(${CUSTOMIZE_BUILD})
|
|
target_compile_definitions("raylib" PRIVATE EXTERNAL_CONFIG_FLAGS)
|
|
|
|
foreach(FLAG IN LISTS CONFIG_HEADER_FLAGS)
|
|
string(REGEX MATCH "([^=]+)=(.+)" _ ${FLAG})
|
|
define_if("raylib" ${CMAKE_MATCH_1})
|
|
endforeach()
|
|
|
|
foreach(VALUE IN LISTS CONFIG_HEADER_VALUES)
|
|
target_compile_definitions("raylib" PRIVATE ${VALUE})
|
|
endforeach()
|
|
endif()
|