00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(__INCLUDE_VisibilityPatchGridh_INCLUDE__)
00022 #define __INCLUDE_VisibilityPatchGridh_INCLUDE__
00023
00024 #include <land/VisibilityPatchQuad.h>
00025 #include <land/VisibilityPatchInfo.h>
00026 #include <land/LandSurround.h>
00027 #include <geomipmap/MipMapPatchIndexs.h>
00028
00029 class Target;
00030 class GLSLShaderSetup;
00031 class WaterVisibilityPatch;
00032 class Water2Patches;
00033 class VisibilityPatchGrid
00034 {
00035 public:
00036 static VisibilityPatchGrid *instance();
00037
00038 void generate();
00039
00040 void calculateVisibility();
00041 void recalculateErrors(FixedVector &position, fixed size);
00042
00043 void drawLand(int addIndex = 0, bool simple = false);
00044 void drawLandLODLevels();
00045 void drawSurround();
00046 void drawWater(Water2Patches &patches,
00047 MipMapPatchIndexs &indexes, Vector &cameraPosition,
00048 Vector landscapeSize,
00049 GLSLShaderSetup *waterShader);
00050
00051 int getEpocNumber() { return epoc_; }
00052 int getVisibleLandPatchesCount() {
00053 return patchInfo_.getVisibleLandPatchesCount(); }
00054 int getVisibleWaterPatchesCount() {
00055 return patchInfo_.getVisibleWaterPatchesCount(); }
00056
00057 VisibilityPatchInfo &getPatchInfo() { return patchInfo_; }
00058
00059 LandVisibilityPatch *getLandVisibilityPatch(int x, int y);
00060 TargetVisibilityPatch *getTargetVisibilityPatch(int x, int y);
00061 WaterVisibilityPatch *getWaterVisibilityPatch(int x, int y);
00062 protected:
00063 int epoc_;
00064 LandSurround surround_;
00065 MipMapPatchIndexs landIndexs_;
00066
00067
00068 VisibilityPatchInfo patchInfo_;
00069 LandVisibilityPatch *landPatches_;
00070 TargetVisibilityPatch *targetPatches_;
00071 WaterVisibilityPatch *waterPatches_;
00072
00073
00074 VisibilityPatchQuad *visibilityPatches_;
00075
00076
00077 int midX_, midY_;
00078 int landWidth_, landHeight_;
00079 int waterWidth_, waterHeight_;
00080 int targetWidth_, targetHeight_;
00081 int visibilityWidth_, visibilityHeight_;
00082
00083 void clear();
00084 void drawLandPatches();
00085
00086 private:
00087 VisibilityPatchGrid();
00088 ~VisibilityPatchGrid();
00089 };
00090
00091 #endif // __INCLUDE_VisibilityPatchGridh_INCLUDE__