OpenMW
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
globalmap.hpp
Go to the documentation of this file.
1 #ifndef GAME_RENDER_GLOBALMAP_H
2 #define GAME_RENDER_GLOBALMAP_H
3 
4 #include <string>
5 #include <vector>
6 
7 #include <osg/ref_ptr>
8 
9 namespace osg
10 {
11  class Texture2D;
12  class Image;
13  class Group;
14  class Camera;
15 }
16 
17 namespace ESM
18 {
19  struct GlobalMap;
20 }
21 
22 namespace SceneUtil
23 {
24  class WorkQueue;
25 }
26 
27 namespace MWRender
28 {
29 
30  class CreateMapWorkItem;
31 
32  class GlobalMap
33  {
34  public:
35  GlobalMap(osg::Group* root, SceneUtil::WorkQueue* workQueue);
36  ~GlobalMap();
37 
38  void render();
39 
40  int getWidth() const { return mWidth; }
41  int getHeight() const { return mHeight; }
42 
43  int getCellSize() const { return mCellSize; }
44 
45  void worldPosToImageSpace(float x, float z, float& imageX, float& imageY);
46 
47  void cellTopLeftCornerToImageSpace(int x, int y, float& imageX, float& imageY);
48 
49  void exploreCell (int cellX, int cellY, osg::ref_ptr<osg::Texture2D> localMapTexture);
50 
52  void clear();
53 
59  void cleanupCameras();
60 
61  void removeCamera(osg::Camera* cam);
62 
66  void markForRemoval(osg::Camera* camera);
67 
68  void write (ESM::GlobalMap& map);
69  void read (ESM::GlobalMap& map);
70 
71  osg::ref_ptr<osg::Texture2D> getBaseTexture();
72  osg::ref_ptr<osg::Texture2D> getOverlayTexture();
73 
74  void ensureLoaded();
75 
76  private:
82  void requestOverlayTextureUpdate(int x, int y, int width, int height, osg::ref_ptr<osg::Texture2D> texture, bool clear, bool cpuCopy,
83  float srcLeft = 0.f, float srcTop = 0.f, float srcRight = 1.f, float srcBottom = 1.f);
84 
85  int mCellSize;
86 
87  osg::ref_ptr<osg::Group> mRoot;
88 
89  typedef std::vector<osg::ref_ptr<osg::Camera> > CameraVector;
91 
93 
94  struct ImageDest
95  {
97  : mX(0), mY(0)
98  , mFramesUntilDone(3) // wait an extra frame to ensure the draw thread has completed its frame.
99  {
100  }
101 
102  osg::ref_ptr<osg::Image> mImage;
103  int mX, mY;
105  };
106 
107  typedef std::vector<ImageDest> ImageDestVector;
108 
110 
111  std::vector< std::pair<int,int> > mExploredCells;
112 
113  osg::ref_ptr<osg::Texture2D> mBaseTexture;
114  osg::ref_ptr<osg::Texture2D> mAlphaTexture;
115 
116  // GPU copy of overlay
117  // Note, uploads are pushed through a Camera, instead of through mOverlayImage
118  osg::ref_ptr<osg::Texture2D> mOverlayTexture;
119 
120  // CPU copy of overlay
121  osg::ref_ptr<osg::Image> mOverlayImage;
122 
123  osg::ref_ptr<SceneUtil::WorkQueue> mWorkQueue;
124  osg::ref_ptr<CreateMapWorkItem> mWorkItem;
125 
126  int mWidth;
127  int mHeight;
128 
130  };
131 
132 }
133 
134 #endif
135 
int mWidth
Definition: globalmap.hpp:126
int getCellSize() const
Definition: globalmap.hpp:43
void exploreCell(int cellX, int cellY, osg::ref_ptr< osg::Texture2D > localMapTexture)
Definition: globalmap.cpp:372
int mX
Definition: globalmap.hpp:103
osg::ref_ptr< osg::Image > mImage
Definition: globalmap.hpp:102
int mY
Definition: globalmap.hpp:103
osg::ref_ptr< osg::Texture2D > getOverlayTexture()
Definition: globalmap.cpp:547
int mMaxY
Definition: globalmap.hpp:129
A work queue that users can push work items onto, to be completed by one or more background threads...
Definition: workqueue.hpp:48
osg::ref_ptr< SceneUtil::WorkQueue > mWorkQueue
Definition: globalmap.hpp:123
osg::ref_ptr< CreateMapWorkItem > mWorkItem
Definition: globalmap.hpp:124
void requestOverlayTextureUpdate(int x, int y, int width, int height, osg::ref_ptr< osg::Texture2D > texture, bool clear, bool cpuCopy, float srcLeft=0.f, float srcTop=0.f, float srcRight=1.f, float srcBottom=1.f)
Definition: globalmap.cpp:287
int mMinY
Definition: globalmap.hpp:129
~GlobalMap()
Definition: globalmap.cpp:235
CameraVector mCamerasPendingRemoval
Definition: globalmap.hpp:92
void cleanupCameras()
Definition: globalmap.cpp:582
void markForRemoval(osg::Camera *camera)
Definition: globalmap.cpp:570
std::vector< std::pair< int, int > > mExploredCells
Definition: globalmap.hpp:111
void write(ESM::GlobalMap &map)
Definition: globalmap.cpp:401
osg::ref_ptr< osg::Texture2D > getBaseTexture()
Definition: globalmap.cpp:541
int mMaxX
Definition: globalmap.hpp:129
void clear()
Clears the overlay.
Definition: globalmap.cpp:388
CameraVector mActiveCameras
Definition: globalmap.hpp:90
int mCellSize
Definition: globalmap.hpp:85
void render()
Definition: globalmap.cpp:246
std::vector< ImageDest > ImageDestVector
Definition: globalmap.hpp:107
std::vector< osg::ref_ptr< osg::Camera > > CameraVector
Definition: globalmap.hpp:89
int mHeight
Definition: globalmap.hpp:127
osg::ref_ptr< osg::Texture2D > mOverlayTexture
Definition: globalmap.hpp:118
osg::ref_ptr< osg::Image > mOverlayImage
Definition: globalmap.hpp:121
<
Definition: globalmap.hpp:15
void ensureLoaded()
Definition: globalmap.cpp:553
void removeCamera(osg::Camera *cam)
Definition: globalmap.cpp:605
osg::ref_ptr< osg::Texture2D > mAlphaTexture
Definition: globalmap.hpp:114
osg::ref_ptr< osg::Group > mRoot
Definition: globalmap.hpp:87
int getHeight() const
Definition: globalmap.hpp:41
void worldPosToImageSpace(float x, float z, float &imageX, float &imageY)
Definition: globalmap.cpp:272
ImageDestVector mPendingImageDest
Definition: globalmap.hpp:109
void cellTopLeftCornerToImageSpace(int x, int y, float &imageX, float &imageY)
Definition: globalmap.cpp:279
int mMinX
Definition: globalmap.hpp:129
void read(ESM::GlobalMap &map)
Definition: globalmap.cpp:443
GlobalMap(osg::Group *root, SceneUtil::WorkQueue *workQueue)
Definition: globalmap.cpp:223
ImageDest()
Definition: globalmap.hpp:96
osg::ref_ptr< osg::Texture2D > mBaseTexture
Definition: globalmap.hpp:113
int mFramesUntilDone
Definition: globalmap.hpp:104
int getWidth() const
Definition: globalmap.hpp:40
Definition: globalmap.hpp:94
Definition: globalmap.hpp:32