From 1481e82f3491e2ae05a06d023f34869025f2831d Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Tue, 4 Jul 2023 21:51:16 -0600 Subject: [PATCH] Implement `sf::Vulkan` functions https://github.com/SFML/SFML/pull/1557 --- include/SFML/Window/Vulkan.h | 67 ++++++++++++++++++++++++++++++++++ src/SFML/Window/CMakeLists.txt | 2 + src/SFML/Window/Vulkan.cpp | 54 +++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 include/SFML/Window/Vulkan.h create mode 100644 src/SFML/Window/Vulkan.cpp diff --git a/include/SFML/Window/Vulkan.h b/include/SFML/Window/Vulkan.h new file mode 100644 index 00000000..ee4e373b --- /dev/null +++ b/include/SFML/Window/Vulkan.h @@ -0,0 +1,67 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include + + +typedef void (*sfVulkanFunctionPointer)(); + +//////////////////////////////////////////////////////////// +/// \brief Tell whether or not the system supports Vulkan +/// +/// This function should always be called before using +/// the Vulkan features. If it returns false, then +/// any attempt to use Vulkan will fail. +/// +/// If only compute is required, set \a requireGraphics +/// to false to skip checking for the extensions necessary +/// for graphics rendering. +/// +/// \param requireGraphics +/// +/// \return True if Vulkan is supported, false otherwise +/// +//////////////////////////////////////////////////////////// +CSFML_WINDOW_API sfBool sfVulkan_isAvailable(sfBool requireGraphics); + +//////////////////////////////////////////////////////////// +/// \brief Get the address of a Vulkan function +/// +/// \param name Name of the function to get the address of +/// +/// \return Address of the Vulkan function, 0 on failure +/// +//////////////////////////////////////////////////////////// +CSFML_WINDOW_API sfVulkanFunctionPointer sfVulkan_getFunction(const char* name); + +//////////////////////////////////////////////////////////// +/// \brief Get Vulkan instance extensions required for graphics +/// +/// \return Vulkan instance extensions required for graphics +/// +//////////////////////////////////////////////////////////// +CSFML_WINDOW_API const char* const* sfVulkan_getGraphicsRequiredInstanceExtensions(); diff --git a/src/SFML/Window/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt index b1a2a69d..0baef8e1 100644 --- a/src/SFML/Window/CMakeLists.txt +++ b/src/SFML/Window/CMakeLists.txt @@ -29,6 +29,8 @@ set(SRC ${INCROOT}/Types.h ${SRCROOT}/VideoMode.cpp ${INCROOT}/VideoMode.h + ${SRCROOT}/Vulkan.cpp + ${INCROOT}/Vulkan.h ${SRCROOT}/Window.cpp ${SRCROOT}/WindowStruct.h ${INCROOT}/Window.h diff --git a/src/SFML/Window/Vulkan.cpp b/src/SFML/Window/Vulkan.cpp new file mode 100644 index 00000000..7b02b34c --- /dev/null +++ b/src/SFML/Window/Vulkan.cpp @@ -0,0 +1,54 @@ +//////////////////////////////////////////////////////////// +// +// SFML - Simple and Fast Multimedia Library +// Copyright (C) 2007-2023 Laurent Gomila (laurent@sfml-dev.org) +// +// This software is provided 'as-is', without any express or implied warranty. +// In no event will the authors be held liable for any damages arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it freely, +// subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; +// you must not claim that you wrote the original software. +// If you use this software in a product, an acknowledgment +// in the product documentation would be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, +// and must not be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source distribution. +// +//////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////// +// Headers +//////////////////////////////////////////////////////////// +#include +#include +#include + +#include +#include + + +//////////////////////////////////////////////////////////// +sfBool sfVulkan_isAvailable(sfBool requireGraphics) +{ + return sf::Vulkan::isAvailable(requireGraphics); +} + + +//////////////////////////////////////////////////////////// +sfVulkanFunctionPointer sfVulkan_getFunction(const char* name) +{ + return sf::Vulkan::getFunction(name); +} + + +//////////////////////////////////////////////////////////// +const char* const* sfVulkan_getGraphicsRequiredInstanceExtensions() +{ + return &sf::Vulkan::getGraphicsRequiredInstanceExtensions()[0]; +}