mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-05 15:30:00 +01:00
Source imageProcessingEnabled on/off with storage of previous state and
saving in mix file.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -11,7 +11,7 @@ class ImageProcessingShader : public Shader
|
||||
public:
|
||||
|
||||
ImageProcessingShader();
|
||||
// virtual ~ImageProcessingShader() {}
|
||||
ImageProcessingShader(const ImageProcessingShader &model);
|
||||
|
||||
void use() override;
|
||||
void reset() override;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
20
Source.cpp
20
Source.cpp
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user