mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-14 11:49:59 +01:00
Bugfix and clean code image filters ui, save and load
This commit is contained in:
161
ImGuiVisitor.cpp
161
ImGuiVisitor.cpp
@@ -749,6 +749,7 @@ void ImGuiVisitor::visit (ResampleFilter& f)
|
|||||||
f.setFactor( 0 );
|
f.setFactor( 0 );
|
||||||
oss << "Resample " << ResampleFilter::factor_label[0];
|
oss << "Resample " << ResampleFilter::factor_label[0];
|
||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
|
info.reset();
|
||||||
}
|
}
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||||
@@ -757,6 +758,33 @@ void ImGuiVisitor::visit (ResampleFilter& f)
|
|||||||
f.setFactor( m );
|
f.setFactor( m );
|
||||||
oss << "Resample " << ResampleFilter::factor_label[m];
|
oss << "Resample " << ResampleFilter::factor_label[m];
|
||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
|
info.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void list_parameters_(ImageFilter &f, std::ostringstream &oss)
|
||||||
|
{
|
||||||
|
std::map<std::string, float> filter_parameters = f.program().parameters();
|
||||||
|
for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
||||||
|
{
|
||||||
|
ImGui::PushID( param->first.c_str() );
|
||||||
|
float v = param->second;
|
||||||
|
if (ImGuiToolkit::IconButton(13, 14)) {
|
||||||
|
v = 0.f;
|
||||||
|
f.setProgramParameter(param->first, v);
|
||||||
|
oss << " : " << param->first << " " << std::setprecision(3) << v;
|
||||||
|
Action::manager().store(oss.str());
|
||||||
|
}
|
||||||
|
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
||||||
|
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||||
|
if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
||||||
|
f.setProgramParameter(param->first, v);
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemDeactivatedAfterEdit()) {
|
||||||
|
oss << " : " << param->first << " " << std::setprecision(3) <<param->second;
|
||||||
|
Action::manager().store(oss.str());
|
||||||
|
}
|
||||||
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -780,30 +808,8 @@ void ImGuiVisitor::visit (BlurFilter& f)
|
|||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// List of parameters
|
// List of parameters
|
||||||
std::map<std::string, float> filter_parameters = f.program().parameters();
|
list_parameters_(f, oss);
|
||||||
for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
|
||||||
{
|
|
||||||
ImGui::PushID( param->first.c_str() );
|
|
||||||
float v = param->second;
|
|
||||||
if (ImGuiToolkit::IconButton(13, 14)) {
|
|
||||||
v = 0.f;
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
if (ImGui::IsItemDeactivatedAfterEdit()) {
|
|
||||||
oss << BlurFilter::method_label[ f.method() ];
|
|
||||||
oss << " : " << param->first << " " << std::setprecision(3) <<param->second;
|
|
||||||
Action::manager().store(oss.str());
|
|
||||||
}
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiVisitor::visit (SharpenFilter& f)
|
void ImGuiVisitor::visit (SharpenFilter& f)
|
||||||
@@ -826,29 +832,8 @@ void ImGuiVisitor::visit (SharpenFilter& f)
|
|||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// List of parameters
|
// List of parameters
|
||||||
std::map<std::string, float> filter_parameters = f.program().parameters();
|
list_parameters_(f, oss);
|
||||||
for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
|
||||||
{
|
|
||||||
ImGui::PushID( param->first.c_str() );
|
|
||||||
float v = param->second;
|
|
||||||
if (ImGuiToolkit::IconButton(13, 14)) {
|
|
||||||
v = 0.f;
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
if (ImGui::IsItemDeactivatedAfterEdit()) {
|
|
||||||
oss << SharpenFilter::method_label[ f.method() ];
|
|
||||||
oss << " : " << param->first << " " << std::setprecision(3) <<param->second;
|
|
||||||
Action::manager().store(oss.str());
|
|
||||||
}
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiVisitor::visit (SmoothFilter& f)
|
void ImGuiVisitor::visit (SmoothFilter& f)
|
||||||
@@ -872,29 +857,8 @@ void ImGuiVisitor::visit (SmoothFilter& f)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List of parameters
|
// List of parameters
|
||||||
std::map<std::string, float> filter_parameters = f.program().parameters();
|
list_parameters_(f, oss);
|
||||||
for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
|
||||||
{
|
|
||||||
ImGui::PushID( param->first.c_str() );
|
|
||||||
float v = param->second;
|
|
||||||
if (ImGuiToolkit::IconButton(13, 14)) {
|
|
||||||
v = 0.f;
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
}
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
if (ImGui::IsItemDeactivatedAfterEdit()) {
|
|
||||||
oss << EdgeFilter::method_label[ f.method() ];
|
|
||||||
oss << " : " << param->first << " " << std::setprecision(3) <<param->second;
|
|
||||||
Action::manager().store(oss.str());
|
|
||||||
}
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ImGuiVisitor::visit (EdgeFilter& f)
|
void ImGuiVisitor::visit (EdgeFilter& f)
|
||||||
{
|
{
|
||||||
@@ -916,29 +880,8 @@ void ImGuiVisitor::visit (EdgeFilter& f)
|
|||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// List of parameters
|
// List of parameters
|
||||||
std::map<std::string, float> filter_parameters = f.program().parameters();
|
list_parameters_(f, oss);
|
||||||
for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
|
||||||
{
|
|
||||||
ImGui::PushID( param->first.c_str() );
|
|
||||||
float v = param->second;
|
|
||||||
if (ImGuiToolkit::IconButton(13, 14)) {
|
|
||||||
v = 0.f;
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
|
||||||
f.setProgramParameter(param->first, v);
|
|
||||||
}
|
|
||||||
if (ImGui::IsItemDeactivatedAfterEdit()) {
|
|
||||||
oss << EdgeFilter::method_label[ f.method() ];
|
|
||||||
oss << " : " << param->first << " " << std::setprecision(3) <<param->second;
|
|
||||||
Action::manager().store(oss.str());
|
|
||||||
}
|
|
||||||
ImGui::PopID();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiVisitor::visit (AlphaFilter& f)
|
void ImGuiVisitor::visit (AlphaFilter& f)
|
||||||
@@ -961,7 +904,6 @@ void ImGuiVisitor::visit (AlphaFilter& f)
|
|||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// List of parameters
|
// List of parameters
|
||||||
std::map<std::string, float> filter_parameters = f.program().parameters();
|
std::map<std::string, float> filter_parameters = f.program().parameters();
|
||||||
|
|
||||||
@@ -1033,42 +975,6 @@ void ImGuiVisitor::visit (ImageFilter& f)
|
|||||||
FilteringProgram target;
|
FilteringProgram target;
|
||||||
f.setProgram( target );
|
f.setProgram( target );
|
||||||
}
|
}
|
||||||
// ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
// ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
// if (ImGui::BeginCombo("Algorithm", f.program().name().c_str()) )
|
|
||||||
// {
|
|
||||||
// for (auto p = FilteringProgram::presets.begin(); p != FilteringProgram::presets.end(); ++p){
|
|
||||||
// if (ImGui::Selectable( p->name().c_str() )) {
|
|
||||||
// // apply the selected filter to the source
|
|
||||||
// f.setProgram( *p );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ImGui::EndCombo();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // List of parameters
|
|
||||||
// std::map<std::string, float> filter_parameters = f.program().parameters();
|
|
||||||
// for (auto param = filter_parameters.begin(); param != filter_parameters.end(); ++param)
|
|
||||||
// {
|
|
||||||
// ImGui::PushID( param->first.c_str() );
|
|
||||||
// float v = param->second;
|
|
||||||
// if (ImGuiToolkit::IconButton(13, 14)) {
|
|
||||||
// v = 0.f;
|
|
||||||
// f.setProgramParameter(param->first, v);
|
|
||||||
// }
|
|
||||||
// ImGui::SameLine(0, IMGUI_SAME_LINE);
|
|
||||||
// ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
|
||||||
// if (ImGui::SliderFloat( param->first.c_str(), &v, 0.f, 1.f, "%.2f")) {
|
|
||||||
// f.setProgramParameter(param->first, v);
|
|
||||||
// }
|
|
||||||
// if (ImGui::IsItemDeactivatedAfterEdit()) {
|
|
||||||
// // TODO UNDO
|
|
||||||
// // std::ostringstream oss;
|
|
||||||
// // oss << "Delay " << std::setprecision(3) << d << " s";
|
|
||||||
// // Action::manager().store(oss.str());
|
|
||||||
// }
|
|
||||||
// ImGui::PopID();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Open Editor
|
// Open Editor
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
||||||
@@ -1108,6 +1014,7 @@ void ImGuiVisitor::visit (CloneSource& s)
|
|||||||
s.setFilter( FrameBufferFilter::FILTER_PASSTHROUGH );
|
s.setFilter( FrameBufferFilter::FILTER_PASSTHROUGH );
|
||||||
oss << ": Filter None";
|
oss << ": Filter None";
|
||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
|
info.reset();
|
||||||
}
|
}
|
||||||
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
ImGui::SameLine(0, IMGUI_SAME_LINE);
|
||||||
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
|
||||||
@@ -1116,6 +1023,7 @@ void ImGuiVisitor::visit (CloneSource& s)
|
|||||||
s.setFilter( FrameBufferFilter::Type(type) );
|
s.setFilter( FrameBufferFilter::Type(type) );
|
||||||
oss << ": Filter " << FrameBufferFilter::type_label[type];
|
oss << ": Filter " << FrameBufferFilter::type_label[type];
|
||||||
Action::manager().store(oss.str());
|
Action::manager().store(oss.str());
|
||||||
|
info.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
// filter options
|
// filter options
|
||||||
@@ -1191,7 +1099,6 @@ void ImGuiVisitor::visit (DeviceSource& s)
|
|||||||
}
|
}
|
||||||
ImGui::EndCombo();
|
ImGui::EndCombo();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGuiVisitor::visit (NetworkSource& s)
|
void ImGuiVisitor::visit (NetworkSource& s)
|
||||||
|
|||||||
@@ -1227,14 +1227,9 @@ void SessionLoader::visit (ResampleFilter& f)
|
|||||||
f.setFactor(m);
|
f.setFactor(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (BlurFilter& f)
|
std::map< std::string, float > get_parameters_(XMLElement* parameters)
|
||||||
{
|
{
|
||||||
int m = 0;
|
|
||||||
xmlCurrent_->QueryIntAttribute("method", &m);
|
|
||||||
f.setMethod(m);
|
|
||||||
|
|
||||||
std::map< std::string, float > filter_params;
|
std::map< std::string, float > filter_params;
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
|
||||||
if (parameters) {
|
if (parameters) {
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
XMLElement* param = parameters->FirstChildElement("uniform");
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
for( ; param ; param = param->NextSiblingElement())
|
||||||
@@ -1247,8 +1242,17 @@ void SessionLoader::visit (BlurFilter& f)
|
|||||||
filter_params[name] = val;
|
filter_params[name] = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return filter_params;
|
||||||
|
}
|
||||||
|
|
||||||
f.setProgramParameters(filter_params);
|
void SessionLoader::visit (BlurFilter& f)
|
||||||
|
{
|
||||||
|
// blur specific
|
||||||
|
int m = 0;
|
||||||
|
xmlCurrent_->QueryIntAttribute("method", &m);
|
||||||
|
f.setMethod(m);
|
||||||
|
// image filter parameters
|
||||||
|
f.setProgramParameters( get_parameters_(xmlCurrent_->FirstChildElement("parameters")) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (SharpenFilter& f)
|
void SessionLoader::visit (SharpenFilter& f)
|
||||||
@@ -1256,23 +1260,8 @@ void SessionLoader::visit (SharpenFilter& f)
|
|||||||
int m = 0;
|
int m = 0;
|
||||||
xmlCurrent_->QueryIntAttribute("method", &m);
|
xmlCurrent_->QueryIntAttribute("method", &m);
|
||||||
f.setMethod(m);
|
f.setMethod(m);
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params;
|
f.setProgramParameters( get_parameters_(xmlCurrent_->FirstChildElement("parameters")) );
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
|
||||||
if (parameters) {
|
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
|
||||||
{
|
|
||||||
float val = 0.f;
|
|
||||||
param->QueryFloatAttribute("value", &val);
|
|
||||||
const char * name;
|
|
||||||
param->QueryStringAttribute("name", &name);
|
|
||||||
if (name)
|
|
||||||
filter_params[name] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f.setProgramParameters(filter_params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (SmoothFilter& f)
|
void SessionLoader::visit (SmoothFilter& f)
|
||||||
@@ -1280,23 +1269,8 @@ void SessionLoader::visit (SmoothFilter& f)
|
|||||||
int m = 0;
|
int m = 0;
|
||||||
xmlCurrent_->QueryIntAttribute("method", &m);
|
xmlCurrent_->QueryIntAttribute("method", &m);
|
||||||
f.setMethod(m);
|
f.setMethod(m);
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params;
|
f.setProgramParameters( get_parameters_(xmlCurrent_->FirstChildElement("parameters")) );
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
|
||||||
if (parameters) {
|
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
|
||||||
{
|
|
||||||
float val = 0.f;
|
|
||||||
param->QueryFloatAttribute("value", &val);
|
|
||||||
const char * name;
|
|
||||||
param->QueryStringAttribute("name", &name);
|
|
||||||
if (name)
|
|
||||||
filter_params[name] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f.setProgramParameters(filter_params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (EdgeFilter& f)
|
void SessionLoader::visit (EdgeFilter& f)
|
||||||
@@ -1304,23 +1278,8 @@ void SessionLoader::visit (EdgeFilter& f)
|
|||||||
int m = 0;
|
int m = 0;
|
||||||
xmlCurrent_->QueryIntAttribute("method", &m);
|
xmlCurrent_->QueryIntAttribute("method", &m);
|
||||||
f.setMethod(m);
|
f.setMethod(m);
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params;
|
f.setProgramParameters( get_parameters_(xmlCurrent_->FirstChildElement("parameters")) );
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
|
||||||
if (parameters) {
|
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
|
||||||
{
|
|
||||||
float val = 0.f;
|
|
||||||
param->QueryFloatAttribute("value", &val);
|
|
||||||
const char * name;
|
|
||||||
param->QueryStringAttribute("name", &name);
|
|
||||||
if (name)
|
|
||||||
filter_params[name] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f.setProgramParameters(filter_params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (AlphaFilter& f)
|
void SessionLoader::visit (AlphaFilter& f)
|
||||||
@@ -1328,40 +1287,24 @@ void SessionLoader::visit (AlphaFilter& f)
|
|||||||
int m = 0;
|
int m = 0;
|
||||||
xmlCurrent_->QueryIntAttribute("operation", &m);
|
xmlCurrent_->QueryIntAttribute("operation", &m);
|
||||||
f.setOperation(m);
|
f.setOperation(m);
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params;
|
f.setProgramParameters( get_parameters_(xmlCurrent_->FirstChildElement("parameters")) );
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
|
||||||
if (parameters) {
|
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
|
||||||
{
|
|
||||||
float val = 0.f;
|
|
||||||
param->QueryFloatAttribute("value", &val);
|
|
||||||
const char * name;
|
|
||||||
param->QueryStringAttribute("name", &name);
|
|
||||||
if (name)
|
|
||||||
filter_params[name] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f.setProgramParameters(filter_params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionLoader::visit (ImageFilter& f)
|
void SessionLoader::visit (ImageFilter& f)
|
||||||
{
|
{
|
||||||
const char * filter_name;
|
const char * filter_name;
|
||||||
std::pair< std::string, std::string > filter_codes;
|
std::pair< std::string, std::string > filter_codes;
|
||||||
std::map< std::string, float > filter_params;
|
|
||||||
|
|
||||||
xmlCurrent_->QueryStringAttribute("name", &filter_name);
|
xmlCurrent_->QueryStringAttribute("name", &filter_name);
|
||||||
|
|
||||||
|
// image filter code
|
||||||
XMLElement* firstpass = xmlCurrent_->FirstChildElement("firstpass");
|
XMLElement* firstpass = xmlCurrent_->FirstChildElement("firstpass");
|
||||||
if (firstpass) {
|
if (firstpass) {
|
||||||
const char * code = firstpass->GetText();
|
const char * code = firstpass->GetText();
|
||||||
if (code)
|
if (code)
|
||||||
filter_codes.first = std::string(code);
|
filter_codes.first = std::string(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLElement* secondpass = xmlCurrent_->FirstChildElement("secondpass");
|
XMLElement* secondpass = xmlCurrent_->FirstChildElement("secondpass");
|
||||||
if (secondpass) {
|
if (secondpass) {
|
||||||
const char * code = secondpass->GetText();
|
const char * code = secondpass->GetText();
|
||||||
@@ -1369,20 +1312,10 @@ void SessionLoader::visit (ImageFilter& f)
|
|||||||
filter_codes.second = std::string(code);
|
filter_codes.second = std::string(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLElement* parameters = xmlCurrent_->FirstChildElement("parameters");
|
// image filter parameters
|
||||||
if (parameters) {
|
std::map< std::string, float > filter_params = get_parameters_(xmlCurrent_->FirstChildElement("parameters"));
|
||||||
XMLElement* param = parameters->FirstChildElement("uniform");
|
|
||||||
for( ; param ; param = param->NextSiblingElement())
|
|
||||||
{
|
|
||||||
float val = 0.f;
|
|
||||||
param->QueryFloatAttribute("value", &val);
|
|
||||||
const char * name;
|
|
||||||
param->QueryStringAttribute("name", &name);
|
|
||||||
if (name)
|
|
||||||
filter_params[name] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// set image filter program and parameters
|
||||||
f.setProgram( FilteringProgram(filter_name, filter_codes.first, filter_codes.second, filter_params) );
|
f.setProgram( FilteringProgram(filter_name, filter_codes.first, filter_codes.second, filter_params) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -693,93 +693,65 @@ void SessionVisitor::visit (ResampleFilter& f)
|
|||||||
xmlCurrent_->SetAttribute("factor", (int) f.factor());
|
xmlCurrent_->SetAttribute("factor", (int) f.factor());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (BlurFilter& f)
|
XMLElement *list_parameters_(tinyxml2::XMLDocument *doc, std::map< std::string, float > filter_params)
|
||||||
{
|
{
|
||||||
xmlCurrent_->SetAttribute("method", (int) f.method());
|
XMLElement *parameters = doc->NewElement( "parameters" );
|
||||||
|
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
||||||
{
|
{
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
XMLElement *param = doc->NewElement( "uniform" );
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
param->SetAttribute("name", p->first.c_str() );
|
||||||
param->SetAttribute("value", p->second );
|
param->SetAttribute("value", p->second );
|
||||||
parameters->InsertEndChild(param);
|
parameters->InsertEndChild(param);
|
||||||
}
|
}
|
||||||
|
return parameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SessionVisitor::visit (BlurFilter& f)
|
||||||
|
{
|
||||||
|
// blur specific
|
||||||
|
xmlCurrent_->SetAttribute("method", (int) f.method());
|
||||||
|
// image filter parameters
|
||||||
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (SharpenFilter& f)
|
void SessionVisitor::visit (SharpenFilter& f)
|
||||||
{
|
{
|
||||||
|
// sharpen specific
|
||||||
xmlCurrent_->SetAttribute("method", (int) f.method());
|
xmlCurrent_->SetAttribute("method", (int) f.method());
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
|
||||||
{
|
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
|
||||||
param->SetAttribute("value", p->second );
|
|
||||||
parameters->InsertEndChild(param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (SmoothFilter& f)
|
void SessionVisitor::visit (SmoothFilter& f)
|
||||||
{
|
{
|
||||||
|
// smooth specific
|
||||||
xmlCurrent_->SetAttribute("method", (int) f.method());
|
xmlCurrent_->SetAttribute("method", (int) f.method());
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
|
||||||
{
|
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
|
||||||
param->SetAttribute("value", p->second );
|
|
||||||
parameters->InsertEndChild(param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (EdgeFilter& f)
|
void SessionVisitor::visit (EdgeFilter& f)
|
||||||
{
|
{
|
||||||
|
// edge specific
|
||||||
xmlCurrent_->SetAttribute("method", (int) f.method());
|
xmlCurrent_->SetAttribute("method", (int) f.method());
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
|
||||||
{
|
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
|
||||||
param->SetAttribute("value", p->second );
|
|
||||||
parameters->InsertEndChild(param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (AlphaFilter& f)
|
void SessionVisitor::visit (AlphaFilter& f)
|
||||||
{
|
{
|
||||||
|
// alpha specific
|
||||||
xmlCurrent_->SetAttribute("operation", (int) f.operation());
|
xmlCurrent_->SetAttribute("operation", (int) f.operation());
|
||||||
|
// image filter parameters
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
|
||||||
{
|
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
|
||||||
param->SetAttribute("value", p->second );
|
|
||||||
parameters->InsertEndChild(param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (ImageFilter& f)
|
void SessionVisitor::visit (ImageFilter& f)
|
||||||
{
|
{
|
||||||
xmlCurrent_->SetAttribute("name", f.program().name().c_str() );
|
xmlCurrent_->SetAttribute("name", f.program().name().c_str() );
|
||||||
|
|
||||||
|
// image filter code
|
||||||
std::pair< std::string, std::string > filter_codes = f.program().code();
|
std::pair< std::string, std::string > filter_codes = f.program().code();
|
||||||
std::map< std::string, float > filter_params = f.program().parameters();
|
|
||||||
|
|
||||||
XMLElement *firstpass = xmlDoc_->NewElement( "firstpass" );
|
XMLElement *firstpass = xmlDoc_->NewElement( "firstpass" );
|
||||||
xmlCurrent_->InsertEndChild(firstpass);
|
xmlCurrent_->InsertEndChild(firstpass);
|
||||||
{
|
{
|
||||||
@@ -794,15 +766,8 @@ void SessionVisitor::visit (ImageFilter& f)
|
|||||||
secondpass->InsertEndChild(code);
|
secondpass->InsertEndChild(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
XMLElement *parameters = xmlDoc_->NewElement( "parameters" );
|
// image filter parameters
|
||||||
xmlCurrent_->InsertEndChild(parameters);
|
xmlCurrent_->InsertEndChild( list_parameters_(xmlDoc_, f.program().parameters()) );
|
||||||
for (auto p = filter_params.begin(); p != filter_params.end(); ++p)
|
|
||||||
{
|
|
||||||
XMLElement *param = xmlDoc_->NewElement( "uniform" );
|
|
||||||
param->SetAttribute("name", p->first.c_str() );
|
|
||||||
param->SetAttribute("value", p->second );
|
|
||||||
parameters->InsertEndChild(param);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SessionVisitor::visit (CloneSource& s)
|
void SessionVisitor::visit (CloneSource& s)
|
||||||
|
|||||||
Reference in New Issue
Block a user