OGRE  1.7
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
OgreRenderSystem.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-2011 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 __RenderSystem_H_
29 #define __RenderSystem_H_
30 
31 // Precompiler options
32 #include "OgrePrerequisites.h"
33 
34 #include "OgreString.h"
35 
36 #include "OgreTextureUnitState.h"
37 #include "OgreCommon.h"
38 
39 #include "OgreRenderOperation.h"
41 #include "OgreRenderTarget.h"
42 #include "OgreRenderTexture.h"
43 #include "OgreFrameListener.h"
44 #include "OgreConfigOptionMap.h"
45 #include "OgreGpuProgram.h"
46 #include "OgrePlane.h"
47 #include "OgreIteratorWrappers.h"
48 
49 namespace Ogre
50 {
60 
61  class TextureManager;
64  {
75  };
78  {
95  };
96 
97 
122  {
123  public:
126  RenderSystem();
127 
130  virtual ~RenderSystem();
131 
134  virtual const String& getName(void) const = 0;
135 
157  virtual ConfigOptionMap& getConfigOptions(void) = 0;
158 
178  virtual void setConfigOption(const String &name, const String &value) = 0;
179 
182  virtual HardwareOcclusionQuery* createHardwareOcclusionQuery(void) = 0;
183 
186  virtual void destroyHardwareOcclusionQuery(HardwareOcclusionQuery *hq);
187 
192  virtual String validateConfigOptions(void) = 0;
193 
210  virtual RenderWindow* _initialise(bool autoCreateWindow, const String& windowTitle = "OGRE Render Window");
211 
212 
214  virtual RenderSystemCapabilities* createRenderSystemCapabilities() const = 0;
215 
222  virtual void useCustomRenderSystemCapabilities(RenderSystemCapabilities* capabilities);
223 
226  virtual void reinitialise(void) = 0;
227 
230  virtual void shutdown(void);
231 
232 
235  virtual void setAmbientLight(float r, float g, float b) = 0;
236 
239  virtual void setShadingType(ShadeOptions so) = 0;
240 
246  virtual void setLightingEnabled(bool enabled) = 0;
247 
254  void setWBufferEnabled(bool enabled);
255 
258  bool getWBufferEnabled(void) const;
259 
466  virtual RenderWindow* _createRenderWindow(const String &name, unsigned int width, unsigned int height,
467  bool fullScreen, const NameValuePairList *miscParams = 0) = 0;
468 
484  virtual bool _createRenderWindows(const RenderWindowDescriptionList& renderWindowDescriptions,
485  RenderWindowList& createdWindows);
486 
487 
492  virtual MultiRenderTarget * createMultiRenderTarget(const String & name) = 0;
493 
495  virtual void destroyRenderWindow(const String& name);
497  virtual void destroyRenderTexture(const String& name);
499  virtual void destroyRenderTarget(const String& name);
500 
503  virtual void attachRenderTarget( RenderTarget &target );
507  virtual RenderTarget * getRenderTarget( const String &name );
513  virtual RenderTarget * detachRenderTarget( const String &name );
514 
517 
520  return RenderTargetIterator( mRenderTargets.begin(), mRenderTargets.end() );
521  }
524  virtual String getErrorDescription(long errorNumber) const = 0;
525 
539  void setWaitForVerticalBlank(bool enabled);
540 
543  bool getWaitForVerticalBlank(void) const;
544 
545  // ------------------------------------------------------------------------
546  // Internal Rendering Access
547  // All methods below here are normally only called by other OGRE classes
548  // They can be called by library user if required
549  // ------------------------------------------------------------------------
550 
551 
555  virtual void _useLights(const LightList& lights, unsigned short limit) = 0;
558  virtual bool areFixedFunctionLightsInViewSpace() const { return false; }
560  virtual void _setWorldMatrix(const Matrix4 &m) = 0;
562  virtual void _setWorldMatrices(const Matrix4* m, unsigned short count);
564  virtual void _setViewMatrix(const Matrix4 &m) = 0;
566  virtual void _setProjectionMatrix(const Matrix4 &m) = 0;
572  virtual void _setTextureUnitSettings(size_t texUnit, TextureUnitState& tl);
574  virtual void _disableTextureUnit(size_t texUnit);
576  virtual void _disableTextureUnitsFrom(size_t texUnit);
610  virtual void _setSurfaceParams(const ColourValue &ambient,
611  const ColourValue &diffuse, const ColourValue &specular,
612  const ColourValue &emissive, Real shininess,
613  TrackVertexColourType tracking = TVC_NONE) = 0;
614 
620  virtual void _setPointSpritesEnabled(bool enabled) = 0;
621 
632  virtual void _setPointParameters(Real size, bool attenuationEnabled,
633  Real constant, Real linear, Real quadratic, Real minSize, Real maxSize) = 0;
634 
635 
648  virtual void _setTexture(size_t unit, bool enabled,
649  const TexturePtr &texPtr) = 0;
663  virtual void _setTexture(size_t unit, bool enabled, const String &texname);
664 
674  virtual void _setVertexTexture(size_t unit, const TexturePtr& tex);
675 
685  virtual void _setTextureCoordSet(size_t unit, size_t index) = 0;
686 
694  virtual void _setTextureCoordCalculation(size_t unit, TexCoordCalcMethod m,
695  const Frustum* frustum = 0) = 0;
696 
703  virtual void _setTextureBlendMode(size_t unit, const LayerBlendModeEx& bm) = 0;
704 
711  virtual void _setTextureUnitFiltering(size_t unit, FilterOptions minFilter,
712  FilterOptions magFilter, FilterOptions mipFilter);
713 
719  virtual void _setTextureUnitFiltering(size_t unit, FilterType ftype, FilterOptions filter) = 0;
720 
722  virtual void _setTextureLayerAnisotropy(size_t unit, unsigned int maxAnisotropy) = 0;
723 
725  virtual void _setTextureAddressingMode(size_t unit, const TextureUnitState::UVWAddressingMode& uvw) = 0;
726 
728  virtual void _setTextureBorderColour(size_t unit, const ColourValue& colour) = 0;
729 
738  virtual void _setTextureMipmapBias(size_t unit, float bias) = 0;
739 
744  virtual void _setTextureMatrix(size_t unit, const Matrix4& xform) = 0;
745 
756  virtual void _setSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendOperation op = SBO_ADD) = 0;
757 
770  virtual void _setSeparateSceneBlending(SceneBlendFactor sourceFactor, SceneBlendFactor destFactor, SceneBlendFactor sourceFactorAlpha,
771  SceneBlendFactor destFactorAlpha, SceneBlendOperation op = SBO_ADD, SceneBlendOperation alphaOp = SBO_ADD) = 0;
772 
779  virtual void _setAlphaRejectSettings(CompareFunction func, unsigned char value, bool alphaToCoverage) = 0;
780 
784  virtual void _setTextureProjectionRelativeTo(bool enabled, const Vector3& pos);
789  virtual void _beginFrame(void) = 0;
790 
791  //Dummy structure for render system contexts - implementing RenderSystems can extend
792  //as needed
799  virtual RenderSystemContext* _pauseFrame(void);
806  virtual void _resumeFrame(RenderSystemContext* context);
807 
811  virtual void _endFrame(void) = 0;
819  virtual void _setViewport(Viewport *vp) = 0;
821  virtual Viewport* _getViewport(void);
822 
834  virtual void _setCullingMode(CullingMode mode) = 0;
835 
836  virtual CullingMode _getCullingMode(void) const;
837 
851  virtual void _setDepthBufferParams(bool depthTest = true, bool depthWrite = true, CompareFunction depthFunction = CMPF_LESS_EQUAL) = 0;
852 
857  virtual void _setDepthBufferCheckEnabled(bool enabled = true) = 0;
862  virtual void _setDepthBufferWriteEnabled(bool enabled = true) = 0;
870  virtual void _setDepthBufferFunction(CompareFunction func = CMPF_LESS_EQUAL) = 0;
878  virtual void _setColourBufferWriteEnabled(bool red, bool green, bool blue, bool alpha) = 0;
901  virtual void _setDepthBias(float constantBias, float slopeScaleBias = 0.0f) = 0;
913  virtual void _setFog(FogMode mode = FOG_NONE, const ColourValue& colour = ColourValue::White, Real expDensity = 1.0, Real linearStart = 0.0, Real linearEnd = 1.0) = 0;
914 
915 
917  virtual void _beginGeometryCount(void);
919  virtual unsigned int _getFaceCount(void) const;
921  virtual unsigned int _getBatchCount(void) const;
923  virtual unsigned int _getVertexCount(void) const;
924 
933  virtual void convertColourValue(const ColourValue& colour, uint32* pDest);
937  virtual VertexElementType getColourVertexElementType(void) const = 0;
938 
945  virtual void _convertProjectionMatrix(const Matrix4& matrix,
946  Matrix4& dest, bool forGpuProgram = false) = 0;
947 
954  virtual void _makeProjectionMatrix(const Radian& fovy, Real aspect, Real nearPlane, Real farPlane,
955  Matrix4& dest, bool forGpuProgram = false) = 0;
956 
963  virtual void _makeProjectionMatrix(Real left, Real right, Real bottom, Real top,
964  Real nearPlane, Real farPlane, Matrix4& dest, bool forGpuProgram = false) = 0;
971  virtual void _makeOrthoMatrix(const Radian& fovy, Real aspect, Real nearPlane, Real farPlane,
972  Matrix4& dest, bool forGpuProgram = false) = 0;
973 
990  virtual void _applyObliqueDepthProjection(Matrix4& matrix, const Plane& plane,
991  bool forGpuProgram) = 0;
992 
994  virtual void _setPolygonMode(PolygonMode level) = 0;
995 
1002  virtual void setStencilCheckEnabled(bool enabled) = 0;
1018  /*virtual bool hasHardwareStencil(void) = 0;*/
1019 
1055  virtual void setStencilBufferParams(CompareFunction func = CMPF_ALWAYS_PASS,
1056  uint32 refValue = 0, uint32 mask = 0xFFFFFFFF,
1057  StencilOperation stencilFailOp = SOP_KEEP,
1058  StencilOperation depthFailOp = SOP_KEEP,
1059  StencilOperation passOp = SOP_KEEP,
1060  bool twoSidedOperation = false) = 0;
1061 
1062 
1063 
1065  virtual void setVertexDeclaration(VertexDeclaration* decl) = 0;
1067  virtual void setVertexBufferBinding(VertexBufferBinding* binding) = 0;
1068 
1079  virtual void setNormaliseNormals(bool normalise) = 0;
1080 
1093  virtual void _render(const RenderOperation& op);
1094 
1096  const RenderSystemCapabilities* getCapabilities(void) const { return mCurrentCapabilities; }
1097 
1098 
1101  virtual const DriverVersion& getDriverVersion(void) const { return mDriverVersion; }
1102 
1107  virtual void bindGpuProgram(GpuProgram* prg);
1108 
1114  virtual void bindGpuProgramParameters(GpuProgramType gptype,
1115  GpuProgramParametersSharedPtr params, uint16 variabilityMask) = 0;
1116 
1119  virtual void bindGpuProgramPassIterationParameters(GpuProgramType gptype) = 0;
1124  virtual void unbindGpuProgram(GpuProgramType gptype);
1125 
1127  virtual bool isGpuProgramBound(GpuProgramType gptype);
1128 
1131  virtual void setClipPlanes(const PlaneList& clipPlanes);
1132 
1134  virtual void addClipPlane (const Plane &p);
1136  virtual void addClipPlane (Real A, Real B, Real C, Real D);
1137 
1140  virtual void resetClipPlanes();
1141 
1143  virtual void _initRenderTargets(void);
1144 
1148  virtual void _notifyCameraRemoved(const Camera* cam);
1149 
1151  virtual void _updateAllRenderTargets(bool swapBuffers = true);
1154  virtual void _swapAllRenderTargetBuffers(bool waitForVsync = true);
1155 
1158  virtual void setInvertVertexWinding(bool invert);
1159 
1163  virtual bool getInvertVertexWinding(void) const;
1164 
1176  virtual void setScissorTest(bool enabled, size_t left = 0, size_t top = 0,
1177  size_t right = 800, size_t bottom = 600) = 0;
1178 
1186  virtual void clearFrameBuffer(unsigned int buffers,
1187  const ColourValue& colour = ColourValue::Black,
1188  Real depth = 1.0f, unsigned short stencil = 0) = 0;
1198  virtual Real getHorizontalTexelOffset(void) = 0;
1208  virtual Real getVerticalTexelOffset(void) = 0;
1209 
1218  virtual Real getMinimumDepthInputValue(void) = 0;
1227  virtual Real getMaximumDepthInputValue(void) = 0;
1233  virtual void setCurrentPassIterationCount(const size_t count) { mCurrentPassIterationCount = count; }
1234 
1244  virtual void setDeriveDepthBias(bool derive, float baseValue = 0.0f,
1245  float multiplier = 0.0f, float slopeScale = 0.0f)
1246  {
1247  mDerivedDepthBias = derive;
1248  mDerivedDepthBiasBase = baseValue;
1249  mDerivedDepthBiasMultiplier = multiplier;
1250  mDerivedDepthBiasSlopeScale = slopeScale;
1251  }
1252 
1256  virtual void _setRenderTarget(RenderTarget *target) = 0;
1257 
1263  {
1264  public:
1266  virtual ~Listener() {}
1267 
1273  virtual void eventOccurred(const String& eventName,
1274  const NameValuePairList* parameters = 0) = 0;
1275  };
1289  virtual void addListener(Listener* l);
1292  virtual void removeListener(Listener* l);
1293 
1298  virtual const StringVector& getRenderSystemEvents(void) const { return mEventNames; }
1299 
1316  virtual void preExtraThreadsStarted() = 0;
1317 
1318  /* Tell the rendersystem to perform any tasks it needs to directly
1319  after other threads which might access the rendering API are registered.
1320  @see RenderSystem::preExtraThreadsStarted
1321  */
1322  virtual void postExtraThreadsStarted() = 0;
1323 
1336  virtual void registerThread() = 0;
1337 
1341  virtual void unregisterThread() = 0;
1342 
1347  virtual unsigned int getDisplayMonitorCount() const = 0;
1348  protected:
1349 
1350 
1361 
1362  // Texture manager
1363  // A concrete class of this will be created and
1364  // made available under the TextureManager singleton,
1365  // managed by the RenderSystem
1367 
1368  // Active viewport (dest for future rendering operations)
1370 
1372 
1373  bool mVSync;
1374  unsigned int mVSyncInterval;
1375  bool mWBuffer;
1376 
1377  size_t mBatchCount;
1378  size_t mFaceCount;
1380 
1382  ColourValue mManualBlendColours[OGRE_MAX_TEXTURE_LAYERS][2];
1383 
1385 
1388 
1397 
1402  bool updatePassIterationRenderState(void);
1403 
1406 
1408  virtual void fireEvent(const String& name, const NameValuePairList* params = 0);
1409 
1412 
1415 
1419 
1420  // Recording user clip planes
1422  // Indicator that we need to re-set the clip planes on next render call
1424 
1429 
1431  virtual void setClipPlanesImpl(const PlaneList& clipPlanes) = 0;
1432 
1434  virtual void initialiseFromRenderSystemCapabilities(RenderSystemCapabilities* caps, RenderTarget* primary) = 0;
1435 
1436 
1438 
1441 
1442 
1443 
1444  };
1447 }
1448 
1449 #endif
virtual const DriverVersion & getDriverVersion(void) const
Returns the driver version.
Manages the target rendering window.
A 'canvas' which can receive the results of a rendering operation.
GpuProgramParametersSharedPtr mActiveFragmentGpuProgramParameters
A viewpoint from which the scene will be rendered.
Definition: OgreCamera.h:85
RenderSystemCapabilities * mCurrentCapabilities
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: OgreMatrix4.h:78
float Real
Software floating point type.
unsigned int uint32
Definition: OgrePlatform.h:246
#define _OgreExport
Definition: OgrePlatform.h:203
GpuProgramParametersSharedPtr mActiveGeometryGpuProgramParameters
Records the state of all the vertex buffer bindings required to provide a vertex declaration with the...
map< String, String >::type NameValuePairList
Name / value parameter pair (first = name, second = value)
Definition: OgreCommon.h:524
bool mDerivedDepthBias
Whether to update the depth bias per render call.
Defines a plane in 3D space.
Definition: OgrePlane.h:61
FogMode
Fog modes.
Definition: OgreCommon.h:122
Leave the stencil buffer unchanged.
map< String, RenderTarget * >::type RenderTargetMap
Class for loading & managing textures.
Class representing colour.
GpuProgramType
Enumerates the types of programs which can run on the GPU.
static const ColourValue White
A frustum represents a pyramid, capped at the near and far end which is used to represent either a vi...
Definition: OgreFrustum.h:84
virtual void setCurrentPassIterationCount(const size_t count)
set the current multi pass count value.
StringVector mEventNames
List of names of events this rendersystem may raise.
RenderSystemCapabilities * mRealCapabilities
Used to store the capabilities of the graphics card.
Defines a program which runs on the GPU such as a vertex or fragment program.
TexCoordCalcMethod
Enum describing the ways to generate texture coordinates.
MapIterator< Ogre::RenderTargetMap > RenderTargetIterator
Iterator over RenderTargets.
FilterType
Definition: OgreCommon.h:91
Invert the bits of the stencil buffer.
SceneBlendFactor
Blending factors for manually blending objects with the scene.
Environment map based on vertex positions.
RenderTarget * mActiveRenderTarget
The Active render target.
CullingMode
Hardware culling modes based on vertex winding.
Definition: OgreCommon.h:136
Concrete IteratorWrapper for nonconst access to the underlying key-value container.
No fog. Duh.
Definition: OgreCommon.h:125
This class represents a render target that renders to multiple RenderTextures at once.
Decrease the stencil value by 1, wrapping when decrementing 0.
No calculated texture coordinates.
This is a abstract class that that provides the interface for the query class for hardware occlusion...
vector< RenderWindow * >::type RenderWindowList
Render window container.
Definition: OgreCommon.h:738
ListenerList mEventListeners
RenderTargetPriorityMap mPrioritisedRenderTargets
The render targets, ordered by priority.
Increase the stencil value by 1, clamping at the maximum value.
vector< Plane >::type PlaneList
Definition: OgrePlane.h:160
HardwareOcclusionQueryList mHwOcclusionQueries
#define OGRE_MAX_TEXTURE_LAYERS
Define max number of texture layers allowed per pass on any card.
Definition: OgreConfig.h:70
size_t mDisabledTexUnitsFrom
Texture units from this upwards are disabled.
virtual const StringVector & getRenderSystemEvents(void) const
Gets a list of the rendersystem specific events that this rendersystem can raise. ...
DriverVersion is used by RenderSystemCapabilities and both GL and D3D9 to store the version of the cu...
virtual RenderTargetIterator getRenderTargetIterator(void)
Returns a specialised MapIterator over all render targets attached to the RenderSystem.
const RenderSystemCapabilities * getCapabilities(void) const
Gets the capabilities of the render system.
ShadeOptions
Light shading modes.
Definition: OgreCommon.h:114
Texture addressing mode for each texture coordinate.
map< String, ConfigOption >::type ConfigOptionMap
Superclass for all objects that wish to use custom memory allocators when their new / delete operator...
Set the stencil value to the reference value.
Specialisation of SharedPtr to allow SharedPtr to be assigned to TexturePtr.
Definition: OgreTexture.h:440
VertexElementType
Vertex element type, used to identify the base types of the vertex contents.
vector< String >::type StringVector
DriverVersion mDriverVersion
size_t mCurrentPassIterationCount
number of times to render the current state
Standard 3-dimensional vector.
Definition: OgreVector3.h:51
GpuProgramParametersSharedPtr mActiveVertexGpuProgramParameters
The Active GPU programs and gpu program parameters.
virtual void setDeriveDepthBias(bool derive, float baseValue=0.0f, float multiplier=0.0f, float slopeScale=0.0f)
Tell the render system whether to derive a depth bias on its own based on the values passed to it in ...
An abstraction of a viewport, i.e.
Definition: OgreViewport.h:56
'New' rendering operation using vertex buffers.
Set the stencil value to zero.
This class declares the format of a set of vertex inputs, which can be issued to the rendering API th...
Increase the stencil value by 1, wrapping back to 0 when incrementing the maximum value...
Wrapper class which indicates a given angle value is in Radians.
Definition: OgreMath.h:46
virtual bool areFixedFunctionLightsInViewSpace() const
Are fixed-function lights provided in view space? Affects optimisation.
TextureManager * mTextureManager
PolygonMode
The polygon mode to use when rasterising.
Definition: OgreCommon.h:180
static const ColourValue Black
SceneBlendOperation
Blending operations controls how objects are blended into the scene.
singleton class for storing the capabilities of the graphics card.
list< HardwareOcclusionQuery * >::type HardwareOcclusionQueryList
_StringBase String
vector< RenderWindowDescription >::type RenderWindowDescriptionList
Render window creation parameters container.
Definition: OgreCommon.h:735
unsigned short uint16
Definition: OgrePlatform.h:247
Decrease the stencil value by 1, clamping at 0.
StencilOperation
Enum describing the various actions which can be taken onthe stencil buffer.
FilterOptions
Filtering options for textures / mipmaps.
Definition: OgreCommon.h:101
Environment map based on vertex normals.
Defines the functionality of a 3D API.
CompareFunction
Comparison functions used for the depth/stencil buffer operations and others.
Definition: OgreCommon.h:65
Class representing the state of a single texture unit during a Pass of a Technique, of a Material.
multimap< uchar, RenderTarget * >::type RenderTargetPriorityMap
int TrackVertexColourType
An enumeration describing which material properties should track the vertex colours.
Definition: OgreCommon.h:277
Class which manages blending of both colour and alpha components.
unsigned int mVSyncInterval
RenderTargetMap mRenderTargets
The render targets.
Defines a listener on the custom events that this render system can raise.
list< Listener * >::type ListenerList