Skip to content

Commit

Permalink
PostProcessing/FX: Preserve option declaration order
Browse files Browse the repository at this point in the history
  • Loading branch information
stenzek committed Jul 26, 2024
1 parent bf1b023 commit 3282366
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
4 changes: 3 additions & 1 deletion src/util/postprocessing_shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,14 @@ class Shader
u32 target_height) = 0;

protected:
using OptionList = std::vector<ShaderOption>;

static void ParseKeyValue(std::string_view line, std::string_view* key, std::string_view* value);

virtual void OnOptionChanged(const ShaderOption& option);

std::string m_name;
std::vector<ShaderOption> m_options;
OptionList m_options;
};

} // namespace PostProcessing
14 changes: 9 additions & 5 deletions src/util/postprocessing_shader_fx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -746,13 +746,17 @@ bool PostProcessing::ReShadeFXShader::CreateOptions(const reshadefx::module& mod
}
}

m_options.push_back(std::move(opt));
OptionList::iterator iter = std::find_if(m_options.begin(), m_options.end(),
[&opt](const ShaderOption& it) { return it.category == opt.category; });
if (iter != m_options.end())
{
// insert at the end of this category
while (iter != m_options.end() && iter->category == opt.category)
++iter;
}
m_options.insert(iter, std::move(opt));
}

// sort based on category
std::sort(m_options.begin(), m_options.end(),
[](const ShaderOption& lhs, const ShaderOption& rhs) { return lhs.category < rhs.category; });

m_uniforms_size = mod.total_uniform_size;
DEV_LOG("{}: {} options", m_filename, m_options.size());
return true;
Expand Down

0 comments on commit 3282366

Please sign in to comment.