Skip to content
Snippets Groups Projects
Verified Commit b48ebd4f authored by Tobias Frisch's avatar Tobias Frisch
Browse files

[#96] Added doxygen comments for features class

parent 263f83d8
No related branches found
No related tags found
1 merge request!97Resolve "Dokumentation vervollständigen"
Pipeline #27563 passed
......@@ -9,6 +9,9 @@
namespace vkcv {
/**
* Class to manage extension and feature requirements, support and usage.
*/
class FeatureManager {
private:
/**
......@@ -330,7 +333,7 @@ namespace vkcv {
/**
* @brief Request specific features for optional or required usage.
* @tparam T Template parameter to use specific base structure types.
* @tparam T Template parameter to use specific base structure types
* @param featureFunction Function or lambda to request specific features
* @param required True, if the @p features are required, else false
* @return @p True, if the requested features could be activated, else @p false
......
......@@ -8,30 +8,84 @@
namespace vkcv {
/**
* Abstract function type to request a feature via the feature manager.
*/
typedef std::function<bool(FeatureManager&)> Feature;
/**
* Class to manage a list of feature requests at once.
*/
class Features {
private:
/**
* List of feature requests.
*/
std::vector<Feature> m_features;
public:
/**
* @brief Constructor of a features instance.
*/
Features() = default;
/**
* @brief Constructor of a features instance with a given list of extension identifier strings.
* @param list List of extension identifier strings
*/
Features(const std::initializer_list<std::string>& list);
/**
* @brief Copy-constructor of a features instance.
* @param other Other features instance
*/
Features(const Features& other) = default;
/**
* @brief Move-constructor of a features instance.
* @param other Other features instance
*/
Features(Features&& other) = default;
/**
* @brief Destructor of a features instance.
*/
~Features() = default;
/**
* @brief Copy-operator of a features instance.
* @param other Other features instance
* @return Reference to the features instance itself
*/
Features& operator=(const Features& other) = default;
/**
* @brief Move-operator of a features instance.
* @param other Other features instance
* @return Reference to the features instance itself
*/
Features& operator=(Features&& other) = default;
/**
* @brief Request a specific extension as required.
* @param extension Extension identifier string
*/
void requireExtension(const std::string& extension);
/**
* @brief Request a specific extension and some of its features as required ( only core Vulkan 1.0 ).
* @param extension Extension identifier string
* @param featureFunction
*/
void requireExtensionFeature(const std::string& extension,
const std::function<void(vk::PhysicalDeviceFeatures&)>& featureFunction);
/**
* @brief Request a specific extension and some of its features as required.
* @tparam T Template parameter to use specific base structure types
* @param extension Extension identifier string
* @param featureFunction Function or lambda to request specific features
*/
template<typename T>
void requireExtensionFeature(const std::string& extension, const std::function<void(T&)>& featureFunction) {
m_features.emplace_back([extension, featureFunction](FeatureManager& featureManager) {
......@@ -43,8 +97,17 @@ namespace vkcv {
});
}
/**
* @brief Request a specific set of features as required ( only core Vulkan 1.0 ).
* @param featureFunction Function or lambda to request specific features
*/
void requireFeature(const std::function<void(vk::PhysicalDeviceFeatures&)>& featureFunction);
/**
* @brief Request a specific set of features as required.
* @tparam T Template parameter to use specific base structure types
* @param featureFunction Function or lambda to request specific features
*/
template<typename T>
void requireFeature(const std::function<void(T&)>& featureFunction) {
m_features.emplace_back([featureFunction](FeatureManager& featureManager) {
......@@ -52,11 +115,26 @@ namespace vkcv {
});
}
/**
* @brief Request a specific extension as optional.
* @param extension Extension identifier string
*/
void tryExtension(const std::string& extension);
/**
* @brief Request a specific extension and some of its features as optional ( only core Vulkan 1.0 ).
* @param extension Extension identifier string
* @param featureFunction Function or lambda to request specific features
*/
void tryExtensionFeature(const std::string& extension,
const std::function<void(vk::PhysicalDeviceFeatures&)>& featureFunction);
/**
* @brief Request a specific extension and some of its features as optional.
* @tparam T Template parameter to use specific base structure types
* @param extension Extension identifier string
* @param featureFunction Function or lambda to request specific features
*/
template<typename T>
void tryExtensionFeature(const std::string& extension, const std::function<void(T&)>& featureFunction) {
m_features.emplace_back([extension, featureFunction](FeatureManager& featureManager) {
......@@ -68,8 +146,17 @@ namespace vkcv {
});
}
/**
* @brief Request a specific set of features as optional ( only core Vulkan 1.0 ).
* @param featureFunction Function or lambda to request specific features
*/
void tryFeature(const std::function<void(vk::PhysicalDeviceFeatures&)>& featureFunction);
/**
* @brief Request a specific set of features as optional.
* @tparam T Template parameter to use specific base structure types
* @param featureFunction Function or lambda to request specific features
*/
template<typename T>
void tryFeature(const std::function<void(T&)>& featureFunction) {
m_features.emplace_back([featureFunction](FeatureManager& featureManager) {
......@@ -77,6 +164,10 @@ namespace vkcv {
});
}
/**
* @brief Return list of feature requests.
* @return List of feature requests
*/
[[nodiscard]]
const std::vector<Feature>& getList() const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment