Bugfix Views

This commit is contained in:
brunoherbelin
2020-05-21 11:34:06 +02:00
parent f16c1843c3
commit 34c9d85863
3 changed files with 48 additions and 54 deletions

View File

@@ -119,6 +119,8 @@ Mixer::Mixer() : session_(nullptr), back_session_(nullptr), current_view_(nullpt
{ {
// unsused initial empty session // unsused initial empty session
session_ = new Session; session_ = new Session;
current_source_ = session_->end();
current_source_index_ = -1;
// auto load if Settings ask to // auto load if Settings ask to
if ( Settings::application.recentSessions.load_at_start && if ( Settings::application.recentSessions.load_at_start &&
@@ -163,7 +165,7 @@ void Mixer::update()
layer_.update(dt); layer_.update(dt);
// optimize the reordering in depth for views // optimize the reordering in depth for views
View::need_reordering_ = false; View::need_deep_update_ = false;
} }
void Mixer::draw() void Mixer::draw()
@@ -437,7 +439,7 @@ void Mixer::swap()
session_->setResolution( session_->config(View::RENDERING)->scale_ ); session_->setResolution( session_->config(View::RENDERING)->scale_ );
// request reordering in depth for views // request reordering in depth for views
View::need_reordering_ = true; View::need_deep_update_ = true;
// no current source // no current source
current_source_ = session_->end(); current_source_ = session_->end();

View File

@@ -22,7 +22,7 @@
#define CIRCLE_PIXELS 64 #define CIRCLE_PIXELS 64
#define CIRCLE_PIXEL_RADIUS 1024.0 #define CIRCLE_PIXEL_RADIUS 1024.0
bool View::need_reordering_ = true; bool View::need_deep_update_ = true;
View::View(Mode m) : mode_(m) View::View(Mode m) : mode_(m)
{ {
@@ -40,14 +40,22 @@ void View::saveSettings()
Settings::application.views[mode_].default_translation = scene.root()->translation_; Settings::application.views[mode_].default_translation = scene.root()->translation_;
} }
void View::draw()
{
// draw scene of this view
scene.root()->draw(glm::identity<glm::mat4>(), Rendering::manager().Projection());
}
void View::update(float dt) void View::update(float dt)
{ {
// recursive update from root of scene // recursive update from root of scene
scene.update( dt ); scene.update( dt );
// reorder depth if needed // a more complete update is requested
if (View::need_reordering_) if (View::need_deep_update_) {
// reorder sources
scene.fg()->sort(); scene.fg()->sort();
}
} }
void View::drag (glm::vec2 from, glm::vec2 to) void View::drag (glm::vec2 from, glm::vec2 to)
@@ -89,16 +97,6 @@ MixingView::MixingView() : View(MIXING)
scene.bg()->attach(circle); scene.bg()->attach(circle);
} }
MixingView::~MixingView()
{
}
void MixingView::draw()
{
// draw scene of this view
scene.root()->draw(glm::identity<glm::mat4>(), Rendering::manager().Projection());
}
void MixingView::zoom( float factor ) void MixingView::zoom( float factor )
{ {
@@ -236,23 +234,21 @@ GeometryView::GeometryView() : View(GEOMETRY)
} }
GeometryView::~GeometryView() void GeometryView::update(float dt)
{ {
View::update(dt);
} // reorder depth if needed
if (View::need_deep_update_) {
void GeometryView::draw() // update rendering of render frame
{ FrameBuffer *output = Mixer::manager().session()->frame();
// update rendering of render frame if (output){
FrameBuffer *output = Mixer::manager().session()->frame(); for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) {
if (output){ (*node)->scale_.x = output->aspectRatio();
for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) { }
(*node)->scale_.x = output->aspectRatio();
} }
} }
// draw scene of this view
scene.root()->draw(glm::identity<glm::mat4>(), Rendering::manager().Projection());
} }
void GeometryView::zoom( float factor ) void GeometryView::zoom( float factor )
@@ -366,25 +362,25 @@ LayerView::LayerView() : View(LAYER), aspect_ratio(1.f)
scene.bg()->attach(border); scene.bg()->attach(border);
} }
LayerView::~LayerView() void LayerView::update(float dt)
{ {
View::update(dt);
} // reorder depth if needed
if (View::need_deep_update_) {
void LayerView::draw () // update rendering of render frame
{ FrameBuffer *output = Mixer::manager().session()->frame();
// update rendering of render frame if (output){
FrameBuffer *output = Mixer::manager().session()->frame(); aspect_ratio = output->aspectRatio();
if (output) for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) {
aspect_ratio = output->aspectRatio(); (*node)->scale_.x = aspect_ratio;
}
for (NodeSet::iterator node = scene.bg()->begin(); node != scene.bg()->end(); node++) { for (NodeSet::iterator node = scene.fg()->begin(); node != scene.fg()->end(); node++) {
(*node)->scale_.x = aspect_ratio; (*node)->translation_.y = (*node)->translation_.x / aspect_ratio;
}
}
} }
// draw scene of this view
scene.root()->draw(glm::identity<glm::mat4>(), Rendering::manager().Projection());
} }
void LayerView::zoom (float factor) void LayerView::zoom (float factor)
@@ -426,7 +422,7 @@ void LayerView::setDepth (Source *s, float d)
s->touch(); s->touch();
// request reordering // request reordering
View::need_reordering_ = true; View::need_deep_update_ = true;
} }
void LayerView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) void LayerView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick)
@@ -450,6 +446,6 @@ void LayerView::grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *,
glm::vec3 dest_translation = start_translation + gl_Position_to - gl_Position_from; glm::vec3 dest_translation = start_translation + gl_Position_to - gl_Position_from;
// apply change // apply change
setDepth( s, -dest_translation.x ); setDepth( s, MAX( -dest_translation.x, 0.f) );
} }

