From 07105015d7a525eb759b1f4b38a742207c5a4fad Mon Sep 17 00:00:00 2001 From: Daniel Nachbaur Date: Fri, 10 Jun 2016 14:21:17 +0200 Subject: [PATCH] Add seq::Renderer::requestRedraw() --- doc/Changelog.md | 2 + seq/detail/masterConfig.cpp | 210 +++++++++++++++++++----------------- seq/detail/renderer.cpp | 8 ++ seq/detail/renderer.h | 1 + seq/renderer.cpp | 5 + seq/renderer.h | 3 + seq/types.h | 8 ++ 7 files changed, 137 insertions(+), 100 deletions(-) diff --git a/doc/Changelog.md b/doc/Changelog.md index 6cd8bde719..e8bab40412 100644 --- a/doc/Changelog.md +++ b/doc/Changelog.md @@ -3,6 +3,8 @@ Changelog {#Changelog} # git master +* [563](https://github.com/Eyescale/Equalizer/pull/563): + Add seq::Renderer::requestRedraw() * [561](https://github.com/Eyescale/Equalizer/pull/561): Change Deflect streaming activation diff --git a/seq/detail/masterConfig.cpp b/seq/detail/masterConfig.cpp index 2d3f2e103f..a5eddc459e 100644 --- a/seq/detail/masterConfig.cpp +++ b/seq/detail/masterConfig.cpp @@ -144,56 +144,61 @@ bool MasterConfig::handleEvent( const eq::ConfigEvent* event ) { switch( event->data.type ) { - case eq::Event::CHANNEL_POINTER_BUTTON_PRESS: - _currentViewID = event->data.context.view.identifier; - return true; - - case eq::Event::KEY_PRESS: - case eq::Event::KEY_RELEASE: - if( Config::handleEvent( event )) - { - _redraw = true; - LBVERB << "Redraw: requested by eq::Config" << std::endl; - } - // no break; - case eq::Event::CHANNEL_POINTER_BUTTON_RELEASE: - case eq::Event::CHANNEL_POINTER_MOTION: - case eq::Event::CHANNEL_POINTER_WHEEL: - case eq::Event::MAGELLAN_AXIS: - { - if( _currentViewID == 0 ) - return false; - - View* view = static_cast( find( _currentViewID )); - if( view->handleEvent( event )) - { - _redraw = true; - LBVERB << "Redraw: requested by view event handler" << std::endl; - } - return true; - } - - case eq::Event::STATISTIC: - { - Config::handleEvent( event ); - if( event->data.statistic.type != eq::Statistic::CONFIG_FINISH_FRAME ) - return false; - - ViewUpdateVisitor viewUpdate( _redraw ); - accept( viewUpdate ); - return _redraw; - } - - case eq::Event::WINDOW_EXPOSE: - case eq::Event::WINDOW_RESIZE: - case eq::Event::WINDOW_CLOSE: - case eq::Event::VIEW_RESIZE: - _redraw = true; - LBVERB << "Redraw: window change" << std::endl; - break; + case eq::Event::CHANNEL_POINTER_BUTTON_PRESS: + _currentViewID = event->data.context.view.identifier; + return true; - default: - break; + case eq::Event::KEY_PRESS: + case eq::Event::KEY_RELEASE: + if( Config::handleEvent( event )) + { + _redraw = true; + LBVERB << "Redraw: requested by eq::Config" << std::endl; + } + // no break; + case eq::Event::CHANNEL_POINTER_BUTTON_RELEASE: + case eq::Event::CHANNEL_POINTER_MOTION: + case eq::Event::CHANNEL_POINTER_WHEEL: + case eq::Event::MAGELLAN_AXIS: + { + if( _currentViewID == 0 ) + return false; + + View* view = static_cast( find( _currentViewID )); + if( view->handleEvent( event )) + { + _redraw = true; + LBVERB << "Redraw: requested by view event handler" << std::endl; + } + return true; + } + + case eq::Event::STATISTIC: + { + Config::handleEvent( event ); + if( event->data.statistic.type != eq::Statistic::CONFIG_FINISH_FRAME ) + return false; + + ViewUpdateVisitor viewUpdate( _redraw ); + accept( viewUpdate ); + return _redraw; + } + + case eq::Event::WINDOW_EXPOSE: + case eq::Event::WINDOW_RESIZE: + case eq::Event::WINDOW_CLOSE: + case eq::Event::VIEW_RESIZE: + _redraw = true; + LBVERB << "Redraw: window change" << std::endl; + break; + + case EVENT_REDRAW: + _redraw = true; + LBINFO << "Redraw request" << std::endl; + break; + + default: + break; } if( eq::Config::handleEvent( event )) @@ -209,57 +214,62 @@ bool MasterConfig::handleEvent( eq::EventICommand command ) { switch( command.getEventType( )) { - case eq::Event::CHANNEL_POINTER_BUTTON_PRESS: - { - const eq::Event& event = command.read< eq::Event >(); - _currentViewID = event.context.view.identifier; - return true; - } - - case eq::Event::KEY_PRESS: - case eq::Event::KEY_RELEASE: - if( Config::handleEvent( command )) - { - _redraw = true; - LBVERB << "Redraw: requested by eq::Config" << std::endl; - } - // no break; - case eq::Event::CHANNEL_POINTER_BUTTON_RELEASE: - case eq::Event::CHANNEL_POINTER_MOTION: - case eq::Event::CHANNEL_POINTER_WHEEL: - case eq::Event::MAGELLAN_AXIS: - { - if( _currentViewID == 0 ) - return false; - - View* view = static_cast( find( _currentViewID )); - if( view->handleEvent( command )) - { - _redraw = true; - LBVERB << "Redraw: requested by view event handler" << std::endl; - } - return true; - } - - case eq::Event::STATISTIC: - { - Config::handleEvent( command ); - const eq::Event& event = command.read< eq::Event >(); - if( event.statistic.type != eq::Statistic::CONFIG_FINISH_FRAME ) - return false; - - ViewUpdateVisitor viewUpdate( _redraw ); - accept( viewUpdate ); - return _redraw; - } - - case eq::Event::WINDOW_EXPOSE: - case eq::Event::WINDOW_RESIZE: - case eq::Event::WINDOW_CLOSE: - case eq::Event::VIEW_RESIZE: - _redraw = true; - LBVERB << "Redraw: window change" << std::endl; - break; + case eq::Event::CHANNEL_POINTER_BUTTON_PRESS: + { + const eq::Event& event = command.read< eq::Event >(); + _currentViewID = event.context.view.identifier; + return true; + } + + case eq::Event::KEY_PRESS: + case eq::Event::KEY_RELEASE: + if( Config::handleEvent( command )) + { + _redraw = true; + LBVERB << "Redraw: requested by eq::Config" << std::endl; + } + // no break; + case eq::Event::CHANNEL_POINTER_BUTTON_RELEASE: + case eq::Event::CHANNEL_POINTER_MOTION: + case eq::Event::CHANNEL_POINTER_WHEEL: + case eq::Event::MAGELLAN_AXIS: + { + if( _currentViewID == 0 ) + return false; + + View* view = static_cast( find( _currentViewID )); + if( view->handleEvent( command )) + { + _redraw = true; + LBVERB << "Redraw: requested by view event handler" << std::endl; + } + return true; + } + + case eq::Event::STATISTIC: + { + Config::handleEvent( command ); + const eq::Event& event = command.read< eq::Event >(); + if( event.statistic.type != eq::Statistic::CONFIG_FINISH_FRAME ) + return false; + + ViewUpdateVisitor viewUpdate( _redraw ); + accept( viewUpdate ); + return _redraw; + } + + case eq::Event::WINDOW_EXPOSE: + case eq::Event::WINDOW_RESIZE: + case eq::Event::WINDOW_CLOSE: + case eq::Event::VIEW_RESIZE: + _redraw = true; + LBVERB << "Redraw: window change" << std::endl; + break; + + case EVENT_REDRAW: + _redraw = true; + LBVERB << "Redraw request" << std::endl; + break; default: break; diff --git a/seq/detail/renderer.cpp b/seq/detail/renderer.cpp index 1910c8a2f8..32d83f01f8 100644 --- a/seq/detail/renderer.cpp +++ b/seq/detail/renderer.cpp @@ -25,6 +25,7 @@ #include "objectMap.h" #include +#include namespace seq { @@ -168,6 +169,13 @@ void Renderer::clear() _channel->clear(); } +void Renderer::requestRedraw() +{ + LBASSERT( _channel ); + if( _channel ) + _channel->getConfig()->sendEvent( EVENT_REDRAW ); +} + void Renderer::applyRenderContext() { LBASSERT( _channel ); diff --git a/seq/detail/renderer.h b/seq/detail/renderer.h index 528cf1e31c..45cef8e56f 100644 --- a/seq/detail/renderer.h +++ b/seq/detail/renderer.h @@ -68,6 +68,7 @@ class Renderer bool exitContext(); void clear(); + void requestRedraw(); void applyRenderContext(); void applyModelMatrix(); diff --git a/seq/renderer.cpp b/seq/renderer.cpp index bcb4e371ed..2dd0071bf4 100644 --- a/seq/renderer.cpp +++ b/seq/renderer.cpp @@ -114,6 +114,11 @@ void Renderer::clear( co::Object* /*frameData*/ ) _impl->clear(); } +void Renderer::requestRedraw() +{ + _impl->requestRedraw(); +} + void Renderer::updateNearFar( const Vector4f& boundingSphere ) { const Matrix4f& view = getViewMatrix(); diff --git a/seq/renderer.h b/seq/renderer.h index 7522033081..2efde2cd43 100644 --- a/seq/renderer.h +++ b/seq/renderer.h @@ -108,6 +108,9 @@ class Renderer : public co::ObjectFactory */ virtual void draw( co::Object* frameData ) = 0; + /** Request another call to draw(). @version 1.12 */ + SEQ_API void requestRedraw(); + /** * Update the near and far planes to tightly enclose the given sphere. * diff --git a/seq/types.h b/seq/types.h index 0b04998078..71fd4ecb86 100644 --- a/seq/types.h +++ b/seq/types.h @@ -19,7 +19,9 @@ #define EQSEQUEL_TYPES_H #include + #include +#include namespace seq { @@ -44,6 +46,12 @@ class ViewData; typedef lunchbox::RefPtr< Application > ApplicationPtr; +enum EventType +{ + EVENT_REDRAW = eq::Event::USER, + EVENT_USER +}; + /** @cond IGNORE */ namespace detail {