00001 #include "vuSphericViewFilter.h"
00002
00003 template <int S, class T>
00004 vuSphericViewFilter<S,T>::vuSphericViewFilter()
00005 {
00006 m_NumberOfViews = 0;
00007 m_Views = NULL;
00008 m_Image = NULL;
00009 m_Width = 0;
00010 m_Height = 0;
00011 ensureImage(4,4);
00012 }
00013
00014 template <int S, class T>
00015 vuSphericViewFilter<S,T>::vuSphericViewFilter(const vuString& filterName)
00016 : vuFilter(filterName)
00017 {
00018 m_NumberOfViews = 0;
00019 m_Views = NULL;
00020 m_Image = NULL;
00021 m_Width = 0;
00022 m_Height = 0;
00023 ensureImage(4,4);
00024 }
00025
00026 template <int S, class T>
00027 vuSphericViewFilter<S,T>::~vuSphericViewFilter()
00028 {
00029 CHECKNDELETE(m_Views);
00030 CHECKNDELETE(m_Image);
00031 m_NumberOfViews = 0;
00032 }
00033
00034 template <int S, class T>
00035 void vuSphericViewFilter<S,T>::setNumberOfViews(dword count)
00036 {
00037 if (m_Views == NULL || m_NumberOfViews != count) {
00038 CHECKNDELETE(m_Views);
00039 m_Views = new vuSphericView<S,T>*[count];
00040 m_NumberOfViews = count;
00041 }
00042 }
00043
00044 template <int S, class T>
00045 dword vuSphericViewFilter<S,T>::getNumberOfViews()
00046 {
00047 return m_NumberOfViews;
00048 }
00049
00050 template <int S, class T>
00051 vuSphericView<S,T>** vuSphericViewFilter<S,T>::getViews()
00052 {
00053 return m_Views;
00054 }
00055
00056 template <int S, class T>
00057 vuSphericView<S,T>* vuSphericViewFilter<S,T>::getView(dword i)
00058 {
00059 if (i>= m_NumberOfViews) return NULL;
00060 return m_Views[i];
00061 }
00062
00063 template <int S, class T>
00064 int vuSphericViewFilter<S,T>::getIndexOfView(vuSphericView<S,T> *view)
00065 {
00066 for (dword i=0; i<m_NumberOfViews; i++) {
00067 if (view == m_Views[i]) return i;
00068 }
00069 return -1;
00070 }
00071
00072 template <int S, class T>
00073 void vuSphericViewFilter<S,T>::setView(dword idx, vuSphericView<S,T> *view)
00074 {
00075 if (m_Views == NULL || idx >= m_NumberOfViews) {
00076 cerr << "vuSphericViewFilter.setView(): idx out of range" << endl;
00077 throw "vuSphericViewFilter.setView(): idx out of range";
00078 return;
00079 }
00080 m_Views[idx] = view;
00081 }
00082
00083 template <int S, class T>
00084 void vuSphericViewFilter<S,T>::glRender()
00085 {
00086 if (m_Image)
00087 m_Image->glRender();
00088 else
00089 log("WARNING: vuSphericViewFilter.render(): m_Image is NULL!");
00090 }
00091
00092 template <int S, class T>
00093 void vuSphericViewFilter<S,T>::initOpenGL(void)
00094 {
00095 if (m_Image)
00096 m_Image->initOpenGL();
00097 else
00098 log("WARNING: vuSphericViewFilter.initOpenGL(): m_Image is NULL!");
00099 }
00100
00101 template <int S, class T>
00102 void vuSphericViewFilter<S,T>::glResize(dword width, dword height)
00103 {
00104 m_Width = width;
00105 m_Height = height;
00106 if (m_Image != NULL)
00107 m_Image->glResize(width, height);
00108 else
00109 log("WARNING: vuSphericViewFilter.glResize(): m_Image is NULL!");
00110 }
00111
00112 template <int S, class T>
00113 void vuSphericViewFilter<S,T>::preprocess(vuProgressHandler *handler)
00114 {
00115 }
00116
00117 template <int S, class T>
00118 void vuSphericViewFilter<S,T>::ensureImage(dword width, dword height)
00119 {
00120 if (width == 0 || height == 0) {
00121 if (m_NumberOfViews == 0) return;
00122
00123 width = m_Views[0]->getWidth();
00124 height = m_Views[0]->getHeight();
00125 }
00126
00127 if (m_Image == NULL) {
00128 m_Image = new vuFixelMap<S,T>(width,height);
00129 if (m_Width && m_Height)
00130 glPixelZoom((float)m_Width/width, (float)m_Height/height);
00131 cerr << "ensureImage... NEW " << endl;
00132 }
00133 else if (m_Image->getWidth() != width || m_Image->getHeight() != height) {
00134 CHECKNDELETE(m_Image);
00135 m_Image = new vuFixelMap<S,T>(width, height);
00136 if (m_Width && m_Height)
00137 glPixelZoom((float)m_Width/width, (float)m_Height/height);
00138 cerr << "ensureImage... RENEW " << endl;
00139 }
00140 }
00141
00142 template <int S, class T>
00143 void vuSphericViewFilter<S,T>::log(const char *msg)
00144 {
00145 cerr << msg << endl;
00146 }
00147
00148
00149 template <int S, class T>
00150 vuFixelMap<S,T> *vuSphericViewFilter<S,T>::getMap()
00151 {
00152 return m_Image;
00153 }
00154
00155