Skip to content

Commit

Permalink
Move QuickRenderer to Deflect, use asynchronous image streaming for W…
Browse files Browse the repository at this point in the history
…hiteboard (#99)
  • Loading branch information
tribal-tec authored Oct 31, 2016
1 parent f14df6e commit d7e3b04
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 272 deletions.
2 changes: 1 addition & 1 deletion .gitsubprojects
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- mode: cmake -*-
git_subproject(ZeroEQ https://github.com/HBPVIS/ZeroEQ.git 1019277)
git_subproject(Deflect https://github.com/BlueBrain/Deflect.git fd77ea4)
git_subproject(Deflect https://github.com/BlueBrain/Deflect.git 7d2918e)
git_subproject(TUIO https://github.com/BlueBrain/TUIO.git fdf5cf7)
git_subproject(VirtualKeyboard https://github.com/rdumusc/QtFreeVirtualKeyboard.git e3ee94d)
1 change: 1 addition & 0 deletions apps/Whiteboard/Whiteboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ Whiteboard::Whiteboard( int& argc, char* argv[] )
_qmlStreamer.reset( new deflect::qt::QmlStreamer( deflectQmlFile,
deflectHost,
deflectStreamId ));
_qmlStreamer->useAsyncSend( true );

connect( _qmlStreamer.get(), &deflect::qt::QmlStreamer::streamClosed,
this, &QCoreApplication::quit );
Expand Down
3 changes: 1 addition & 2 deletions tide/wall/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ set(TIDEWALL_LINK_LIBRARIES
TideCore
Qt5::Widgets
PRIVATE
DeflectQt
Qt5::Svg
)

Expand Down Expand Up @@ -66,7 +67,6 @@ list(APPEND TIDEWALL_PUBLIC_HEADERS
PixelStreamUpdater.h
QmlWindowRenderer.h
QuadLineNode.h
QuickRenderer.h
RenderController.h
StreamImage.h
SVGGpuImage.h
Expand Down Expand Up @@ -103,7 +103,6 @@ list(APPEND TIDEWALL_SOURCES
PixelStreamUpdater.cpp
QmlWindowRenderer.cpp
QuadLineNode.cpp
QuickRenderer.cpp
RenderController.cpp
StreamImage.cpp
SVGGpuImage.cpp
Expand Down
124 changes: 0 additions & 124 deletions tide/wall/QuickRenderer.cpp

This file was deleted.

109 changes: 0 additions & 109 deletions tide/wall/QuickRenderer.h

This file was deleted.

2 changes: 1 addition & 1 deletion tide/wall/TextureUploader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ void TextureUploader::_upload( const Image& image, const uint textureID )
// which originates from glFinish() in upload & render thread. For now
// we use 'slow&easy' texture upload. This probably points out the problem
// and a potential solution:
// http://stackoverflow.com/questions/31941385/opengl-driver-seems-to-be-ridiculously-slow-from-glunmapbuffer-this-cant-be-ri
// http://stackoverflow.com/questions/31941385
#if 0
// make PBO big enough
_gl->glBindBuffer( GL_PIXEL_UNPACK_BUFFER, _pbo );
Expand Down
40 changes: 14 additions & 26 deletions tide/wall/WallWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,14 @@
#include "DisplayGroupRenderer.h"
#include "log.h"
#include "qmlUtils.h"
#include "QuickRenderer.h"
#include "scene/Options.h"
#include "TestPattern.h"
#include "TextureUploader.h"
#include "WallConfiguration.h"

#include <deflect/qt/QuickRenderer.h>
#include <QOpenGLContext>
#include <QOpenGLFunctions>
#include <QQmlEngine>
#include <QQuickRenderControl>
#include <QThread>
Expand All @@ -66,9 +67,8 @@ WallWindow::WallWindow( const WallConfiguration& config,
, _displayGroupRenderer( nullptr )
, _testPattern( nullptr )
, _wallChannel( wallChannel )
, _glContext( new QOpenGLContext )
, _renderControl( renderControl )
, _quickRenderer( new QuickRenderer( *this ))
, _quickRenderer( new deflect::qt::QuickRenderer( *this, *_renderControl ))
, _quickRendererThread( new QThread )
, _qmlEngine( new QQmlEngine )
, _qmlComponent( nullptr )
Expand Down Expand Up @@ -117,7 +117,6 @@ WallWindow::~WallWindow()
delete _displayGroupRenderer;
delete _qmlComponent;
delete _qmlEngine;
delete _glContext;
delete _quickRenderer;
delete _uploader;
}
Expand All @@ -129,13 +128,6 @@ void WallWindow::exposeEvent( QExposeEvent* )
// Initialize the renderer once the window is shown for correct GL context
// realisiation

QSurfaceFormat format_;
format_.setDepthBufferSize( 16 );
format_.setStencilBufferSize( 8 );

_glContext->setFormat( format_ );
_glContext->create();

#if QT_VERSION >= 0x050500
// Call required to make QtGraphicalEffects work in the initial scene.
_renderControl->prepareThread( _quickRendererThread );
Expand All @@ -145,7 +137,6 @@ void WallWindow::exposeEvent( QExposeEvent* )
"QtGraphicalEffects." );
#endif

_glContext->moveToThread( _quickRendererThread );
_quickRenderer->moveToThread( _quickRendererThread );

_quickRendererThread->setObjectName( "Render" );
Expand All @@ -157,7 +148,7 @@ void WallWindow::exposeEvent( QExposeEvent* )
_uploadThread->setObjectName( "Upload" );
_uploadThread->start();

_uploader->init( _glContext );
_uploader->init( _quickRenderer->context( ));

_wallChannel.globalBarrier();
_rendererInitialized = true;
Expand All @@ -180,9 +171,16 @@ void WallWindow::_startQuick( const WallConfiguration& config )
const QRect& screenRect = config.getScreenRect( screenIndex );
_displayGroupRenderer = new DisplayGroupRenderer( *this, *_provider,
screenRect );
connect( _quickRenderer, &QuickRenderer::frameSwapped,
_displayGroupRenderer,
&DisplayGroupRenderer::updateRenderedFrames );
connect( _quickRenderer, &deflect::qt::QuickRenderer::afterRender,
[&]
{
_wallChannel.globalBarrier();
_quickRenderer->context()->swapBuffers( this );
_quickRenderer->context()->functions()->glFlush();
QMetaObject::invokeMethod( _displayGroupRenderer,
"updateRenderedFrames",
Qt::QueuedConnection );
});

_testPattern = new TestPattern( config, _rootItem );
_testPattern->setPosition( -screenRect.topLeft( ));
Expand Down Expand Up @@ -237,16 +235,6 @@ QQuickItem* WallWindow::rootObject() const
return _rootItem;
}

QOpenGLContext& WallWindow::getOpenGLContext()
{
return *_glContext;
}

QQuickRenderControl& WallWindow::getRenderControl()
{
return *_renderControl;
}

WallToWallChannel& WallWindow::getWallChannel()
{
return _wallChannel;
Expand Down
Loading

0 comments on commit d7e3b04

Please sign in to comment.