ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
GLTexImage.h
Go to the documentation of this file.
1 // File: GLTexImage.h
3 // Author: Changchang Wu
4 // Description : interface for the GLTexImage class.
5 // GLTexImage: naive texture class.
6 // sevral different quad drawing functions are provied
7 // GLTexPacked: packed version (four value packed as four channels of a pixel)
8 // GLTexInput: GLTexImage + some input information
9 //
10 // Copyright (c) 2007 University of North Carolina at Chapel Hill
11 // All Rights Reserved
12 //
13 // Permission to use, copy, modify and distribute this software and its
14 // documentation for educational, research and non-profit purposes, without
15 // fee, and without a written agreement is hereby granted, provided that the
16 // above copyright notice and the following paragraph appear in all copies.
17 //
18 // The University of North Carolina at Chapel Hill make no representations
19 // about the suitability of this software for any purpose. It is provided
20 // 'as is' without express or implied warranty.
21 //
22 // Please send BUG REPORTS to ccwu@cs.unc.edu
23 //
25 
26 
27 #ifndef GL_TEX_IMAGE_H
28 #define GL_TEX_IMAGE_H
29 
30 class GlobalUtil;
31 class GLTexImage :public GlobalUtil
32 {
33 protected:
34  GLuint _texID;
35  int _imgWidth;
37  int _texWidth;
41 public:
42  static void DetachFBO(int i);
43  static void UnbindTex();
44  static void UnbindMultiTex(int n);
45  static void DrawQuad(float x1, float x2, float y1, float y2);
46 
47 public:
48  virtual void DrawQuadUS(int scale);
49  virtual void DrawQuadDS(int scale);
50  virtual void DrawImage();
51  virtual void TexConvertRGB();
52  virtual void ZeroHistoMargin();
53  virtual void SetImageSize(int width, int height);
54  virtual void InitTexture(int width, int height, int clamp_to_edge =1 );
55  void InitTexture(int width, int height, int clamp_to_edge, GLuint format);
56  virtual void FillMargin(int marginx, int marginy);
57 public:
58  void DrawScaledQuad(float scale);
59  int CopyToPBO(GLuint pbo, int width, int height, GLenum format = GL_RGBA);
60  void CopyFromPBO(GLuint pbo, int width, int height, GLenum format = GL_RGBA);
61  void FitRealTexViewPort();
62  void DrawQuadMT8();
63  void DrawQuadMT4();
64  void DrawQuadReduction();
65  void DrawQuadReduction(int w, int h);
66  void DrawMargin(int right, int bottom);
67  void DrawQuad();
68  void FitTexViewPort();
69  void ZeroHistoMargin(int hw, int hh);
70  int CheckTexture();
71  void SaveToASCII(const char* path);
72 public:
73  void AttachToFBO(int i );
74  void BindTex();
75  operator GLuint (){return _texID;}
76  GLuint GetTexID(){return _texID;}
79  int GetImgWidth(){return _imgWidth;}
80  int GetImgHeight(){return _imgHeight;}
81  int GetTexWidth(){return _texWidth;}
82  int GetTexHeight(){return _texHeight;}
83  int GetDrawWidth(){return _drawWidth;}
84  int GetDrawHeight(){return _drawHeight;}
85  //int IsTexTight(){return _texWidth == _drawWidth && _texHeight == _drawHeight;}
86  int IsTexPacked(){return _drawWidth != _imgWidth;}
87  GLTexImage();
88  virtual ~GLTexImage();
89  friend class SiftGPU;
90 };
91 
92 //class for handle data input, to support all openGL-supported data format,
93 //data are first uploaded to an openGL texture then converted, and optionally
94 //when the datatype is simple, we downsample/convert on cpu
95 class GLTexInput:public GLTexImage
96 {
97 public:
101 
104  const void* _pixel_data;
105 public:
106  static int IsSimpleGlFormat(unsigned int gl_format, unsigned int gl_type)
107  {
108  //the formats there is a cpu code to conver rgb and downsample
109  return (gl_format ==GL_LUMINANCE ||gl_format == GL_LUMINANCE_ALPHA||
110  gl_format == GL_RGB|| gl_format == GL_RGBA||
111  gl_format == GL_BGR || gl_format == GL_BGRA) &&
112  (gl_type == GL_UNSIGNED_BYTE || gl_type == GL_FLOAT || gl_type == GL_UNSIGNED_SHORT);
113  }
114 //in vc6, template member function doesn't work
115 #if !defined(_MSC_VER) || _MSC_VER > 1200
116  template <class Uint>
117  static int DownSamplePixelDataI(unsigned int gl_format, int width, int height,
118  int ds, const Uint * pin, Uint * pout);
119  template <class Uint>
120  static int DownSamplePixelDataI2F(unsigned int gl_format, int width, int height,
121  int ds, const Uint * pin, float * pout, int skip = 0);
122 #endif
123  static int DownSamplePixelDataF(unsigned int gl_format, int width, int height,
124  int ds, const float * pin, float * pout, int skip = 0);
125  static int TruncateWidthCU(int w) {return w & 0xfffffffc; }
126 public:
129  int SetImageData(int width, int height, const void * data,
130  unsigned int gl_format, unsigned int gl_type);
131  int LoadImageFile(char * imagepath, int & w, int &h);
132  void VerifyTexture();
133  virtual ~GLTexInput();
134 };
135 
136 //GLTexPacked doesn't have any data
137 //so that we can use the GLTexImage* pointer to index a GLTexPacked Vector
138 
140 {
141 public:
142  virtual void DrawImage();
143  virtual void DrawQuadUS(int scale);
144  virtual void DrawQuadDS(int scale);
145  virtual void FillMargin(int marginx, int marginy);
146  virtual void InitTexture(int width, int height, int clamp_to_edge =1);
147  virtual void TexConvertRGB();
148  virtual void SetImageSize(int width, int height);
149  virtual void ZeroHistoMargin();
150  //virtual void GetHistWH(int& w, int& h){return w = (3 + sz)>>1;}
151 public:
152  void DrawMargin(int right, int bottom, int mx, int my);
154 };
155 
156 
157 #endif // !defined(GL_TEX_IMAGE_H)
158 
filament::Texture::InternalFormat format
int width
int height
void DrawQuadReduction()
Definition: GLTexImage.cpp:464
void CopyFromPBO(GLuint pbo, int width, int height, GLenum format=GL_RGBA)
int GetImgHeight()
Definition: GLTexImage.h:80
virtual void InitTexture(int width, int height, int clamp_to_edge=1)
Definition: GLTexImage.cpp:94
int CheckTexture()
Definition: GLTexImage.cpp:70
int GetDrawHeight()
Definition: GLTexImage.h:84
void FitTexViewPort()
Definition: GLTexImage.cpp:353
virtual void DrawImage()
Definition: GLTexImage.cpp:346
virtual void FillMargin(int marginx, int marginy)
Definition: GLTexImage.cpp:181
int GetTexWidth()
Definition: GLTexImage.h:81
int _drawWidth
Definition: GLTexImage.h:39
int CopyToPBO(GLuint pbo, int width, int height, GLenum format=GL_RGBA)
GLuint GetTexID()
Definition: GLTexImage.h:76
int _imgHeight
Definition: GLTexImage.h:36
void SaveToASCII(const char *path)
void DrawScaledQuad(float scale)
Definition: GLTexImage.cpp:411
int GetImgPixelCount()
Definition: GLTexImage.h:77
int IsTexPacked()
Definition: GLTexImage.h:86
virtual void SetImageSize(int width, int height)
Definition: GLTexImage.cpp:88
virtual ~GLTexImage()
Definition: GLTexImage.cpp:65
void DrawQuadMT8()
Definition: GLTexImage.cpp:294
int _texWidth
Definition: GLTexImage.h:37
void BindTex()
Definition: GLTexImage.cpp:159
static void DetachFBO(int i)
Definition: GLTexImage.cpp:368
int _imgWidth
Definition: GLTexImage.h:35
int _drawHeight
Definition: GLTexImage.h:40
void DrawQuadMT4()
Definition: GLTexImage.cpp:257
void DrawMargin(int right, int bottom)
Definition: GLTexImage.cpp:233
virtual void TexConvertRGB()
Definition: GLTexImage.cpp:386
static void UnbindTex()
Definition: GLTexImage.cpp:164
int GetDrawWidth()
Definition: GLTexImage.h:83
virtual void ZeroHistoMargin()
Definition: GLTexImage.cpp:196
int GetTexHeight()
Definition: GLTexImage.h:82
int GetImgWidth()
Definition: GLTexImage.h:79
void FitRealTexViewPort()
Definition: GLTexImage.cpp:358
void DrawQuad()
Definition: GLTexImage.cpp:170
virtual void DrawQuadDS(int scale)
Definition: GLTexImage.cpp:401
void AttachToFBO(int i)
Definition: GLTexImage.cpp:363
GLuint _texID
Definition: GLTexImage.h:34
virtual void DrawQuadUS(int scale)
Definition: GLTexImage.cpp:406
static void UnbindMultiTex(int n)
Definition: GLTexImage.cpp:724
int _texHeight
Definition: GLTexImage.h:38
int GetTexPixelCount()
Definition: GLTexImage.h:78
int LoadImageFile(char *imagepath, int &w, int &h)
void VerifyTexture()
int _data_modified
Definition: GLTexImage.h:100
static int DownSamplePixelDataI2F(unsigned int gl_format, int width, int height, int ds, const Uint *pin, float *pout, int skip=0)
Definition: GLTexImage.cpp:803
const void * _pixel_data
Definition: GLTexImage.h:104
int SetImageData(int width, int height, const void *data, unsigned int gl_format, unsigned int gl_type)
Definition: GLTexImage.cpp:913
virtual ~GLTexInput()
static int DownSamplePixelDataF(unsigned int gl_format, int width, int height, int ds, const float *pin, float *pout, int skip=0)
Definition: GLTexImage.cpp:859
float * _converted_data
Definition: GLTexImage.h:103
int _down_sampled
Definition: GLTexImage.h:98
int _rgb_converted
Definition: GLTexImage.h:99
static int IsSimpleGlFormat(unsigned int gl_format, unsigned int gl_type)
Definition: GLTexImage.h:106
static int DownSamplePixelDataI(unsigned int gl_format, int width, int height, int ds, const Uint *pin, Uint *pout)
Definition: GLTexImage.cpp:739
static int TruncateWidthCU(int w)
Definition: GLTexImage.h:125
void DrawMargin(int right, int bottom, int mx, int my)
Definition: GLTexImage.cpp:699
virtual void ZeroHistoMargin()
Definition: GLTexImage.cpp:664
virtual void DrawQuadUS(int scale)
Definition: GLTexImage.cpp:592
virtual void SetImageSize(int width, int height)
Definition: GLTexImage.cpp:528
virtual void InitTexture(int width, int height, int clamp_to_edge=1)
Definition: GLTexImage.cpp:534
virtual void DrawQuadDS(int scale)
Definition: GLTexImage.cpp:627
virtual void FillMargin(int marginx, int marginy)
Definition: GLTexImage.cpp:683
virtual void TexConvertRGB()
Definition: GLTexImage.cpp:499
virtual void DrawImage()
Definition: GLTexImage.cpp:578
static const std::string path
Definition: PointCloud.cpp:59