PCMXDisplay.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 #ifndef __PCM_XDISPLAY_H__
00029 #  define __PCM_XDISPLAY_H__
00030 
00031 //
00032 // Inner includes
00033 //
00034 
00035 #  include "PCMPremeditations.h"
00036 
00037 #  include "PCMContainer.h"
00038 
00039 #  include "PCMPointer.h"
00040 
00041 //
00042 // Outer includes
00043 //
00044 
00045 #  include <X11/Xlib.h>
00046 
00047 #  include <GL/glew.h>
00048 
00049 #  include <GL/glx.h>
00050 
00051 #  include <GL/glxext.h>
00052 
00053 namespace ParCompMark
00054 {
00055 
00060   class XDisplay
00061   {
00062 
00063         //
00064         // Unit test class
00065         //
00066 #  ifdef PARCOMPMARK_TEST
00067         friend class ParCompMarkTest::TestXDisplay;
00068 #  endif
00069 
00070         //
00071         // Typedefs
00072         //
00073 
00074    public:
00075 
00077         typedef Pointer < XDisplay,
00078         Mutex > Pointer;
00079 
00080    protected:
00081 
00083         typedef struct
00084         {                       /* X visual attribs */
00085          int id;
00086          int klass;
00087          int depth;
00088          int redMask,
00089           greenMask,
00090           blueMask;
00091          int colormapSize;
00092          int bitsPerRGB;        /* GL visual attribs */
00093          int supportsGL;
00094          int transparentType;
00095          int transparentRedValue;
00096          int transparentGreenValue;
00097          int transparentBlueValue;
00098          int transparentAlphaValue;
00099          int transparentIndexValue;
00100          int bufferSize;
00101          int level;
00102          int rgba;
00103          int doubleBuffer;
00104          int stereo;
00105          int auxBuffers;
00106          int redSize,
00107           greenSize,
00108           blueSize,
00109           alphaSize;
00110          int depthSize;
00111          int stencilSize;
00112          int accumRedSize,
00113           accumGreenSize,
00114           accumBlueSize,
00115           accumAlphaSize;
00116          int numSamples,
00117           numMultisample;
00118          int visualCaveat;
00119         } VisualAttribs;
00120 
00121         //
00122         // Class constants
00123         //
00124 
00126 
00127 
00128    public:
00129 
00135         static const s32 IGNOREMULTISAMPLE;
00136 
00142         static const s32 UNKNOWNDIMENSION;
00143 
00145 
00146         //
00147         // Class variables
00148         //
00149 
00151 
00152 
00153    protected:
00154 
00160         static bool mXMTInitialized;
00161 
00167         static bool mXMTSupported;
00168 
00174         static Mutex mErrorHandlerMutex;
00175 
00181         static bool mTolerateErrors;
00182 
00184 
00185         //
00186         // Variables
00187         //
00188 
00190 
00191 
00192    protected:
00193 
00199         std::string mDisplayName;
00200 
00206         ::Display * mDisplay;
00207 
00213         bool mInitialized;
00214 
00220         u32 mWidth;
00221 
00227         u32 mHeight;
00228 
00230 
00231         //
00232         // Constructors & destructor
00233         //
00234 
00236 
00237 
00238    public:
00239 
00244         XDisplay(const std::string & displayName = "");
00245 
00249         virtual ~ XDisplay();
00250 
00252 
00253         //
00254         // Getters & setters
00255         //
00256 
00258 
00259 
00260    public:
00261 
00267         const std::string & getDisplayName() const;
00268 
00274         ::Display * getDisplay() const;
00275 
00281         const bool & getInitialized() const;
00282 
00288         static const bool & getXMTInitialized();
00289 
00295         static const bool & getXMTSupported();
00296 
00302         const u32 & getWidth() const;
00303 
00309         const u32 & getHeight() const;
00310 
00316         static const Mutex & getErrorHandlerMutex();
00317 
00323         static const bool & getTolerateErrors();
00324 
00330         static void setTolerateErrors(const bool & tolerateerrors);
00331 
00333 
00334         //
00335         // Class methods
00336         //
00337 
00339 
00340 
00341    protected:
00342 
00349         static int errorHandler(Display * display, XErrorEvent * errorEvent);
00350 
00352 
00353         //
00354         // Methods
00355         //
00356 
00358 
00359 
00360    public:
00361 
00365         virtual void initialize();
00366 
00370         virtual void finalize();
00371 
00376         virtual void synchronize(const bool & discard = false);
00377 
00386         virtual s32 findBestVisual(const s32 & screenNumber, const s32 & multiSample =
00387                                  XDisplay::IGNOREMULTISAMPLE);
00388 
00394         virtual void getVisualAttribs(XVisualInfo * vInfo, VisualAttribs & attribs);
00395 
00396    protected:
00397 
00404         virtual void initializeMT();
00405 
00407 
00408   };
00409 
00410   //
00411   // Include header implementation
00412   //
00413 
00414 #  include "PCMXDisplay_impl.h"
00415 
00416 }
00417 
00418 #endif