From a9b13787be24a3de75a1d9bc0fdc0747d3b156d0 Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Sun, 5 Nov 2017 16:46:28 +0100 Subject: [PATCH] gs-effect: Provide parameter count and index access --- source/gs-effect.cpp | 20 +++++++++++++++----- source/gs-effect.h | 9 +++++---- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/source/gs-effect.cpp b/source/gs-effect.cpp index 4c2f9dd5..4b08e297 100644 --- a/source/gs-effect.cpp +++ b/source/gs-effect.cpp @@ -62,17 +62,27 @@ gs_effect_t* GS::Effect::GetObject() { return m_effect; } -std::vector GS::Effect::GetParameters() { +size_t GS::Effect::CountParameters() { + return (size_t)gs_effect_get_num_params(m_effect); +} + +std::list GS::Effect::GetParameters() { size_t num = gs_effect_get_num_params(m_effect); - std::vector ps; - ps.reserve(num); + std::list ps; for (size_t idx = 0; idx < num; idx++) { - ps.emplace_back(EffectParameter(gs_effect_get_param_by_idx(m_effect, idx))); + ps.emplace_back(GetParameter(idx)); } return ps; } -GS::EffectParameter GS::Effect::GetParameterByName(std::string name) { +GS::EffectParameter GS::Effect::GetParameter(size_t idx) { + gs_eparam_t* param = gs_effect_get_param_by_idx(m_effect, idx); + if (!param) + throw std::invalid_argument("parameter with index not found"); + return EffectParameter(param); +} + +GS::EffectParameter GS::Effect::GetParameter(std::string name) { gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str()); if (!param) throw std::invalid_argument("parameter with name not found"); diff --git a/source/gs-effect.h b/source/gs-effect.h index 85412444..9b2349b0 100644 --- a/source/gs-effect.h +++ b/source/gs-effect.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include extern "C" { #pragma warning( push ) #pragma warning( disable: 4201 ) @@ -90,9 +90,10 @@ namespace GS { gs_effect_t* GetObject(); - std::vector GetParameters(); - EffectParameter GetParameterByName(std::string name); - + size_t CountParameters(); + std::list GetParameters(); + EffectParameter GetParameter(size_t idx); + EffectParameter GetParameter(std::string name); protected: gs_effect_t* m_effect;