00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _SB_PIPE_H
00024 #define _SB_PIPE_H
00025
00026 #include <Inventor/helpers/SbGlContextHelper.h>
00027
00028 #if !defined(_WIN32)
00029 # include <Xm/Xm.h>
00030 # include <Xm/RowColumn.h>
00031 # include <Inventor/Xt/SoXtDef.h>
00032 #endif
00033
00034 #include <Inventor/SbLinear.h>
00035
00036 #ifdef _SO_QT_
00037 # if defined(_WIN32)
00038 # include <windows.h>
00039 # include <wingdi.h>
00040 # endif
00041 # include <Inventor/Qt/SoZt2SoQt.h>
00042 #else
00043 # if defined(_WIN32)
00044 # include <Inventor/Win/SoWinDef.h>
00045 # include <Inventor/Win/SoXt2SoWin.h>
00046 # endif
00047 #endif
00048
00049 #include <Inventor/misc/SoCallbackList.h>
00050
00051 class SoXtMPGLWidget;
00052
00053 class SbPipe;
00054 typedef void SbPipeRenderCB(void * userData, SbPipe *pipe);
00055
00079 class SbPipe {
00080
00081 public:
00082
00084 enum mpView {
00086 LEFT,
00088 CENTER,
00090 RIGHT,
00092 TOP,
00094 BOTTOM,
00096 TOP_RIGHT,
00098 TOP_LEFT,
00100 BOTTOM_RIGHT,
00102 BOTTOM_LEFT,
00104 NONE,
00106 STEREO_RIGHT,
00108 STEREO_LEFT
00109 };
00110
00111
00115 SbPipe();
00116
00120 ~SbPipe();
00121
00126 void setViewportValues(SbVec4f);
00127
00132 SbVec4f getViewportValues(void);
00133
00137 #if !defined(_WIN32)
00138 Display * getDisplay(void);
00139 #else
00140 UINT * getDisplay(void);
00141 #endif
00142
00146 #if !defined(_WIN32)
00147 void setDisplay(Display *);
00148 #else
00149 void setDisplay(UINT *);
00150 #endif
00151
00155 char * getDisplayName(void);
00156
00160 void setDisplayName(char *);
00161
00165 void setWall(SbVec3f ll,SbVec3f lr, SbVec3f ul);
00166
00170 void getWall(SbVec3f & ll,SbVec3f & lr, SbVec3f & ul);
00171
00175 SbBool isWallSet(void);
00176
00180 SoWidget getWidget(void);
00181
00182
00186 SoWidget getShell(void);
00187
00191 Window getWindow(void);
00192
00196 SoWidget getFormWidget(void);
00197
00201 SoWidget getPopupWidget(void);
00205 void setPopupWidget(SoWidget);
00206
00210 SbGlContextHelper::GLContext getContext(void);
00211
00215 void setContext(SbGlContextHelper::GLContext);
00216
00217 #if 1 SoDEPRECATED
00222 SoWidget getOverlayWidget( void );
00223 SoDEPRECATED
00228 Window getOverlayWindow( void );
00229 SoDEPRECATED
00234 SbGlContextHelper::GLContext getOverlayContext(void);
00235 SoDEPRECATED
00240 void setOverlayContext(SbGlContextHelper::GLContext);
00241 #endif
00246 XVisualInfo * getVisual(void);
00247
00251 void setId(int);
00255 int getId(void);
00256
00260 void setView(mpView);
00261
00262 #ifndef HIDDEN_FROM_DOC
00263
00266 int setView(char *);
00267 #endif // HIDDEN_FROM_DOC
00268
00271 mpView getView(void);
00272
00277 void setSize(SbVec2s);
00281 SbVec2s getSize(void);
00282
00287 void setPosition(SbVec2s);
00291 SbVec2s getPosition(void);
00292
00297 void setEdgeBlendingValues(float right, float left,
00298 float top, float bottom);
00303 void getEdgeBlendingValues(float& right, float& left,
00304 float& top, float& bottom);
00305
00306
00307 private:
00311 void setNoBorder(void);
00312
00316 void openDisplay(void);
00317
00321 void setGLAttributes(int *);
00322
00326 void buildWidget( SoXtMPGLWidget * );
00330 void buildGLXWidget(SoXtMPGLWidget *);
00331
00335 void buildOverlayWidget( SoXtMPGLWidget * );
00336
00340 void buildFormWidget(void);
00341
00345 void buildPopupMenu(void);
00346
00350 void destroyWidget(void);
00351
00355 void destroyGLXWidget(void);
00356
00360 void destroyFormWidget(void);
00361
00365 void destroyOverlayWidget(void);
00366
00371 void setOverlayColormap(int, XColor *);
00372
00376 void setOverlayColormap(void);
00377
00381 #if !defined(_WIN32)
00382 void allocCell(Display*, Colormap, XColor*, int, int);
00383 #else
00384 void allocCell(UINT*, Colormap, XColor*, int, int);
00385 #endif
00386
00390 void setRealized(int);
00391
00392 #if defined(_WIN32)
00393 HDC getDC(void) { return hdc; }
00394 void setDC(HDC newHdc) { hdc = newHdc; }
00395 #endif
00396
00397 private :
00398
00399 int id;
00400 char * display_name;
00401 int * attribList;
00402
00403 #if !defined(_WIN32)
00404 Display * dpy;
00405 #else
00406 UINT * dpy;
00407 #endif
00408
00409 XVisualInfo * vi;
00410 SbGlContextHelper::GLContext ctx;
00411 SbGlContextHelper::GLContext overlayCtx;
00412
00413 Colormap overlayColormap;
00414 unsigned long transparentPixel;
00415 XColor * newOverlayColormap;
00416 int newOverlayColormapSize;
00417
00418 SoWidget shell;
00419 SoWidget glw;
00420 SoWidget form;
00421 SoWidget overlayGlw;
00422 SoWidget popupWidget;
00423
00424 mpView view;
00425 SbVec2s size;
00426 SbVec2s position;
00427 SbVec4f viewport;
00428
00429 SbVec3f * wall;
00430 SbBool wallIsSet;
00431
00432 int widgetRealized;
00433
00434 float rightOverlap, leftOverlap, topOverlap, bottomOverlap;
00435
00436 #if defined(_WIN32)
00437 HDC hdc;
00438 #endif
00439 };
00440
00441 #endif
00442
00443