virtualtex.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // virtualtex.h
  2. //
  3. // Copyright (C) 2003, Chris Laurel
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELENGINE_VIRTUALTEX_H_
  10. #define _CELENGINE_VIRTUALTEX_H_
  11. #include <string>
  12. #include "celutil/basictypes.h"
  13. #include <celengine/texture.h>
  14. class VirtualTexture : public Texture
  15. {
  16.  public:
  17.     VirtualTexture(const std::string& _tilePath,
  18.                    unsigned int _baseSplit,
  19.                    unsigned int _tileSize,
  20.                    const std::string& tilePrefix,
  21.                    const std::string& tileType);
  22.     ~VirtualTexture();
  23.     virtual const TextureTile getTile(int lod, int u, int v);
  24.     virtual void bind();
  25.     virtual int getLODCount() const;
  26.     virtual int getUTileCount(int lod) const;
  27.     virtual int getVTileCount(int lod) const;
  28.     virtual void beginUsage();
  29.     virtual void endUsage();
  30.  private:
  31.     struct Tile
  32.     {
  33.         Tile() : lastUsed(0), tex(NULL), loadFailed(false) {};
  34.         unsigned int lastUsed;
  35.         ImageTexture* tex;
  36.         bool loadFailed;
  37.     };
  38.     struct TileQuadtreeNode
  39.     {
  40.         TileQuadtreeNode() :
  41.             tile(NULL)
  42.         {
  43.             for (int i = 0; i < 4; i++)
  44.                 children[i] = NULL;
  45.         };
  46.                 
  47.         Tile* tile;
  48.         TileQuadtreeNode* children[4];
  49.     };
  50.     void populateTileTree();
  51.     void addTileToTree(Tile* tile, uint lod, uint v, uint u);
  52.     void makeResident(Tile* tile, uint lod, uint v, uint u);
  53.     ImageTexture* loadTileTexture(uint lod, uint u, uint v);
  54.     Tile* tiles;
  55.     Tile* findTile(unsigned int lod,
  56.                    unsigned int u, unsigned int v);
  57.  private:
  58.     std::string tilePath;
  59.     std::string tileExt;
  60.     std::string tilePrefix;
  61.     unsigned int baseSplit;
  62.     unsigned int tileSize;
  63.     unsigned int ticks;
  64.     unsigned int tilesRequested;
  65.     unsigned int nResolutionLevels;
  66.     enum {
  67.         TileNotLoaded  = -1,
  68.         TileLoadFailed = -2,
  69.     };
  70.     TileQuadtreeNode* tileTree[2];
  71. };
  72. VirtualTexture* LoadVirtualTexture(const std::string& filename);
  73. #endif // _CELENGINE_VIRTUALTEX_H_