Rigs of Rods 2023.09
Soft-body Physics Simulation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Loading...
Searching...
No Matches
RttManager.h
Go to the documentation of this file.
1/*
2--------------------------------------------------------------------------------
3This source file is part of Hydrax.
4Visit ---
5
6Copyright (C) 2008 Xavier Vergu�n Gonz�lez <xavierverguin@hotmail.com>
7 <xavyiy@gmail.com>
8
9This program is free software; you can redistribute it and/or modify it under
10the terms of the GNU Lesser General Public License as published by the Free Software
11Foundation; either version 2 of the License, or (at your option) any later
12version.
13
14This program is distributed in the hope that it will be useful, but WITHOUT
15ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17
18You should have received a copy of the GNU Lesser General Public License along with
19this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21http://www.gnu.org/copyleft/lesser.txt.
22--------------------------------------------------------------------------------
23*/
24
25#ifndef _Hydrax_RttManager_H_
26#define _Hydrax_RttManager_H_
27
28#include "Prerequisites.h"
29
30#include "Enums.h"
31#include "Help.h"
32
35
38
39namespace Hydrax
40{
41 class Hydrax;
42
46 {
47 public:
59
63 {
64 BPC_8 = 8,
65 BPC_16 = 16,
66 BPC_32 = 32
67 };
68
72 {
73 NOC_1 = 1,
74 NOC_2 = 2,
75 NOC_3 = 3,
76 NOC_4 = 4
77 };
78
92
96 {
97 public:
102 virtual void preRenderTargetUpdate(const RttType& Rtt){};
103
108 virtual void postRenderTargetUpdate(const RttType& Rtt){};
109 };
110
114 RttManager(Hydrax *h);
115
118 ~RttManager();
119
124 void initialize(const RttType& Rtt);
125
129 void remove(const RttType& Rtt);
130
134 void removeAll();
135
138 inline const Ogre::String& getRttName(RttType Rtt) const
139 {
140 return mRttOptions[static_cast<int>(Rtt)].Name;
141 }
142
145 inline Ogre::TexturePtr getTexture(RttType Rtt)
146 {
147 return mTextures[static_cast<int>(Rtt)];
148 }
149
150 inline Ogre::SceneNode* getPlanesSceneNode()
151 {
152 return mPlanesSceneNode;
153 }
154
157 inline Ogre::MovablePlane* getPlane(RttType Rtt)
158 {
159 return mPlanes[static_cast<int>(Rtt)];
160 }
161
162 inline const Size& getTextureSize(const RttType& Rtt) const
163 {
164 return mRttOptions[static_cast<int>(Rtt)].Size_;
165 }
166
170 void setTextureSize(const RttType& Rtt, const Size& S);
171
175 void setTexturesSize(const Size& S);
176
177 const Ogre::PixelFormat getPixelFormat(const RttType& Rtt) const;
178
179 inline void setNumberOfChannels(const RttType& Rtt, const NumberOfChannels& NOC)
180 {
182
183 if (getTexture(Rtt))
184 {
185 initialize(Rtt);
186 }
187 }
188
189 inline const NumberOfChannels& getNumberOfChannels(const RttType& Rtt) const
190 {
191 return mRttOptions[Rtt].NumberOfChannels_;
192 }
193
194 inline void setBitsPerChannel(const RttType& Rtt, const BitsPerChannel& BPC)
195 {
196 mRttOptions[Rtt].BitsPerChannel_ = BPC;
197
198 if (getTexture(Rtt))
199 {
200 initialize(Rtt);
201 }
202 }
203
204 inline const BitsPerChannel& getBitsPerChannel(const RttType& Rtt) const
205 {
206 return mRttOptions[Rtt].BitsPerChannel_;
207 }
208
209 inline const RttOptions& getRttOptions(const RttType& Rtt) const
210 {
211 return mRttOptions[Rtt];
212 }
213
216 void setReflectionDisplacementError(const Ogre::Real& ReflectionDisplacementError)
217 {
218 mReflectionDisplacementError = ReflectionDisplacementError;
219 }
220
221 inline const Ogre::Real& getReflectionDisplacementError() const
222 {
224 }
225
226 inline void setDisableReflectionCustomNearCliplPlaneRenderQueues(const std::vector<Ogre::RenderQueueGroupID>& DisableReflectionCustomNearClipPlaneRenderQueues)
227 {
228 mDisableReflectionCustomNearClipPlaneRenderQueues = DisableReflectionCustomNearClipPlaneRenderQueues;
229 }
230
231 inline const std::vector<Ogre::RenderQueueGroupID>& getDisableReflectionCustomNearClipPlaneRenderQueues()
232 {
234 }
235
237 {
238 mRttListeners.push_back(l);
239 }
240
241 private:
244 class CRefractionListener : public Ogre::RenderTargetListener
245 {
246 public:
249
252
253 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
254 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
255 };
256
259 class CReflectionListener : public Ogre::RenderTargetListener
260 {
261 public:
264 class CReflectionQueueListener : public Ogre::RenderQueueListener
265 {
266 public:
267 void renderQueueStarted(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) override;
268 void renderQueueEnded(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) override;
269
273 };
274
277
280
283
284 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
285 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
286 };
287
288 class CDepthListener : public Ogre::RenderTargetListener
289 {
290 public:
293
295 std::queue<std::string> mMaterials;
296
299
300 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
301 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
302 };
303
304 class CDepthReflectionListener : public Ogre::RenderTargetListener
305 {
306 public:
309
311 std::queue<std::string> mMaterials;
312
315
316 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
317 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
318 };
319
320 class CGPUNormalMapListener : public Ogre::RenderTargetListener
321 {
322 public:
325
327 Ogre::String mOldMaterialName;
328
329 void preRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
330 void postRenderTargetUpdate(const Ogre::RenderTargetEvent& evt) override;
331 };
332
333
334 void _initializeRtt(const RttType& Rtt, const Ogre::Vector3& RttPlaneNormal,
335 const Ogre::ColourValue& BackgroundColour, const bool& RenderSky,
336 Ogre::RenderTargetListener* RTListener, const Ogre::String& MaterialScheme = "",
337 const bool& ShadowsEnabled = true);
338
339 inline const bool _isRenderQueueInList(const std::vector<Ogre::RenderQueueGroupID>& l, const Ogre::RenderQueueGroupID& rq)
340 {
341 for (std::vector<Ogre::RenderQueueGroupID>::const_iterator i = l.begin(); i != l.end(); i++)
342 {
343 if ((*i) == rq)
344 {
345 return true;
346 }
347 }
348
349 return false;
350 }
351
354
356 Ogre::SceneNode *mPlanesSceneNode;
358 Ogre::MovablePlane *mPlanes[6];
359
361 Ogre::TexturePtr mTextures[6];
364
371
373 std::vector<Ogre::RenderQueueGroupID> mDisableReflectionCustomNearClipPlaneRenderQueues;
375 std::vector<RttListener*> mRttListeners;
376
379 };
380};
381
384
385#endif
Ogre::Real mCameraPlaneDiff
Camera.y - Plane.y difference.
Definition RttManager.h:298
RttManager * mRttManager
Rtt manager pointer.
Definition RttManager.h:292
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
std::queue< std::string > mMaterials
std::string to store entity's original materials name
Definition RttManager.h:295
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
RttManager * mRttManager
Rtt manager pointer.
Definition RttManager.h:308
Ogre::Real mCameraPlaneDiff
Camera.y - Plane.y difference.
Definition RttManager.h:314
std::queue< std::string > mMaterials
std::string to store entity's original materials name
Definition RttManager.h:311
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
RttManager * mRttManager
Rtt manager pointer.
Definition RttManager.h:324
Ogre::String mOldMaterialName
Old Hydrax mesh material name.
Definition RttManager.h:327
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
Used for avoid near clip plane clipping during the reflection Rtt.
Definition RttManager.h:265
void renderQueueStarted(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) override
void renderQueueEnded(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) override
RttManager::CReflectionListener class.
Definition RttManager.h:260
Ogre::Real mCameraPlaneDiff
Camera.y - Plane.y difference.
Definition RttManager.h:282
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
CReflectionQueueListener mCReflectionQueueListener
CReflectionQueueListener.
Definition RttManager.h:276
RttManager * mRttManager
Rtt manager pointer.
Definition RttManager.h:279
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
RttManager::CRefractionListener class.
Definition RttManager.h:245
void postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
RttManager * mRttManager
Rtt manager pointer.
Definition RttManager.h:248
Ogre::Real mCameraPlaneDiff
Camera.y - Plane.y difference.
Definition RttManager.h:251
void preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override
virtual void preRenderTargetUpdate(const RttType &Rtt)
Funtion that is called before the Rtt will render.
Definition RttManager.h:102
virtual void postRenderTargetUpdate(const RttType &Rtt)
Funtion that is called after the Rtt will render.
Definition RttManager.h:108
Rtt's manager class.
Definition RttManager.h:46
void setNumberOfChannels(const RttType &Rtt, const NumberOfChannels &NOC)
Definition RttManager.h:179
RttOptions mRttOptions[6]
Rtt options.
Definition RttManager.h:363
const Ogre::String & getRttName(RttType Rtt) const
Get RTT texture name.
Definition RttManager.h:138
void _initializeRtt(const RttType &Rtt, const Ogre::Vector3 &RttPlaneNormal, const Ogre::ColourValue &BackgroundColour, const bool &RenderSky, Ogre::RenderTargetListener *RTListener, const Ogre::String &MaterialScheme="", const bool &ShadowsEnabled=true)
void remove(const RttType &Rtt)
Removes a RTT.
const Ogre::PixelFormat getPixelFormat(const RttType &Rtt) const
CReflectionListener mReflectionListener
Rtt listener objects.
Definition RttManager.h:366
const Size & getTextureSize(const RttType &Rtt) const
Definition RttManager.h:162
const std::vector< Ogre::RenderQueueGroupID > & getDisableReflectionCustomNearClipPlaneRenderQueues()
Definition RttManager.h:231
void setDisableReflectionCustomNearCliplPlaneRenderQueues(const std::vector< Ogre::RenderQueueGroupID > &DisableReflectionCustomNearClipPlaneRenderQueues)
Definition RttManager.h:226
Hydrax * mHydrax
Hydrax parent pointer.
Definition RttManager.h:353
Ogre::SceneNode * mPlanesSceneNode
SceneNode to attach our planes.
Definition RttManager.h:356
CDepthReflectionListener mDepthReflectionListener
Definition RttManager.h:369
CRefractionListener mRefractionListener
Definition RttManager.h:367
Ogre::TexturePtr getTexture(RttType Rtt)
Get Rtt texture.
Definition RttManager.h:145
Ogre::SceneNode * getPlanesSceneNode()
Definition RttManager.h:150
Ogre::TexturePtr mTextures[6]
Rtt textures vector.
Definition RttManager.h:361
Ogre::MovablePlane * getPlane(RttType Rtt)
Get Rtt plane.
Definition RttManager.h:157
void initialize(const RttType &Rtt)
Initialize a RTT.
void setReflectionDisplacementError(const Ogre::Real &ReflectionDisplacementError)
Range [0.05, ~2], increase if you experience reflection issues when the camera is near to the water.
Definition RttManager.h:216
const bool _isRenderQueueInList(const std::vector< Ogre::RenderQueueGroupID > &l, const Ogre::RenderQueueGroupID &rq)
Definition RttManager.h:339
Ogre::MovablePlane * mPlanes[6]
Rtt planes vector.
Definition RttManager.h:358
NumberOfChannels
Number of channels.
Definition RttManager.h:72
RttType
Rtt enumeration.
Definition RttManager.h:51
CDepthListener mDepthListener
Definition RttManager.h:368
const BitsPerChannel & getBitsPerChannel(const RttType &Rtt) const
Definition RttManager.h:204
BitsPerChannel
Bits per channel.
Definition RttManager.h:63
Ogre::Real mReflectionDisplacementError
Reflection displacement error, range [0.01, ~2].
Definition RttManager.h:378
std::vector< RttListener * > mRttListeners
Rtt listeners.
Definition RttManager.h:375
~RttManager()
Destructor.
std::vector< Ogre::RenderQueueGroupID > mDisableReflectionCustomNearClipPlaneRenderQueues
Render queues to exclude of the reflection custom near clip plane.
Definition RttManager.h:373
void setTextureSize(const RttType &Rtt, const Size &S)
Set Rtt texture size.
CGPUNormalMapListener mGPUNormalMapListener
Definition RttManager.h:370
const Ogre::Real & getReflectionDisplacementError() const
Definition RttManager.h:221
const NumberOfChannels & getNumberOfChannels(const RttType &Rtt) const
Definition RttManager.h:189
void addRttListener(RttListener *l)
Definition RttManager.h:236
void setTexturesSize(const Size &S)
Set Rtt textures size.
void removeAll()
Remove all RttManager resources.
const RttOptions & getRttOptions(const RttType &Rtt) const
Definition RttManager.h:209
void setBitsPerChannel(const RttType &Rtt, const BitsPerChannel &BPC)
Definition RttManager.h:194
Rtt options struct.
Definition RttManager.h:82
Ogre::String Name
Texture names.
Definition RttManager.h:84
NumberOfChannels NumberOfChannels_
Number of channels.
Definition RttManager.h:88
BitsPerChannel BitsPerChannel_
Bits per channel.
Definition RttManager.h:90
Size Size_
Size; Size(0,0) to get main viewport size.
Definition RttManager.h:86
Struct wich contains an especific width and height value.
Definition Help.h:41