00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _IPLTEXTURE_H
00024 #define _IPLTEXTURE_H
00025
00026 #include <cv.h>
00027
00028 #define HAVE_GL
00029
00030 #ifdef HAVE_CONFIG_H
00031 #include <config.h>
00032 #else
00033 #ifdef WIN32
00034
00035
00036 #endif
00037 #endif
00038
00039 #ifdef HAVE_GLEW
00040 #include <GL/glew.h>
00041 #ifndef HAVE_GL
00042 #define HAVE_GL
00043 #endif
00044 #else
00045 #ifdef WIN32
00046 #include <windows.h>
00047 #include <GL/gl.h>
00048 #define HAVE_GL
00049 #endif
00050
00051 #ifdef HAVE_GL
00052 #ifdef MACOS
00053 #include <OpenGL/gl.h>
00054 #else
00055 #include <GL/gl.h>
00056 #endif
00057 #endif
00058 #endif
00059
00060
00067 class IplTexture {
00068
00069 public:
00070 IplTexture(IplImage *image=0, bool cache=true, bool smooth=true)
00071 : im(image), downsampled(0), allowCache(cache), reload(true),
00072 smooth(smooth), textureGenerated(false), refcnt(1), isAlpha(false) {}
00073 IplTexture(const IplTexture &a);
00074 const IplTexture &operator = (const IplTexture &a);
00075
00076 virtual ~IplTexture();
00077
00079 void genTexture();
00080 void loadTexture();
00081 void disableTexture();
00082 void update() { reload=true; }
00083 void setImage(IplImage *image);
00084 void setImage(CvMat *mat);
00085 IplImage *getImage() { return im; }
00086 IplImage *getIm() { return im; }
00087 const IplImage *getIm() const { return im; }
00088 void freeImage() { if (this && im) { cvReleaseImage(&im); } }
00089
00091 double u(double x) { return x*uScale; }
00092
00094 double v(double y) { return y*vScale + vOrigin; }
00095
00097 void regen();
00098
00100 void addRef() { refcnt++; }
00101
00105 void unref();
00106
00107 void clearWithoutDelete() { im = downsampled = 0; }
00108
00109 void drawQuad(float r=1);
00110 void drawQuad(float x, float y, float w=0, float h=0);
00111
00112 private:
00113 IplImage *im;
00114 IplImage *downsampled;
00115 IplImage header;
00116
00117 bool allowCache;
00118 bool reload;
00119 bool smooth;
00120 bool textureGenerated;
00121 int refcnt;
00122 public:
00123 bool isAlpha;
00124 private:
00125 unsigned int texture;
00126 double uScale, vScale, vOrigin;
00127 int texWidth, texHeight;
00128 };
00129
00130 bool LoadTexture(IplTexture *tex, const char *filename, const char *subdir);
00131
00132 #endif