00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright (c) 2000-2011 Torus Knot Software Ltd 00008 00009 Permission is hereby granted, free of charge, to any person obtaining a copy 00010 of this software and associated documentation files (the "Software"), to deal 00011 in the Software without restriction, including without limitation the rights 00012 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 00013 copies of the Software, and to permit persons to whom the Software is 00014 furnished to do so, subject to the following conditions: 00015 00016 The above copyright notice and this permission notice shall be included in 00017 all copies or substantial portions of the Software. 00018 00019 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 00020 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00021 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 00022 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00023 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00024 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00025 THE SOFTWARE. 00026 ----------------------------------------------------------------------------- 00027 */ 00028 #ifndef __CompositorInstance_H__ 00029 #define __CompositorInstance_H__ 00030 00031 #include "OgrePrerequisites.h" 00032 #include "OgreMaterialManager.h" 00033 #include "OgreTexture.h" 00034 #include "OgreRenderQueue.h" 00035 #include "OgreCompositionTechnique.h" 00036 00037 namespace Ogre { 00044 const size_t RENDER_QUEUE_COUNT = RENDER_QUEUE_MAX+1; 00045 00049 class _OgreExport CompositorInstance : public CompositorInstAlloc 00050 { 00051 public: 00052 CompositorInstance(CompositionTechnique *technique, CompositorChain *chain); 00053 virtual ~CompositorInstance(); 00057 class _OgreExport Listener 00058 { 00059 public: 00060 virtual ~Listener(); 00061 00071 virtual void notifyMaterialSetup(uint32 pass_id, MaterialPtr &mat); 00072 00081 virtual void notifyMaterialRender(uint32 pass_id, MaterialPtr &mat); 00082 00086 virtual void notifyResourcesCreated(bool forResizeOnly); 00087 00088 }; 00093 class _OgreExport RenderSystemOperation : public CompositorInstAlloc 00094 { 00095 public: 00096 virtual ~RenderSystemOperation(); 00098 virtual void execute(SceneManager *sm, RenderSystem *rs) = 0; 00099 }; 00100 typedef map<int, MaterialPtr>::type QuadMaterialMap; 00101 typedef std::pair<int, RenderSystemOperation*> RenderSystemOpPair; 00102 typedef vector<RenderSystemOpPair>::type RenderSystemOpPairs; 00105 class TargetOperation 00106 { 00107 public: 00108 TargetOperation() 00109 { 00110 } 00111 TargetOperation(RenderTarget *inTarget): 00112 target(inTarget), currentQueueGroupID(0), visibilityMask(0xFFFFFFFF), 00113 lodBias(1.0f), 00114 onlyInitial(false), hasBeenRendered(false), findVisibleObjects(false), 00115 materialScheme(MaterialManager::DEFAULT_SCHEME_NAME), shadowsEnabled(true) 00116 { 00117 } 00119 RenderTarget *target; 00120 00122 int currentQueueGroupID; 00123 00126 RenderSystemOpPairs renderSystemOperations; 00127 00130 uint32 visibilityMask; 00131 00134 float lodBias; 00135 00138 typedef std::bitset<RENDER_QUEUE_COUNT> RenderQueueBitSet; 00139 00141 RenderQueueBitSet renderQueues; 00142 00145 bool onlyInitial; 00149 bool hasBeenRendered; 00152 bool findVisibleObjects; 00154 String materialScheme; 00156 bool shadowsEnabled; 00157 }; 00158 typedef vector<TargetOperation>::type CompiledState; 00159 00163 void setEnabled(bool value); 00164 00167 bool getEnabled(); 00168 00179 const String& getTextureInstanceName(const String& name, size_t mrtIndex); 00180 00191 TexturePtr getTextureInstance(const String& name, size_t mrtIndex); 00192 00199 RenderTarget* getRenderTarget(const String& name); 00200 00201 00205 virtual void _compileTargetOperations(CompiledState &compiledState); 00206 00210 virtual void _compileOutputOperation(TargetOperation &finalState); 00211 00214 Compositor *getCompositor(); 00215 00218 CompositionTechnique *getTechnique(); 00219 00225 void setTechnique(CompositionTechnique* tech, bool reuseTextures = true); 00226 00238 void setScheme(const String& schemeName, bool reuseTextures = true); 00239 00241 const String& getScheme() const { return mActiveScheme; } 00242 00248 void notifyResized(); 00249 00250 00253 CompositorChain *getChain(); 00254 00260 void addListener(Listener *l); 00261 00265 void removeListener(Listener *l); 00266 00269 void _fireNotifyMaterialSetup(uint32 pass_id, MaterialPtr &mat); 00270 00273 void _fireNotifyMaterialRender(uint32 pass_id, MaterialPtr &mat); 00274 00277 void _fireNotifyResourcesCreated(bool forResizeOnly); 00278 private: 00280 Compositor *mCompositor; 00282 CompositionTechnique *mTechnique; 00284 CompositorChain *mChain; 00286 bool mEnabled; 00288 typedef map<String,TexturePtr>::type LocalTextureMap; 00289 LocalTextureMap mLocalTextures; 00291 typedef map<String,MultiRenderTarget*>::type LocalMRTMap; 00292 LocalMRTMap mLocalMRTs; 00293 typedef map<CompositionTechnique::TextureDefinition*, TexturePtr>::type ReserveTextureMap; 00298 ReserveTextureMap mReserveTextures; 00299 00301 typedef vector<Listener*>::type Listeners; 00302 Listeners mListeners; 00303 00305 CompositorInstance *mPreviousInstance; 00306 00308 String mActiveScheme; 00309 00313 virtual void collectPasses(TargetOperation &finalState, CompositionTargetPass *target); 00314 00319 MaterialPtr createLocalMaterial(const String& srcName); 00320 00323 void createResources(bool forResizeOnly); 00324 00327 void freeResources(bool forResizeOnly, bool clearReserveTextures); 00328 00331 RenderTarget *getTargetForTex(const String &name); 00332 00337 const String &getSourceForTex(const String &name, size_t mrtIndex = 0); 00338 00342 void queueRenderSystemOp(TargetOperation &finalState, RenderSystemOperation *op); 00343 00345 String getMRTTexLocalName(const String& baseName, size_t attachment); 00346 00350 void deriveTextureRenderTargetOptions(const String& texname, 00351 bool *hwGammaWrite, uint *fsaa, String* fsaaHint); 00352 00353 friend class CompositorChain; 00354 }; 00358 } 00359 00360 #endif
Copyright © 2008 Torus Knot Software Ltd
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Last modified Sat Jan 14 2012 18:40:43