Equalizer  1.13.0
Parallel Rendering Framework
qt/window.h
1 
2 /* Copyright (c) 2014-2015, Daniel Nachbaur <danielnachbaur@gmail.com>
3  * Stefan.Eilemann@epfl.ch
4  * Juan Hernando <jhernando@fi.upm.es>
5  *
6  * This library is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Lesser General Public License version 2.1 as published
8  * by the Free Software Foundation.
9  *
10  * This library is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13  * details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with this library; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 #ifndef EQ_QT_WINDOW_H
21 #define EQ_QT_WINDOW_H
22 
23 #include <eq/qt/types.h>
24 #include <eq/glWindow.h> // base class
25 #include <QObject> // base class
26 #include <QScreen>
27 
28 namespace eq
29 {
30 namespace qt
31 {
32 namespace detail { class Window; }
33 
35 class WindowIF : public GLWindow
36 {
37 public:
38  WindowIF( NotifierInterface& parent,
39  const WindowSettings& settings ) : GLWindow( parent, settings ) {}
40  virtual ~WindowIF() {}
41 
42 # pragma clang diagnostic push
43 # pragma clang diagnostic ignored "-Woverloaded-virtual"
44 
45  virtual bool processEvent( const WindowEvent& event ) = 0;
46 # pragma clang diagnostic pop
47 };
48 
50 class Window : public QObject, public WindowIF
51 {
52  Q_OBJECT
53 
54 public:
70  EQ_API Window( NotifierInterface& parent, const WindowSettings& settings,
71  detail::Window* impl );
72 
74  EQ_API ~Window() final;
75 
87  EQ_API bool configInit() override;
88 
90  EQ_API void configExit() override;
91 
93 
100  EQ_API QOpenGLContext* getContext() const;
101 
105  EQ_API void makeCurrent( const bool cache = true ) const override;
106 
108  EQ_API void doneCurrent() const override;
109 
111  EQ_API void swapBuffers() override;
112 
114  EQ_API void joinNVSwapBarrier( const uint32_t group,
115  const uint32_t barrier ) override;
116 
118  EQ_API void leaveNVSwapBarrier();
119 
121  EQ_API bool processEvent( const WindowEvent& event ) override;
123 
135  EQ_API QObject* getEventProcessor();
136 
138  void moveContextToThread( QThread* thread );
139 
140 signals:
141  void destroyImpl( detail::Window* );
142 
143 private:
144  detail::Window* const _impl;
145  static detail::Window* createImpl( const WindowSettings&,
146  QScreen*, QThread* );
147  friend class WindowFactory;
148 };
149 }
150 }
151 #endif // EQ_QT_WINDOW_H
EQ_API ~Window() final
Destruct this Qt window.
EQ_API void doneCurrent() const override
EQ_API void swapBuffers() override
EQ_API bool processEvent(const WindowEvent &event) override
EQ_API void leaveNVSwapBarrier()
Implementation untested for Qt.
EQ_API void makeCurrent(const bool cache=true) const override
EQ_API void configExit() override
virtual bool processEvent(const WindowEvent &event)=0
Process the given event.
EQ_API bool configInit() override
Initialize this window for the Qt window system.
A set of settings to setup an eq::SystemWindow.
The interface defining the minimum functionality for a Qt window.
Definition: qt/window.h:35
Equalizer default implementation of a Qt window.
Definition: qt/window.h:50
EQ_API void joinNVSwapBarrier(const uint32_t group, const uint32_t barrier) override
Implementation untested for Qt.
EQ_API GLWindow(NotifierInterface &parent, const WindowSettings &settings)
Construct a new OpenGL window.
A system window for OpenGL rendering.
Definition: glWindow.h:36
EQ_API QOpenGLContext * getContext() const
The context won't be ready to be used until configInit is called.
A base class for notifying errors and events.
The Equalizer client library.
Definition: eq/agl/types.h:23
void moveContextToThread(QThread *thread)
Move OpenGLContext object to given thread.
A window-system event for a qt::WindowIF.
EQ_API QObject * getEventProcessor()
Use this object to make Qt events reach eq::Config when using this window for offscreen rendering wit...
EQ_API Window(NotifierInterface &parent, const WindowSettings &settings, detail::Window *impl)
Create a new window using Qt.