Menge
Modular Pedestrian Simulation Framework for Research and Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
image.h
Go to the documentation of this file.
1 /*
2 
3 License
4 
5 Menge
6 Copyright and trademark 2012-14 University of North Carolina at Chapel Hill.
7 All rights reserved.
8 
9 Permission to use, copy, modify, and distribute this software and its documentation
10 for educational, research, and non-profit purposes, without fee, and without a
11 written agreement is hereby granted, provided that the above copyright notice,
12 this paragraph, and the following four paragraphs appear in all copies.
13 
14 This software program and documentation are copyrighted by the University of North
15 Carolina at Chapel Hill. The software program and documentation are supplied "as is,"
16 without any accompanying services from the University of North Carolina at Chapel
17 Hill or the authors. The University of North Carolina at Chapel Hill and the
18 authors do not warrant that the operation of the program will be uninterrupted
19 or error-free. The end-user understands that the program was developed for research
20 purposes and is advised not to rely exclusively on the program for any reason.
21 
22 IN NO EVENT SHALL THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE AUTHORS
23 BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
24 DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
25 DOCUMENTATION, EVEN IF THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL OR THE
26 AUTHORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS SPECIFICALLY
29 DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
30 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY STATUTORY WARRANTY
31 OF NON-INFRINGEMENT. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
32 THE UNIVERSITY OF NORTH CAROLINA AT CHAPEL HILL AND THE AUTHORS HAVE NO OBLIGATIONS
33 TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
34 
35 Any questions or comments should be sent to the authors {menge,geom}@cs.unc.edu
36 
37 */
38 
44 #ifndef __IMAGE_H__
45 #define __IMAGE_H__
46 
47 #include "CoreConfig.h"
48 #include <string>
49 #include "graphCommon.h"
50 #include "ManagedData.h"
51 #include <map>
52 #include "SDL/SDL_image.h"
53 
54 namespace Menge {
55 
59  class MENGE_API ImageData : public ManagedData {
60  public:
64  static std::map< std::string, ImageData * > RESOURCES;
65 
69  static bool IS_REGISTERED;
70 
74  static void newGLContext();
75 
82  static void start();
83 
87  static void release();
88 
92  ImageData();
93 
97  ~ImageData();
98 
104  int getWidth() const { return _img->w; }
105 
111  int getHeight() const { return _img->h; }
112 
119  int getBpp() const;
120 
124  void initGL() const;
125 
129  void drawGL() const;
130 
134  void bind() const;
135 
143  friend ImageData * readImageData( const std::string & fileName );
144 
152  unsigned char getPixelAt( int x, int y ) const;
153 
154  private:
158  bool _useAlpha;
159 
163  mutable GLuint _texture;
164 
168  SDL_Surface * _img;
169  };
170 
171 
175  class MENGE_API Image : public ManagedDataWrapper< ImageData > {
176  public:
182  Image( ImageData * data );
183 
187  ~Image();
188 
192  void bind() const { _data->bind(); }
193 
199  const ImageData * data() const { return _data; }
200 
206  int getWidth() const { return _data->getWidth(); }
207 
213  int getHeight() const { return _data->getHeight(); }
214 
215 
216  };
217 
226  MENGE_API Image * loadImage( const std::string & fileName );
227 } // namespace Menge
228 
229 #endif // __IMAGE_H__
void bind() const
Binds the image to use as a texture in OpenGL.
Definition: image.h:192
The core namespace. All elements of Menge are contained in this namespace.
Definition: AgentGenerator.cpp:43
int getHeight() const
Returns the height of the image (in pixels).
Definition: image.h:111
int getHeight() const
Returns the height of the image (in pixels).
Definition: image.h:213
Sets up the proper compiler directives for platform and dll export/import.
static bool IS_REGISTERED
Determines if the ImageData::newGLContext has been registered.
Definition: image.h:69
The interface for handling resources from a disk system.
int getWidth() const
Returns the width of the image (in pixels).
Definition: image.h:104
const ImageData * data() const
Returns the image data.
Definition: image.h:199
int getWidth() const
Returns the width of the image (in pixels).
Definition: image.h:206
A wrapper for managed data - automatically handles referencing and deletion of managed data...
Definition: ManagedData.h:127
The interface for managed data (essentially smart poitners).
Definition: ManagedData.h:61
Image * loadImage(const std::string &fileName)
Given a filename, returns a pointer to an Image with that data.
Definition: image.cpp:217
static std::map< std::string, ImageData * > RESOURCES
Mapping from image resources to its corresponding data.
Definition: image.h:64
ImageData * readImageData(const std::string &fileName)
Definition: image.cpp:84
Manged image data (see ManagedData).
Definition: image.h:59
Various important pre-compiler directives for the scene graph.
Wrapper for the managed ImageData.
Definition: image.h:175