# SurfaceCache Klassenreferenz

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() bei 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 (z.B. durch Drehen) muessen alle neuen Surfaces in den Cache geladen werden. Das macht sich durch einen Einbruch in der Framerate bemerkbar. Besser: Den Fuellstand des Caches immer voll ausnutzen. Erst wenn mehr 100% erreicht wurde, nicht genutzte Surfaces entfernen. Mehr ...

`#include <SurfaceCache.h>`

Aufstellung aller Elemente

## Öffentliche Methoden
| ~SurfaceCache (void)
| Destruktor.
void | refresh ()
| refresh
long | addSurface (Texture &texture)
| addSurface
long | addSurface (Texture &texture, LightMap *lightMap, BYTE intensity)
| addSurface
long | updateSurface (long sid, Texture &texture)
| updateSurface
long | updateSurface (long sid, Texture &texture, LightMap *lightMap, BYTE intensity)
| updateSurface
Surface * | getSurface (long sid)
| getSurface
int | getCount (void)
| getCount
## Öffentliche, statische Methoden
static SurfaceCache * | getInstance ()
| Liefert die Singleton-Instanz.
## Geschützte Methoden
| SurfaceCache ()
| Konstruktor.
## Private Attribute
int | m_usedCounter
long | m_sid
Surface * | m_surfaces [MAX_SURFACES]
BYTE | m_rgbIntensity [256][256]
## Statische private Attribute
static SurfaceCache * | _instance = 0

## Ausführliche Beschreibung

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() bei 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 (z.B. durch Drehen) muessen alle neuen Surfaces in den Cache geladen werden. Das macht sich durch einen Einbruch in der Framerate bemerkbar. Besser: Den Fuellstand des Caches immer voll ausnutzen. Erst wenn mehr 100% erreicht wurde, nicht genutzte Surfaces entfernen.

## Beschreibung der Konstruktoren und Destruktoren

SurfaceCache::SurfaceCache | ( | void |  | ) | `[protected]`

Konstruktor.

SurfaceCache::~SurfaceCache | ( | void |  | ) |

Destruktor.

## Dokumentation der Elementfunktionen

SurfaceCache * SurfaceCache::getInstance | ( |  | ) | `[static]`

Liefert die Singleton-Instanz.

Rückgabe:
  Pointer auf die Instanz

void SurfaceCache::refresh | ( |  | ) |

refresh

long SurfaceCache::addSurface | ( | Texture & | texture | ) |

addSurface

Parameter:

  | texture | Textur

Rückgabe:
  sid, -1, -2

long SurfaceCache::addSurface | ( | Texture & | texture,
|  | LightMap * | lightMap,
|  | BYTE | intensity |
| ) |  |  |

addSurface

Parameter:

  | texture | Textur
  | lightMap |
  | intensity |

Rückgabe:
  sid, -1, -2

long SurfaceCache::updateSurface | ( | long | sid,
|  | Texture & | texture |
| ) |  |  |

updateSurface

Parameter:

  | sid |
  | texture | Textur

Rückgabe:
  sid, -1, -2

long SurfaceCache::updateSurface | ( | long | sid,
|  | Texture & | texture,
|  | LightMap * | lightMap,
|  | BYTE | intensity |
| ) |  |  |

updateSurface

Parameter:

  | sid |
  | texture | Textur
  | lightMap |
  | intensity |

Rückgabe:
  sid, -1, -2

Surface * SurfaceCache::getSurface | ( | long | sid | ) |

getSurface

Parameter:

  | sid | Surface ID

Rückgabe:
  Pointer auf Surface, oder NULL

int SurfaceCache::getCount | ( | void |  | ) |

getCount

Rückgabe:
  Anzahl Surfaces

## Dokumentation der Datenelemente

SurfaceCache * SurfaceCache::_instance = 0`[static, private]`

int SurfaceCache::m_usedCounter`[private]`

long SurfaceCache::m_sid`[private]`

Surface* SurfaceCache::m_surfaces[MAX_SURFACES]`[private]`

BYTE SurfaceCache::m_rgbIntensity[256][256]`[private]`

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:

- D:/Project/engine3d/cplusplus/src/scene3d/SurfaceCache.h
- D:/Project/engine3d/cplusplus/src/scene3d/SurfaceCache.cpp