/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ #include #ifndef tdmWindow_h #define tdmWindow_h /* * * $Header: /home/gda/dxcvs/dx/src/exec/hwrender/hwWindow.h,v 1.4 1999/05/10 15:45:36 gda Exp $ */ #include "hwStereo.h" /* ^L *=================================================================== * Defines *=================================================================== */ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef UP #define UP 0 #define DOWN 1 #endif /* ^L *=================================================================== * Structure Definitions and Typedefs *=================================================================== */ /* * window information */ typedef struct WinS { Display *dpy ; /* X display connection to window */ Window wigWindow ; /* parent window owned by UI process */ Window msgWindow ; /* window which receives UI messages */ Window toplevel ; /* top level UI shell */ Window xid ; /* X handle to graphics window */ Window lxid ; /* X handle to graphics window for left stereo image */ Window rxid ; /* X handle to graphics window for right stereo image */ Colormap xColormap ; /* X colormap for graphics window */ int visibility ; /* visibility state of X window */ tdmPortHandleP phP ; /* graphics API context */ void *curcam ; /* current camera object */ void *curobj ; /* current object to render */ int x, y ; /* window position */ int w, h ; /* window width and height in pixels */ int depth ; /* window depth */ int vpw, vph ; /* viewport width/height in pixels */ int correctSize ; /* UI and HW agree on window size? */ int bufferMode ; /* double or single buffer mode? */ void *buf ; /* handle to SW image buffer */ int bufCurrent ; /* SW image current? */ int buffSize ; /* size of SW image */ void *saveBuf ; /* handle to HW image buffer */ int saveBufValid ; /* HW image current? */ int saveBufSize ; /* size of HW image */ tdmInteractorWin interactorData ; /* handle to interactor common data */ void *matrixStack ; /* SW matrix stack shadow */ int mapped ; /* graphics window mapped? */ int camtag ; /* tag of last camera used */ int objtag ; /* tag of last object rendered */ int gl_window ; /* GL window exist? */ /* #X */ int uitype; char *where; /* original where parameter */ int link; /* whether its a '#X window */ char *originalWhere; long pad[12] ; /* under construction */ int saveBufObjectTag; int saveBufCameraTag; int stereoSystemMode; int stereoCameraMode; float currentFrom[3]; float currentTo[3]; float currentUp[3]; float currentWidth; float currentFov; void *stereoCameraData; WindowInfo leftWindowInfo; WindowInfo rightWindowInfo; } WinT ; /* * Renderer state. References to `child' are historical. */ typedef struct tdmChildGlobalS { tdmHWDescP adapter ; /* hardware description */ WinT win ; /* window description */ char *cacheId ; /* renderer state handle in cache */ int executeOnChange ; /* Execute Once / Execute On Change */ int displayGlobe ; /* display or don't display globe */ dxObject gather; int gatherTag; tdmInteractor Globe ; /* handles to direct interactors */ tdmInteractor Roamer ; tdmInteractor Cursor3D ; tdmInteractor Zoomer ; tdmInteractor ViewRotate ; tdmInteractor GnomonRotate ; tdmInteractor CrntInteractor ; tdmInteractor Navigator ; tdmInteractor PanZoom ; tdmInteractor CursorGroup ; tdmInteractor RoamGroup ; tdmInteractor RotateGroup ; tdmInteractor ViewTwirl ; tdmInteractor GnomonTwirl ; tdmInteractor Pick ; tdmInteractor User; HashTable meshHash; HashTable textureHash; SortList sortList; long pad[11] ; /* under construction */ } tdmChildGlobalT ; /* * The following macros are used to access global data from the port * implementations. As the number of tdm ports grow, it is very * important for maintainability to use these macros instead of accessing * the data structure directly from the port level; otherwise we'll have * to update several groups of files in parallel if the data structure * ever changes. * * Every port layer routine which needs access only to the data in the * WinT data structure should declare its first parameter as "void *" and * use the DEFWINDATA macro as the first statement in the body of the * function. * * A port layer routine which needs access to the entire _dxdChildGlobals * data structure should declare its first parameter as "void *" and use * the DEFGLOBALDATA macro as the first statement in the body of the * function. * * See hwPortGL.c for examples. */ #define DEFWINDATA(W) register WinT* _wdata = (WinT*) W #define DPY (_wdata->dpy) #define XWINID (_wdata->xid) #define PARENT_WINDOW (_wdata->wigWindow) #define PORT_HANDLE (_wdata->phP) #define CLRMAP (_wdata->xColormap) #define CAMERA (_wdata->curcam) #define OBJECT (_wdata->curobj) #define PIXW (_wdata->w) #define PIXH (_wdata->h) #define SW_BUF (_wdata->buf) #define SAVE_BUF (_wdata->saveBuf) #define SAVE_BUF_SIZE (_wdata->saveBufSize) #define SAVE_BUF_VALID (_wdata->saveBufValid) #define BUFFER_MODE (_wdata->bufferMode) #define INTERACTOR_DATA (_wdata->interactorData) #define MATRIX_STACK (_wdata->matrixStack) #define GL_WINDOW (_wdata->gl_window) #define SAVEBUFOBJECTTAG (_wdata->saveBufObjectTag) #define SAVEBUFCAMERATAG (_wdata->saveBufObjectTag) /* #X follows */ #define UI_TYPE (_wdata->uitype) #define DXD_DXUI 1 #define DXD_EXTERNALUI 2 #define DXD_NOUI 3 #define DXUI (UI_TYPE == DXD_DXUI) #define EXTERNALUI (UI_TYPE == DXD_EXTERNALUI) #define NOUI (UI_TYPE == DXD_NOUI) /* #X end */ #define WHERE (_wdata->where) #define LINK (_wdata->link) #define ORIGINALWHERE (_wdata->originalWhere) #define STEREOSYSTEMMODE (_wdata->stereoSystemMode) #define STEREOCAMERAMODE (_wdata->stereoCameraMode) #define STEREOCAMERADATA (_wdata->stereoCameraData) #define LEFTWINDOW (_wdata->lxid) #define RIGHTWINDOW (_wdata->rxid) #define CURRENT_UP (_wdata->currentUp) #define CURRENT_FROM (_wdata->currentFrom) #define CURRENT_TO (_wdata->currentTo) #define CURRENT_FOV (_wdata->currentFov) #define CURRENT_WIDTH (_wdata->currentWidth) #define LEFTWINDOWINFO (_wdata->leftWindowInfo) #define RIGHTWINDOWINFO (_wdata->rightWindowInfo) /* added by TJM */ #define TOPLEVEL (_wdata->toplevel) #define PIXX (_wdata->x) #define PIXY (_wdata->y) #define PIXDEPTH (_wdata->depth) #define MAPPED (_wdata->mapped) #define VISIBILITY (_wdata->visibility) #define CORRECT_SIZE (_wdata->correctSize) #define OBJECT_TAG (_wdata->objtag) #define CAMERA_TAG (_wdata->camtag) #define MSG_WINDOW (_wdata->msgWindow) #define SW_BUF_CURRENT (_wdata->bufCurrent) #define SW_BUF_SIZE (_wdata->buffSize) #define VIEWPORT_W (_wdata->vpw) #define VIEWPORT_H (_wdata->vph) #define LWIN ((WinP)_wdata) /* Use only to pass win to functions */ #define DEFGLOBALDATA(G) \ register tdmChildGlobalT* _gdata = (tdmChildGlobalT*) G ; \ DEFWINDATA(&(((tdmChildGlobalT*) G)->win)) #define GATHER (_gdata->gather) #define GATHER_TAG (_gdata->gatherTag) #define SORTLIST (_gdata->sortList) #define MESHHASH (_gdata->meshHash) #define TEXTUREHASH (_gdata->textureHash) void _dxfSetCurrentView(WinP, float *, float *, float *, float, float); /* *=================================================================== * END OF FILE * $Source: /home/gda/dxcvs/dx/src/exec/hwrender/hwWindow.h,v $ *=================================================================== */ #endif /* tdmWindow_h */