OGRE  1.9.0
OgreRenderTarget.h
Go to the documentation of this file.
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4 (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2014 Torus Knot Software Ltd
8
9Permission is hereby granted, free of charge, to any person obtaining a copy
10of this software and associated documentation files (the "Software"), to deal
11in the Software without restriction, including without limitation the rights
12to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13copies of the Software, and to permit persons to whom the Software is
14furnished to do so, subject to the following conditions:
15
16The above copyright notice and this permission notice shall be included in
17all copies or substantial portions of the Software.
18
19THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25THE 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
46namespace Ogre {
47
66 {
67 public:
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
80 {
81 float lastFPS;
82 float avgFPS;
83 float bestFPS;
84 float worstFPS;
85 unsigned long bestFrameTime;
86 unsigned long worstFrameTime;
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
119
120 //Returns the pool ID this RenderTarget should query from. @see DepthBuffer
122
124
125 //Returns false if couldn't attach
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
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
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
454
461 virtual void _endUpdate();
462
463 protected:
468
474
475 // Stats
477
479 unsigned long mLastSecond;
480 unsigned long mLastTime;
482
485 // Hardware sRGB gamma conversion done on write?
487 // FSAA performed?
490
491 void updateStats(void);
492
496
499
500
502 virtual void firePreUpdate(void);
504 virtual void firePostUpdate(void);
513
515 virtual void updateImpl();
516 };
520} // Namespace
521
522#include "OgreHeaderSuffix.h"
523
524#endif
#define _OgreExport
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 void addListener(RenderTargetListener *listener)
Add a listener to this RenderTarget which will be called back before & after rendering.
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 const FrameStats & getStatistics(void) const
virtual size_t getBatchCount(void) const
Gets the number of batches rendered in the last update() call.
virtual Viewport * getViewportByZOrder(int ZOrder)
Retrieves a pointer to the viewport with the given Z-order.
virtual void detachDepthBuffer()
vector< RenderTargetListener * >::type RenderTargetListenerList
virtual const String & getFSAAHint() const
Gets the FSAA hint (.
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...
uchar mPriority
The priority of the render target.
virtual Impl * _getImpl()
Get rendersystem specific interface for this RenderTarget.
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 void copyContentsToMemory(const PixelBox &dst, FrameBuffer buffer=FB_AUTO)=0
Copies the current contents of the render target to a pixelbox.
map< int, Viewport * >::type ViewportList
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 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 Viewport * getViewport(unsigned short index)
Retrieves a pointer to the viewport with the given index.
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.
DepthBuffer * getDepthBuffer() const
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
virtual const String & getName(void) const
Retrieve target's name.
RenderTargetListenerList mListeners
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 resetStatistics(void)
Resets saved frame-rate statistices.
unsigned long mLastSecond
virtual void _detachDepthBuffer()
Detaches DepthBuffer without notifying it from the detach.
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.
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()
Reference-counted shared pointer, used for objects where implicit destruction is required.
An abstraction of a viewport, i.e.
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
_StringBase String
std::map< K, V, P, A > type
std::vector< T, A > type