Line data Source code
1 :
2 : /* Copyright (c) 2011-2015, Stefan Eilemann <eile@eyescale.ch>
3 : * Petros Kataras <petroskataras@gmail.com>
4 : *
5 : * This library is free software; you can redistribute it and/or modify it under
6 : * the terms of the GNU Lesser General Public License version 2.1 as published
7 : * by the Free Software Foundation.
8 : *
9 : * This library is distributed in the hope that it will be useful, but WITHOUT
10 : * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 : * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 : * details.
13 : *
14 : * You should have received a copy of the GNU Lesser General Public License
15 : * along with this library; if not, write to the Free Software Foundation, Inc.,
16 : * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 : */
18 :
19 : #include "window.h"
20 :
21 : #include "config.h"
22 : #include "pipe.h"
23 : #include "renderer.h"
24 :
25 : #include <seq/renderer.h>
26 : #include <eq/util/objectManager.h>
27 : #include <eq/fabric/event.h>
28 :
29 : namespace seq
30 : {
31 : namespace detail
32 : {
33 :
34 0 : Window::Window( eq::Pipe* parent )
35 0 : : eq::Window( parent )
36 0 : {}
37 :
38 0 : Window::~Window()
39 : {
40 0 : }
41 :
42 0 : Config* Window::getConfig()
43 : {
44 0 : return static_cast< Config* >( eq::Window::getConfig( ));
45 : }
46 :
47 0 : Pipe* Window::getPipe()
48 : {
49 0 : return static_cast< Pipe* >( eq::Window::getPipe( ));
50 : }
51 :
52 0 : seq::Renderer* Window::getRenderer()
53 : {
54 0 : return getPipe()->getRenderer();
55 : }
56 :
57 0 : detail::Renderer* Window::getRendererImpl()
58 : {
59 0 : return getPipe()->getRendererImpl();
60 : }
61 :
62 0 : void Window::frameStart( const uint128_t& frameID, const uint32_t frameNumber )
63 : {
64 0 : getRendererImpl()->setWindow( this );
65 0 : eq::Window::frameStart( frameID, frameNumber );
66 0 : }
67 :
68 0 : void Window::frameFinish( const uint128_t& frameID, const uint32_t frameNumber)
69 : {
70 0 : getRendererImpl()->setWindow( 0 );
71 0 : eq::Window::frameFinish( frameID, frameNumber );
72 0 : }
73 :
74 0 : bool Window::configInitGL( const uint128_t& )
75 : {
76 0 : Renderer* rendererImpl = getRendererImpl();
77 0 : rendererImpl->setWindow( this );
78 :
79 0 : co::Object* initData = getConfig()->getInitData();
80 0 : seq::Renderer* const renderer = getRenderer();
81 0 : const bool first = !getObjectManager().isShared();
82 :
83 0 : if( first && !renderer->init( initData ))
84 : {
85 0 : rendererImpl->setWindow( 0 );
86 0 : return false;
87 : }
88 0 : const bool ret = renderer->initContext( initData );
89 :
90 0 : rendererImpl->setWindow( 0 );
91 0 : return ret;
92 : }
93 :
94 0 : bool Window::configExitGL()
95 : {
96 0 : Renderer* rendererImpl = getRendererImpl();
97 0 : rendererImpl->setWindow( this );
98 0 : seq::Renderer* const renderer = getRenderer();
99 0 : const bool last = !getObjectManager().isShared();
100 :
101 0 : bool ret = renderer->exitContext();
102 0 : if( last && !renderer->exit( ))
103 0 : ret = false;
104 :
105 0 : rendererImpl->setWindow( 0 );
106 0 : return ret;
107 : }
108 :
109 0 : bool Window::processEvent( const eq::Event& event )
110 : {
111 0 : seq::Renderer* const renderer = getRenderer();
112 0 : if( renderer->processEvent( event ))
113 0 : return true;
114 0 : return eq::Window::processEvent( event );
115 : }
116 :
117 : }
118 42 : }
|