1 ////////////////////////////////////////////////////////////////////////////
2 //	File:		PyramidGL.h
3 //	Author:		Changchang Wu
4 //	Description : interface for the PyramdGL
5 //		class PyramidNaive and PyramidPacked are derived from PyramidGL
6 //
7 //	Copyright (c) 2007 University of North Carolina at Chapel Hill
8 //	All Rights Reserved
9 //
10 //	Permission to use, copy, modify and distribute this software and its
11 //	documentation for educational, research and non-profit purposes, without
12 //	fee, and without a written agreement is hereby granted, provided that the
13 //	above copyright notice and the following paragraph appear in all copies.
14 //
15 //	The University of North Carolina at Chapel Hill make no representations
16 //	about the suitability of this software for any purpose. It is provided
17 //	'as is' without express or implied warranty.
18 //
19 //	Please send BUG REPORTS to ccwu@cs.unc.edu
20 //
21 ////////////////////////////////////////////////////////////////////////////
22 
23 
24 
25 #ifndef _PYRAMID_GL_H
26 #define _PYRAMID_GL_H
27 
28 class GLTexImage;
29 class SiftParam;
30 class ProgramGPU;
31 class ShaderMan;
32 class GlobalUtil;
33 class SiftPyramid;
34 
35 class PyramidGL:public SiftPyramid
36 {
37 protected:
38 	GLTexImage* _histoPyramidTex;
39 	GLTexImage* _featureTex;
40 	GLTexImage* _descriptorTex;
41 	GLTexImage* _orientationTex;
42 public:
43     void InitializeContext();
44 	void SetLevelFeatureNum(int idx, int num);
45 	void GetTextureStorageSize(int num, int &fw, int& fh);
46 	void GetAlignedStorageSize(int num, int align, int &fw, int &fh);
47 	static void InterlaceDescriptorF2(int w, int h, float* buf, float* pd, int step);
48 	static void NormalizeDescriptor(int num, float*pd);
49 	virtual void DownloadKeypoints();
50 	virtual int ResizeFeatureStorage();
51 	////////////////////////////
52 	virtual void DestroyPerLevelData();
53 	virtual void DestroySharedData();
54 	virtual void GetFeatureDescriptors();
55 	virtual void GenerateFeatureListTex();
56 	virtual void ReshapeFeatureListCPU();
57 	virtual void GenerateFeatureDisplayVBO();
58     virtual void CleanUpAfterSIFT();
59 	virtual GLTexImage* GetBaseLevel(int octave, int dataName = DATA_GAUSSIAN)=0;
60 public:
61 	PyramidGL(SiftParam&sp);
62 	virtual ~PyramidGL();
63 };
64 
65 class PyramidNaive:public PyramidGL, public ShaderMan
66 {
67 protected:
68 	GLTexImage * _texPyramid;
69 	GLTexImage * _auxPyramid;
70 public:
71 	void DestroyPyramidData();
72 	void GetSimplifiedOrientation();
73 	void GenerateFeatureListCPU();
74 	virtual void GetFeatureOrientations();
75 	virtual void GenerateFeatureList();
76 	void DetectKeypointsEX();
77 	void ComputeGradient();
78 	GLTexImage* GetLevelTexture(int octave, int level);
79 	GLTexImage* GetBaseLevel(int octave, int dataName = DATA_GAUSSIAN);
80 	GLTexImage* GetLevelTexture(int octave, int level, int dataName);
81 	void BuildPyramid(GLTexInput * input);
82 	void InitPyramid(int w, int h, int ds);
83 	void FitPyramid(int w, int h);
84 	void ResizePyramid(int w, int h);
85 	void FitHistogramPyramid();
86 	PyramidNaive(SiftParam & sp);
87 	~PyramidNaive();
88 private:
89     void GenerateFeatureList(int i, int j);
90 };
91 
92 
93 class PyramidPacked:public PyramidGL, public ShaderMan
94 {
95 	GLTexPacked * _allPyramid;
96 public:
97 	PyramidPacked(SiftParam& sp);
98 	~PyramidPacked();
99 	void DestroyPyramidData();
100 	void DetectKeypointsEX();
101 	void ComputeGradient();
102 	void BuildPyramid(GLTexInput * input);
103 	void InitPyramid(int w, int h, int ds);
104 	void FitPyramid(int w, int h);
105 	void ResizePyramid(int w, int h);
106 	void FitHistogramPyramid();
107 	void GenerateFeatureListCPU();
108 	void GenerateFeatureList();
109 	void GetSimplifiedOrientation();
110 	void GetFeatureOrientations();
111 	GLTexImage* GetBaseLevel(int octave, int dataName = DATA_GAUSSIAN);
112 	GLTexImage* GetLevelTexture(int octave, int level);
113 	GLTexImage* GetLevelTexture(int octave, int level, int dataName);
IsUsingRectDescription()114     virtual int  IsUsingRectDescription(){return _existing_keypoints & SIFT_RECT_DESCRIPTION; }
115 private:
116     void GenerateFeatureList(int i, int j);
117 };
118 
119 #endif
120