void initGraphics(uintf graphicsMode,uintf width, uintf height, uintf bpp) { if (shutDownVideo) shutDownVideo(); // Perform standard 3D world inits width = width&0xfffffffc; screenWidth = width; screenHeight = height; switch (graphicsMode & 0x0000000f) { case gfxmode_GUI: // Deliberate fallthrough to 2D mode for now case gfxmode_2D: { init2Ddriver(width,height,bpp); fc_screenBitmap = getScreenBitmap(); create2DRenderTarget(&rt2d_ScreenDisplay,fc_screenBitmap); select2DRenderTarget(&rt2d_ScreenDisplay); break; } case gfxmode_3D: { // This is the currently supported mode fc_screenBitmap = newbitmap("2D RT Safety Net",1,1,bitmap_x8r8g8b8 | bitmap_RenderTarget); create2DRenderTarget(&rt2d_ScreenDisplay,fc_screenBitmap); select2DRenderTarget(&rt2d_ScreenDisplay); init3Ddriver(screenWidth,screenHeight,bpp); setcammatrix(); _fclighting = initlighting(); _fctexture = inittexture(); fc_initShaders(); initmaterial(); initbillboards(); break; } default: { msg("Error","Unrecognised Graphics mode in call to initGraphics.\nDid you use the old method of requesting a render core?"); break; } } getvideoinfo(&videoinfo,sizeof(videoinfo)); fcapplaunched = 1; }
void initvmd() { // Assume that VMD should not initialize or use MPI // It is conceivable we would want to be able to load the VMD // Python module into a MPI-based Python run, and enable the // MPI features of VMD, but we'll have to determine the best way // to detect this and it will need to be tested since we may have // to handle this case differently than the normal MPI case where // VMD explicitly does MPI initialization and shutdown itself. int mpienabled = 0; // If there's already a VMDapp in get_vmdapp, then we must be running // inside a standalone VMD instead of being loaded as a python extension. // Don't throw an error - just load the methods for interoperability // in case vmd.so is in the PYTHONPATH of the standalone application. if (get_vmdapp() != NULL) { (void)Py_InitModule((char *)"vmd", VMDAppMethods); return; } int argc=1; char *argv[1]; argv[0] = Py_GetProgramFullPath(); if (!VMDinitialize(&argc, (char ***) &argv, mpienabled)) { return; } // XXX this is a hack, and it would be better to tie this into // VMDApp more directly at some later point, but the regular // VMD startup code is similarly lame, so we'll use it for now. const char *disp = getenv("VMDDISPLAYDEVICE"); if (!disp) disp="text"; int loc[2] = { 50, 50 }; int size[2] = { 400, 400 }; VMDgetDisplayFrame(loc, size); VMDApp *app = new VMDApp(1, argv, mpienabled); app->VMDinit(1, argv, disp, loc, size); // read application defaults VMDreadInit(app); // read user-defined startup files VMDreadStartup(app); set_vmdapp(app); // set my local static the_app = app; PyObject *vmdmodule = Py_InitModule((char *)"vmd", VMDAppMethods); initanimate(); initatomsel(); initaxes(); initcolor(); initdisplay(); initgraphics(); initimd(); initlabel(); initmaterial(); initmolecule(); initmolrep(); initmouse(); initrender(); inittrans(); initvmdmenu(); #ifdef VMDNUMPY initvmdnumpy(); #endif if (PyErr_Occurred()) return; static const char *modules[] = { "animate", "atomsel", "axes", "color", "display", "graphics", "imd", "label", "material", "molecule", "molrep", "mouse", "render", "trans", "vmdmenu", "vmdnumpy" }; for (unsigned i=0; i<sizeof(modules)/sizeof(const char *); i++) { const char *m = modules[i]; #if (PY_MAJOR_VERSION == 2) && (PY_MINOR_VERSION < 5) #define CAST_HACK (char *) #else #define CAST_HACK #endif PyModule_AddObject(vmdmodule, CAST_HACK m, PyImport_ImportModule( CAST_HACK m)); } event_tstate = PyThreadState_Get(); #if defined(VMD_SHARED) PyOS_InputHook = vmd_input_hook; #endif }