mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 18:59: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)
|
if (!other)
|
||||||
return;
|
return;
|
||||||
|
|||||||
2
Scene.h
2
Scene.h
@@ -64,7 +64,7 @@ public:
|
|||||||
// accept all kind of visitors
|
// accept all kind of visitors
|
||||||
virtual void accept (Visitor& v);
|
virtual void accept (Visitor& v);
|
||||||
|
|
||||||
void copyTransform (Node *other);
|
void copyTransform (const Node *other);
|
||||||
|
|
||||||
// public members, to manipulate with care
|
// public members, to manipulate with care
|
||||||
bool visible_;
|
bool visible_;
|
||||||
|
|||||||
106
Source.cpp
106
Source.cpp
@@ -19,9 +19,67 @@
|
|||||||
|
|
||||||
SourceCore::SourceCore() : processingshader_(nullptr)
|
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)
|
Source::Source(uint64_t id) : SourceCore(), id_(id), initialized_(false), symbol_(nullptr), active_(true), locked_(false), need_update_(true), workspace_(STAGE)
|
||||||
{
|
{
|
||||||
// create unique id
|
// 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
|
// create groups and overlays for each view
|
||||||
|
|
||||||
// default rendering node
|
|
||||||
groups_[View::RENDERING] = new Group;
|
|
||||||
groups_[View::RENDERING]->visible_ = false;
|
|
||||||
|
|
||||||
// default mixing nodes
|
// 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]->scale_ = glm::vec3(0.15f, 0.15f, 1.f);
|
||||||
groups_[View::MIXING]->translation_ = glm::vec3(DEFAULT_MIXING_TRANSLATION, 0.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_);
|
groups_[View::MIXING]->attach(overlay_mixinggroup_);
|
||||||
|
|
||||||
// default geometry nodes
|
// default geometry nodes
|
||||||
groups_[View::GEOMETRY] = new Group;
|
|
||||||
groups_[View::GEOMETRY]->visible_ = false;
|
|
||||||
|
|
||||||
frames_[View::GEOMETRY] = new Switch;
|
frames_[View::GEOMETRY] = new Switch;
|
||||||
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||||
frame->translation_.z = 0.1;
|
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]);
|
groups_[View::GEOMETRY]->attach(overlays_[View::GEOMETRY]);
|
||||||
|
|
||||||
// default layer nodes
|
// default layer nodes
|
||||||
groups_[View::LAYER] = new Group;
|
|
||||||
groups_[View::LAYER]->visible_ = false;
|
|
||||||
groups_[View::LAYER]->translation_.z = -1.f;
|
groups_[View::LAYER]->translation_.z = -1.f;
|
||||||
|
|
||||||
frames_[View::LAYER] = new Switch;
|
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]);
|
groups_[View::LAYER]->attach(overlays_[View::LAYER]);
|
||||||
|
|
||||||
// default appearance node
|
// default appearance node
|
||||||
groups_[View::TEXTURE] = new Group;
|
|
||||||
groups_[View::TEXTURE]->visible_ = false;
|
|
||||||
|
|
||||||
frames_[View::TEXTURE] = new Switch;
|
frames_[View::TEXTURE] = new Switch;
|
||||||
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
frame = new Frame(Frame::SHARP, Frame::THIN, Frame::NONE);
|
||||||
frame->translation_.z = 0.1;
|
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]);
|
overlays_[View::TEXTURE]->attach(handles_[View::TEXTURE][Handles::MENU]);
|
||||||
groups_[View::TEXTURE]->attach(overlays_[View::TEXTURE]);
|
groups_[View::TEXTURE]->attach(overlays_[View::TEXTURE]);
|
||||||
|
|
||||||
// empty transition node
|
|
||||||
groups_[View::TRANSITION] = new Group;
|
|
||||||
|
|
||||||
// locker switch button : locked / unlocked icons
|
// locker switch button : locked / unlocked icons
|
||||||
locker_ = new Switch;
|
locker_ = new Switch;
|
||||||
lock_ = new Handles(Handles::LOCKED);
|
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);
|
unlock_ = new Handles(Handles::UNLOCKED);
|
||||||
locker_->attach(unlock_);
|
locker_->attach(unlock_);
|
||||||
|
|
||||||
// create objects
|
|
||||||
stored_status_ = new Group;
|
|
||||||
|
|
||||||
// simple image shader (with texturing) for blending
|
// simple image shader (with texturing) for blending
|
||||||
blendingshader_ = new ImageShader;
|
blendingshader_ = new ImageShader;
|
||||||
// mask produced by dedicated shader
|
// mask produced by dedicated shader
|
||||||
maskshader_ = new MaskShader;
|
maskshader_ = new MaskShader;
|
||||||
masksurface_ = new Surface(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
|
// for drawing in mixing view
|
||||||
mixingshader_ = new ImageShader;
|
mixingshader_ = new ImageShader;
|
||||||
mixingshader_->stipple = 1.0;
|
mixingshader_->stipple = 1.0;
|
||||||
@@ -249,7 +282,6 @@ Source::~Source()
|
|||||||
clones_.clear();
|
clones_.clear();
|
||||||
|
|
||||||
// delete objects
|
// delete objects
|
||||||
delete stored_status_;
|
|
||||||
if (renderbuffer_)
|
if (renderbuffer_)
|
||||||
delete renderbuffer_;
|
delete renderbuffer_;
|
||||||
if (maskbuffer_)
|
if (maskbuffer_)
|
||||||
@@ -259,25 +291,11 @@ Source::~Source()
|
|||||||
if (masksurface_)
|
if (masksurface_)
|
||||||
delete masksurface_; // deletes maskshader_
|
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_;
|
delete texturesurface_;
|
||||||
|
|
||||||
|
overlays_.clear();
|
||||||
|
frames_.clear();
|
||||||
|
handles_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Source::setName (const std::string &name)
|
void Source::setName (const std::string &name)
|
||||||
|
|||||||
33
Source.h
33
Source.h
@@ -27,13 +27,29 @@ class SourceCore
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SourceCore();
|
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:
|
protected:
|
||||||
// nodes
|
// nodes
|
||||||
std::map<View::Mode, Group*> groups_;
|
std::map<View::Mode, Group*> groups_;
|
||||||
|
// temporary copy for interaction
|
||||||
|
Group *stored_status_;
|
||||||
// image processing shaders
|
// image processing shaders
|
||||||
ImageProcessingShader *processingshader_;
|
ImageProcessingShader *processingshader_;
|
||||||
|
// pointer to the currently attached shader
|
||||||
|
// (will be processingshader_ if image processing is enabled)
|
||||||
|
Shader *renderingshader_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Source : public SourceCore
|
class Source : public SourceCore
|
||||||
@@ -75,16 +91,9 @@ public:
|
|||||||
Mode mode () const;
|
Mode mode () const;
|
||||||
void setMode (Mode m);
|
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
|
// tests if a given node is part of the source
|
||||||
bool contains (Node *node) const;
|
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
|
// the image processing shader can be enabled or disabled
|
||||||
// (NB: when disabled, a simple ImageShader is applied)
|
// (NB: when disabled, a simple ImageShader is applied)
|
||||||
void setImageProcessingEnabled (bool on);
|
void setImageProcessingEnabled (bool on);
|
||||||
@@ -93,9 +102,6 @@ public:
|
|||||||
// a Source has a shader to control mixing effects
|
// a Source has a shader to control mixing effects
|
||||||
inline ImageShader *blendingShader () const { return blendingshader_; }
|
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
|
// every Source has a frame buffer from the renderbuffer
|
||||||
virtual FrameBuffer *frame () const;
|
virtual FrameBuffer *frame () const;
|
||||||
|
|
||||||
@@ -234,10 +240,6 @@ protected:
|
|||||||
FrameBufferSurface *rendersurface_;
|
FrameBufferSurface *rendersurface_;
|
||||||
FrameBufferSurface *mixingsurface_;
|
FrameBufferSurface *mixingsurface_;
|
||||||
|
|
||||||
// pointer to the currently attached shader
|
|
||||||
// (will be processingshader_ if image processing is enabled)
|
|
||||||
Shader *renderingshader_;
|
|
||||||
|
|
||||||
// blendingshader provides mixing controls
|
// blendingshader provides mixing controls
|
||||||
ImageShader *blendingshader_;
|
ImageShader *blendingshader_;
|
||||||
ImageShader *mixingshader_;
|
ImageShader *mixingshader_;
|
||||||
@@ -268,7 +270,6 @@ protected:
|
|||||||
bool locked_;
|
bool locked_;
|
||||||
bool need_update_;
|
bool need_update_;
|
||||||
float dt_;
|
float dt_;
|
||||||
Group *stored_status_;
|
|
||||||
Workspace workspace_;
|
Workspace workspace_;
|
||||||
|
|
||||||
// clones
|
// clones
|
||||||
|
|||||||
Reference in New Issue
Block a user