16
View.h
View File

@@ -14,10 +14,12 @@ public:
typedef enum {RENDERING = 0, MIXING=1, GEOMETRY=2, LAYER=3, INVALID=4 } Mode; typedef enum {RENDERING = 0, MIXING=1, GEOMETRY=2, LAYER=3, INVALID=4 } Mode;
View(Mode m); View(Mode m);
virtual ~View() {}
inline Mode mode() const { return mode_; } inline Mode mode() const { return mode_; }
virtual void update (float dt); virtual void update (float dt);
virtual void draw () = 0; virtual void draw ();
virtual void zoom (float) {} virtual void zoom (float) {}
virtual void drag (glm::vec2, glm::vec2); virtual void drag (glm::vec2, glm::vec2);
virtual void grab (glm::vec2, glm::vec2, Source*, std::pair<Node *, glm::vec2>) {} virtual void grab (glm::vec2, glm::vec2, Source*, std::pair<Node *, glm::vec2>) {}
@@ -28,7 +30,7 @@ public:
Scene scene; Scene scene;
// hack to avoid reordering scene of view if not necessary // hack to avoid reordering scene of view if not necessary
static bool need_reordering_; static bool need_deep_update_;
protected: protected:
Mode mode_; Mode mode_;
@@ -39,9 +41,7 @@ class MixingView : public View
{ {
public: public:
MixingView(); MixingView();
~MixingView();
void draw () override;
void zoom (float factor) override; void zoom (float factor) override;
void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2>) override; void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2>) override;
@@ -69,23 +69,19 @@ class GeometryView : public View
{ {
public: public:
GeometryView(); GeometryView();
~GeometryView();
void draw () override; void update (float dt) override;
void zoom (float factor) override; void zoom (float factor) override;
void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override; void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;
private:
}; };
class LayerView : public View class LayerView : public View
{ {
public: public:
LayerView(); LayerView();
~LayerView();
void draw () override; void update (float dt) override;
void zoom (float factor) override; void zoom (float factor) override;
void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override; void grab (glm::vec2 from, glm::vec2 to, Source *s, std::pair<Node *, glm::vec2> pick) override;