// set up the graphics on the seperate CAVE displays void CaveDisplayDevice::cave_gl_init_fn(void) { setup_initial_opengl_state(); // do all OpenGL setup/initialization now // follow up with mode settings aaAvailable = TRUE; // enable antialiasing cueingAvailable = FALSE; // disable depth cueing cullingAvailable = FALSE; // disable culling // XXX need to test this still // ext->hasstereo = CAVEInStereo(); // stereo availability test ext->hasstereo = TRUE; // stereo is on initially ext->stereodrawforced = FALSE; // no need for forced stereo draws glClearColor(0.0, 0.0, 0.0, 0.0); // set clear color to black aa_on(); // force antialiasing on if possible cueing_off(); // force depth cueing off // set default settings set_sphere_mode(sphereMode); set_sphere_res(sphereRes); set_line_width(lineWidth); set_line_style(lineStyle); clear(); // clear screen update(); // swap buffers // we want the CAVE to be centered at the origin, and in the range -1, +1 (transMat.top()).translate(0.0, 3.0, -2.0); (transMat.top()).scale(VMD_PI); doneGLInit = TRUE; // only do this once }
// init ... open a window and set initial default values int OpenGLDisplayDevice::init(int argc, char **argv, VMDApp *app, int *size, int *loc) { vmdapp = app; // save VMDApp handle for use by drag-and-drop handlers // open the window if (open_window(name, size, loc, argc, argv) != 0) return FALSE; if (!have_window) return FALSE; // get screen size // XXX There's no Win32 API to get the full multi-monitor desktop, // so this code doesn't correctly handle multi-monitor systems yet. // To correctly handle multiple monitors, we'd have to // walk the device tree, take into account monitor layout/positioning, // and compute the desktop dimensions from that. Since these values // are currently only used by do_reposition_window() method, we can // live with primary-monitor values for the time being. screenX = GetSystemMetrics(SM_CXSCREEN); screenY = GetSystemMetrics(SM_CYSCREEN); // set flags for the capabilities of this display ext->hasmultisample = FALSE; // no code for this extension yet ext->nummultisamples = 0; aaAvailable = FALSE; // set default settings if (ext->hasmultisample) { aa_on(); // enable fast multisample based antialiasing by default // other antialiasing techniques are slow, so only multisample // makes sense to enable by default. } cueingAvailable = TRUE; cueing_on(); // leave depth cueing on by default, despite the speed hit. cullingAvailable = TRUE; culling_off(); set_sphere_mode(sphereMode); set_sphere_res(sphereRes); set_line_width(lineWidth); set_line_style(lineStyle); // reshape and clear the display, which initializes some other variables reshape(); normal(); clear(); update(); // successfully created window return TRUE; }
int OpenGLPbufferDisplayDevice::init(int argc, char **argv, VMDApp *app, int *size, int *loc) { vmdapp = app; // save VMDApp handle for use by drag-and-drop handlers // and GPU memory management routines // open the window glxsrv.windowID = open_window(name, size, loc, argc, argv); if (!have_window) return FALSE; // set flags for the capabilities of this display // whether we can do antialiasing or not. if (ext->hasmultisample) aaAvailable = TRUE; // we use multisampling over other methods else aaAvailable = FALSE; // no non-multisample implementation yet // set default settings if (ext->hasmultisample) { aa_on(); // enable fast multisample based antialiasing by default // other antialiasing techniques are slow, so only multisample // makes sense to enable by default. } cueingAvailable = TRUE; cueing_on(); // leave depth cueing on by default, despite the speed hit. cullingAvailable = TRUE; culling_off(); set_sphere_mode(sphereMode); set_sphere_res(sphereRes); set_line_width(lineWidth); set_line_style(lineStyle); // reshape and clear the display, which initializes some other variables reshape(); normal(); clear(); update(); // We have a window, return success. return TRUE; }
int OpenGLDisplayDevice::init(int argc, char **argv, VMDApp* app, int *size, int *loc) { // open the window sdlsrv.windowID = open_window(name, size, loc, argc, argv); if (!have_window) return FALSE; // set flags for the capabilities of this display // whether we can do antialiasing or not. if (ext->hasmultisample) aaAvailable = TRUE; // we use multisampling over other methods else aaAvailable = FALSE; // no non-multisample implementation yet cueingAvailable = TRUE; cullingAvailable = TRUE; cullingEnabled = FALSE; // set default settings if (ext->hasmultisample) { aa_on(); // enable fast multisample based antialiasing by default // other antialiasing techniques are slow, so only multisample // makes sense to enable by default. } cueing_off(); // leave depth cueing off by default, since its a speed hit. set_sphere_mode(sphereMode); set_sphere_res(sphereRes); set_line_width(lineWidth); set_line_style(lineStyle); // reshape and clear the display, which initializes some other variables reshape(); normal(); clear(); update(); // successfully opened window. return TRUE; }
// constructor ... open a window and set initial default values FltkOpenGLDisplayDevice::FltkOpenGLDisplayDevice(int argc, char **argv, VMDApp *vmdapp_p, int *size, int *loc) : OpenGLRenderer((char *) "VMD " VMDVERSION " OpenGL Display") { vmdapp = vmdapp_p; // save VMDApp handle for use by drag-and-drop handlers, // and GPU memory management routines // set up data possible before opening window stereoNames = glStereoNameStr; stereoModes = OPENGL_STEREO_MODES; // GLSL is only available on MacOS X 10.4 and later. renderNames = glRenderNameStr; renderModes = OPENGL_RENDER_MODES; cacheNames = glCacheNameStr; cacheModes = OPENGL_CACHE_MODES; // open the window int SX = 100, SY = 100, W, H; W = size[0]; H = size[1]; if (loc) { SX = loc[0]; SY = loc[1]; } window = new myglwindow(SX, SY, W, H, name, this, vmdapp_p); ext->hasstereo = FALSE; // stereo is off initially ext->stereodrawforced = FALSE; // stereo not forced initially ext->hasmultisample = FALSE; // multisample is off initially int rc=0; // FLTK stereo support only started working for MacOS X at around version 1.1.7 #if (FL_MAJOR_VERSION >= 1) && (((FL_MINOR_VERSION >= 1) && (FL_PATCH_VERSION >= 7)) || ((FL_MINOR_VERSION >= 1) && (FL_PATCH_VERSION >= 7))) // find an appropriate visual and colormap ... if (getenv("VMDPREFERSTEREO") != NULL) { // Stereo limps along with FLTK 1.1.7 on MacOS X rc = window->mode(FL_RGB8 | FL_DOUBLE | FL_STENCIL | FL_STEREO); ext->hasstereo = TRUE; #if defined(__APPLE__) ext->stereodrawforced = TRUE; // forced draw in stereo all the time when on #endif // FLTK multisample antialiasing still doesn't actually work in // MacOS X as of FLTK 1.1.10... #if !defined(__APPLE__) // } else if (getenv("VMDPREFERMULTISAMPLE") != NULL) { } else if (rc != 0) { rc = window->mode(FL_RGB8 | FL_DOUBLE | FL_STENCIL | FL_MULTISAMPLE); ext->hasmultisample = TRUE; // FLTK only does SGI multisample, no ARB yet #endif } else { rc = window->mode(FL_RGB8 | FL_DOUBLE | FL_STENCIL); } #else // find an appropriate visual and colormap ... rc = window->mode(FL_RGB8 | FL_DOUBLE | FL_STENCIL); #endif window->show(); // (7) bind the rendering context to the window window->make_current(); // (8) actually request the window to be displayed screenX = Fl::w(); screenY = Fl::h(); // (9) configure the rendering properly setup_initial_opengl_state(); // setup initial OpenGL state // set flags for the capabilities of this display // whether we can do antialiasing or not. if (ext->hasmultisample) aaAvailable = TRUE; // we use multisampling over other methods else aaAvailable = FALSE; // no non-multisample implementation yet // set default settings if (ext->hasmultisample) { aa_on(); // enable fast multisample based antialiasing by default // other antialiasing techniques are slow, so only multisample // makes sense to enable by default. } cueingAvailable = TRUE; cueing_on(); // leave depth cueing on by default, despite the speed hit. cullingAvailable = TRUE; culling_off(); set_sphere_mode(sphereMode); set_sphere_res(sphereRes); set_line_width(lineWidth); set_line_style(lineStyle); // reshape and clear the display, which initializes some other variables reshape(); normal(); clear(); update(); }