Back to bsyte

SurfaceCache Class Reference

Der SurfaceCache ist ein Container fuer alle Surfaces, die in einem Frame gerendert werden müssen. Die Anzahl der Surfaces im Cache ist auf MAX_SURFACES begrenzt. Damit der Cache nicht ueberlaeuft, muessen ungenutzte Eintraege entfernt werden. Die Strategie sieht wie folgt aus: Jedes Surfaceobjekt besitzt einen Zaehler der in der Methode refresh() inkrementiert wird. Erreicht der Zaehler eine bestimmte Grenze (MAX_DROP), wird das Objekt aus dem Cache entfernt. Typ. wird refresh() nach jedem Frame einmal aufgerufen. Jeder Aufruf der Methode getSurface() setzt den Zaehler auf 0 zurueck. Wird ein Surfaceobjekt immer wieder fuer ein Frame verwendet, kann der Zaehler nicht die Grenze erreichen und wird damit auch nicht aus dem Cache entfernt. Diese Strategie minmiert dynamisch den Speicherbedarf. Nachteil: Bewegt sich die Kamera uber eine laengere Zeit nicht, werden alle nichtgenutzten Surfaces aus dem Cache entfernt. Wird nun die Kamera position veraendert (insbesondere durch Drehen) muessen alle neuen Surfaces in den Cache geladen werden. Das macht sich durch einen Einbruch in der Framerate bemerkbar (Bildruckler). Besser: Den Fuellstand des Caches immer voll ausnutzen. Erst wenn mehr 100% erreicht wurde, nicht genutzte Surfaces entfernen. More...

#include <SurfaceCache.h>

Collaboration diagram for SurfaceCache:

List of all members.

Public Member Functions

 ~SurfaceCache (void)
 Destruktor.
void clear (void)
 clear
void refresh ()
 refresh
HashKey addSurface (Texture &texture)
 addSurface
HashKey addSurface (Texture &texture, LightMap *lightMap, BYTE intensity)
 addSurface
HashKey updateSurface (HashKey sid, Texture &texture)
 updateSurface
HashKey updateSurface (HashKey sid, Texture &texture, LightMap *lightMap, BYTE intensity)
 updateSurface
SurfacegetSurface (HashKey sid)
 getSurface
int getCount (void)
 getCount

Static Public Member Functions

static SurfaceCachegetInstance ()
 Liefert die Singleton-Instanz.

Protected Member Functions

 SurfaceCache ()
 Konstruktor.

Private Attributes

int m_usedCounter
long m_sid
Surfacem_surfaces [MAX_SURFACES]
BYTE m_rgbIntensity [256][256]

Static Private Attributes

static SurfaceCache_instance = 0

Detailed Description

Der SurfaceCache ist ein Container fuer alle Surfaces, die in einem Frame gerendert werden müssen. Die Anzahl der Surfaces im Cache ist auf MAX_SURFACES begrenzt. Damit der Cache nicht ueberlaeuft, muessen ungenutzte Eintraege entfernt werden. Die Strategie sieht wie folgt aus: Jedes Surfaceobjekt besitzt einen Zaehler der in der Methode refresh() inkrementiert wird. Erreicht der Zaehler eine bestimmte Grenze (MAX_DROP), wird das Objekt aus dem Cache entfernt. Typ. wird refresh() nach jedem Frame einmal aufgerufen. Jeder Aufruf der Methode getSurface() setzt den Zaehler auf 0 zurueck. Wird ein Surfaceobjekt immer wieder fuer ein Frame verwendet, kann der Zaehler nicht die Grenze erreichen und wird damit auch nicht aus dem Cache entfernt. Diese Strategie minmiert dynamisch den Speicherbedarf. Nachteil: Bewegt sich die Kamera uber eine laengere Zeit nicht, werden alle nichtgenutzten Surfaces aus dem Cache entfernt. Wird nun die Kamera position veraendert (insbesondere durch Drehen) muessen alle neuen Surfaces in den Cache geladen werden. Das macht sich durch einen Einbruch in der Framerate bemerkbar (Bildruckler). Besser: Den Fuellstand des Caches immer voll ausnutzen. Erst wenn mehr 100% erreicht wurde, nicht genutzte Surfaces entfernen.


Constructor & Destructor Documentation

SurfaceCache::SurfaceCache ( void  ) [protected]

Konstruktor.

Here is the caller graph for this function:

SurfaceCache::~SurfaceCache ( void  )

Destruktor.

Here is the call graph for this function:


Member Function Documentation

HashKey SurfaceCache::addSurface ( Texture texture)

addSurface

Parameters:
textureTextur
Returns:
sid, -1, -2

Here is the caller graph for this function:

HashKey SurfaceCache::addSurface ( Texture texture,
LightMap lightMap,
BYTE  intensity 
)

addSurface

Parameters:
textureTextur
lightMap
intensity
Returns:
sid, -1, -2
void SurfaceCache::clear ( void  )

clear

Here is the caller graph for this function:

int SurfaceCache::getCount ( void  )

getCount

Returns:
Anzahl Surfaces

Here is the caller graph for this function:

SurfaceCache * SurfaceCache::getInstance ( ) [static]

Liefert die Singleton-Instanz.

Returns:
Pointer auf die Instanz

Here is the call graph for this function:

Surface * SurfaceCache::getSurface ( HashKey  sid)

getSurface

Parameters:
sidSurface ID
Returns:
Pointer auf Surface, oder NULL

Here is the caller graph for this function:

void SurfaceCache::refresh ( )

refresh

Here is the caller graph for this function:

HashKey SurfaceCache::updateSurface ( HashKey  sid,
Texture texture 
)

updateSurface

Parameters:
sid
textureTextur
Returns:
sid, -1, -2

Here is the caller graph for this function:

HashKey SurfaceCache::updateSurface ( HashKey  sid,
Texture texture,
LightMap lightMap,
BYTE  intensity 
)

updateSurface

Parameters:
sid
textureTextur
lightMap
intensity
Returns:
sid, -1, -2

Member Data Documentation

SurfaceCache * SurfaceCache::_instance = 0 [static, private]
BYTE SurfaceCache::m_rgbIntensity[256][256] [private]
long SurfaceCache::m_sid [private]
Surface* SurfaceCache::m_surfaces[MAX_SURFACES] [private]

The documentation for this class was generated from the following files: