00001 /*************************************************************************** 00002 *cr 00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 00004 *cr University of Illinois 00005 *cr All Rights Reserved 00006 *cr 00007 ***************************************************************************/ 00008 /*************************************************************************** 00009 * RCS INFORMATION: 00010 * 00011 * $RCSfile: CaveScene.h,v $ 00012 * $Author: johns $ $Locker: $ $State: Exp $ 00013 * $Revision: 1.52 $ $Date: 2020/02/26 15:51:10 $ 00014 * 00015 ***************************************************************************/ 00029 #ifndef CAVE_SCENE_H 00030 #define CAVE_SCENE_H 00031 00032 #include "Scene.h" 00033 #if 1 00034 #include <cave.h> 00035 #else 00036 #include <cave_ogl.h> 00037 #endif 00038 #include "CaveRoutines.h" 00039 #include "CaveDisplayDevice.h" // for manipulating lights etc 00040 #include "WKFThreads.h" // for the barrier synchronization code 00041 00042 class VMDApp; 00043 00044 // This needs to grab shared memory for use in the CAVE 00045 // environment. It does it with one means. 00046 // 1) use a CaveScene::operator new so that the internal 00047 // scene information is shared (get_disp_storage and 00048 // free_disp_storage) 00049 // The shared memory is allocated through a global function, 00050 // new_from_CAVE_memory. 00051 // This must also call the left eye and right eye draws correctly 00052 00055 class CaveScene : public Scene { 00056 private: 00057 VMDApp *app; 00058 00060 wkf_barrier_t * draw_barrier; 00061 00063 CAVELOCK draw_rwlock; 00064 00065 public: 00067 CaveScene(VMDApp *); 00068 virtual ~CaveScene(void); 00069 00072 void draw(DisplayDevice *); 00073 00075 virtual int prepare(); 00076 00078 void *operator new(size_t); 00079 void operator delete(void *, size_t); 00080 }; 00081 00082 #endif /* CAVE_SCENE_H */ 00083