gfxFence.h
Classes:
class
class
Detailed Description
1 2//----------------------------------------------------------------------------- 3// Copyright (c) 2012 GarageGames, LLC 4// 5// Permission is hereby granted, free of charge, to any person obtaining a copy 6// of this software and associated documentation files (the "Software"), to 7// deal in the Software without restriction, including without limitation the 8// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 9// sell copies of the Software, and to permit persons to whom the Software is 10// furnished to do so, subject to the following conditions: 11// 12// The above copyright notice and this permission notice shall be included in 13// all copies or substantial portions of the Software. 14// 15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21// IN THE SOFTWARE. 22//----------------------------------------------------------------------------- 23 24#ifndef _GFXFENCE_H_ 25#define _GFXFENCE_H_ 26 27#ifndef _GFXDEVICE_H_ 28#include "gfx/gfxDevice.h" 29#endif 30 31 32/// 33class GFXFence : public GFXResource 34{ 35protected: 36 37 GFXDevice *mDevice; 38 39public: 40 41 /// The states returned by getStatus() 42 enum FenceStatus 43 { 44 Unset, ///< The fence has not been set 45 Pending, ///< The fence has been set and has not been hit 46 Processed, ///< The fence has been processed 47 Unsupported ///< A non-blocking query of fence status is not supported by the implementation 48 }; 49 50public: 51 52 GFXFence( GFXDevice *device ) : mDevice( device ) {}; 53 virtual ~GFXFence(){}; 54 55 /// This method inserts the fence into the command buffer 56 virtual void issue() = 0; 57 58 // CodeReview: Do we need a remove() [5/10/2007 Pat] 59 60 /// This is a non-blocking call to get the status of the fence 61 /// @see GFXFence::FenceStatus 62 virtual FenceStatus getStatus() const = 0; 63 64 /// This method will not return until the fence has been processed by the GPU 65 virtual void block() = 0; 66}; 67 68 69/// 70class GFXGeneralFence : public GFXFence 71{ 72protected: 73 74 bool mInitialized; 75 GFXTextureTargetRef mRenderTarget; 76 GFXTexHandle mRTTexHandle; 77 GFXStateBlockRef mRenderSB; 78 79 void _init(); 80 81 /// The callback used to get texture events. 82 /// @see GFXTextureManager::addEventDelegate 83 void _onTextureEvent( GFXTexCallbackCode code ); 84 85public: 86 87 GFXGeneralFence( GFXDevice *device ) 88 : GFXFence( device ), 89 mInitialized( false ) 90 { 91 } 92 93 virtual ~GFXGeneralFence(); 94 95 virtual void issue(); 96 virtual FenceStatus getStatus() const { return GFXFence::Unsupported; }; 97 virtual void block(); 98 99 // GFXResource interface 100 virtual void zombify(); 101 virtual void resurrect(); 102 /// The resource should put a description of itself (number of vertices, size/width of texture, etc.) in buffer 103 virtual const String describeSelf() const; 104}; 105 106#endif // _GFXFENCE_H_ 107