mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 10:49:59 +01:00
CoreSource complement
The CORE of a source is all what can be interpolated
This commit is contained in:
@@ -56,7 +56,7 @@ void Node::clearCallbacks()
|
||||
}
|
||||
}
|
||||
|
||||
void Node::copyTransform(Node *other)
|
||||
void Node::copyTransform(const Node *other)
|
||||
{
|
||||
if (!other)
|
||||
return;
|
||||
|
||||
2
Scene.h
2
Scene.h
@@ -64,7 +64,7 @@ public:
|
||||
// accept all kind of visitors
|
||||
virtual void accept (Visitor& v);
|
||||
|
||||
void copyTransform (Node *other);
|
||||
void copyTransform (const Node *other);
|
||||
|
||||
// public members, to manipulate with care
|
||||
bool visible_;
|
||||
|
||||
106
Source.cpp
106
Source.cpp
@@ -19,9 +19,67 @@
|
||||
|
||||
SourceCore::SourceCore() : processingshader_(nullptr)
|
||||
{
|
||||
// default nodes
|
||||
groups_[View::RENDERING] = new Group;
|
||||
groups_[View::RENDERING]->visible_ = false;
|
||||
groups_[View::MIXING] = new Group;
|
||||
groups_[View::MIXING]->visible_ = false;
|
||||
groups_[View::GEOMETRY] = new Group;
|
||||
groups_[View::GEOMETRY]->visible_ = false;
|
||||
groups_[View::LAYER] = new Group;
|
||||
groups_[View::LAYER]->visible_ = false;
|
||||
groups_[View::TEXTURE] = new Group;
|
||||
groups_[View::TEXTURE]->visible_ = false;
|
||||
groups_[View::TRANSITION] = new Group;
|
||||
// temp node
|
||||
stored_status_ = new Group;
|
||||
|
||||
// filtered image shader (with texturing and processing) for rendering
|
||||
processingshader_ = new ImageProcessingShader;
|
||||
// default rendering with image processing disabled
|
||||
renderingshader_ = static_cast<Shader *>(new ImageShader);
|
||||
}
|
||||
|
||||
SourceCore::~SourceCore()
|
||||
{
|
||||
// all groups and their children are deleted in the scene
|
||||
// this deletes renderingshader_ (and all source-attached nodes
|
||||
// e.g. rendersurface_, overlays, blendingshader_, etc.)
|
||||
delete groups_[View::RENDERING];
|
||||
delete groups_[View::MIXING];
|
||||
delete groups_[View::GEOMETRY];
|
||||
delete groups_[View::LAYER];
|
||||
delete groups_[View::TEXTURE];
|
||||
delete groups_[View::TRANSITION];
|
||||
delete stored_status_;
|
||||
|
||||
// don't forget that the processing shader
|
||||
// could be created but not used and not deleted above
|
||||
if ( renderingshader_ != processingshader_ )
|
||||
delete processingshader_;
|
||||
|
||||
groups_.clear();
|
||||
}
|
||||
|
||||
SourceCore& SourceCore::operator= (SourceCore const& other)
|
||||
{
|
||||
if (this != &other) { // no self assignment
|
||||
// copy groups properties
|
||||
groups_[View::RENDERING]->copyTransform( other.group(View::RENDERING) );
|
||||
groups_[View::MIXING]->copyTransform( other.group(View::MIXING) );
|
||||
groups_[View::GEOMETRY]->copyTransform( other.group(View::GEOMETRY) );
|
||||
groups_[View::LAYER]->copyTransform( other.group(View::LAYER) );
|
||||
groups_[View::TEXTURE]->copyTransform( other.group(View::TEXTURE) );
|
||||
stored_status_->copyTransform( other.stored_status_ );
|
||||
|
||||
// copy shader properties
|
||||
processingshader_->copy(*other.processingshader_);
|
||||
renderingshader_->copy(*other.renderingshader_);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol_(nullptr), active_(true), locked_(false), need_update_(true), workspace_(STAGE)
|
||||
{
|
||||
// create unique id
|
||||
@@ -34,13 +92,7 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
|
||||
// create groups and overlays for each view
|
||||
|
||||
// default rendering node
|
||||
groups_[View::RENDERING] = new Group;
|
||||
groups_[View::RENDERING]->visible_ = false;
|
||||
|
||||
// default mixing nodes
|
||||
groups_[View::MIXING] = new Group;
|
||||
groups_[View::MIXING]->visible_ = false;
|
||||
groups_[View::MIXING]->scale_ = glm::vec3(0.15f, 0.15f, 1.f);
|
||||
groups_[View::MIXING]->translation_ = glm::vec3(DEFAULT_MIXING_TRANSLATION, 0.f);
|
||||
|
||||
@@ -75,9 +127,6 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
groups_[View::MIXING]->attach(overlay_mixinggroup_);
|
||||
|
||||
// default geometry nodes
|
||||
groups_[View::GEOMETRY] = new Group;
|
||||
groups_[View::GEOMETRY]->visible_ = false;
|
||||
|
||||
frames_[View::GEOMETRY] = new Switch;
|
||||
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||
frame->translation_.z = 0.1;
|
||||
@@ -128,8 +177,6 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
groups_[View::GEOMETRY]->attach(overlays_[View::GEOMETRY]);
|
||||
|
||||
// default layer nodes
|
||||
groups_[View::LAYER] = new Group;
|
||||
groups_[View::LAYER]->visible_ = false;
|
||||
groups_[View::LAYER]->translation_.z = -1.f;
|
||||
|
||||
frames_[View::LAYER] = new Switch;
|
||||
@@ -149,9 +196,6 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
groups_[View::LAYER]->attach(overlays_[View::LAYER]);
|
||||
|
||||
// default appearance node
|
||||
groups_[View::TEXTURE] = new Group;
|
||||
groups_[View::TEXTURE]->visible_ = false;
|
||||
|
||||
frames_[View::TEXTURE] = new Switch;
|
||||
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||
frame->translation_.z = 0.1;
|
||||
@@ -192,9 +236,6 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
overlays_[View::TEXTURE]->attach(handles_[View::TEXTURE][Handles::MENU]);
|
||||
groups_[View::TEXTURE]->attach(overlays_[View::TEXTURE]);
|
||||
|
||||
// empty transition node
|
||||
groups_[View::TRANSITION] = new Group;
|
||||
|
||||
// locker switch button : locked / unlocked icons
|
||||
locker_ = new Switch;
|
||||
lock_ = new Handles(Handles::LOCKED);
|
||||
@@ -202,20 +243,12 @@ Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol
|
||||
unlock_ = new Handles(Handles::UNLOCKED);
|
||||
locker_->attach(unlock_);
|
||||
|
||||
// create objects
|
||||
stored_status_ = new Group;
|
||||
|
||||
// simple image shader (with texturing) for blending
|
||||
blendingshader_ = new ImageShader;
|
||||
// mask produced by dedicated shader
|
||||
maskshader_ = new MaskShader;
|
||||
masksurface_ = new Surface(maskshader_);
|
||||
|
||||
// filtered image shader (with texturing and processing) for rendering
|
||||
processingshader_ = new ImageProcessingShader;
|
||||
// default rendering with image processing enabled
|
||||
renderingshader_ = static_cast<Shader *>(processingshader_);
|
||||
|
||||
// for drawing in mixing view
|
||||
mixingshader_ = new ImageShader;
|
||||
mixingshader_->stipple = 1.0;
|
||||
@@ -249,7 +282,6 @@ Source::~Source()
|
||||
clones_.clear();
|
||||
|
||||
// delete objects
|
||||
delete stored_status_;
|
||||
if (renderbuffer_)
|
||||
delete renderbuffer_;
|
||||
if (maskbuffer_)
|
||||
@@ -259,25 +291,11 @@ Source::~Source()
|
||||
if (masksurface_)
|
||||
delete masksurface_; // deletes maskshader_
|
||||
|
||||
// all groups and their children are deleted in the scene
|
||||
// this includes rendersurface_, overlays, blendingshader_ and rendershader_
|
||||
delete groups_[View::RENDERING];
|
||||
delete groups_[View::MIXING];
|
||||
delete groups_[View::GEOMETRY];
|
||||
delete groups_[View::LAYER];
|
||||
delete groups_[View::TEXTURE];
|
||||
delete groups_[View::TRANSITION];
|
||||
|
||||
groups_.clear();
|
||||
frames_.clear();
|
||||
overlays_.clear();
|
||||
|
||||
// don't forget that the processing shader
|
||||
// could be created but not used
|
||||
if ( renderingshader_ != processingshader_ )
|
||||
delete processingshader_;
|
||||
|
||||
delete texturesurface_;
|
||||
|
||||
overlays_.clear();
|
||||
frames_.clear();
|
||||
handles_.clear();
|
||||
}
|
||||
|
||||
void Source::setName (const std::string &name)
|
||||
|
||||
33
Source.h
33
Source.h
@@ -27,13 +27,29 @@ class SourceCore
|
||||
{
|
||||
public:
|
||||
SourceCore();
|
||||
virtual ~SourceCore();
|
||||
|
||||
// get handle on the nodes used to manipulate the source in a view
|
||||
inline Group *group (View::Mode m) const { return groups_.at(m); }
|
||||
inline Node *groupNode (View::Mode m) const { return static_cast<Node*>(groups_.at(m)); }
|
||||
|
||||
// a Source has a shader used to render in fbo
|
||||
inline Shader *renderingShader () const { return renderingshader_; }
|
||||
// a Source always has an image processing shader
|
||||
inline ImageProcessingShader *processingShader () const { return processingshader_; }
|
||||
|
||||
SourceCore& operator= (SourceCore const& other);
|
||||
|
||||
protected:
|
||||
// nodes
|
||||
std::map<View::Mode, Group*> groups_;
|
||||
// temporary copy for interaction
|
||||
Group *stored_status_;
|
||||
// image processing shaders
|
||||
ImageProcessingShader *processingshader_;
|
||||
|
||||
// pointer to the currently attached shader
|
||||
// (will be processingshader_ if image processing is enabled)
|
||||
Shader *renderingshader_;
|
||||
};
|
||||
|
||||
class Source : public SourceCore
|
||||
@@ -75,16 +91,9 @@ public:
|
||||
Mode mode () const;
|
||||
void setMode (Mode m);
|
||||
|
||||
// get handle on the nodes used to manipulate the source in a view
|
||||
inline Group *group (View::Mode m) const { return groups_.at(m); }
|
||||
inline Node *groupNode (View::Mode m) const { return static_cast<Node*>(groups_.at(m)); }
|
||||
|
||||
// tests if a given node is part of the source
|
||||
bool contains (Node *node) const;
|
||||
|
||||
// the rendering shader always have an image processing shader
|
||||
inline ImageProcessingShader *processingShader () const { return processingshader_; }
|
||||
|
||||
// the image processing shader can be enabled or disabled
|
||||
// (NB: when disabled, a simple ImageShader is applied)
|
||||
void setImageProcessingEnabled (bool on);
|
||||
@@ -93,9 +102,6 @@ public:
|
||||
// a Source has a shader to control mixing effects
|
||||
inline ImageShader *blendingShader () const { return blendingshader_; }
|
||||
|
||||
// a Source has a shader used to render in fbo
|
||||
inline Shader *renderingShader () const { return renderingshader_; }
|
||||
|
||||
// every Source has a frame buffer from the renderbuffer
|
||||
virtual FrameBuffer *frame () const;
|
||||
|
||||
@@ -234,10 +240,6 @@ protected:
|
||||
FrameBufferSurface *rendersurface_;
|
||||
FrameBufferSurface *mixingsurface_;
|
||||
|
||||
// pointer to the currently attached shader
|
||||
// (will be processingshader_ if image processing is enabled)
|
||||
Shader *renderingshader_;
|
||||
|
||||
// blendingshader provides mixing controls
|
||||
ImageShader *blendingshader_;
|
||||
ImageShader *mixingshader_;
|
||||
@@ -268,7 +270,6 @@ protected:
|
||||
bool locked_;
|
||||
bool need_update_;
|
||||
float dt_;
|
||||
Group *stored_status_;
|
||||
Workspace workspace_;
|
||||
|
||||
// clones
|
||||
|
||||
Reference in New Issue
Block a user