PCMGLXRenderWindow_impl.h

Go to the documentation of this file.
00001 
00002 //
00003 // This source file is a part of ParCompMark
00004 // Parallel Compositing Benchmark Framework
00005 //
00006 // for latest info see http://parcompmark.sourceforge.net
00007 
00008 //
00009 // Copyright (C) 2006 IT2 ParCompMark Dev. Team
00010 // 
00011 // This program is free software; you can redistribute it and/or
00012 // modify it under the terms of the GNU General Public License
00013 // as published by the Free Software Foundation; either version 2
00014 // of the License, or (at your option) any later version.
00015 // 
00016 // This program is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU General Public License for more details.
00020 // 
00021 // You should have received a copy of the GNU General Public License
00022 // along with this program; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 
00027 
00028  //
00029  // Getters & setters
00030  //
00031 
00032 inline XDisplay::Pointer & GLXRenderWindow::getDisplay()
00033 {
00034   return mDisplay;
00035 }
00036 
00037  /*-------------------------------------------------------------------------*/
00038 
00039 inline GLXGLContext::Pointer & GLXRenderWindow::getGLXGLContext()
00040 {
00041   return mGLXGLContext;
00042 }
00043 
00044  /*-------------------------------------------------------------------------*/
00045 
00046 inline Process *GLXRenderWindow::getProcess() const
00047 {
00048   return mProcess;
00049 }
00050 
00051  /*-------------------------------------------------------------------------*/
00052 
00053 inline const::Window & GLXRenderWindow::getWindow() const
00054 {
00055   return mWindow;
00056 }
00057 
00058  /*-------------------------------------------------------------------------*/
00059 
00060 inline const bool & GLXRenderWindow::getInitialized() const
00061 {
00062   return mInitialized;
00063 }
00064 
00065  /*-------------------------------------------------------------------------*/
00066 
00067 inline const bool & GLXRenderWindow::getVisible() const
00068 {
00069   return mVisible;
00070 }
00071 
00072  /*-------------------------------------------------------------------------*/
00073 
00074 inline void GLXRenderWindow::setVisible(const bool & visible)
00075 {
00076   if(!mInitialized && visible)
00077   {
00078         // Initialize
00079         initialize();
00080 
00081         // Set position and size
00082         _reposition();
00083         _resize();
00084   }
00085 
00086   mVisible = visible;
00087 }
00088 
00089  /*-------------------------------------------------------------------------*/
00090 
00091 inline const bool & GLXRenderWindow::getFullScreen() const
00092 {
00093   return mFullScreen;
00094 }
00095 
00096  /*-------------------------------------------------------------------------*/
00097 
00098 inline void GLXRenderWindow::setFullScreen(const bool & fullscreen)
00099 {
00100   mFullScreen = fullscreen;
00101 }
00102 
00103  /*-------------------------------------------------------------------------*/
00104 
00105 inline const std::string & GLXRenderWindow::getCaption() const
00106 {
00107   return mCaption;
00108 }
00109 
00110  /*-------------------------------------------------------------------------*/
00111 
00112 inline void GLXRenderWindow::setCaption(const std::string & caption)
00113 {
00114   mCaption = caption;
00115 
00116   _setCaption();
00117 }
00118 
00119  /*-------------------------------------------------------------------------*/
00120 
00121 inline const s32 & GLXRenderWindow::getLeft() const
00122 {
00123   return mLeft;
00124 }
00125 
00126  /*-------------------------------------------------------------------------*/
00127 
00128 inline void GLXRenderWindow::setLeft(const s32 & left)
00129 {
00130   reposition(left, mTop);
00131 }
00132 
00133  /*-------------------------------------------------------------------------*/
00134 
00135 inline const s32 & GLXRenderWindow::getTop() const
00136 {
00137   return mTop;
00138 }
00139 
00140  /*-------------------------------------------------------------------------*/
00141 
00142 inline void GLXRenderWindow::setTop(const s32 & top)
00143 {
00144   reposition(mLeft, top);
00145 }
00146 
00147  /*-------------------------------------------------------------------------*/
00148 
00149 inline const u32 & GLXRenderWindow::getWidth() const
00150 {
00151   return mWidth;
00152 }
00153 
00154  /*-------------------------------------------------------------------------*/
00155 
00156 inline void GLXRenderWindow::setWidth(const u32 & width)
00157 {
00158   resize(width, mHeight);
00159 }
00160 
00161  /*-------------------------------------------------------------------------*/
00162 
00163 inline const u32 & GLXRenderWindow::getHeight() const
00164 {
00165   return mHeight;
00166 }
00167 
00168  /*-------------------------------------------------------------------------*/
00169 
00170 inline void GLXRenderWindow::setHeight(const u32 & height)
00171 {
00172   resize(mWidth, height);
00173 }
00174 
00175  /*-------------------------------------------------------------------------*/
00176 
00177 inline const u32 & GLXRenderWindow::getColourDepth() const
00178 {
00179   return mColourDepth;
00180 }
00181 
00182  /*-------------------------------------------------------------------------*/
00183 
00184 inline void GLXRenderWindow::setColourDepth(const u32 & colourdepth)
00185 {
00186   mColourDepth = colourdepth;
00187 }
00188 
00189  /*-------------------------------------------------------------------------*/
00190 
00191 inline const u32 & GLXRenderWindow::getFSAASamples() const
00192 {
00193   return mFSAASamples;
00194 }
00195 
00196  /*-------------------------------------------------------------------------*/
00197 
00198 inline void GLXRenderWindow::setFSAASamples(const u32 & fsaasamples)
00199 {
00200   mFSAASamples = fsaasamples;
00201 }
00202 
00203  /*-------------------------------------------------------------------------*/
00204 
00205 inline const GLXRenderWindow::WindowStatistics & GLXRenderWindow::getWindowStatistics() const
00206 {
00207   return mWindowStatistics;
00208 }
00209 
00210  /*-------------------------------------------------------------------------*/
00211 
00212  //
00213  // Methods
00214  //
00215 
00216 inline void GLXRenderWindow::reposition(const s32 & left, const s32 & top)
00217 {
00218   mDisplay.lock();
00219   mLeft = (left == GLXRenderWindow::CENTERED ? (mDisplay->getWidth() - mWidth) / 2 : left);
00220   mTop = (top == GLXRenderWindow::CENTERED ? (mDisplay->getHeight() - mHeight) / 2 : top);
00221   mDisplay.unlock();
00222 
00223   if(mInitialized)
00224         _reposition();
00225 }
00226 
00227  /*----------------------------------------------------------------------*/
00228 
00229 inline void GLXRenderWindow::resize(const u32 & width, const u32 & height)
00230 {
00231   mWidth = width;
00232   mHeight = height;
00233 
00234   if(mInitialized)
00235         _resize();
00236 }
00237 
00238  /*----------------------------------------------------------------------*/
00239 
00240 inline void GLXRenderWindow::startFrame()
00241 {
00242   // Reset some stats
00243   mWindowStatistics.lastTriangleCount = 0;
00244 
00245   // Store frame starting time
00246   mWindowStatistics.frameBeginTime = Timer::getSystemTime();
00247 
00248   // Set context of the window to current
00249   setCurrent();
00250 }
00251 
00252  /*----------------------------------------------------------------------*/
00253 
00254 inline void GLXRenderWindow::finishFrame()
00255 {
00256   // Do swapping
00257   mDisplay.lock();
00258   glXSwapBuffers(mDisplay->getDisplay(), mWindow);
00259   mDisplay.unlock();
00260 
00261   // Release context of the window
00262   releaseCurrent();
00263 
00264   // Store frame end time
00265   mWindowStatistics.frameEndTime = Timer::getSystemTime();
00266 
00267   // Update stats
00268   updateStatistics();
00269 }
00270 
00271  /*----------------------------------------------------------------------*/
00272 
00273 inline void GLXRenderWindow::_reposition()
00274 {
00275   mDisplay.lock();
00276   XMoveWindow(mDisplay->getDisplay(), mWindow, mLeft, mTop);
00277   mDisplay.unlock();
00278 }
00279 
00280  /*----------------------------------------------------------------------*/
00281 
00282 inline void GLXRenderWindow::_resize()
00283 {
00284   mDisplay.lock();
00285   XResizeWindow(mDisplay->getDisplay(), mWindow, mWidth, mHeight);
00286   // TODO: causes segfault
00287   //glViewport(0, 0, mWidth, mHeight);
00288   mDisplay.unlock();
00289 }
00290 
00291  /*----------------------------------------------------------------------*/