gfxFence.h

Engine/source/gfx/gfxFence.h

More...

Classes:

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