Line data Source code
1 :
2 : /* Copyright (c) 2011-2016, Stefan Eilemann <eile@eyescale.ch>
3 : * Daniel Nachbaur <danielnachbaur@gmail.com>
4 : * Petros Kataras <petroskataras@gmail.com>
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 : #include "renderer.h"
21 :
22 : #include "channel.h"
23 : #include "objectMap.h"
24 : #include "pipe.h"
25 : #include "window.h"
26 :
27 : #include <eq/config.h>
28 : #include <seq/renderer.h>
29 :
30 : namespace seq
31 : {
32 : namespace detail
33 : {
34 10 : static const RenderContext dummyContext;
35 :
36 2 : Renderer::Renderer()
37 : : _glewContext(0)
38 : , _pipe(0)
39 : , _window(0)
40 2 : , _channel(0)
41 : {
42 2 : }
43 :
44 4 : Renderer::~Renderer()
45 : {
46 2 : LBASSERT(!_pipe);
47 2 : LBASSERT(!_channel);
48 2 : }
49 :
50 0 : co::Object* Renderer::mapObject(const uint128_t& identifier,
51 : co::Object* instance)
52 : {
53 0 : if (!_pipe)
54 0 : return 0;
55 :
56 0 : seq::detail::ObjectMap* objectMap = _pipe->getObjectMap();
57 0 : return objectMap ? objectMap->map(identifier, instance) : 0;
58 : }
59 :
60 0 : bool Renderer::unmap(co::Object* object)
61 : {
62 0 : if (!_pipe)
63 0 : return false;
64 :
65 0 : seq::detail::ObjectMap* objectMap = _pipe->getObjectMap();
66 0 : return objectMap ? objectMap->unmap(object) : false;
67 : }
68 :
69 5 : co::Object* Renderer::getFrameData()
70 : {
71 5 : return _pipe->getFrameData();
72 : }
73 :
74 0 : const ObjectManager& Renderer::getObjectManager() const
75 : {
76 0 : return _window->getObjectManager();
77 : }
78 :
79 0 : ObjectManager& Renderer::getObjectManager()
80 : {
81 0 : return _window->getObjectManager();
82 : }
83 :
84 0 : const ViewData* Renderer::getViewData() const
85 : {
86 0 : return _channel->getViewData();
87 : }
88 :
89 0 : const Frustumf& Renderer::getFrustum() const
90 : {
91 0 : LBASSERT(_channel);
92 0 : static Frustumf none;
93 0 : return _channel ? _channel->getFrustum() : none;
94 : }
95 :
96 0 : const Matrix4f& Renderer::getViewMatrix() const
97 : {
98 0 : LBASSERT(_channel);
99 0 : static const Matrix4f identity;
100 0 : return _channel ? _channel->getViewMatrix() : identity;
101 : }
102 :
103 0 : const Matrix4f& Renderer::getModelMatrix() const
104 : {
105 0 : LBASSERT(_channel);
106 0 : static const Matrix4f identity;
107 0 : return _channel ? _channel->getModelMatrix() : identity;
108 : }
109 :
110 0 : const PixelViewport& Renderer::getPixelViewport() const
111 : {
112 0 : LBASSERT(_channel);
113 0 : static const PixelViewport nullPVP;
114 0 : return _channel ? _channel->getPixelViewport() : nullPVP;
115 : }
116 :
117 0 : bool Renderer::useOrtho() const
118 : {
119 0 : LBASSERT(_channel);
120 0 : return _channel ? _channel->useOrtho() : false;
121 : }
122 :
123 0 : void Renderer::applyScreenFrustum()
124 : {
125 0 : LBASSERT(_channel);
126 0 : if (_channel)
127 0 : _channel->applyScreenFrustum();
128 0 : }
129 :
130 0 : void Renderer::applyPerspectiveFrustum()
131 : {
132 0 : LBASSERT(_channel);
133 0 : if (_channel)
134 0 : _channel->applyPerspective();
135 0 : }
136 :
137 0 : void Renderer::setNearFar(const float nearPlane, const float farPlane)
138 : {
139 0 : LBASSERT(_channel);
140 0 : if (_channel)
141 0 : _channel->setNearFar(nearPlane, farPlane);
142 0 : }
143 :
144 12 : void Renderer::setWindow(Window* window)
145 : {
146 12 : _window = window;
147 12 : _glewContext = window ? window->glewGetContext() : 0;
148 12 : }
149 :
150 4 : void Renderer::setChannel(Channel* channel)
151 : {
152 4 : _channel = channel;
153 4 : _glewContext = channel ? channel->glewGetContext() : 0;
154 4 : }
155 :
156 2 : bool Renderer::initContext()
157 : {
158 2 : return _window ? _window->initContext() : false;
159 : }
160 :
161 2 : bool Renderer::exitContext()
162 : {
163 2 : return _window ? _window->exitContext() : false;
164 : }
165 :
166 3 : void Renderer::clear()
167 : {
168 3 : LBASSERT(_channel);
169 3 : if (_channel)
170 3 : _channel->clear();
171 3 : }
172 :
173 0 : void Renderer::requestRedraw()
174 : {
175 0 : LBASSERT(_channel);
176 0 : if (_channel)
177 0 : _channel->getConfig()->sendEvent(EVENT_REDRAW);
178 0 : }
179 :
180 0 : void Renderer::applyRenderContext()
181 : {
182 0 : LBASSERT(_channel);
183 0 : if (_channel)
184 0 : _channel->applyRenderContext();
185 0 : }
186 :
187 0 : void Renderer::bindDrawFrameBuffer()
188 : {
189 0 : LBASSERT(_channel);
190 0 : if (_channel)
191 0 : _channel->bindDrawFrameBuffer();
192 0 : }
193 :
194 0 : const RenderContext& Renderer::getRenderContext() const
195 : {
196 0 : LBASSERT(_channel);
197 0 : if (_channel)
198 0 : return _channel->getRenderContext();
199 0 : return dummyContext;
200 : }
201 :
202 0 : void Renderer::applyModelMatrix()
203 : {
204 0 : LBASSERT(_channel);
205 0 : if (_channel)
206 0 : _channel->applyModelMatrix();
207 0 : }
208 : }
209 30 : }
|