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