Source imageProcessingEnabled on/off with storage of previous state and

saving in mix file.
This commit is contained in:
brunoherbelin
2020-07-30 08:45:01 +02:00
parent fd0979887a
commit dbdcaab6b2
5 changed files with 39 additions and 5 deletions

View File

@@ -15,6 +15,25 @@ ImageProcessingShader::ImageProcessingShader()
reset();
}
ImageProcessingShader::ImageProcessingShader(const ImageProcessingShader &S)
{
program_ = &imageProcessingShadingProgram;
reset();
brightness = S.brightness;
contrast = S.contrast;
saturation = S.saturation;
hueshift = S.hueshift;
threshold = S.threshold;
lumakey = S.lumakey;
nbColors = S.nbColors;
invert = S.invert;
filterid = S.filterid;
gamma = S.gamma;
levels = S.levels;
chromakey = S.chromakey;
chromadelta = S.chromadelta;
}
void ImageProcessingShader::use()
{
Shader::use();

View File

@@ -11,7 +11,7 @@ class ImageProcessingShader : public Shader
public:
ImageProcessingShader();
// virtual ~ImageProcessingShader() {}
ImageProcessingShader(const ImageProcessingShader &model);
void use() override;
void reset() override;

View File

@@ -261,7 +261,9 @@ void SessionCreator::visit (Source& s)
s.blendingShader()->accept(*this);
xmlCurrent_ = sourceNode->FirstChildElement("ImageProcessing");
bool on = xmlCurrent_->BoolAttribute("enabled", true);
s.processingShader()->accept(*this);
s.setImageProcessingEnabled(on);
// restore current
xmlCurrent_ = sourceNode;

View File

@@ -317,6 +317,7 @@ void SessionVisitor::visit (Source& s)
s.blendingShader()->accept(*this);
xmlCurrent_ = xmlDoc_->NewElement( "ImageProcessing" );
xmlCurrent_->SetAttribute("enabled", s.imageProcessingEnabled());
sourceNode->InsertEndChild(xmlCurrent_);
s.processingShader()->accept(*this);

View File

@@ -199,20 +199,32 @@ void Source::setMode(Source::Mode m)
void Source::setImageProcessingEnabled (bool on)
{
// avoid repeating
if ( on == imageProcessingEnabled() )
return;
// set pointer
if (on) {
processingshader_ = new ImageProcessingShader;
// set the current rendering shader to be the
// (previously prepared) processing shader
renderingshader_ = (Shader *) processingshader_;
} else {
processingshader_ = nullptr;
}
else {
// clone the current Image processing shader
// (because the one currently attached to the source
// will be deleted in replaceRenderngShader().)
ImageProcessingShader *tmp = new ImageProcessingShader(*processingshader_);
// loose reference to current processing shader (to delete)
// and keep reference to the newly created one
// and keep it for later
processingshader_ = tmp;
// set the current rendering shader to a simple one
renderingshader_ = (Shader *) new ImageShader;
}
// apply to nodes in subclasses
// this calls replaceShader() on the Primitive and
// will delete the previously attached shader
replaceRenderingShader();
}