00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _BBCACHE_HXX
00024 #define _BBCACHE_HXX
00025
00026
00027 #include <plib/sg.h>
00028 #include <simgear/screen/extensions.hxx>
00029 #include <simgear/screen/RenderTexture.h>
00030
00034 class SGBbCache {
00035 private:
00036
00040 class bbInfo {
00041 public:
00043 GLuint texID;
00045 int cldID;
00046 float angleX, angleY;
00047
00048 int frame;
00050 int frameUsed;
00052 bool needRedraw;
00053 };
00054
00055 void freeTextureMemory(void);
00061 bool allocTextureMemory(int count, int textureDimension);
00062
00063
00064 bbInfo *bbList;
00065 int bbListCount;
00066 int textureWH;
00067 int cacheSizeKb;
00068
00069
00070 int builtBBCount;
00071
00072 int builtBBframe;
00073
00074 long frameNumber;
00075 RenderTexture *rt;
00076 bool rtAvailable;
00077
00078 public:
00079 SGBbCache(void);
00080 ~SGBbCache(void);
00081
00086 void init(int cacheCount);
00087
00093 void free(int bbId, int cldId);
00094
00100 int alloc(int cldId);
00101
00108 GLuint QueryTexID(int cldId, int bbId);
00109
00114 void setTextureData(int bbId);
00115
00119 void beginCapture(void);
00120
00126 void setRadius(float radius, float dist_center);
00127
00131 void endCapture(void);
00132
00137 int queryImpostorAge(int bbId);
00138
00146 bool isBbValid( int cloudId, int bbId, float angleY, float angleX);
00147
00155 void setReference( int cloudId, int bbId, float angleY, float angleX);
00156
00161 void startNewFrame(void);
00162
00168 bool setCacheSize(int sizeKb);
00169
00176 bool setCacheSize(int count, int textureDimension);
00177
00178 bool isRttAvailable(void) { return rtAvailable; }
00179
00183 void invalidateCache(void);
00184
00190 void invalidate(int cldId, int bbId);
00191
00196 int queryCacheSize(void);
00197
00202 int maxImpostorRegenFrame;
00203 };
00204
00205 #endif // _BBCACHE_HXX