OgreRenderTarget.h
Go to the documentation of this file.
1 /*
2 -----------------------------------------------------------------------------
3 This source file is part of OGRE
4  (Object-oriented Graphics Rendering Engine)
5 For the latest info, see http://www.ogre3d.org/
6 
7 Copyright (c) 2000-2013 Torus Knot Software Ltd
8 
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
15 
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 THE SOFTWARE.
26 -----------------------------------------------------------------------------
27 */
28 #ifndef __RenderTarget_H__
29 #define __RenderTarget_H__
30 
31 #include "OgrePrerequisites.h"
32 
33 #include "OgreString.h"
34 #include "OgreTextureManager.h"
35 #include "OgreViewport.h"
36 #include "OgreTimer.h"
37 #include "OgreHeaderPrefix.h"
38 
39 /* Define the number of priority groups for the render system's render targets. */
40 #ifndef OGRE_NUM_RENDERTARGET_GROUPS
41  #define OGRE_NUM_RENDERTARGET_GROUPS 10
42  #define OGRE_DEFAULT_RT_GROUP 4
43  #define OGRE_REND_TO_TEX_RT_GROUP 2
44 #endif
45 
46 namespace Ogre {
47 
66  {
67  public:
68  enum StatFlags
69  {
70  SF_NONE = 0,
71  SF_FPS = 1,
72  SF_AVG_FPS = 2,
73  SF_BEST_FPS = 4,
74  SF_WORST_FPS = 8,
75  SF_TRIANGLE_COUNT = 16,
76  SF_ALL = 0xFFFF
77  };
78 
79  struct FrameStats
80  {
81  float lastFPS;
82  float avgFPS;
83  float bestFPS;
84  float worstFPS;
85  unsigned long bestFrameTime;
86  unsigned long worstFrameTime;
87  size_t triangleCount;
88  size_t batchCount;
89  };
90 
92  {
95  FB_AUTO
96  };
97 
99  virtual ~RenderTarget();
100 
102  virtual const String& getName(void) const;
103 
105  virtual void getMetrics(unsigned int& width, unsigned int& height, unsigned int& colourDepth);
106 
107  virtual uint32 getWidth(void) const;
108  virtual uint32 getHeight(void) const;
109  virtual uint32 getColourDepth(void) const;
110 
118  void setDepthBufferPool( uint16 poolId );
119 
120  //Returns the pool ID this RenderTarget should query from. @see DepthBuffer
122 
124 
125  //Returns false if couldn't attach
126  virtual bool attachDepthBuffer( DepthBuffer *depthBuffer );
127 
128  virtual void detachDepthBuffer();
129 
134  virtual void _detachDepthBuffer();
135 
158  virtual void update(bool swapBuffers = true);
167  virtual void swapBuffers() {}
168 
192  virtual Viewport* addViewport(Camera* cam, int ZOrder = 0, float left = 0.0f, float top = 0.0f ,
193  float width = 1.0f, float height = 1.0f);
194 
196  virtual unsigned short getNumViewports(void) const;
197 
199  virtual Viewport* getViewport(unsigned short index);
200 
204  virtual Viewport* getViewportByZOrder(int ZOrder);
205 
207  virtual bool hasViewportWithZOrder(int ZOrder);
208 
211  virtual void removeViewport(int ZOrder);
212 
215  virtual void removeAllViewports(void);
216 
235  virtual void getStatistics(float& lastFPS, float& avgFPS,
236  float& bestFPS, float& worstFPS) const; // Access to stats
237 
238  virtual const FrameStats& getStatistics(void) const;
239 
242  virtual float getLastFPS() const;
243 
246  virtual float getAverageFPS() const;
247 
250  virtual float getBestFPS() const;
251 
254  virtual float getWorstFPS() const;
255 
258  virtual float getBestFrameTime() const;
259 
262  virtual float getWorstFrameTime() const;
263 
266  virtual void resetStatistics(void);
267 
277  virtual void getCustomAttribute(const String& name, void* pData);
278 
287  virtual void addListener(RenderTargetListener* listener);
289  virtual void removeListener(RenderTargetListener* listener);
291  virtual void removeAllListeners(void);
292 
300  virtual void setPriority( uchar priority ) { mPriority = priority; }
302  virtual uchar getPriority() const { return mPriority; }
303 
306  virtual bool isActive() const;
307 
310  virtual void setActive( bool state );
311 
323  virtual void setAutoUpdated(bool autoupdate);
327  virtual bool isAutoUpdated(void) const;
328 
334  virtual void copyContentsToMemory(const PixelBox &dst, FrameBuffer buffer = FB_AUTO) = 0;
335 
339  virtual PixelFormat suggestPixelFormat() const { return PF_BYTE_RGBA; }
340 
342  void writeContentsToFile(const String& filename);
343 
346  virtual String writeContentsToTimestampedFile(const String& filenamePrefix, const String& filenameSuffix);
347 
348  virtual bool requiresTextureFlipping() const = 0;
349 
351  virtual size_t getTriangleCount(void) const;
353  virtual size_t getBatchCount(void) const;
357  virtual void _notifyCameraRemoved(const Camera* cam);
358 
365  virtual bool isPrimary(void) const;
366 
374  virtual bool isHardwareGammaEnabled() const { return mHwGamma; }
375 
378  virtual uint getFSAA() const { return mFSAA; }
379 
382  virtual const String& getFSAAHint() const { return mFSAAHint; }
383 
387  class Impl
388  {
389  protected:
390  ~Impl() { }
391  };
397  virtual Impl *_getImpl();
398 
422  virtual void _beginUpdate();
423 
433  virtual void _updateViewport(int zorder, bool updateStatistics = true);
434 
443  virtual void _updateViewport(Viewport* viewport, bool updateStatistics = true);
444 
453  virtual void _updateAutoUpdatedViewports(bool updateStatistics = true);
454 
461  virtual void _endUpdate();
462 
463  protected:
468 
474 
475  // Stats
477 
479  unsigned long mLastSecond;
480  unsigned long mLastTime;
481  size_t mFrameCount;
482 
483  bool mActive;
485  // Hardware sRGB gamma conversion done on write?
486  bool mHwGamma;
487  // FSAA performed?
490 
491  void updateStats(void);
492 
496 
499 
500 
502  virtual void firePreUpdate(void);
504  virtual void firePostUpdate(void);
506  virtual void fireViewportPreUpdate(Viewport* vp);
508  virtual void fireViewportPostUpdate(Viewport* vp);
510  virtual void fireViewportAdded(Viewport* vp);
512  virtual void fireViewportRemoved(Viewport* vp);
513 
515  virtual void updateImpl();
516  };
520 } // Namespace
521 
522 #include "OgreHeaderSuffix.h"
523 
524 #endif
#define _OgreExport
Definition: OgrePlatform.h:257
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:87
An abstract class that contains a depth/stencil buffer.
A primitive describing a volume (3D), image (2D) or line (1D) of pixels in memory.
A interface class defining a listener which can be used to receive notifications of RenderTarget even...
RenderSystem specific interface for a RenderTarget; this should be subclassed by RenderSystems.
A 'canvas' which can receive the results of a rendering operation.
virtual void setAutoUpdated(bool autoupdate)
Sets whether this target should be automatically updated if Ogre's rendering loop or Root::_updateAll...
virtual void setPriority(uchar priority)
Sets the priority of this render target in relation to the others.
virtual void getStatistics(float &lastFPS, float &avgFPS, float &bestFPS, float &worstFPS) const
Retieves details of current rendering performance.
virtual void removeAllViewports(void)
Removes all viewports on this target.
virtual bool isActive() const
Used to retrieve or set the active state of the render target.
virtual Viewport * getViewportByZOrder(int ZOrder)
Retrieves a pointer to the viewport with the given Z-order.
virtual void addListener(RenderTargetListener *listener)
Add a listener to this RenderTarget which will be called back before & after rendering.
virtual Viewport * addViewport(Camera *cam, int ZOrder=0, float left=0.0f, float top=0.0f, float width=1.0f, float height=1.0f)
Adds a viewport to the rendering target.
virtual void setActive(bool state)
Used to set the active state of the render target.
virtual void removeViewport(int ZOrder)
Removes a viewport at a given Z-order.
virtual String writeContentsToTimestampedFile(const String &filenamePrefix, const String &filenameSuffix)
Writes the current contents of the render target to the (PREFIX)(time-stamp)(SUFFIX) file.
virtual void updateImpl()
Internal implementation of update()
virtual size_t getBatchCount(void) const
Gets the number of batches rendered in the last update() call.
virtual void detachDepthBuffer()
vector< RenderTargetListener * >::type RenderTargetListenerList
virtual float getWorstFrameTime() const
Individual stats access - gets the worst frame time.
virtual void firePreUpdate(void)
internal method for firing events
virtual bool requiresTextureFlipping() const =0
virtual void _endUpdate()
Method for manual management of rendering - finishes statistics calculation and fires 'postRenderTarg...
virtual const String & getName(void) const
Retrieve target's name.
uchar mPriority
The priority of the render target.
virtual float getLastFPS() const
Individual stats access - gets the number of frames per second (FPS) based on the last frame rendered...
virtual void update(bool swapBuffers=true)
Tells the target to update it's contents.
virtual const FrameStats & getStatistics(void) const
virtual void copyContentsToMemory(const PixelBox &dst, FrameBuffer buffer=FB_AUTO)=0
Copies the current contents of the render target to a pixelbox.
virtual void getCustomAttribute(const String &name, void *pData)
Gets a custom (maybe platform-specific) attribute.
virtual uint32 getHeight(void) const
virtual void removeAllListeners(void)
Removes all listeners from this instance.
virtual void fireViewportPostUpdate(Viewport *vp)
internal method for firing events
virtual void removeListener(RenderTargetListener *listener)
Removes a RenderTargetListener previously registered using addListener.
virtual Viewport * getViewport(unsigned short index)
Retrieves a pointer to the viewport with the given index.
virtual void swapBuffers()
Swaps the frame buffers to display the next frame.
virtual float getBestFrameTime() const
Individual stats access - gets the best frame time.
virtual float getWorstFPS() const
Individual stats access - gets the worst frames per second (FPS) since call to Root::startRendering.
virtual bool isAutoUpdated(void) const
Gets whether this target is automatically updated if Ogre's rendering loop or Root::_updateAllRenderT...
virtual uchar getPriority() const
Gets the priority of a render target.
virtual bool isHardwareGammaEnabled() const
Indicates whether on rendering, linear colour space is converted to sRGB gamma colour space.
virtual void _notifyCameraRemoved(const Camera *cam)
Utility method to notify a render target that a camera has been removed, incase it was referring to i...
ViewportList mViewportList
List of viewports, map on Z-order.
virtual void _updateViewport(int zorder, bool updateStatistics=true)
Method for manual management of rendering - renders the given viewport (even if it is not autoupdated...
virtual bool isPrimary(void) const
Indicates whether this target is the primary window.
virtual void fireViewportAdded(Viewport *vp)
internal method for firing events
virtual uint getFSAA() const
Indicates whether multisampling is performed on rendering and at what level.
virtual bool hasViewportWithZOrder(int ZOrder)
Returns true if and only if a viewport exists at the given Z-order.
virtual float getBestFPS() const
Individual stats access - gets the best frames per second (FPS) since call to Root::startRendering.
void updateStats(void)
virtual unsigned short getNumViewports(void) const
Returns the number of viewports attached to this target.
virtual uint32 getWidth(void) const
virtual bool attachDepthBuffer(DepthBuffer *depthBuffer)
DepthBuffer * mDepthBuffer
virtual void fireViewportPreUpdate(Viewport *vp)
internal method for firing events
virtual PixelFormat suggestPixelFormat() const
Suggests a pixel format to use for extracting the data in this target, when calling copyContentsToMem...
virtual size_t getTriangleCount(void) const
Gets the number of triangles rendered in the last update() call.
unsigned long mLastTime
virtual void firePostUpdate(void)
internal method for firing events
virtual void _updateAutoUpdatedViewports(bool updateStatistics=true)
Method for manual management of rendering - renders only viewports that are auto updated.
void setDepthBufferPool(uint16 poolId)
Sets the pool ID this RenderTarget should query from.
virtual void _beginUpdate()
Method for manual management of rendering : fires 'preRenderTargetUpdate' and initialises statistics ...
virtual void getMetrics(unsigned int &width, unsigned int &height, unsigned int &colourDepth)
Retrieve information about the render target.
virtual uint32 getColourDepth(void) const
DepthBuffer * getDepthBuffer() const
RenderTargetListenerList mListeners
virtual Impl * _getImpl()
Get rendersystem specific interface for this RenderTarget.
virtual void resetStatistics(void)
Resets saved frame-rate statistices.
unsigned long mLastSecond
virtual void _detachDepthBuffer()
Detaches DepthBuffer without notifying it from the detach.
virtual const String & getFSAAHint() const
Gets the FSAA hint (.
virtual float getAverageFPS() const
Individual stats access - gets the average frames per second (FPS) since call to Root::startRendering...
String mName
The name of this target.
map< int, Viewport * >::type ViewportList
uint16 getDepthBufferPool() const
virtual void _updateViewport(Viewport *viewport, bool updateStatistics=true)
Method for manual management of rendering - renders the given viewport (even if it is not autoupdated...
void writeContentsToFile(const String &filename)
Writes the current contents of the render target to the named file.
virtual void fireViewportRemoved(Viewport *vp)
internal method for firing events
virtual ~RenderTarget()
Timer class.
An abstraction of a viewport, i.e.
Definition: OgreViewport.h:58
PixelFormat
The pixel format used for images, textures, and render surfaces.
@ PF_BYTE_RGBA
4 byte pixel format, 1 byte for red, 1 byte for green, 1 byte for blue, and one byte for alpha
unsigned char uchar
In order to avoid finger-aches :)
unsigned short uint16
Definition: OgrePlatform.h:360
unsigned int uint
unsigned int uint32
Definition: OgrePlatform.h:359
_StringBase String

Copyright © 2012 Torus Knot Software Ltd
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.