VMD 1.8.3 Development Status

  • VMD 1.8.3 final release (February 15, 2005)
    • Added VMD 1.8.3 CVS tag to the Programmer's guide listing.
    • added descriptions for the 3rd party plugins
    • Added link to Frederic Cazal's new Intervor plugin
    • added multiseq to main plugin page
    • added intersurf to main plugin doc page
    • Added comment about updated VMD tutorials
    • updated MacOS X disk image package info list
    • updated Win32 installer for final release
    • updated devtools page
    • Prevent intersurf plugin from registering a Tk callback on platforms it doesn't support, since the previous code wasn't working right.
    • Fixed a missing include of math.h in lammpsplugin
    • Prettied up output of all of the makefiles for the plugins
    • Updated multiple alignment plugin
    • Plotter plugin clears window before drawing
    • Added window resizing call for FLTK-based OpenGL windows, submitted by Justin
    • Don't compute any texture coordinates in the sphere vertex shader since we do this entirely in the fragment shader once we've calculated the eye coordinates of the hit-point for the ray-sphere intersection.
    • Added Axel's comment updates
    • no more betas, just release candidates
    • Added the Intersurf plugin to the Extensions menu in the "Visualization" category, since this only runs on two platforms and isn't in our CVS tree, it won't print any error message if the plugin doesn't load, it'll just be silently skipped.
    • Added another graphing callback that uses the multiseq Plotter plugin instead of xmgr. With a bit more work, we might actually be able to rid ourselves of the need for xmgr by default.
    • cranked version
  • VMD 1.8.3 Beta 6 (February 7, 2005)
    • VRPN 6.06 fails to build on SGI, so we have to skip it for this version.
    • Fix 64-bit IRIX6 plugin Tcl link flags
    • Use portable "mkdir" so that scratch dir creation works on Windows
    • Use portable "file join" to determine autoimd scratch dir.
    • Mention Win compatibility in AutoIMD docs
    • Docs for MDF plugin
    • Updated molfile plugin documentation index, added links to carplugin and mdfplugin, and updated parm7plugin version.
    • Fix minor version
    • Updated version numbers of various plugin doc pages
    • Updated minor version of XYZ plugin for floating point format change
    • Updated minor versions of cubeplugin and xsfplugin for the coordinate shift patch.
    • Made AK's patch an ifdef, and added a note that we'll need to revisit this again when the plugin interface is finally fixed.
    • Added Axel's patches shifting Gaussian cube and XSF files to counteract changes in VMD's interpretation of volume coordinates. This will need to be updated again when we fix the plugin interfaces (post 1.8.3) to explicitly accept face-centered or point oriented data sets.
    • Save XYZ files with normal floating point notation rather than scientific notation, to make life easier for simple-minded XYZ parsers.
    • Added Axel's patch fixing the LibTachyon compilation version check error message text
    • Added Axel's mol volume doc patch.
    • Fix catdcd distrib target
    • Delete the old hard coded catdcd makefile, since the new plugin-tree build appears to work fine now.
    • Updated CatDCD Makefile to build correctly as part of the plugin tree.
    • Made CatDCD error messages slightly more informative.
    • Added "bins" and "win32bins" targets to support compilation of plugin-based binaries such as CatDCD
    • cranked version
  • VMD 1.8.3 Beta 5 (February 3, 2005)
    • Cranked the minor versions of the DCD and JS plugins since they both use fio_fseek(), and the most recent fastio.h has fixed a bug in the implementation of fio_fseek() based on the Unix lseek() call.
    • Fixed the behavior of fio_fseek() on Unix machines that call lseek(), was incorrectly returning the seek offset rather than a success/failure code like ANSI fseek() does. This caused the various frame skipping routines in the DCD plugin to fail.
    • Updated README with vmdmovie change
    • Added support for rendering VMD movies using POV-Ray. The new code requires the recently added 'display get size' command, and so this plugin can't work with the old versions of VMD anymore, or at least the POV-Ray feature can't.
    • Added 'display get size' to the docs.
    • Added new "display get size" Tcl command. There already seems to be such a command on the Python side.
    • Correct the documentation of the "skip" parameter for animate read/write/etc.
    • Make POV-Ray renderings use the VMD display resolution by substituting %w and %h for resolution parameters in the POV-Ray command line. This should also allow us to enable POV-Ray in the vmdmovie plugin. Patch submitted by Justin.
    • Update NewCartoon reps when the secondary structure has changed.
    • Added pbcbox to the main script library page
    • Added Olaf Lenz's pbcbox script to the script library
    • All build options are enabled for 64-bit Linux compiles now.
    • Add -lutil to link flags for 64-bit linux builds with Python
    • enable IMD, VRPN, pthreads, ACTC, and Libtachyon for AMD64 builds.
    • Added code to calculate scaled reciprocal lattice vectors for using in the OpenGL texgen eye plane equations, for volume texturing with non-orthogonal data sets. The code seems to yield correct results for both orthogonal sets and non-orthogonal sets in brief testing so far.
    • More volume coloring comments
    • Added a few comments on the volume texturing axes calculations
    • Add non-power-of-two texture allocator so we can be more efficient on video cards that support the ARB NPOT extension.
    • Set the color scale data range when the user presses the enter key in the input field, in addition to the "set" button.
    • Update volumetric-colored representations when the color scale method changes.
    • Changed readpdb to coordpdb in psfgen documentation.
    • Change default NewCartoon aspect ratio to 4.1 as suggested by Justin.
    • Calculate the correct width/height values for the last section of the last span of a NewCartoon rep. Cures the bug reported by Jerome Henin.
    • cranked version
  • VMD 1.8.3 Beta 4 (January 20, 2005)
    • Added Jan to the acknowledgements, for several of this idea and script contributions over the last couple years.
    • Added documentation for the "material add copy" command, pointed out by Jan Saam.
    • Updated copyright dates for VMD, Tachyon, and a latex header
    • Added various people who deserve special thanks to the VMD docs.
    • updated copyright date on main plugin license file
    • simplified the 3-D texturing code in the sphere fragment shader, since we know that the GL_REPLACE mode with user-specified texture coordinates will never occur in the current VMD implementation. (VolumeSlice rep doesn't draw any spheres, and it's the only rep that uses that mode)
    • Updated comments for the sphere shader source files
    • Updated copyright headers on source files
    • eliminated a few local variables in favor of directly referencing uniform projection mode variables.
    • Always set the texture coordinates when rendering spheres, they will be overridden by internal calculations in the sphere fragment shader when necessary.
    • Make OpenGL extension info print nice even without GLSL (patch from JG)
    • Added mention of GLSL shading to the top of the README
    • Only attempt to compile the GLSL shaders if the GL_ARB_shading_language_100 extension is found. If not, then don't even bother. This will save some of the oldest cards from bothering to try compiling the shaders despite woefully lacking hardware that'll never run them.
    • Only print the GLSL extensions info if the driver supports the ARB extension for version 1 of the language.
    • The ray-traced sphere shader now calculates the correct texture coordinates for the ray-sphere intersection point for the linear texgen mode used by the color by volume feature in VMD.
    • Use the fast near/one-sided spheres for all cases until I think of a good reason not to.
    • Shuffled around some of the calculations in the main shader and sphere shader so that the code is as nearly-identical in the shared sections as possible. These could probably be implemented as a single more-complex shader at some point down the road, but it isn't worth doing until GLSL performance is higher and more boards are fully conformant with the use of more sophisticated data structures, functions, etc.
    • Added an ifdef for a one-sided (near hit only) sphere variant which should run faster on some video boards (needs more testing).
    • Added Justin's patch improving the speed of Numeric functions like 'take' when used in VMD atom selections, giving a 10x speed boost.
    • Disabled opengl debugging code for increasingly stable builds.
    • The fast hydrogen patch broke the 'backbone' and 'sidechain' atom selections, this patch fixes them.
    • Eliminated extra loops used to count 'on' atoms, we now do this as an optional part of the find_minmax() routine.
    • Added Axel's patch to make the gridsearch warning code smarter.
    • Make the minimum near/far clip plane values 0.01 instead of 0.001 for the GUI, since the GUI otherwise ends up showing "0.00" there.
    • Translate nearclip values of 0.0 to 0.001 so that scripts that use values in this range will work as the user expects.
    • DisplayDevice now requires the near clip plane to be greater than 0.0, since it has (up until now) been possible to pass invalid view frustums to OpenGL under certain circumstances as a result.
    • Sphere shader now uses gl_FogFragCoord rather than calculating it for itself. Sphere fog coordinates are assigned at the center of the sphere, for simplicity and speed.
    • Set and use gl_FogFragCoord rather than doing divides in the fragment shader
    • cranked version
  • VMD 1.8.3 Beta 3 (January 12, 2005)
    • Updated Win32 installer
    • Added comment to remind me that I need to update the 3-D texture coordinate for the fragment based on the eye coordinates of the ray-sphere intersection.
    • Further simplify perspective fragment depth code
    • Fix loop variable scoping issue in Justin's patch.
    • Use a GLSL #ifdef trick to detect when we're running on an NVidia card, otherwise assume a 3DLabs wildcat, or something else that has full-up GLSL
    • cranked version to beta 3
    • Added Justin's fast hydrogen atom selection patch. I chose to name the new keyword "vmd_fast_hydrogen" to start out with. If it proves worthy in testing, we could change the regular hydrogen macro to use this by default.
    • Sphere shader fragment depth values are now based on the actual near/far clip plane values and a couple of pre-calculated coefficients sent in from VMD, so the images are correct for all VMD near/far clip plane settings.
    • Simplified the fragment depth calculations slightly, and implemented the correct fragment depth for Orthographic projections. A word of warning to anyone reading the code, the 3rd edition OpenGL red book has incorrect signs in top three elements of the last column of the orthographic projection matrix.
    • Prevent display list caching during GLSL rendering until we determine what drivers provide this ability in a stable fashion. The NVidia drivers do work some of the time, but this is a simple safety measure for the time being.
    • Added a couple of extra GL error checks following compilation of the vertex and fragment shaders.
    • Documenation fix for the new trajectory patch script by Axel Kohlmeyer
    • Updated the readcube script with updated documentation note and bug fix contributed by Axel Kohlmeyer.
    • Force a call to VMDApp::scene_resetview() when 'mol volume' is used, as is done when other file types are loaded.
    • Added a suggested workaround for the lack of clipping in NVidia's GLSL drivers, though even the workaround requires newer drivers than are presently available.
    • Corrected a few typos preventing compilation
    • Updated comments for the fog code, and eliminated the TWO_SIDED_LIGHTING test since this is going to be the case 100% of the time with all of the current generation video cards.
    • Eliminated out-of-date comments and an bit of code from wildcat VP era testing.
    • Corrected comments regarding fragment depth computation
    • Don't emit density warnings for 2-D planar atom arrangements
    • Added Axel Kohlmeyer's binary TRR writing patch to the gromacs plugin.
    • All of the current generation cards can handle 4 lights and the fog calculations, so I've removed the ifdefs on that code in preparation to work on optimizing it for the 4-light case a bit.
    • delete the old Wildcat VP workarounds, since these cards will not be able to handle the full VMD shader anyway.
    • Added defines for tests on the latest Wildcat Realizm 100 drivers, and prepare to eliminate support for the code related to the old VP series since they'll never have a full GLSL implementation.
    • Add a workaround for the gl_FrontFacing bug on the current Wildcat Realizm drivers.
    • Updated the trajectory path script with Axel Kohlmeyer's new version.
    • Applied Justin's patch to move the snapshot image viewer code into SnapshotDisplay device where it belongs. This is certainly a short-term improvement, though we may want to move it out of here when we re-do the "render" command and GUI.
    • Added commentary about the new Charmm31 CMAP, CHEQ, and EXT extensions.
    • Updated psfplugin/corplugin documentation version numbers
    • Crank corlugin minor version to reflect the addition of the new Charmm 31 EXT support.
    • Crank psplugin minor version to reflect the addition of the new Charmm 31 EXT support.
    • Added Milan Hodoscek's patch supporting the new Charmm 31 "extended" PSF file format variant.
    • Added Milan Hodoscek's patch supporting the new "extended" COR file format
    • Fixed pairlist cutoff distance for SASA code, and increased maximum neighborlist size since this is dependend on the solvent probe radius and can overrun the old sanity value in some cases.
    • Cranked version number
  • VMD 1.8.3 Beta 2 (January 4, 2005)
    • Added one more extra fall-back stereo visual check near the tail end of the various video mode tests, to catch SGI Octane2's with V6 graphics, which no longer supply stencil buffers with stereo visuals for some weird reason. This should help those machines get stereo despite the lack of stencil buffers.
    • Applied Axel's patch which causes the FLTK labels window to use forcibly updated geometry values. The previous code had allowed out-of-date values to be displayed in the GUI when single-stepping through trajectory frames.
    • Added a bit of commentary on the potential uses for the -points and -restrict parameters to 'measure sasa', and fixed a typo in the previous text.
    • Fix SASA bug pointed out by Mu and Aaron Oakley. Justin found that the call to vmd_gridsearch1() was using the wrong atom count. It should be safe to leave the double-counting flag disabled for best performance.
    • Fix unprotected use of OpenGLShader class as the main parameter of OpenGLRenderer::update_shader_uniforms().
    • Rewrote much of the GLSL setup code to allow the use of multiple shaders within a rendering pass. The current implementation uses two shaders, a "main" shader which is used for all lit geometry (DMATERIALON token active), a special sphere-only shader which is used to render the DSPHEREARRAY tokens only. If the sphere shader cannot be compiled for some reason, VMD will use the main shader and the normal sphere rendering code as a fallback position. If the main shader fails to compile, then GLSL is disabled entirely. If DMATERIALOFF is active, then GLSL is disabled and the fixed function OpenGL pipeline is used for all rendering. Currently available NVidia drivers have exhibited strange behavior with regard to the result codes returned by glGetUniformLocationARB() calls, -1 should be reserved for an error, but they are returning -1 in non-error cases also, very strange. A previous rev of the code did much more error checking, but this prevented VMD from running correctly on the weird NVidia drivers I'm testing with. Clearly it would be wise to test on ATI and 3DLabs now to ensure overall correctness.
    • Eliminated the code for detecting the texture cube map and ATI PN triangles extensions, since their purposes are now implemented entirely by the existing GLSL shaders in VMD.
    • Calculate the fragment's final depth value based on the intersection point between the eye ray and the sphere, by transforming the intersection point from eye coordinates to the normalized device coordinates used by the Z-buffer
    • Added the necessary code to render ray traced spheres correctly when orthographic projection mode is enabled.
    • Correctly transform the sphere radius to eye coordinate space
    • Minor changes to please ATI's shader compiler
    • First revision of special-purpose sphere vertex and fragment shaders. The sphere radii aren't being scaled correctly yet, but this should be fixable without any radical changes. Certainly more than adequate for basic testing of the concept.
    • Added the first revision of the necessary support code to draw spheres by performing ray tracing within the fragment shader. While still somewhat buggy, I've successfully rendered spheres by drawing their bounding boxes with a special sphere-only shader. It should be possible to render them even more efficiently by drawing them using billboards rather than with full bounding boxes. The speed is already better than regular triangle-based spheres for the structures I've tried. In order to really use this a number of other changes are needed. Display list caches must be fully regenerated when switching into and out of GLSL rendering modes since this sphere rendering method actually uses different geometry. Multiple shaders must be loaded and compiled at startup, and the code should have separate state variables for whether sophisticated/demanding shaders like the sphere ray tracer are available, above and beyond the basic shader we already employ for normal geometry.
    • Change name of delphi ".big" reader to be more informative
    • Added Justin's patch to fix mouse callbacks. The current code never gives the callbacks a chance to fire because the mouse_moved routine gets called only when a mouse button is down. However, we can't just call that routine every time because it clears the mouse rotation velocities, which would prevent any mouse rocking from taking place. Thus we must only zero the rotation velocities when mouse buttons are pressed.
    • Added LFS defines to DLPOLY plugin as suggested by Justin.
    • Added additional header handling logic to the DLPOLY reader plugin, so it reads files that have the optional headers as well as files that don't.
    • Applied Justin's plugin sorting GUI patch.
    • Added Tinker plugin to main VMD README
    • Added basic docs for the new Tinker file reader plugin
    • Added new tinkerplugin to main molfile plugin Makefile
    • Wrote a new plugin for reading Tinker ".arc" XYZ files. Still needs additional safety checking code, but works fine so far.
    • clarify GLSL startup message.
    • Fixed bug in the C code that controls the GLSL shader projection mode state, which was causing incorrect view direction vectors to be calculated in the vertex shader, with cascading effects in the normal flipping code in the fragment shader. This cures the last of the known bugs in the GLSL shader code itself, leaving only problems which are inherent to strongly curved geometry which cause trouble not just for GLSL but also for the ray tracers as well. NewRibbons and NewCartoon still produce geometry that has strongly twisted normals in some places.
    • Fix calculation of view direction vector, something is still wrong with the test to determine which projection mode VMD is using, but switching the code by hand gives correct rendering results, so we're very close now.
    • fix typo in opengl extension status msg
    • Added more charmm format info links
    • Added code to translate DLPOLY periodic cell basis vectors to VMD's a/b/c/alpha/beta/gamma system, until we update the plugin interface and PBC code for this type of use.
    • Added a structure callback for the DLPOLY plugin so that history files can be read without the need to create a PDB file first. The resulting functionality is very similar to the XYZ plugin.
    • Corrected a missing safety check and fixed an erroneous assumption about which atoms are selected in draw_base_sugar_rings(), preventing two potential crashes, one of which was exercised by a test case reported by Brijeet.
    • more info about the DLPOLY plugin
    • reorder list of trajectory plugins
    • Added DLPOLY plugin to main molfile plugin doc page
    • added basic docs for DLPOLY plugin
    • Added DLPOLY unformatted HISTORY file reader plugin to the README
    • Added dlpolyplugin to the top level molfile plugin Makefile
    • A new plugin for reading DLPOLY HISTORY files (trajectories)
    • Eliminated unused functions
    • Eliminate unused buffer array
    • Build FLTK libs for linux with XFT support disabled to prevent strange font rendering bugs on some Linux distributions.
    • Fixed 'within' atom selection crash caused by mismatch between assumed min/max bounds and actual bounds in the 4th set of atom test loops. The code needs a more examination to ensure correctness of results in the last test loop, but at a minimum it shouldn't be possible to crash there now.
    • updated fragment shader comments to match current status
    • Use the most portable form of the error printing function, since the other one didn't work on IRIX or Win32, might as well just keep it simple.
    • Updated win32 installer info
    • updated README with recent feature additions and bug fixes
    • Fixed GLSL fragment shader objcolor declaration eliminating "varying" since it isn't really a varying. (cut-paste typo) It's amazing the NVidia compiler didn't catch any of these, nor emit warnings. As it stands now, the fragment shader is just slightly too complex to run in hardware on ATI. With a little more work it should be able to squeeze into hardware again.
    • Changed vmdprojectionmode type to int, correcting a vertex shader compilation failure on ATI cards. Also changed the 'if' statement to test it against a particular value yielding a purely boolean result, also required by ATI.
    • added LAMMPS plugin to main molfile plugin index page.
    • added initial docs for LAMMPS plugin
    • Cranked version number
  • VMD 1.8.3 Beta 1 (December 5, 2004)
    • Changed all "type CA" selections in multiseq to use "name CA" instead, so that it will work with files other than PDB files.
    • Assume that the vertex shader texturing code will work on all cards, since it is so incredibly simple.
    • Enable texturing for ATI and NVidia cards. Still need to test on an ATI card to make sure it actually works however..
    • First working implementation of 3-D texturing for GLSL shaders. OpenGLRenderer now tracks two extra state variables which are used by the vertex and fragment shaders to transform texture coordinates and sample the texture maps using the correct modulate/replace mode.
    • First working revision of the 3-D texturing code for GLSL shading.
    • partially working 3-D texturing, just have to figure out why the texture coordinates are always zero presently.
    • Added 3-D texturing code to the fragment shader, though various state management things must still be added to OpenGLRenderer in order to make it actually run.
    • Use new vmdprojectionmode uniform state variable to select the appropriate view direction vector to send to the fragment shader.
    • Add new GLSL shader uniform state variable so the shader knows which projection mode is active and passes the correct view direction vector down to the fragment shader for normal flipping and specular highlight calculations.
    • Increased version to 1.3.4 due to message buffer size crash fix.
    • Made psfgen message buffer insanely large (2K).
    • Added the LAMMPS trajectory reader plugin to the molfile_plugins Makefile
    • Eliminated debug printfs from lammps plugin
    • Make the LAMMPS trajectory reader plugin register itself as lammpstrj since there will be a separate structure file plugin as well.
    • explicitly initialize the other jsplugin entry points to null values.
    • Decode LAMMPS unit cell data, add correct fractional unit cell coordinate scaling, and correct the atom order when loading coordinates into the resulting timestep. Seems to work well, now just need a few more safety checks.
    • Fix lammpsplugin missing atomid address operator. First version that correctly parses the file. Doesn't reorder the atom indices yet.
    • Auto-load IED if it exists, but don't print warnings if Python bombs (yet)
    • First untested revision of a plugin for reading LAMMPS "dump" files, which are essentially an ASCII trajectory format that happens to also include atom indices and atom types, in addition to the usual coordinates and box information per timestep.
    • Applied Justin's fix for the crash Sergei observed if/when VMD fails to perform it's restype/color initialization via vmdinit, and a molecule is subsequently loaded and colored by restype.
    • Take out debugging printfs from the helix rendering code, even though it can't be turned on by a user yet.
    • Started updating the README with all of the new features and improvements in VMD 1.8.3
    • fix plugin docs typos pointed out by Barry
    • Make NewCartoon correctly draw structures assigned with last residue as a beta sheet.
    • Shift directionality arrow back by a half-residue, and make partial selections involving the arrowhead match up correctly. Yikes this made the code much more ugly...
    • Added a cheap hack to draw directionality arrows by special-casing width interpolation behavior.
    • Cranked version number
  • VMD 1.8.3 Alpha 32 (November 24, 2004)
    • Did a little more work on helices drawn with a rod/tube, still not usable, and we can't trust STRIDE to be perfect, so there are some that are pretty kinky, so even simply interpolating perps from the helix start to end won't work, will have to do something adaptive. Probably the best thing would be to implement code to extract perps from the resulting spline and ignore the structure perps altogether when rendering helices as rods. Could probably hack in some cylinders to get by for now, but I'd rather just do it right in the first place.
    • Fixed for incorrect beta sheet orientation in NewCartoon. Had been calculating perps from the modified control point position rather than from the original CA position, which yielded incorrect beta sheet tilt. Using the perps calculated from the original CA position seems to cure that problem.
    • Added some additional comments about forward-difference based spline interpolation. May be a win, but won't be as inline/const-friendly as the existing code is.
    • Change default NewCartoon spline back to Catmull-Rom now that I've come up with a nice way to flatten out the beta sheets.
    • Filter the positions of CA atoms in beta sheets to smooth them out, mostly eliminating ripple without having to do more complex spline interpolation tricks. This seems like the simplest solution to yield better looking beta sheets while keeping Catmull-Rom spline mode for the rest of the Cartoon rep. Same trick I used for drawing the helices as rods, though that code still needs more work.
    • There doesn't seem to be a reason to allow user-modulation of the NewCartoon rep as far as I can tell. This seems most appropriate for more straightforward reps like NewRibbons, VDW, and others. The NewCartoon rep is so "busy" in terms of existing width modulation that it seems that it would be difficult to pick out what's a result of the NewCartoon built-in modulation versus the "user" modulation. We can always add this back in if there's actually some use for it.
    • Improved the default width scaling factors based on Justin's suggestions, eliminated the internal scaling factors entirely since they were nearly identical, and just set a better default aspect ratio in the GUI and AtomRep to begin with. The range of the NewCartoon aspect ratio GUI control seems more usable than than for corresponding NewRibbons control as a result. More feedback on all this is welcome. I didn't change the spline basis stuff yet, still working on that and adding in the missing directionality arrows.
    • Cast strlen() return type to int to please MSVC 7.x as reported by Sergei.
    • Only create the 'gopython' command when VMD was compiled with Python support.
    • Preserve Python Tkinter menus that have been added to the Extensions menu from being destroyed when closed by overriding WM_PROTOCOL_DESTROY, just as we do for Tk menus.
    • ViewMaster: auto-save session file name extension changed to .vmd (from .tcl), since it can basically be used exactly like a saved state.
    • Greatly increased use of const in the ribbons/newribbons/newcartoon code to help the compiler eliminate aliasing considerations from the loops.
    • Eliminate multi-rep NewRibbon/NewCartoon gaps due to missing end-sections between "on" and "off" sections. Also had to increase max memory allocation by one section to store the final end section at the tail end of the structure.
    • Draw last section of a span to the first "off" atom, so that gaps don't appear when multiple selections of are used to draw a "whole" ribbon/cartoon, as when a user wants to manually color sections of the ribbon by ColorID. The code needs a bit more testing still, but seems to work, disabled until I run purify on it and verify for sure. The width/height modulation looked off in one test case, so I may need a special i min/max calc for that index.
    • Fix case where it was possible for alpha blended transparency to be inadvertently left enabled when the user switched back and forth between rendering modes.
    • AutoIMD: Now displays the absolute value of the net applied force during IMD (in status line for now).
    • Eliminated the unnecessary "simple" proc from the solvate plugin.
    • Added window name parameter to the viewmaster initialization
    • Cranked version number
  • VMD 1.8.3 Alpha 31 (November 18, 2004)
    • Updated win32 installer version info
    • Added viewmaster plugin to win32 installer, updated version info
    • Emit warnings when scenes contain geometry or textures that cannot be exported to the selected renderer, added new flag for text and fixed volslice to emit warnings.
    • fixed drawframes command parameter order
    • Added a new safety check to disable 3-D texturing on cards that return unusable maximum 3-D texture sizes (i.e. "0"). This occurs with the X.org video drivers for some laptops, and in Mesa.
    • Applied Justin's picking optimization to use cached MV & P matrices, and viewport data rather than querying OpenGL for them. Could be made faster yet by factoring out redundant copying and arithmetic operations that are repeated. More of this could be done if we eliminated the GLU calls and did the math ourselves, but for now this is already a nice improvement.
    • Improved display list creation and deletion in OpenGLRenderer and it's subclasses. OpenGLRenderer now provides a free_opengl_ctx() routine which is meant to be called within subclass destructors before the active OpenGL context is destroyed. This provides an opportunity for OpenGLRenderer to free active display lists, cached texture maps, and any other resources which are associated with an active OpenGL context right before that context is destroyed. The sphere and font display lists are now deleted only within OpenGL renderer and the old code has been removed from the subclasses that used to do this for themselves.
    • sync DX plugin version number
    • added links to DX docs
    • Updated DX and XYZ plugin doc example file data
    • Set default spline style for NewCartoon to B-Spline for now
    • Eliminated old multiseq name from help page
    • Added placeholder docs for Multiple Alignment tool
    • Added link to ViewMaster help page
    • Update GUI when cachemode or rendermode commands are executed
    • Added Display->Cachemode and Display->Rendermode menu items to control display list caching and use of AlphaBlend/GLSL rendering features from the GUI.
    • Cranked version number
  • VMD 1.8.3 Alpha 30 (November 15, 2004)
    • disable destructor cleanup of display lists, should be called explicitly by OpenGLDisplayDevice's destructor before the OpenGL context is destroyed, so this will move to a new function.
    • Applied Axel's color data range auto scale patch to fix the "two clicks" problem he discovered with some volumetric datasets. Needs closer examination when I have a few minutes, but this will get him by for the CPMD tutorial.
    • Free all remaining OpenGL textures and display lists when OpenGLRenderer's destructor is called.
    • Add initial controls for new cartoon rep, though they need to be replaced by a better-suited GUI, this will let people play with it in the mean time.
    • Update the Python vmdmenu.register() command to accept an optional pathname, just like the Tcl version
    • fix viewmaster extensions menu registration
    • Updated plugin docs.
    • Added Justin's viewmaster docs
    • Added Justin's viewmaster plugin
    • prevent serious TkCon problems on Windows.
    • Eliminated old scaling factors from the new cartoon rep.
    • Eliminated many of the old scaling factors that date back to the original old ribbons rep controls, since they are unnecessary for the new cartoon rep. Also added the spline control. B-spline looks like it may be a winner for the new cartoon rep, and is certainly simpler than doing various hacks for averaging beta sheets out to be more sheet-like. Maybe beta sheets and the helix cylinders can be drawn just by varying our spline basis rather than needing the more radical control point alterations.
    • Updated win32 installer
    • Added 24-bit color initialization to the main multiseq window
    • Cranked version number
  • VMD 1.8.3 Alpha 29 (November 3, 2004)
    • Don't trust FLTK to return non-bogus index values from newly initialized or recently clear()ed Fl_Choice objects, as we sometimes get bogus data back, even when we've previously explicitly set the choice value to zero via value(0) calls. This seems to cure the volume index bug I observed and which was also reported by Jordi, where newly added volume datasets set to color by Volume initially got a huge negative index number from some sort of uninitialized FLTK data. The problem was traced all the way back to FLTK's value() query call, which was returning the garbage numbers, but since we'd explicitly initialized this, I can only conclude that we can't trust it unless the Fl_Choice contains items at the time of the value() query call.
    • Fixed a bug in update_rep() where reps using ColorID coloring methods weren't being properly updated when switching back and forth. This should cure the isosurface rep colorid behavior issue reported by Jordi, though I would have expected the problem to occur with other reps as well.
    • Fixed free memory reads during moleculeList deletion caused by non-NULL imdMgr pointer after the imdMgr had been deleted.
    • moved deletion of pickList in the VMDApp destructor after the deletion of moleculeList, since it is referenced in the DrawMolecule destructor and otherwise results in free memory reads.
    • cleanup while attempting to isolate FMR's found by purify. Changed loop control for typeList deletion to use typeList.num() though it should be the same size as fileList.num().
    • clean up comments and such while auditing the code looking for the source of some free memory reads/writes at termination time, found by Purify.
    • Tcl atomselect: Better formatted the text in both atomselect and the atomselection's inline help
    • Tcl atomselect: revamped inline help. Added missing functions, and removed mention of "type", which has no apparent use.
    • fix typo in xyz docs.
    • Updated MSVC project with new VolumetricData source files.
    • Fix the delFrame() method of the Python Molecule class to match the corresponding changes to VMDApp.C rev 1.321.
    • Fix compilation problems in MSVC due to "struct"/"class" mismatch.
    • Added PDB2PQR link.
    • Fixed the offset problem in POV-Ray mesh2 objects caused by my previous implementation of my scaling hack to workaround the common "all determinants too small" runtime warnings generated by POV.
    • Internal: Reverted changes added by error in to GraphicsFltkMenu.C
    • PMEpot GUI tweaks.
    • eliminated bogus MegaCPK reference.
    • Internal: Refactored VolumetricData into its own set of files. Updated headers.
    • Internal: Moved most of the VolumetricData code from BaseMolecule.h to BaseMolecule.C for more efficient compilation and easier editing.
    • Added Axel Kohlmeyer's desktop VMD icons etc.
    • Added AK's RPM spec file to CVS
    • Fixed index entry for VMD_EXCL_GL_EXTENSIONS as per Axel Kohlmeyer's fix.
    • Make the helix drawing method provide both a ribbon-like or rod-like rendering depending on a setting. Use much better default scaling parameters.
    • use averaged helix position rather than actual CA position for perp calcs and such. Still need to override perps to prevent unnecessary twisting.
    • Added first rev of hacked up DrawMolItem::draw_cartoon_ribbons() routine which is a derivative of the normal ribbons code. Uses a very simple-minded coordinate averaging heuristic to get a bendable replacement for the helix cylinders used in the old cartoon rep, also includes the modulation code, though this may be less useful here. Need to fix the perps for helix rods so they don't rotate, it should be a fairly smooth tube rather than twisting as it does currently.
    • Removed debugging "fill_mol_menu" print.
    • Updated Win32 installer with newly added plugins
    • Cranked version number
  • VMD 1.8.3 Alpha 28 (October 29, 2004)
    • Added a small bit of code to allow modulation by the "user" field, along with logic to cope with timesteps where user is NULL.
    • Condensed color/texture lists generated for mesh2 primitives through the use of POV-Ray macros, and elimination of unnecessary spaces, though this costs us a little bit of human-readability. How many people really want to hand-edit a 50MB text file though? I think the reduced file size will signficantly improve usability however.
    • Added a bunch of code to pre-scale VMD's trimesh and tristrip primitives by a scaling factor of 1000.0, then subsequently apply an inverse scaling matrix of 1/1000.0 to prevent POV-Ray from going ballistic and printing millions of "all determinants too small" warnings due to the fixed size constant tests in the POV-Ray source code. I've sent a bug report to the POV-Ray team about the lameness in their source code, but most likely it'll be ignored since this problem has existed for a long time. They are comparing squared triangle determinants against their hard-coded EPSILON value to prevent divisions by zero, but this strategy fails miserably when incoming geometry is already scaled down to coordinates such that triangle vertices differ by around 1.0E-5 or less. Scaling up the geometry avoids the problem at the cost of forcing POV-Ray to incur per-ray transformation overhead at render time. (still faster than waiting for the xterm to print all of the warnings that would otherwise be emitted...) If/when POV-Ray gets fixed, this hack should gladly be removed.
    • Rewrote Eamon's multpoint3d() branch, perhaps worthy of writing up a new SIMD-based version of this stuff eventually.
    • Added the PMEpot GUI to the extensions menu.
    • AutoIMD: changed the rep macros to: imdprotein (prot+dna), imdwater (same as before) and imdhetero (everything else). This will display all ligands as VDW, and fixes the case in which small lignads with many hydrogens, such as NH3 and NH4+ did not visibly appear in autoimd at all.
    • Added PMEpot graphical interface.
    • Hoisted user-specified per-atom data field lookups out of the inner loop, and did some more cleanup, still needs a little more work to allow better control over user-specified modulation features.
    • Fixed a bug in the non-modulated ribbons case, and added a little getenv("VMDMODULATERIBBON") hack to let me test modulation by various per-atom data. Almost to the point of making this a usable feature.
    • Fix a few typos that were causing bugs in the varying-width ribbons code.
    • Applied Justin's path to move the call to record_file() earlier in the process of file loading so that scripts that want to do something with the filename can use it when the InitializeStructure event is generated.
    • Eliminated out-of-date comment, misc cleanup.
    • Make IRIX builds work on Justin's SGI box.
    • Cranked version number
  • VMD 1.8.3 Alpha 27 (October 25, 2004)
    • Initialize the lastbonderratomid to -1
    • Eliminated default parameters on all three gridsearch routines, and updated the gridsearch2 call in the measure hbonds code with a maxpairs limit.
    • Doh, fixed the double counting parameter so it's explicitly set to what the default is. This is precisely why I hate default parameters.
    • explicitly set the double-counting and maxpairs parameters, no limits on the maxpairs parameter at present, I'll let Jordi decide what a sane limit is.
    • Added maxpairs parameters to the gridsearch3() calls in the Tcl/Python measure contacts interfaces.
    • Added a maxpairs parameter to the SASA code's call to gridsearch1
    • Added some reasonable maxpairs values for the HBonds and DynamicBonds reps.
    • Updated the gridsearch routine header comments, and mentioned the default maxpairs limit that is now used by vmd_bond_search().
    • Added a 'maxpairs' parameter to the three gridsearch routines, which tells the codes what the maximum number of pairs to calculate will be. If the maximum number of pairs is exceeded, the code emits an error and early-exits. For cases where no-limit calculation is desired, passing in -1 will allow the code to run to completion without any warnings or errors, but also without any safety checks.
    • Revised BaseMolecule::add_bond() so it minimizes the number of max bond exceeded messages printed per atom (only prints one per atom under ideal circumstances), eliminated now-redundant bond count determination code in favor of testing MolAtom::add_bond() return codes, and changed the error handling logic so that we don't bother trying to add the bond to the second atom if the first one failed. (structure can still be messed up but it made sense and helps the error message printing behavior as well)
    • MolAtom::add_bond() now returns an error status code, so we don't have to do extra error checking calls to test whether we exceeded max bond counts on atoms, etc.
    • Eliminated old MDL format file reader, should be a plugin, no need to keep these in the main VMD CVS anymore.
    • Made the VMD startup script smarter. Runs whatever Linux version is installed rather than assuming the architecture only by AMD64 CPU type. In retrospect, it would have been better to name the AMD64 binaries LINUX_64 so they followed the same convention as Solaris, IRIX, etc. Perhaps that's still a change worth making, though much more annoying than the 5 lines of shell script required to get around it for now.
    • Coalesced various GLSL management code into one primary location, with new state caching variables to avoid unnecessary state updates during rendering. Should be possible to simplify the remaining code significantly one the remaining problems on ATI are fixed in their drivers. The new NVidia drivers seem to work fine accessing normal OpenGL material and light state, so we ought to be able to refactor the GLSL shader to eliminate several of the special VMD uniforms that along with their attendant state management code.
    • Eliminate unnecessary shader state changes where possible.
    • Do sanity checks and abort if we've got bogus atom coordinates, we shouldn't ever have density higher than 0.1 atom/A^3, but we'll be generous and allow much higher densities. This avoids getting natoms^2 bonds for improperly scaled atom coordinates, and causing VMD to crash. (30,000^2 bonds will eat all available memory and crash VMD if it is allowed to proceed with bond determination...) The same safety check was added to all three of the gridsearch routines.
    • Fixed formatting and added -frames docs.
    • added trajectory averaging -frames flag (pmepot 1.0.2)
    • Prettied up a few bits of the code while doing some testing today.
    • Work around a bug with texturing and display list caching The OpenGL texture object is not stored in the display list unless the rep was created while display list caching was enabled. If the rep was created beforehand, then the display list will not contain the texture data, and thus things will be drawn incorrectly. For now we'll take the easy way out and disable caching of geometry that is textured. The right thing to do would be to add a new flag to tell the lowest level render() routine to regen the textures at the time display lists are created. This is a reasonable short term solution however.
    • Force newly loaded structure data to recalculate colors, since we might be loading structure data for the first time, but into an existing molecule that contains only volumetric data. This prevents crashing on NULL color table pointers the first time the rep is changed from Lines to something else.
    • Fixed a missing assignment of the base class cacheMode variable by the OpenGL set_cache_mode() implementation.
    • Changed OpenGLRenderer so the VMDCACHEDLDEBUG environment variable is tested independently of the old VMDCACHEDL env variable. Moved the cache debugging code to the correct location, and fixed the encaching code so it doesn't attempt to cache things when ogl_cacheskip is true. This improves the caching code so it doesn't cache any rep that is in the process of being animated, or otherwise changing (i.e. throb coloring mode). There's still a bug with caching of text (i.e. axis labels) but the code is very nearly usable now.
    • DrawMolItem now sets cachability information for reps based on whether or not they needed any regeneration during a given frame redraw.
    • Added a display list cache skip flag to the VMD display list class and a cacheskip() member function Displayable, to allow cache management from within DrawMolItem etc.
    • Added interfaces for enabling/disabling display list caching from text commands.
    • Added new display cachemode[s] subcommands, and deleted old reference to depthsort which is long gone.
    • Added a workaround for an XVR-4000 OpenGL driver bug.
    • Apply Justin's shutdown patch. When VMD deletes uiText, which leads to a call to Tcl_Finalize(), if Python/Tkinter has open windows, those windows get shutdown, potentially triggering arbitrary Python scripts. Those scripts invoke VMD commands which (1) require access to data structures that might have already been deleted (like moleculeList), and (2) trigger logging of the command to the Tcl vmd_logfile variable, which can't be done when the interpreter has already been deleted. This patch seems to fix both of these problems, at least for John Mongan's IED extension. (2) now seems safe; (1) is more complicated because there are various dependencies between when we can delete objects that I don't feel like analyzing in detail right now. I just moved the deletion of moleculeList to near the end; there might be a better way. Perhaps the safest would be for the VMDApp destructor to set all objects to NULL, then change every single VMDApp method to check for NULL, but I won't pretend that I have a script that can test each of those cases, so I think it's better for now that we just make ourselves aware that things can be fragile at shutdown.
    • Applied Justin's cleanup to the OpenGLCache class, but added a few minor comments back in.
    • Apply Justin's small patch for the sphere display list changes that fix interaction bugs with the display list caching code.
    • Fl_Menu_::replace() copies the user-provided string directly without interpretation, so we don't need to escape any special characters if we use the add/replace combination everywhere. It also copes with duplicate item names (other than "foobar") in the way we're using it presently.
    • Correct variable names to match conventional unit cell nomenclature and added comments, so the code is easier for others to read/understand.
    • Re-added the code for avoiding FLTK's curious behavior of not allowing identically-named menu items, while keeping the escaped character correction routines.
    • pmepot: Deal with atom selections and non-orthogonal cells.
    • pmepot: Fix filename translation on win32.
    • AutoIMD: localdqs now specifies /bin/sh as the shell in which to run job, avoiding issues with user accounts with "noclobber" set in tcsh
    • Doc: updated URL for the Tcl trace command to point to the Tcl8.4 docs, instead of the now obsolete Tcl8.0 "trace" command usage.
    • Camera Navigator: improved GUI text
    • Cranked version number
  • VMD 1.8.3 Alpha 26 (October 5, 2004)
    • updated vmdmovie text
    • grammar fix.
    • made the thumbnail image a bit smaller
    • added screen shot of tkcon
    • Add basic info to the zoomseq doc page, along with a screenshot
    • Migrated Ramaplot documentation from main VMD User's Guide into its own doc page finally.
    • Docs: Fixed navigate plugin docs' html title
    • Docs: Added html docs for the navigate plugin
    • Added a screen shot for the timeline plugin and some brief intro text.
    • Docs: added vmd_quit Tcl callback docs.
    • Internal: Removed the python quit callback since python already has that functionality (atexit). Moved the Tcl "vmd_quit" variable setting in the Tcl interpreter's destructor to ensure that it always gets run when the interpreter is deleted.
    • Further plugin updates from Axel Kohlmeyer
    • Added xsf plugin to the statically linked plugin list
    • fixed gamessplugin target that got munged during the AK patching earlier.
    • Updated plugin docs for new xsf/axsf plugin by Axel Kohlmeyer
    • Plugin documentation updated by Axel Kohlmeyer
    • Added 3rd party plugin/extension links
    • Scripting: Added a Tcl "vmd_quit" (tested) and a Python "quit" (untested) callback for scripts to execute clean-up commands (e.g. shutting down external running jobs) when VMD is cleanly quitting.
    • Scripting: Removed the non-existing "molinfo keywords" command from the molinfo inline help text.
    • xsf plugin is compiled as C++ since it is named with .C rather than .c
    • force the use of the double precision atan2 functions to cure compile failures due to ambiguity.
    • Added the new xsfplugin and periodic table header to the makefile.
    • Added XSF plugin written by Axel Kohlmeyer. The format is defined on the xcrysden webpage and tested against the provided example files. this is also the 'native' format for the PWScf/espresso suite of programs (a package similar but also complementary to CPMD). the format combines features from the xyz- and the cube file format. unit cells (and coordinates) are also properly rotated for periodic display, and if 1d-,2d-, or 3d-periodicity is indicated, the coordinates are wrapped back into the unitcell. The implementation is 'clean', no code was copied or referred to from the xcrysden package (which is GPL). the only used resource was a description of the format file and a few examples.
    • xyz plugin now uses Axel's hard-coded periodic table for parsing atoms by their ordinal numbers. The new plugin also supplies masses from the table.
    • Axel Kohlmeyer's updated version of the cube plugin, which prints warnings when significant coordinate rotations are required to bring the periodic cell in line with VMD, and uses the new periodic table header file. The plugin now supplies masses for atoms using the new periodic table file.
    • Added Axel Kohlmeyer's hard-coded periodic table of elements for use by the cube/xyz/xsf plugins which sometimes need to parse atom types by their ordinal numbers.
    • Updated version number
    • Updated the Windows build and installers with the new PMEpot plugin, and eliminated a bunch of old plugin versions that have been superceded.
    • Added exectool package dependency to namdrun
    • Updated multiseq no longer changes the working directory behind the user's back.
    • Cranked version number
  • VMD 1.8.3 Alpha 25 (October 1, 2004)
    • eliminate redundant PMEpot title text (already printed by the SSIs...)
    • fixed a couple PMEpot bugs
    • Added elementary PMEpot documentation.
    • Copy over pmepot.tcl.
    • Add pmepot package with intelligent pmepot command.
    • Adjust PMEpot for new units.
    • Disable FREEVR feature in builds until I get a current copy of the src from Bill.
    • updated contact map docs
    • updated pdbtool docs
    • added PDBtool to main page
    • added PMEpot plugin to the top level plugins page.
    • Call binary package pmepot_core.
    • vmdinit script simplification
    • ZoomSeq: bug fix, zoomseq window should be called "sequence"
    • ZoomSeq: fixed newly introduced bugs when mols were deleted/created
    • Internal: extension menu adjustments
    • Internal: imdmenu tk callback function namechange
    • ZoomSeq: Now behaves like all other plugins. It won't load and install traces until it is called!
    • Internal: made ramaplot menu registration behave like all other plugins
    • Changed the vrExit() calls to match FreeVR 0.5d
    • Added Justin's patch to store the background color in shared memory
    • AutoIMD: use FinderTool::exec to find namd2 if path is wrongly specified
    • Force secondary structure to be invalidated when the structure is updated (i.e. when loading a PSF) and BaseMolecule::analyze() has been (re)called.
    • Finished updating the VideoMach support code for the new version, adding catch statements to cope with the behavior of Windows now that we're having to call the executable using the command interpreter tricks.
    • Eliminated our old hackish solution to FLTK's menu escape characters and re-implemented them with the new convenience function which does its best to cope with whatever strings are sent to it.
    • Forget about escaping "/" (was used to avoid FLTK problems).
    • Used the escaped dataset name string rather than the raw string when we add datasets to menus
    • Added comment about weird bit of code that adds then immediately replaces chooser items
    • Used the escaped form of the volume dataset name in the VMD choosers
    • Added a convenience function for generating properly-escaped FLTK menu strings
    • Fix color command.
    • Fixed units and added units to labels.
    • correct vmdmovie plugin error handling comments
    • update default videomach executable name for new version 3.1.5
    • fix non-portable loop variable scoping
    • prevent ambiguity in which atan() to use.
    • Extension menu: moved "Movie Maker" to Visualization and alphabetized.
    • Added Axel Kohlmeyer's patch to correct the unit cell orientation when used with the periodic display feature of VMD, until such time as VMD provides a means of directly specifying the unit cell basis vectors via the plugin interface.
    • AutoIMD: fixed scratch dir creation behavior
    • AutoIMD: Increased robustness of localdqs. Now waits for log file to exist before parsing it, fixing many bad connection attempts due to slow starts.
    • AutoIMD: Make sure AutoIMD can't crash the Sun GridEngine queue manager. Also fixed an open file descriptor leak.
    • Move Sequence menu items to Analysis category, since there would have been only one menu item left otherwise.
    • Update multiseq name to "Multiple Alignment" as per Dan Wright's request
    • Fix incorrect color table size comment pointed out by Konrad Hinsen.
    • Fixed distrib target since there's no Latex docs, probably HTML will be sufficient for this plugin.
    • added pkgIndex.tcl to the pmepot src dir
    • added a comment about the limitation of the volindex_update() routine
    • Name volumetric datasets in the color by volume GUI controls, and truncating huge names down to 80 chars or so.
    • Fix some minor pmepot portability issues and a couple of things that were illegal on strict ANSI C compilers.
    • Added pmepot module to calculate and display electrostatic potential via PME.
    • Separate the volume index chooser from the ColorID chooser, then give the names of the data instead of lame numeric indices, or something.
    • Added a -combine flag option to volmap new to specify how to combine the voldata from the different frames, using (for now) an "average", "max" or "min" rule.
    • Correct box length calculation to reflect position-based data.
    • New version of VolMapCreate, using an object framework for dealing with calculations of volmaps from atom selections. Right now, it does the same as before, except that the overall code is much smaller and easier to modify.
    • Fixed multiple calls to free() when several clipping planes were enabled in LibTachyonDisplayDevice. Was a simple typo putting the free() call inside the wrong scope.
    • Commented out the TCBG clusters, so that regular users won't see them in AutoIMD (but still in settings file to serve as an example). The default is now "Local", as it should be. (This is overridden at TCBG).
    • Fixed incorrectly named IRIX binaries for stamp in the RELEASE branch. The same changes will be needed on the other branches. The names of binaries MUST be the same as the architecture name used by VMD in order for the plugins to get installed correctly.
    • Fixed incorrectly named IRIX binaries for qpair in the RELEASE branch. The same changes will be needed on the other branches. The names of binaries MUST be the same as the architecture name used by VMD in order for the plugins to get installed correctly.
    • Cranked version number
  • VMD 1.8.3 Alpha 24 (September 22, 2004)
    • Updated the fastio code and DCD plugin to be more MSVC friendly in the definition and usage of some of the fio_caddr_t and fio_size_t types.
    • Replace error printing code with a platform-dependent macro that eliminates problems with the use of __func__ on MSVC, as reported by Sergei.
    • Re-enable builds on Malta now that it's working again.
    • Added LINUXPPC64 (Linux on Power) architecture.
    • Update the Win32 installer with the recently added restype and color definition data files.
    • Make the compute_from_files() and compute_from_socket() code use the same server binary name code.
    • Added PDB resname "K" to VMD's "ion" macro
    • The windows version of VMD will only support the file-based interface at the present time, so the interface code doesn't check the environment variable.
    • Add MSMS-related source files to the VMD MSVC project, and define the necessary preprocessor settings so it will be enabled at compile time.
    • Added Justin's file-based MSMS patch, fixing a few comments about data read in from the MSMS triangle records and getting rid of tabs while I was at it. I also renamed the old msms compute() method to compute_from_socket() so the code is somehwat easier to follow.
    • added pdbbfactor script to the master index.
    • Wrote up a simple doc page for the pdbbfactor script.
    • Added Justin's multi-frame PDB B-factor reading script
    • Replace the static new operator used for getting shared memory in CAVElib and FreeVR with class-specific allocators. I believe I already tried doing this exact thing previously and ran into problems, but we'll give it another go and see if it holds water. The change only affects VMDApp.C, CaveScene.*, and FreeVRScene.* so it should be easy to fix if it breaks the shared memory allocators.
    • Added Justin's patch factoring out the rocking feature from scene and moving it to it's own class.
    • Fixed typo in fprintf format string found by Justin.
    • Cranked version number
  • VMD 1.8.3 Alpha 23 (September 14, 2004)
    • Added in several new safety checks which prevent NVidia's buggy AMD64 OpenGL drivers from crashing VMD by returning NULL pointers for extensions it claims to support, but really doesn't. In some cases, this locked up the machine hard. If we come across other NVidia bugs, they can be successfully worked around using the VMDSIMPLEGRAPHICS environment variable, or VMD_EXCL_GL_EXTENSIONS variable for more detailed "safe mode" feature usage.
    • Fixed a potential crash in GLSL setup code, though this problem is interesting because I'd previously assumed it could never happen. Something is amiss outside of the rendering code for the VMDDIR environment variable to be unset when the GLSL code runs. It works on Windows, why not on 64-bit Linux in particular?
    • Fixed bug in which camera rotations would not work properly when the screen distance differed from -2.
    • Added psfcontext to membrane and wrapped with catch statement.
    • Added psfcontext to autoimd and wrapped with catch statement.
    • Moved solvate psfcontext calls outside of new catch statement.
    • Use a new context each time autoionize is run. Wrap renamed autoionize_core in a catch statement to ensure original context is restored.
    • Fix the RayShade double-fclose() behavior Justin reported.
    • Added latest rev of catdcd to the plugin tree, still needs a Makefile update to work with the main build script, but the source is here with a copy of the old linux makefile in any case.
    • Added a new parametric surface plotting example to the script library
    • the last fix didn't work properly -- should work now
    • small fix: proper type casting of struct molfile_volumetric_t member
    • partial code for filling the volumetric metadata/data structs
    • cranked version number
  • VMD 1.8.3 Alpha 22 (August 31, 2004)
    • Added a README file to vmdtkcon, describing what it is, and what the different files are to reduce confusion. Also noted problems and issues with updating to TkCon-2.4 (BTW, we're staying with 2.3) and what needs to be fixed before we upgrade.
    • Made loading of TkCon slightly more correct, though users won't notice.
    • Use same tcl library name used by other platforms.
    • Added Justin's patch, fixing a bug in which "$sel update" could update a macro statement in a selection according to a different frame than the rest of the selection.
    • Added a NetBSD plugins target based on the config from Lubos Vrbka
    • Replaced the Parm7 plugin with Justin's newly rewritten version.
    • Fixed incorrect PBC transforms for non-orthogonal unit cells. It seems that this code inherited a bug similar to the one that plagued the earliest versions of the edm reader plugins. The updated code is now using the same algorithm used by the volumetric plugins, and appears to be functioning correctly, though more testing is needed to ensure correctness.
    • Settled on plane selection logic, and finished polishing the GUI to allow for validation and disabling/enabling of text entry fields.
    • Small GUI layout tweaks
    • Significant streamlining of the GUI & state variables. Tried to make it so that complicated clip patterns used up minimal number of mouse clicks. GUI logic still till needs to be tweaked/refined a bit, but we're close.
    • Combined 3-entry vectors into one text field each (for easier copying, and simpler code). Removed reliance on internal state "flip" (to make it possible to "read" the molecule's clip planes into the GUI later) and made a "flip" push button instead.
    • Tweaked GUI appearance a bit
    • Can now edit up to 6 clip planes for each mol and easily enable/disable clip planes. The GUI settings do not update yet when the "apply to" molecule is changed, and cannot target specific reps (maybe better left for an Fltk tab?), but still quite a lot more useful than before.
    • Can now also edit the clip plane for the top molecule only.
    • Changed the "Save" button to "Save...", so that the user knows more confirmation is coming and doesn't need to be afraid that data will be erased.
    • Camera Navigator now works well when multiple molecules are loaded. Also fixed a broken nav key.
    • gamessplugin: Improved exit condition for reading in atom coordinates which caused some input files to cause segfaults,
    • AutoIMD now loads the "VMDAUTOIMDRC" env variable upon startup.
    • Made AutoIMD more resilient in localdqs mode
    • Removed TCBG darwin server from autoimd conf.
    • AutoIMD fixups so that it works with the TCBG's GridEngine queue as well as DQS.
    • Internal function name change in vmdinit.tcl
    • Added some common CHARMM names to the restype.dat (such as ions and HSE/HSD/HSP) and to atomselmacos.tcl "ion" atomselect keyword looks at resname rather than name, this way there is no conflict between NA=sodium and NA=nitrogenA. Added PDB's NA and some CHARMM ion names as well. Made "GLY" polar in restype.dat. The polar/nonpolar classification is debatable. However we want to be consistent btw atomselection keywords and restype coloring. Here we stick with the rasmol and text macro convention.
    • Added comments at the top of the color/restypes default files that give the file format used for each
    • Eliminate documentation comments about "transparent colors" since that has long since been eliminated from VMD.
    • Fix the tricolor_scale example to use the correct starting color index.
    • Applied Justin's patch that puts all the default color mapping and restype mapping into two external files called colordefs.dat and restypes.dat, respectively. The mappings are read at startup from two temporary procs in vmdinit.tcl, and passed to VMD through a new "color add item " command. Also affected is the internal implementation of the mapping of resnames to restypes. We used to map resnames to the index of their restype color in Scene, but that doesn't work if you want to separate restype and color definitions. MoleculeList::resTypes now map resnames to restype strings, which makes more sense anyway. AtomColor ends up having to do a hash lookup instead of an array lookup when it computes ResType colors, but that shouldn't concern anybody, and through the magic of function overloading the code didn't even have to be changed.
    • Default color definitions contained in separate files loaded at startup rather than being hard-coded tables deep in the compiled VMD code.
    • Added documentation for the new 'color add item' command which replaces the hard-coded coloring setup that VMD used to use.
    • updated windows installer
    • eliminated redundant call to glBindTexture() in the volslice code
    • Scale down the max texture coordinate to 0.99999 which seems to cure a problem with VolumeSlice on MacOS X, where the texture becomes black when the slice coordinate is set to 1.0 on any axis. Technically, this should not be happening anyway as the code is requesting OpenGL to clamp the edge of the texture with GL_CLAMP_TO_EDGE, so it is unclear why or how this is happening in the first place. It may be a bug in Apple's OpenGL implementation, or perhaps something amiss in the ordering of our glTexParameter() operations or parameters.
    • Added more comments in the VOLTEXON texturing code while auditing the code to see if there's anything that would upset MacOS X.
    • Updated apbsrun to correctly call exectool's FinderTool::find method rather than the older variant of the same method which no longer exists.
    • Cranked version to a22 for new OpenGL shader updates and first builds on amd64 since June.
    • Added newly reinstalled 'nuuk' to the plugin build script for AMD64 builds.
    • The ATI drivers don't support the gl_FrontFacing fragment shader state variable, so the default behavior will be to use the cheap-and-sleazy test of the surface normal dotted by view direction.
    • Corrected and simplified comments in the vertex shader.
    • Added an implementation of the fragment shader normal flipping code using the built-in faceforward() function, and added comments about issues with the current implementation.
    • Added clipping coordinate calculation to the VMD vertex shader, and added comments about the calculation of the view direction vector in reference to the active projection.
    • Change the fragment shader normal flipping test to give better handling of poorly tesselated surfaces. May have to do this using one of the more computationally expensive methods to get perfect shading on bad surfaces, but this one is fast and works well enough for the time being.
    • Always set the GLSL 'vmdfogmode' uniform so that when the user disables depth cueing, the shader disables it as well.
    • Applied Justin's save_state.tcl patch to add "waitfor all" to all file loading commands, and properly save modified material values for the default Opaque and Transparent materials rather than skipping them.
    • Added two-sided lighting to the VMD vertex and fragment shaders, and moved view direction computations into the vertex shader where it belongs. With this and the fog fix, all of the non-textured reps appear to be looking the same or better in GLSL rendering mode than they do in Normal rendering mode. Work remains in order to add texturing to the shader, but we're very close now. The GLSL shader is efficient enough that medium sized OpenGL windows will still perform quite well, often as well as the fixed-function pipeline. When running at full-screen window sizes however, the frame rate drops markedly, at least on the ATI Radeon 9600 on my machine at home.
    • Fixed up the Fog code in the fragment shader so the shader works correctly when Fog is disabled. The latst NVidia and ATI drivers appear to handle the fully featured fragment shader as presently written, so now it is time to add code for two-sided lighting, etc.
  • VMD 1.8.3 Alpha 21 (August 10, 2004)
    • Fixed the scaling of vertex coordinates which was causing the bug that Randall Hall reported. Jordi also mentioned this at some point but never provided the test case, so until I got Randall Hall's data it wasn't easy to reproduce.
    • Updated Windows installer with new version of multiseq plugin (new version number), and updated installer files.
    • Updated Windows installer
    • Multiseq: Fixed NaN problem in phylogenetic tree, and prints note on console about molecules being identical
    • Multiseq: Force canvas width in treewindow (try to work around macosx flicker bug)
    • Multiseq: Fixed tempdir bug in writePDBs
    • Multiseq: Fixed bug in rmsdPairwise causing RMSD display to always pop up
    • Fixed multiple bugs in gamessplugin. Subroutines for parsing wavefunction data are now only entered if the log file was generated by a single point energy calculation. This should be sufficient for now and can be extended later. Otherwise we potentially (e.g. for optimization runs) need some additional logic to handle the association of multiple geometries with their respective wavefunction. A skeleton has been put in place to determine the system dimensions in order to be able to set up the computational grid to calculate the orbitals.
    • Revved configure script again, since multiseq plugin got updated once more.
  • VMD 1.8.3 Alpha 20 (August 9, 2004)
    • Changed version number so we can tell which binaries are which, since Zan's San Diego tutorials need the bleeding edge qPair and STAMP binaries. (the previous Windows build was up to date, but the MacOS X, Solaris, and Linux binaries had yet to be updated...) The new builds will also have 3-D texturing enabled for MacOS X by default.
    • Updated multiseq plugin components with newest binaries
  • VMD 1.8.3 Alpha 19 (August 6, 2004)
    • Force MacOS X builds to use OpenGL 1.2 core function for 3-D texturing, on the assumption that there's no need to load this as an extension since it is a core OpenGL feature post 1.2.
    • Get rid of multiple else directives in fragment shader
    • Updated windows installer with new Multiseq plugin binaries, files, etc.
    • Eliminated bogus redeclarations of errno from gamessplugin (unsafe to assume that errno isn't a macro, since it is implemented as a macro on many systems when building multi-threaded code, for example...). Also eliminated declaration of strerror()
    • update the read-only CVS instructions for new users.
    • change vmd CVS configuration to work with our new read-only CVS setup.
    • Added my I/O testing plugin I've been using as a peak-performance comparison point for the DCD plugin. This plugin achieves I/O rates as high as 630 MB/sec inside of VMD, and 688 MB/sec standalone. It should be used as a model for anyone writing their own format, and is a much simpler trajectory I/O example than any of the others.
    • Turn off the -ansi flag for FREEBSD and LINUXAMD64 targets as well, so that strdup() is properly prototyped.
    • Get rid of problems with calls to strdup() by eliminating the -ansi flag when using gcc, since on Linux this undefines various things needed in order to find the strdup() prototype in string.h. This may be one of the causes of the weird webpdbplugin crash on Athlon64, since without the prototype, the return type would have been int, and pointer mangling would have occured.
    • Casablanca works, start building there by default now.
    • Change the fio_caddr_t type to please Linux.
    • Cranked version number.
  • VMD 1.8.3 Alpha 18 (August 3, 2004)
    • Added float to int conversion typecasts to eliminate compiler warnings from phiplugin
    • Eliminated the old write_int32() function from the DCD plugin and replaced calls with the fio_write_int32() version from fastio.h. Cleaned up vectorized I/O structure initialization warnings.
    • Numerous minor molfile plugin improvements to eliminate compiler warnings.
    • Fixed incorrect tt font in table, ended up majorly cleaning up the atom selection keywords tables removing tabs, and fixing some formatting problems caused by the addition of new keywords to an already-full-page atom selection keywords table.
    • Change PDB writing code to emit decimal until the legal atom index and residue index fields are full, then switch to hexadecimal until that fills the legal field size, then print asterisks for all subsequent indices.
    • Applied Justin's 'color restype' patch and wrote up documentation for it. This adds a new "color restype [] " command. Omitting the 4th argument returns the current restype; specfying a restype changes it for that residue name, and also updates the color of the reps as it should. I don't see putting this into a gui as being particularly important since it's the kind of thing power users are just going to put in their .vmdrc files.
    • Fix Unix file creation behavior when opening for writing, set default permissions to 700 (until we use the umask to do this instead), and add a few new convenience routines for doing I/O on integers, and writes of strings.
    • Eliminated the setvbuf() calls and internal buffer from the DCD plugin since they have been superceded with much faster code.
    • Documented the new VMDCUSTOMIZESTARTUP environment variable.
    • Formalized the hack I've been using for doing machine-specific configurations for several years with an actual environment variable, so one doesn't actually need to edit the installed VMD startup script.
    • Misc cleanup of MoleculeList residue name/type/color arrays, eliminated various tabs, and reformatted the arrays identically so they can actually be read and compared. Got rid of various tabs elsewhere in the file as well.
    • more const char * string improvements
    • const correctness improvements mean we no longer have to explicitly typecast the list of Residue type name strings.
    • eliminate the slow version of the coordinate gathering loop.
    • Make several of the Timestep member variables private so they don't get messed with by others.
    • Timesteps no longer let clients directly access the center of volume and scale factor member data, but instead provide accessors that call the init() method if these values are requested but have not been calculated yet. DrawMolecule::append_frame() now skips forcing timesteps to be fully initialized immediately after they are loaded, leaving this to be done when/if the user performs operations that require the minmax/cov values. The Timestep::init() function is essentially unchanged, but it is now only invoked when needed. This means that using color-by-position will not suffer in general, but only the first time a given timestep is colored by position, not over and over as once the timestep is initialized, these values need not be recalculated unless coordinates are changed. VMD didn't handle that case before and still doesn't handle it, however the code is better commented now.
    • fix comment in next_frame().
    • Eliminated tabs and prettied up Molecule::prepare() a bit, adding a few comments and cleaning up others.
    • Pretty up Molecule::next_frame(). We need to hammer on the various frame I/O routines, to eliminate overhead.
    • Added more comments to DrawMolecule::append_frame(), and made ::addremove_ts() a teeny bit faster.
    • Make the MolBrowser::update() method a teeny bit faster.
    • Eliminated redundant app->molecule_top() since we already determined that and formatted things a bit.
    • Shaved off another few percent of the runtime off the cov/min/max calculation loop in Timestep::init() by replacing array references with const float references.
    • Eliminated unnecessary temp variables, fixed initialization of min/max values as they should be, and prepare for further tuning of Timestep::init() since it is still consuming 60% of the trajectory read time according to profile runs.
    • Sped up the min/max code quite a bit more, about twice as fast as it was. The max observed trajectory read rate is now 84 MB/sec within VMD, which is about 25% of the speed of the standalone test plugin at 394 MB/sec. Got rid of the old atomcoord macros as well.
    • replace ATOMCOORDS macro with 3, no way we're doing N element coordinates any time soon.
    • Shaved the execution time of the coordinate range calculation loop by 25% cutting overall load time by 10% or so.
    • Added comments about the timestemp init() method's range calculation loops killing trajectory reading performance.
    • Pretty up CoorPluginData.C by removing some tabs for better readability.
    • Crank the minor rev of the DCD plugin after the extensive I/O changes.
    • Just changing the timestep copy loop with some careful coding raised the DCD reading performance in a ram filesystem from 284 MB/sec up to 394 MB/sec, and for a physical disk the performance went from 100 MB/sec up to 122 MB/sec. This copy loop is now the main remaining performance bottleneck, as without it, the code peaks at 728 MB/sec from a ram filesystem or 187 MB/sec from the physical disk filesystem I'm testing on. Anything we can do to make this routine faster will greatly increase performance.
    • I believe I've found and marked the major remaining I/O bottleneck in the DCD reader, as expected, extra data copying is the root of all evil.
    • The DCD reader now uses fio_readv() for much of the non-fixed atoms reading code. The best measured I/O rate with the new code is now 248 MB/sec up from a previous-best of 175 MB/sec. Physical disk I/O rates when the kernel filesystem buffers are flushed and no data is already in ram are 102 MB/sec at present, up from a previous-best of 75 MB/sec. The uncached filesystem performance measured with 'dd' for the same machine is 175 MB/sec, so parsing the DCD file does slow us down noticably from peak performance still. With further work on consolidating the two special charmm/NAMD routines for reading periodic cell data and the charmm 4dim array into the vectorized read call, it should be possible to raise the performance even further. The two special codes for reading the charmm blocks are troublesome because they make dynamic decisions of how much data to read on-the-fly, making them problematic to integrate with the rest of the vectorized I/O. Generally speaking, I would not expect charmm to change type of timestep contents on the fly, it may be that the code we have now was done for safety rather than to deal with real files that actually exist, in which case it should be fine to vectorize the I/O code once the first timestep has been read and we know what to expect.
    • Implement fio_readv() for ANSI C stdio, plain Unix, and Unix's that have a real kernel level readv() implementation.
    • Ported all of the I/O calls in the DCD reader to use the newly-written routines in fastio.h. Subsequent updates will use readv() and other more sophisticated I/O mechanisms.
    • Wrote up an I/O abstraction interface specifically for use by trajectory readers that have to read huge binary files. There's no provision to make this code interact with any other I/O calls, so a plugin either uses this interface, or not, all or nothing. Generally speaking we'll want to stick with using stdio calls for 95% of file readers, but for trajectory readers working with multi-gigabyte datasets, this interface will allow us to make use of whatever the fastest available operating system I/O calls are for reading huge files with minimal copying. In cases where vectorized I/O APIs aren't available, they are emulated by looping over the I/O vector using stdio calls. We may eventually be able to try memory mapped files as well, but for now this is just done to avoid the internal buffering inherent in ANSI C stdio, and make use of system calls such as readv() where available.
    • Copy timestep data a teeny bit faster.
    • Flattened the read_nonfixed code into read_dcdstep in order to reduce the number of read calls. Also did some tests mixing readv() with stdio which failed miserably. In order to use readv() instead of fread(), we'll have to abstract all of the disk I/O with our own portability routines so that the code runs on Windows as well as Unix still. There are also still lots of issues with 64-bit file offsets to worry about if we implement our own file I/O layer.
    • Print timesteps per second read rates in the test code so it's easier to estimate the number of read/seek syscalls that the code invokes at a given I/O rate.
    • Replaced calls to reverseEightByteWorld() with swap8_unaligned() and swap8_aligned(), and deleted the old byte swapping routines.
    • Changed DCD reader code to use the swap4_aligned() and swap4_unaligned() functions rather than its own reverseFourByteWord() routine, since the swap4_xxx() implementations are faster.
    • Fix DCD I/O rate test timer. Still needs work to achieve peak I/O rates when run from within VMD. Current real-world VMD performance is half what the standalone test program gets, and that's about half what is possible with 'dd', when the code has to do byte-swapping. Profiling of VMD itself should turn up the cause of the 50% speed loss versus the standalone plugin timings.
    • Eliminated the per-fragment memory reallocations from the draw_protein_ribbons_new() routine, in favor of a single allocation large enough to hold all residues. We can make the code more robust with more safety checks now if we wish, since it won't hurt performance anymore.
    • Save residue, segment, and fragment counts from structure determination so they can be conveniently used later. The total residue count can be used to eliminate repetitive array allocation/deallocation in DrawMolItem reps that need to store temporary arrays for the CA atoms in all residues, for example. Knowing the max residue count in advance saves having to do this over and over inside of loops, we'll just allocate for the total and then not have to re-test every time through the loops. It looks safe to cache these values as the structure can't be radically changed once loaded presently, but these would have to be recalculated if we ever make it possible to re-evaluate structure on the fly.
    • Version of the new ribbons code that allocates less frequently by tracking the max array size, but a better solution will replace this by using the overall number of residues instead.
    • lots of cleanup in draw_struct(), prodigious commenting, appropriate naming of variables, etc. Lots of nasty tricks are being done in this code, much like with the old Ribbons code. I hope to eliminate all of them in the new secondary structure rendering routines I'll be writing.
    • Changed draw_tube() parameters so that callers specify radius/res instead of draw_tube() figuring these out for itself. This also eliminates the tube_radius_hack member variable and attendant code.
    • Started cleanup work on the Cartoon rep, adding comments etc.
    • Various cleanup, commenting, and minor tuning in DrawMolItem.
    • get rid of extra comma in fps text string
    • Misc cleanup of draw_trace() and draw_dot_surface()
    • Added 'display fps' to built-in help.
    • cranked version number
  • VMD 1.8.3 Alpha 17 (July 26, 2004)
    • The vmd_open_url proc now calls ::FinderTool::exec rather than the built-in Tcl exec method when the exectool plugin is available, to provide a better means of dealing with the numerous names that the mozilla browser has gone through recently. This also makes VMD much more resilient when stuff is not in the user's path, or named strangely.
    • Added details about the function of 'display rendermode' and eliminated the documentation of the VMDUSEGALPHA environment variable since it is superceded by the rendermode setting.
    • Added 'display rendermode' subcommands to the documentation.
    • Emit warnings when VMDUSEGALPHA is set, so we can drop it from subsequent versions of the program.
    • Fix unprotected use of underscores in the new docs about the UG_EXCL_GL_EXTENSIONS variable.
    • Don't emit warnings from draw_protein_ribbons_new() if we don't find any usable CA/O atoms, just skip it, otherwise we get warnings when we go to draw DNA structures. Since the nucleic ribbons get drawn separately, this code doesn't realize that there's still a good chance the structure will get drawn, so for now, we'll eliminate the warning.
    • Eliminated unnecessary loop index tests in the draw_protein_ribbons_xxx() routines, and in the draw_nucleic_ribbons() code.
    • Reverse order of onum index check to favor the common case.
    • Found and fixed a missing safety check in the control point generation logic for both the new and old ribbons code. The first "O" atom must be found. If it is not, the code had previously merrily proceeded using a negative value as the atom index for the "O" atom we needed, causing who knows what kind of problems later. The new code immediately bombs out setting an error condition if the first "O" cannot be located. It is possible that we want to be more flexible than this, but the old code would have read from illegal memory addresses which is unacceptable regardless of whether we want to continue rendering a ribbon if we've got no oxygen atom to use at startup.
    • Make the NewRibbon code use atom typecodes rather than atom name strings when it looks for CA, O, and OT1 atoms in each residue. This allows us to use the fastest version of find_atom_in_residue().
    • Split the draw_protein_ribbons() routine into two separate versions, one for the old Ribbons implementation, and one that only works with the NewRibbons implementation. The new version eliminates all of the nasty duplicate control points and their attendant negative array indexing code.
    • Eliminated cruft from draw_protein_ribbons(), in particular got rid of some now-unnecessary safety code related to old implementations of vec_normalize(). Got rid of various temp variables, made the code more readable. Next step will be to separate the NewRibbons implementation from the old. The NewRibbons code needs none of the hacky array offset tricks used by the old code, so the new implementation will be cleaner, and that's what I want to start with before adding width/height modulation to the control points, and certainly before contemplating implementing a Cartoon rep based on this code.
    • Replaced numerous instances of vec_scale() with vec_negate() in various renderers etc.
    • Eliminate GrabTool no-op vec_scale() calls, replaced a vec_scale() with vec_negate(), and prettied up the source.
    • Added vec_negate() function for convenience, performs better than vec_scale() for its special case use.
    • Added first rev of width/height interpolation code to the top level ribbon generation logic. If the caller provides widths and heights for each spline control point, then we will interpolate between them when generating the points and perps for each interpolated spline section. If the caller provides only one width/height value pair, then we skip interpolating and send the single value pair on to the last routine.
    • Moved ribbon width/height code to caller in preparation for adding widths per-control-point to the top level ribbon generation code.
    • Added the first implementation of low level ribbon drawing routines that can accept per-section width/height values, allowing the implementation of a new feature providing modulation via a particular data field such as secondary structure, beta, or whatever else might be useful. To use the feature, the caller has to provide arrays of width/height values to use for each cross-section. The new code is about 15% slower than the old code but this should be fixable with a little more tuning work. The ultimate goal will be to construct a new Cartoon rep by modulating the shape and size of cross-sections, rather than drawing completely separate and distinct geometric primitives.
    • Added an alternative NewRibbon cross-section which can be enabled by changing ifdefs. The new cross-section shape is built from a completely flat ribbon capped by two semi-circles at the edges. Looks similar to the ellipitcal ribbon, but has a flat face, so the vertices are concentrated at the edges, giving better looking shading results for the same number drawn vertices in many cases. This might be worth trying out in place of the elliptical implementation, though it requires a few more more calculations.
    • Cleaned up the NewRibbons code a bit more, improved the comments, and fixed a few of the existing comments that weren't updated when the code was altered to render triangle strips rather than meshes.
    • Split out trig calls from NewRibbons template vertex/normal generation loop so the minimum number of calculations are in the code that will make its way into the per-section loop when the time comes. The current code is slightly slower than the existing Cartoon rep, so we have to do our best to make this perform competitively after the extra math is added.
    • Made the NewRibbon panel vertex/normal generation code more efficient since this code will be run once per section when used with varying width splines such as in a next-gen cartoon rep. In the existing ribbons rep it is only run once per rep so though it is faster it won't affect the existing reps much. Also cleaned up various code for better FP consistency, reduced the number of trig calls, etc.
    • Eliminated some old comments in the fragment shader. The NVidia and ATI drivers can both cope with having all lights enabled. The NVidia 5x00 and 6x00 series cards should both support the Fog code, but it needs a bit more testing before it can be left on by default for those cards. The ATI drivers don't handle the fog code yet as far as I know. Now the the drivers are becoming more mature, it may be time to try and re-implement some of the code with loops again. It should also be possible to implement two-sided lighting on the NVidia cards if they're already coping with the Fog+4 lights. The main missing features would then be texturing. Until texturing is implemented in the fragment shader, we might add a bit of workaround code that switches the rendering mode back to the fixed-function pipeline when texturing is encountered, but then again, if the latest NVidia drivers can hack lights and fog, adding one more test for texturing in the fragment shader probably won't break the bank.
    • Cranked version number
  • VMD 1.8.3 Alpha 16 (June 21, 2004)
    • Updated Windows build settings with WavefrontDisplayDevice source file.
    • Eliminate unused variables and improve floating point consistency
    • fixed a typo in the wait cursor code.
    • Updated README with recent features.
    • Implemented a sphere tessellator for use by renderers that can't draw their own spheres. The tessellation code is a variation on the implementation we've used for PSDisplayDevice, but this version draws both hemispheres (not necessary for the special PostScript version) and calls triangle() rather than manipulating depth sorted object lists like the original version did.
    • Fix radius index for spheres generated by the point() method.
    • Added a default implementation of line() for renderers that don't implement their own line primitives.
    • Default implementation of points for renderers that don't implement points.
    • Emit warnings if a FileRenderer doesn't implement the triangle primitive and it is used in a scene.
    • Added a default implementation for cylinder() so that STL, Wavefront OBJ, and other purely triangle-based scene file formats get cylinders.
    • FPS now has its own color setting withing the top level Display category.
    • Eliminate annoying error message box when the user presses the "Reset" button in the selection builder. The new code still clears the selection text but does not call the callback to put it into effect, thus preventing the error box from being displayed, but only when the new selection string is set to NULL.
    • updated docs for the new version of the view_change_render script.
    • Updated with Barry's latest view_change_render script
    • hide the old view_change script
    • Added cliptool and navigate menu items. Massively simplified menu extension installation for better uniformity.
    • Added cliptool and navigate installation to Makefile
    • Add "Camera Navigator" tk plugin into CVS
    • bug fixed: Cliptool window refused to load if user has a molecule w/o coordinates.
    • Added a menu option to select whether to apply to all mols or just active mols. Cliptool cannot apply to individual reps yet, but this is a start.
    • Made cmd_menu's code less convoluted. Do not just display the help screen if the command is valid but not the menu's name. Display an appropriate error instead.
    • Do not "normalize" occupancy maps since values are not proportional to grid cell volume anyways, and this just makes it confusing to analyze. Also fixed units displayed to user.
    • Add section for NVidia cards, though no test results yet.
    • The FileRenderer class now tracks occurences of unexported geometry and generates appropriate warnings in addition to the texturing and clipping export warnings it already took care of.
    • Update warning messages regarding to unexported geometry, now that most of this is centralized into FileRenderer.
    • Added Wavefront OBJ export source files to the configure script
    • Added wavefront object file renderer to the filerenderlist
    • fix missing dash length macro in the Wavefront export code
    • Added first draft of Wavefront OBJ export routines. The Wavefront code currently only exports triangles, lines, and points, with no materials or colors yet.
    • Improve wording of grdplugin docs
    • Update phiplugin documentation with more complete information.
    • Updated the phiplugin to read files of extension '.big' as these are what the ASCII delphi phimap files are called when they are created by the ASCIIPHI program which used to come with Delphi. The binary phimap reader will be invoked when the files are named '.phi', once implemented.
    • First attempt at reorganizing the Extensions menu.
    • Added long menuname to zoomseq
    • Added long menu name to ramaplot
    • fix non-portable variable scoping
    • Added a parameter to the "menu tk register/add" functions allowing the user to specify the menupath (i.e. capitalized names with spaces, submenus, etc. independently of the menu name, e.g: now can use "Analysis/Ramachandran Plot" instead of "ramaplot"). "menu tk remove" will now correctly remove menu items number of menu extensions is now unlimited. Better use of Fltk's capabilities for future compatibility.
    • Cleanup and simplify move_mode() method, eliminate redundant typecasts for what are already const * parms to MouseModeEvent().
    • Cleanup the cursor handling routines so they no longer use hard-coded integer constants and reinvent the wheel in various places. The cursor constants are now implemented as an enum in DisplayDevice, and the enums are used everywhere that set_cursor() is called, and in the subclasses of DisplayDevice.
    • Spent some time cleaning up cruft in the Mouse class to improvements can be made.
    • Eliminated unused window event codes in DisplayDevice and its subclasses.
    • eliminate dead triangle code in FileRenderer.
    • Added more informational messages when STL files are generated.
    • eliminate unnecessary STLtriangle() method from STLDisplayDevice.
    • Added script library CVS logs to programmer's docs.
    • Changed the way the map's canvas is drawn and scaled. Fixes inconsistant data point sizes (previous workaround required the map to be redrawn whenever the map was scaled to fit "every residue", which didn't completely prevent the problem), and canvas size mismatch (map canvas was smaller than scale canvases). Also fixes half of misalignment with scale canvases -- these still have a bug; all known bugs are now mentioned in the file header.
    • reswin script is a bit out of date, needs fixing to work with 1.8.3
    • added reswin script to python list
    • updated main script library page with new text.
    • Added atom and residue labelling scripts to the scriptlib CVS
    • added Axel Kohlmeyer's rep cloning tool to the scriptlib CVS
    • Added numerous scripts to the scriptlib CVS from the web page.
    • Updated main plugin documentation page
    • updated GRASP binary surface file reader docs with new links.
    • added docs to the top of the grasp binary surface file reader
    • added mention of VMDWIREGL and VMDSPACEBALLPORT in the index and in the execution environment docs.
    • Added the VMDSIMPLEGRAPHICS and VMD_EXCL_GL_EXTENSIONS variables to the documentation.
    • Make the makefile a bit more readable, changed the order of the build so that items that include docs that can fail are the last things built.
    • cleanup volmap entries
    • Added a new environment variable to control the availability of individual OpenGL extensions. Will come in handy for remotely debugging problems that user's have with flaky video drivers. The VMD_EXCL_GL_EXTENSIONS variable can be set with a list of OpenGL extensions to avoid, delimited by spaces, just as the result from glGetString(GL_EXTENSIONS) is.
    • Removed unused procedures.
    • Added basic usage information for primary Exectool helper functions.
    • Added TODO to comments with a note about a possible future improvement to the code involving the Tcl builtin auto_execok.
    • Removed mention of vaporware "volmap new sas" function
    • Fixed a bug in which volmap's minmax calculation computed but didn't use the results for every frame. The volmap's minmax/bounds is now correct.
    • Gamessplugin: Implemented reading of number of orbitals; this is used to loop over the wavefunction info
    • Revved version number. The a15 builds were the last builds before all the build boxes got reinstalled, so we'll want to compare a15 binaries versus a16 and later as far as OS version/platform compatbility go. At present, only Linux, Solaris, and MacOSX versions are compilable as the other build boxes aren't running yet (and SMB file services aren't up for the Windows build boxes yet).
    • Massive plugin documentation updates, almost all of the files were changed for each of the plugins that go into the VMD extensions menu. Many new documentation pages written from scratch.
    • updated contactmap version number
    • added contactmap index.html to CVS
    • added version info for timeline plugin
    • added timeline plugin index.html to CVS
    • added psfgen index page to CVS
    • added gamessplugin to doc index.
    • added 1st draft of gamessplugin docs.
    • Added zoomseq main index.html page to CVS so it is under revision control like the rest.
    • add the index.html file to the AutoIMD doc area so it is in revision control
    • fix version number for vmdmovie main doc page
    • contactmap plugin is now version 1.1
    • vmdmovie plugin is now version 1.2
    • updated vmdmovie instructions
    • updated notes about VideoMach version and installation requirements.
    • fixed typo in sphere error message
    • Posted the last build of plugins from all platforms on 6/19/2004 as plugin update 4 for VMD 1.8.2.
    • Disable builds on everything but Solaris and MacOS X until we have those build machines fixed
    • Lots of bugfixes in gamessplugin basis reader; parsing of basis info should now work properly (at least for 6-31G basis sets; will have to test all the other available basis sets eventually, but they should be ok after possibly expanding the switch statement in atomic_basis)
    • Moving redundant code for finding molecule data into its own procedure.
    • more code to read the basis set info
    • More gamessplugin basis set stuff (some trial data stuctures to hold the coefficients and exponents)
    • Correct a recent animate read/write bug.
    • New contactmap recalculates data bounds when finding residue distances. Now both the map and scale are correctly displayed, misc GUI improvements.
    • Managing contactmap canvas geometry with a grid for better control and scaling.
    • Starting to clean up contactmap geometry management, needs more work.
    • VMD builds are done on a MacOS X 10.3 box from now on, so this becomes the default configuration rather than 10.2.
    • Document changes w.r.t using web browsers in UNIX.
    • Made mozilla the default help browser instead of netscape. Fixed the issue with VMD not opening a URL if mozilla/netscape was not already open (this requires the backgrounding "&" to be explicitely included in the VMDHTMLVIEWER environment variable). Also recognize other mozilla-based browsers such as netscape and firefox.
    • Contactmap: Handling deletion of currentMolA and currentMolB seperately, fixes numerous bugs.
    • Added text about the draw multiple frames controls in the GUI, and updated the index entries for both the text command and GUI info.
    • Make the PDB reader plugins take AMBER files containing > 99,999 atoms, where the index field starts to overrun the "ATOM " string.
  • VMD 1.8.3 Alpha 15 (June 18, 2004)
    • Add a link to the Programmer's Guide until installation info gets shuffled around a bit.
    • Eliminate source code build instructions from the installation docs, since this is now far too complicated to document here. The new strategy will be to document source code builds in the new online Programmer's Guide via Doxygen and HTML, which is more dynamic and easier to update as the code changes. The installation instructions for binary distributions should probably be put into the main VMD README file, and into the User's Guide, thus entirely eliminating the Installation Guide as a separate manual, but I'll ask around and see what others think.
    • link up to new external program compilation info.
    • Added page about compilation of surf, stride, etc.
    • Binding to the toplevel contactmap window only, previous code triggered when each widget was mapped/unmapped.
    • update programmer's docs with more info, migrated from the installation guide
    • Delete outdated documentation on the configure script.
    • Improved doc text and installation text slightly.
    • Added URL of the OpenGL SDK web site to the programmer's compilation docs so that people compiling on linux don't run into problems.
    • Contact map plugin update: Calculating distances after changing selection text without reselecting the molecule now works. More dead code removed.
    • General cleanup of NewRibbons in prep for adding code to modulate ribbon width by secondary structure, user data, etc.
    • pull pick point stuff out of main ribbon span generation loop.
    • newly created reps default to on regardless
    • Hack that allows VideoMach to handle filenames that contain spaces by passing the command-line invocation to cmd.exe (or command.com).
    • Disable compilation of the new 'tkrender'feature on Windows until we get past Tk's ridiculous automatic inclusion of the X11 headers, which needless to say, causes serious problems on Windows.
    • further simplification of various state tests for GLSL code
    • reduce redundant feature tests for GLSL handling code.
    • Eliminated lots of ifdefs protecting global alpha blending transparency logic, since this will now be used for both the Sun global alpha extension as well as for the OpenGL shading language implementation. Gathered together much of the GLSL support code and changed several things to allow various rendering state to be properly set upon changing the active rendering method via 'display rendermode GLSL' etc. Still needs some cleanup, but I thought it better to get this patch in since it has been sitting around collecting dust for a couple weeks.
    • Update 'tool' command docs to reflect current reality
    • Committed Justin's patch to add selections to the 'save trajectory' menu. Now closely resembles the layout of the molecule file browser, has a place for choosing among volumetric data, and is well on its way to being more general purpose than it originally was. The next step would be to teach it to enable the controls for trajectory frame selection, volumetric data, and such based on the available features of the selected file format.
    • fix built-in 'tool' help to match the available subcommands, since the 'info' command is disabled, so is the help for it.
    • New "VMDSIMPLEGRAPHICS" environment variable can be used to completely disable all OpenGL extensions, programmable shading, stencil buffers, stereo, multisample antialiasing, and rescale normal extension to bring VMD down to the bare minimum graphics functions. This should be very helpful in debugging problems with flaky video drivers on Linux.
    • Added Markus' new GAMESS plugin to the main plugin makefile.
    • cranked version number
  • VMD 1.8.3 Alpha 14 (June 14, 2004)
    • Make phiplugin docs URL pastable.
    • Added an occupancy volmap type to track occupancy % of grid cells
    • Cleaned up volmap code/arguments and added a user-settable resolution option.
    • Raising an error when using file names that contain spaces with VideoMach.
    • Catching errors generated by videomach since they don't usually prevent the file from being created. Also improved error handling when videomach isn't found.
    • Added Justin's patch to add a new 'center' atom selection command to the Python bindings to calculate the center, or center of mass, with optional weights. Code now uses the vmd_gridsearch3() routine rather than vmd_gridsearch2(). Code to implement atom selections on 'animate writeXXX' trajectory saves.
    • Added Justin's patch to allow trajectory saves to be done with an additional atom selection parameter, providing most of the capabilities from 'catdcd' to VMD. At present we don't allow selections when reading files. Updated Python and Tcl bindings, and documentation.
    • Improved exectool integration when running VideoMach. Now the (inevitable) pop-up window contains more useful information about the program.
    • first steps to implement function get_basis in gamessplugin
    • added array pointer for basis function stuff into struct gamessdata; also added prototype for function get_basis
    • Last round of contactmap clean-up before I start committing bug-fixes. Removed unused variables and commented functions.
    • Freshly built Python+Numeric for MacOS X seems to compile and link just fine, so we'll see how it holds up in actual use.
    • Freshly built Python+Numeric for MacOS X seems to compile and link just fine, so we'll see how it holds up in actual use.
    • Committed Justin's 'tkrender' patch to allow VMD to send snapshots into Tk as an image which can then be displayed in Tk scripts without going through the filesystem etc.
    • Applied Axel's update for the cube plugin to read unit cell data from Gaussian cube files, also worked around missing M_PI_2 on windows.
    • Allow MSMS surfaces to be generated with sample densities as high as 30.
    • Clean purify warning files on clean targets
    • Improved the error message display when a usable visual isn't present, old code missed emitting the last line of text in some cases.
    • Add proper plugin description for gamessplugin
    • Use casablanca for vmd builds now, and pray we can make it work as well as madrid used to...
    • Added the first version of Markus' GAMESS plugin to the source tree.
    • Last minute fix-ups of VMD with the -DJORDI option enabled. Everything should now work ok.
    • Oops, forgot this file. "cavities" vol map type renamed to "distance"
    • Made the volmap code independent of the measure code and moved it out of the way. Created a new volmap Tcl function. (e.g. call: "volmap new density sel ...").
    • Factored the volumetri DX file writing code into its own function (eventually should be moved to the plugin tree)
    • Bracing [expr] to improve performance of contactmap.
    • Made the get_weights function public (renamed to tcl_get_weights). Also added some partial wiring for the "measure occupancy" Tcl function.
    • Added undocumented code to create two types of volumetric maps from loaded molecular structures. Right now, I am hijacking the "measure" command: measure density (atomselection): averages the number density/A^3 over all frames, using a 1A grid. measure cavities: bad name. Creates a grid that contains the distance to the nearest atom's VdW surface. Like MSMS but only shows the distrib of the _centers_ of the solvent atoms. Averages over all frames. Both functions simply create a new .dx file in the working dir. In order to compile, need to define the "JORDI" macro.
    • Updated (and fixed) docs for measure contacts/hbonds
    • Upgraded "measure contacts" to use the new intermolecule "gridsearch3" (temporary name; will be gridsearch2) algorithm. New functionality: - can now find contacts btw different molecules. - bug fix: pairs btw A and B are always ordered as (A,B). (they used to be randomly mixed if A and B overlapped) Pairs are identical to previous version, but their order in the list can be different as compared to before.
    • Added a vmd_gridsearch3 function to eventually replace vmd_gridsearch2. vmd_gridsearch3 bins the two selections separately, allowing for pairs btw different molecules (or even independent arrays of atoms). It is also aware of double-counting (can be enabled/disabled). "measure contacts" (basically gridsearch + constant overhead) is faster by 15-40% with the new method when the two selections have no overlap, if there is much overlap, the speed increase becomes marginal or even up to 15% slower. (for the case of 100% overlap, vmd_gridsearch1 is used automatically).
    • ::FinderTool::find now accepts an optional '-path' switch to specify an initial guess for the program location. Improved handling of program paths that contain spaces.
    • Renamed plugin documentation pages for easier identification among the file list generated by doxygen. Prepended plg_ to all filenames to make them distinct from similarly named doc files in the main VMD tree as well.
    • Disable Fltk 1.1's Drag 'n Drop since the only text field in VMD is the atomselection input and DND severely gets in the way there.
    • Justin managed to track down and come up with a solution for a quite vexing bug in Tkinter/Tk. The problem occurs only when the version of Python installed on the system 2.2.2 or earlier, and the version of Tk against which VMD is compiled is 8.4.2 or later. Both of these conditions happen to be met on the system Justin is compiling and running on. The bug never happened with builds that came from UIUC since they were compiled against Tk 8.4.1 thus far. Some sort of conversion behaivor in Tk changed in version 8.4.2. Python 2.2.3 handles this change, but 2.2.2 bombs out, which causes IED to run into problems. The very simple fix is to place Tkinter.py from Python 2.2.3 in the vmd/python directory. This version of Tkinter.py is able to work with any version of Tk since it tries the old behavior first and gracefully deals with the new behavior if there is an error. You can grep for 8.4.2 in the attached file if you want to know more. By placing this file in VMD's python directory, it overrides the corersponding file on the system (found in $PYTHONHOME/lib/python2.2/lib-tk) and prevents the errors.
    • Added more info on plugin architecture and coding conventions to the doxygen info.
    • Added doxygen text about the main C/C++ plugin entrypoints in the plugin programmer's guide.
    • Using exectool to find path to raytracers. POV-Ray should probably remain disabled until a method for allowing scripts to get the display size exists.
    • add overview section to the main plugin programmer's doc page
    • half-finished draft of an overview page covering how the various types of plugins interface to VMD, and what they are capable of doing.
    • Adding mdfplugin to makefile.
    • Docs for the new frame deletion behavior
    • Made frame selector dialog boxes a bit more verbose so it is clear what they do (especially w.r.t "Stride")
    • Patch implementing new frame deletion behavior (in which stride specifies frames to _keep_): deleting 0 to 9 with a stride of 4 will keep frames 0 4 8, instead of the old behavior 1 2 3 5 6 7 9.
    • Make built-in help for $sel commands mention 'atomselect keywords' rather than misleading people into typing 'atomselect list'.
    • improve 'atomselect symboltable' help text
    • Fixed bug in walking through residues the horizontal and vertical scale frames.
    • Verbose messages can now be printed to a seperate channel or, as the default, not printed at all.
    • Removed unused procs from contactmap.
    • Handling getOpenFile a little better on OS X.
    • Using exectool to run external commands, providing some protection when necessary utilities are installed in nonstandard locations.
    • Added support for clipping planes to the Tachyon and LibTachyon display devices. The implementation is similar, but much simpler than the corresponding code for POV-Ray.
    • Added Justin's Python RMSD patch and matching documentation updates.
    • Maintaining a "registry" of program names and locations, mapping simple names (e.g. "surf") to arbitrary paths (e.g. "/Projects/vmd/vmd/lib/surf.local/surf_SOLARIS2_64"). ::find now accepts optional flags to switch between interactive and noninteractive use. GUI is still pretty useless, someday we might want to allow users to edit this registry through it.
    • Added Jordi's suggested Fl::visible_focus(0) to prevent the arrow keys from switching active GUI controls. (should behave more like the old FLTK where only the tab keys change the active input widgets/controls)
    • Fixed incorrect sizeof() expressions in the ParseTree code. These have been working for us by the lucky coincidence that the size of float and int are the same on most platforms presently. I only even noticed this as a side effect of cleaning up the source code.
    • major cleanup of tabs etc. Need to cure more problems that occur when only coordinates are loaded but no structure is available.
    • Freeing memory in read_mdf_bonds(), improved comments and error messages, cleaned up code, and updated for static hash routines.
    • Declaring hash_init before rebuild_table for the benefit of files that include hash.c instead of hash.h (i.e., the plugins).
    • Reorganization of the hash table headers to make it possible to use the same code for both the main VMD tree and the plugin tree, so we don't end up with two implementations.
    • mdfplugin: Reading bonds, leaking memory.
    • Added hash routines from the VMD tree to the plugins area.
    • Prevent the selection builder from crashing when only coordinates are loaded.
    • Prevent crashes when loading only coordinate data. Jordi reported the following sequence of operations could cause a crash: mol addfile {/Projects/jordi/hyde/dcd/hyde+o2Da-skip20ps.dcd} type dcd; mol selection {resname O2}; mol addrep top
    • Saving the file-position of the molecule data for faster retrieval.
    • Reading all molecules from the file, assigning each a different chain name.
    • Updated multiseq plugin again.
    • New 'mdfplugin' for Insight II molecular data file format. Currently reading structure for all molecules (currently differentiated by chain name), but not bonds.
    • Fix the crdplugin PBC reading logic so it doesn't dereference NULL when VMD wants it to skip timesteps.
    • Added comment about adding code to read velocity data in rst7plugin
    • Testing for 24-bit color availability after the options are parsed -- otherwise it exits for dispdev text.
    • Assume ATI radeon by default
    • Added the 'shaders' directory to the Win32 installer.
    • Print GLSL instead of GLSH since that's been becoming popular nomenclature.
    • Updated the win32 installer license text for the new TCBG name etc.
    • Look for the default VMD shader in getenv(VMDDIR)/shaders/ unless overridden by the VMDOGLSHADER environment variable. Print nicer startup messages.
    • Added "shaders" directory to distribution and install areas
    • Update OpenGLRenderer class to handle dynamic enabling/disabling of GLSL programmable shading via the "display rendermode" command. The new code caches more lighting state between rendering passes and should be a bit easier to update as OpenGL drivers begin to support the shading language features more completely. GLSL state is now re-updated whenever a cached state serial number doesn't match the render state serial number. The GLSL code and fixed-function code now share more state than they used to as well.
    • Makefile and package index for cliptool.
    • Clip status selectable from drop-down menu. Currently suppors "Off", "Hollow", and "Solid".
    • Add the other rendering modes to the Win32 builds since they are likely to support GLSL.
    • Use symbolic constant for number of render modes instead hard-coded integer
    • Added Justin's patch which checks for a correctly-matched Numeric version. The current check looks for version 22, this will have to be manually updated when necessary, as Numeric doesn't have a version constant in their header file.
    • Various cliptool improvements, Enabling/Disabling entry widgets when following camera or center.
  • VMD 1.8.3 Alpha 13 (May 17, 2004)
    • Force all of VMD's FLTK windows to be allocated from 24-bit color visuals when possible. This ensures that we don't run out of colors in the color scale gradient window, and helps eliminate most of the cases where colormap flashing can occur, though pulldown menus still appear to be allocated from an 8-bit overlay plane on some systems, and are thus subject to colormap flashing still.
    • Moved the OpenGL clipping plane handling code closer to the innermost per-rep rendering loop, to facilitate addition of new multi-pass solid capped clipping plane logic. Also added in a general description of one possible implementation and links to several papers and sites with various algorithms. I haven't found a clean implementation that looks like it'll immediately work with multiple capped clipping planes yet, that still remains to be done. The linear time paper looked interesting as trys to avoid a bunch of Z-buffer manipulations by doing things differently.
    • Handling new mols, GUI for origin control, and following mol center. Still needs: processing input from entry widgets, prettier layout.
    • Cleaning up traces on exit, updating plugin when new reps are added.
    • Move drawing primitives out of MoleculeGraphics and just keep 'em in the create_cmdlist() method which is the only place they're needed.
    • Force renormalization of normals read in tricolor MoleculeGraphics objects, prevents the same problem already fixed in the trinorm primitive.
    • Clip Tool -- GUI for handling clip planes across all molecules. Still needs to handle: new mols/reps, GUI control of origin, handling values entered with the entry widgets, following mol center.
    • cranked version to a13
  • VMD 1.8.3 Alpha 12 (May 12, 2004)
    • Updated the VMD registry key for 1.8.3
    • Updated Windows installer with VMD 1.8.3 files
    • cranked version number since SS04 binaries are posted (includes multiseq) and I need to make new binaries for APBS testers that don't have multiseq.
  • VMD 1.8.3 Alpha 11 (May 11, 2004)
    • Specifying the width of menu buttons to avoid truncation of the labels in OS X.
    • Updated the PSF reader plugin to deal with files produced by Charmm 31. The new Charmm format adds new "CHEQ" and "CMAP" strings to the first PSF line to indicate the existence of additional data columns. These new columns greatly exceed the previous maximum line length accepted by the PSF reader, so the PSF reader now assumes max line lengths of 160 chars rather than 80. The new PSF reader identifies these new charmm files but doesn't do anything with the new columns. All we know at this time is that these new data fields and PSF sections are used with polarizable force fields.
    • Moved calls to write_materials() out of geometry routines and into start_clipgroup(): this will work as long as this function is called in FileRenderer at the beginning of each traversal through the display list. It also has the added bonus of ensuring that CSG clipping planes have the same material properties (lighting and transparency) as the rep. they're clipping. Something similar will probably need to be done for other file renderers as they implement the new clipping style.
    • Adding directories to the list of those to search each time a program is located by the user. The tool is no longer as heavily dependant on the PATH variable now, and users will never have to locate the same program twice in one VMD session.
    • Drop-in replacement for ::exec which first searches the path for the executable and prompts the user if it's not found.
    • Updated the APBS plugin documentation page with new links and better formatting.
    • find_prompt procedure; similar to find, but opens a dialog that allows the user to interactively set the program location. Most changes made to allow the code to better integrate with other plugins (e.g., apbsrun).
    • Taking advantage to the recent changes to exectool to prompt the user for the location of apbs before giving up if its not found.
    • cranked version number
  • VMD 1.8.3 Alpha 10 (May 4, 2004)
    • POV3DisplayDevice: support for CSG clip planes using FileRenderer's new clip plane interface.
    • Preliminary implementation of the new CSG-solid clipping plane mode control logic. The new clipplane color command sets the color used for the CSG-solid clipping planes when they are enabled. The clipplane status command is now changed such that it takes integers instead of boolean values. A status of 0 disables the clipping plane, status of 1 enables, higher values will be used for CSG/solid clipping, drawing a visible wireframe clipping plane, and any other such simple modal clipping plane behaviors.
    • Added missing exectool to the main makefile
    • Fixed a bug that prevented files from being written when "setup only" is selected but no APBS location is given.
    • Disabled ff-parameter charges option in GUI until they're assigned better.
    • Added the multiseq plugin to the list of automatically loaded plugins, but don't print an error if it doesn't exist, since this is not yet part of the standard VMD distribution. Also put things in alphabetical order with the exception of zoomseq.
    • Finally using exectool to locate apbs binary, warning the user if it hasn't been found.
    • Moved GUI location prompting out of the 'find' procedure, making it easier to integrate with other plugins (e.g., APBSRun).
    • Eliminated unused variables from contour texturing code.
    • Added a new "display rendermode" command to control use of mutually-exclusive rendering functionality/methodology. Examples are using stipple transparency vs. alpha-blending, fixed-function OpenGL vs. programmable shading. These rendering methods are fairly exclusive of each other, and they have very different performance characteristics, but there's little reason to make these a material property, so an overall mode switch seems like the right way to do it for now. We can add this to the GUI when things mature a bit more.
    • New code to use CSG for clipping planes. This makes the clipped objects appear solid, as opposed to hollow. Needs to be activated with a #define. Also made POV 3.5+ code the default; this code can be deactivated (so features unavailable before 3.5 won't be used) by removing the #define.
    • Updated the VMD README file with the many recent improvements.
    • With previous updates to SnapshotDisplayDevice, and the most recent changes to the LibTachyonDisplayDevice, the vmdmovie plugin now generates images in PPM format by default to eliminate the necessity of performing mage format conversion steps whenever possible. On Windows machines, the target format is 24-bit BMP files by default, since this is what VideoMach and most windows-based tools will readily accept. On Unix/MacOS X, this is PPM since we are heavily dependent on NetPBM in general, and ppmtompeg specifically.
    • Added auto image-format detection logic to LibTachyonDisplayDevice, and changed the default image format for unrecognized file extensions to Targa, since that format can be read by most image viewers on all the major platforms, unlike RGB.
    • Crank psfplugin version number, pretty up info block comments (get rid of tabs)
    • Increased max REMARK buffer size accepted by the PSF plugin, in order to cure a recently reported problem reading PSF files generated by CNS 1.1.
    • Replaced incorrect use of abs() with fabs() in phiplugin.
    • ifdefed out bad code in phiplugin that attempts to check to see if the cubed root of the number of grid cells is an integer, but the code is wrong and I don't know why it does this, needs comments and fixing. (it is testing an integer versus a small fp number, can't possibly work..)
    • Use setvbuf() to greatly increase the internal buffer size used by the stdio file routines that operate on the DCD trajectory.
    • cranked version number
  • VMD 1.8.3 Alpha 9 (April 23, 2004)
    • Terse documentation for the grid plugin.
    • Documentation explaining the many limitations of the car file-reader.
    • Brixplugin now reading one full "brick" of data at a time for improved performance in the inner loop.
    • Make VMD compile with the TCL option disabled.
    • Hacked image into docs, table should be replaced with something cleaner.
    • Example output for APBS documentation.
    • Replaced non-portable snprintf() with sprintf(), checking that it won't overflow the buffer.
    • Added file format description to comments; removed warning about mismatched version (tested with multiple versions now); fixed a bug reading trajectories from files with 2D PBC info.
    • Plugin for Insight II/Discover car (cartesian coordinate file) file format.
    • Fix the VMD_RAND_MAX macro for non-Linux platforms
    • Added built-in performance measurement code in the dcdplugin when compiled standalone, handy for testing, though this really ought to be implemented in an external test framework.
    • Checking for negative values for the beginning of a record. Usually the result of incorrect swapping value, they will cause segfaults.
    • Revised byte-order check, forgot all about that first bit.
    • Re-enable use of the degamma ReadVideoPixels format, and add buffer swaps to insure that the correct color plane data is read back by the readpixel() method since the XVR-4000 readbacks occur only from the front-buffer. (the regular OpenGL glReadPixels() code reads the back buffer presently).
    • Fixed multiply defined fortread_4() function by declaring it static as it should have been.
    • Revert to using the gamma-corrected video readback path until I can verify the source of a snapshot corruption bug that only occurs with the recent builds when running on the XVR-4000 graphics board.
    • Fixed gridplugin origin offset, observed when comparing the map to a copy in a different format.
    • Commented on a couple additional unresolved issues with the new gridplugin.
    • Added file format description to comments; replaced nested loop with simple memcpy; removed unnecessary header includes.
    • Volume reader plugin for Molecular Discovery's GRID program. Reads native binary maps.
    • Updated xyz plugin docs to mention the fact that the current plugin doesn't handle the optional xyz comment lines.
    • The IMD code now uses the same swap4_aligned() byte swapping code that the plugin tree uses. There are two copies of this function in the IMD source files, which doesn't make much sense, so a little cleanup could still be done.
    • Updated README text with new plugin info, etc.
    • Cleared up confusing dxplugin comments.
    • Using fortread.h to read file.
    • Header containing helper routines for reading records from "formatted fortran" files.
    • Added ifdef's to the header to prevent it from being included multiple times.
    • Made check a little less strict, allowing delphi maps created by the GRID program to load.
  • VMD 1.8.3 Alpha 8 (April 16, 2004)
    • Updated docs with information on newest versions of (cns|ccp)2fsfour and to better explain cell origin issues.
    • Fixed alignment issues and handling of files with no symmetry block (which is optional). Also checked files produced by the latest versions of ccp2fsfour and cns2fsfour, which are handled by the main code path. Hopefully, support for the broken files produced by the older versions will be dropped, since without the proper cell geometry they're virtually useless.
    • Fixed edmplugin bug that caused the cell origin and basis vectors of nonorthogonal cells to be incorrectly read.
    • Fixed brixplugin bug that caused the cell origin and basis vectors of nonorthogonal cells to be incorrectly read.
    • Fixed ccp4plugin bug that caused the cell origin and basis vectors of nonorthogonal cells to be incorrectly read.
    • dsn6plugin finds correct basis vectors for unit cell, closing bug reported by Janos Lanyi. Still need to check for potential byte-swapping and alignment issues in read_data().
    • fs4plugin comments are hopefully more easily understood.
    • Improved the ccp4plugin inner loop by reading one row of data at a time, and swapping the entire block at once.
    • Misc comments added where things are unclear or need work.
    • Major cleanup of the gromacs plugin header, eliminating lots of cruft leftover from its original conversion to plugin form. Updated it to use the new byte swapping code rather than its own mdio_swap4() and mdio_swap8() routines.
    • save the mdio_swap8 function to replace the slower unaligned version at a later time when I can test.
    • Converted the code to use the new byte swap routines. There are several misleading comments in the code that need to be fixed. Also, all of the references to the "header" and "geom" char arrays are potentially dangerous since we can't assume that their contents will have correct address alignment. These things should be fixed as soon as time allows.
    • significant graspplugin cleanup, updated to use new byte swapping code, and made it generally more readable.
    • Updated ccp4plugin to use the new byte swapping code.
    • dsn6 plugin now correctly handles origin for non-orthogonal cells, still not reading cell edges correctly. Also using new byte-swapping code.
    • Cleaned up read_plt_data, now making only one call to fread() and swap4_aligned().
    • Updated grdplugin to use the new byte swapping code.
    • Changed pltplugin to use the new byte swapping code.
    • Unify all of the byte swapping code from all of the plugins in one place, and implement both slow-and-safe unaligned versions as well as fast-but-dangerous aligned address versions.
    • Saving and restoring original charges when using values from parameter file. Moved check for uncharged molecule to take into account parameter charges.
    • Using complete CHARMM parameter file from APBS for radii and charge loading. Plugin can now add charges in addition to radii.
    • Reduce number of fseek calls per skip_dcdstep() by a factor of 3, which will help a bit on libc implementations that call lseek() once per fseek() call.
    • cranked dcdplugin minor rev since the byte swapping code was improved.
    • Significantly increased the efficiency of the DCD reader by rewriting the byte swapping routine. This raised the local disk DCD reading bandwidth on my desktop SunBlade 1000 from 30 MB/sec up to 48 MB/sec on a 1.5GB byte-swapped DCD file stored on the local disk. Can probably reduce the number of I/O calls and context switches with further work. Ultimate would be to mmap() the timestep which avoids one copy from kernel space to user address space.
    • make built-in test code a bit more usable now that it compiles again.
    • make test code for dcd plugin compilable again, though not entirely correct still.
    • Disable OpenGL extensions lookup on OS X until Apple provides a solution to this problem.
    • Improved comments on the molden plugin on the index page.
    • Made the plugin doc pages slightly more concise by removing duplicate title info. Only downside is that it assumes that the server-side includes will work, which is true here, but not necessarily elsewhere.
    • Remove vmdmovie page that somehow got put into the molfile plugins doc area
    • Force the joined-at-the-hip gromacs plugins to share the same version number since they share code anyway.
    • Set version numbers the same on all of the gromacs code.
    • More plugin intro materials.
    • made autoionize/membrane docs conform to same arrangement as the others
    • Added Ilya's membrane docs to the plugin tree as they should be.
    • Added Ilya's doc files to the plugin directory where they belong.
    • Correctly handling image planes behind the viewpoint.
    • warn users to run 'make install' from the correct directory rather than just bailing.
    • Added a warning about the plugin's lack of support for new features in APBS 0.3.0.
    • Updated documentation for the APBS plugin.
    • Added PQR plugin to molfile plugin docs page
    • Override default FLTK escape key callback behavior for the main VMD window, and make the mouse-based window close operation equivalent to asking to quit the program, which brings up a confirmation box much like the File->Quit option would have.
    • Don't initialize the structure on a failed structure read, prevents odd behaviors reported by Jordi. Patch provided by Justin.
    • Added a new "mol new" and "mol addfile" optional parameter named "autobonds" which is either nonzero (default) to enable, or zero to disable, automatic bond determination on files that lack explicit bond information. This makes VMD a bit more usable in some of the yucky cases when people load these materials science datasets that are packed with tons of metals, carbons, gold, or whatever other elements for which the standard distance-based bond algorithm tends to do a very poor job.
    • Make Fltk menus use the Inform class for printing messages as they should have been. Also made various debugging messages more identifiable and useful should they ever get exercised.
    • Fixed incorrect "mol new" and "mol addfile" logging when volume sets are loaded from the GUI.
    • add comments to the FileSpec class.
    • Made text() and comment() methods take const char * parms. Ideally all parameters for all FileRenderer methods would take const parameters since the display list has to be read-only.
    • Add more warnings for unimplemented rendering features in exported scenes.
    • Revamped the plugin documentation a bit.
    • Justin's fs4 patch, addressing numerous byte-swapping issues. Maps created with (ccp|cns)2fsfour still aren't loaded correctly: I'm not sure it's possible, since too much information is missing from these files, and some of it (e.g., order of the plane/column/row data) can't be corrected with scripts.
    • Updated a comment about povray's use of triangle winding order.
    • Reading norn from (ccp|cns)2fsfour maps, thanks to some information provided by Chris Putnam, author of the programs. These maps still don't have the correct cell size or position, but at least the data is in the right order!
    • cranked version number
  • VMD 1.8.3 Alpha 7 (March 23, 2004)
    • Added the user column to atomselect keyword table, and fixed a problem with duplication of the label textsize item.
    • Applied Justin's patch and new routines to add Python-based extension menu items to VMD.
    • Updated README with new plugin fixes/features, etc.
    • more formatting comment improvements to the DCD code, and changed the dcdplugin to set the DCD_IS_CHARMM and DCD_HAS_EXTRABLOCK flags rather than just true/false, so that the writing code matches the reading code.
    • Continued cleanup and added comments to the DCD plugin sources.
    • Documentation for the mol2 plugin.
    • Easier to hack plugincmp() to print debugging messages when testing stuff.
    • Fixed the byte swapping loop for the FREEINDEXES array to swap the integers and not run off hosing memory at random.
    • Misc cleanup of dcd_readheader()
    • correct the TODO list in the dcdplugin.
    • Improved readability of and greatly simplified the write_dcdstep() and write_dcdheader() routines by replacing ugly write calls with a new write_int32() function that does the same thing. The code is MUCH easier to follow now.
    • Added support for writing both charmm and x-plor format DCD files, and added support for writing out unit cell data in charmm format trajectory files.
    • Rewrote the DCD writing code to generate both X-PLOR and Charmm compatible trajectory files, and added support for writing unit cell information when writing Charmm format files. Tested all three file format variants by loading and saving trajectories containing unit cell data various ways. The new write_dcdheader() routine is more readable as well. More cleanup would be useful however.
    • Massive readdcd.h tab removal, comment cleanup, and formatting improvements. This file really ought not be separate from dcdplugin.c anymore, but for now we'll leave it separate.
    • Implemented Jim's alternate formulation of the acos() code to give better rounding behavior more likely to result in alpha/beta/gamma angles of precisely 90.0 degrees for orthogonal unit cells.
    • Cranked parmplugin version number since this wasn't done after the last change.
    • Fix missing dependency on readdcd.h in the dcdplugin rules.
    • Allow the user to adjust minmax of color scale for the Index coloring method too.
    • Fixed a bug in which VolumeSlice Rep controls would not get deactivated when no volumetric dataset was available. Also added code to activate/deactivate the dataset chooser when no volumetric datasets are present.
    • Reset color scale min/max to 0. for Color Methods that don't use them instead of keeping the values from the last-used Color Method (which was confusing).
    • Updated doxygen/comments to explain that the empty string should be used for the chain and segid if the file doesn't provide them.
    • Setting the chain to the empty string by default.
    • Added mol2plugin to Makefile.
    • mol2 plugin reads bonds.
    • Cleaned up nasty nested if-statements with a more readable switch.
    • New mol2 format file reader plugin. Currently reading structure and coordinates, but not bonds.
    • Don't even register plugins that are older versions than what is already compiled-in or previously loaded into VMD. (since we'll never use them anyway) One nice result of this change is that when one scans a directory of plugins now, only new plugins get loaded, and so the number printed on the console is a heck of a lot more useful for debugging for the average user.
    • reduce unnecessary memset() calls by using one buffer in get_pdb_coordinates(), since its called for every line in the PDB file.
    • cranked version of babel plugin since it depends on the pdb reading code.
    • Eliminate redundant code in get_pdb_fields(), reduce unnecessary function calls to strlen() in the space removing while loops, add missing comments, increase buffer sizes to accomodate PDB files that have lines terminated with CR+LF pairs (though the parser can't cope with them just yet), cranked version number of the PDB reader plugins.
    • misc cleanup, readying for some rewriting here and there.
    • Fix a potentially under-sized buffer in get_pdb_cryst1(), replaced hand coded buffer clear with a cleaner and more efficient calls to memset, changed hand-calculated sizes to use sizeof in get_pdb_coordinates(), and general prettying up.
    • added comment about 64-bit linux crash until I solve it.
    • misc cleanup in readpdb.h preparing for some restructuring to fix bugs caused by divergent implementations in the 3 plugin variants that all read PDB files.
    • fix dependencies for pdbplugin, webpdbplugin, and babelplugin
    • Less verbose by default: removed redundant "file generation finished" message, and commented-out default povray command-line suggestion.
    • quiet compiler warning about float to int conversion.
    • Added warning and test code for non-orthogonal volumes since the OpenGL code isn't quite ready for them presently.
    • added dot_prod() for doubles.
    • Warn user when they use clipping planes in a scene exported to a renderer that doesn't implement them yet. Need to do the same for texture maps etc still as well.
    • quiet the gcc compiler warnings about conversion from float to int
    • POV-Ray Cone macro.
    • POV-Ray macros are all now printed in the header of the scene file, eliminating the need for flags for each macro. Added cylinder macro.
    • Implemented set_line_width() and improved lines rep and macro.
    • A much more usable implementation of the contour-line volume texturing routine, with supersampled voxels calculated by linearly interpolating between the original voxel values. Also moved various routines that belonged as methods of the VolumetricData class in there and out of BaseMolecule. Supersampling the voxel data by two on each axis ends up burning a fair amount of memory and takes much longer to calculate, but the results look far better than they would otherwise. This contouring implementation doesn't require any color lookup tables since its done via fmod(), but we may ultimately want to provide similar functionality via color tables so that more than two contour colors can be used.
    • Mention in the docs that setting a/b/c/alpha/beta/gamma via molinfo only applies to the current frame (it would be nice to have an easy way to set this molecule-wide...)
    • Committed Justin's patch for incorrectly calculated weighted RMS fits.
    • Added Jordi's bondsearch patch which prevents bonds being created between atoms with identical coordinates.
    • Add simplistic contour lines function to the tree for now, but leave disabled until we figure out a GUI for this stuff, this further exposes the need to have a place GUI controls for coloring other than just coloring method and colorid/volumeid selection.
    • Improved points representation (using non-shaded spheres), and made it a macro.
    • Added pointSize variable, allowing file renderers to draw "points" reps with different point sizes. Also changed the virtual set_line_width routine; it now sets the line width. This should help all file renderers, as none of them have yet implemented this function.
    • Updated infolist text file. Somehow this was not getting updated in CVS.
    • Fixed Windows installer after the CVS tree got hosed. Still needs work but the new installer includes Jordi's recent AutoIMD changes. The various installer text files got hosed in the process somehow, but they should be fixable shortly.
    • Fix some issues with the links maker
    • Added POV-Ray sphere macro for further reduction in scene-file size.
    • Added Justin's color assignment patch to cure coloring bugs that occur when atoms are renamed via atom selections, reported by Jordi. Also changed the default material to use the first material rather than whatever the current material was.
    • mention various new features I'd forgotten previously, reordered a few items.
    • Moved POV-Ray 3.5 ifdefs into the trimesh and tristrip functions, getting ready to make 3.5 code the default. Minor changes to the tricolor code to help reduce scene-file size.
    • fix constness of the atom parameter in write_pqr_atom()
    • Defining clip planes differently when only one plane is used per rep. This eliminates a warning generated by POV-Ray when it encountered CSG objects with only one element.
    • Fixed the behavior in which the currently selected molecule in the main menu should be the one selected in this menu (which had been disabled a few months ago while fixing a more critical data saving bug). This is all now thoroughly tested! As a bonus, the new code also remebers the selected mol's molid, so that it does not get reset when any other mol is created or deleted. Fixed a separate bug in which a zero-length file would be saved if some frames were deleted from the selected molecule while the menu was open (SaveTrajMenu now gets ANIM_DELETE events) Removed the argument for molchooser_activate_selection(), since it was redundant, and could cause errors if not set to its unique acceptable value Added some small doxygen comments
    • Support for clipping group. Still needs to be supported by most geometric primitives.
    • Autoimd: Changed the cutoff distance parameters to be the valid ones specified by the CHARMM force-field. I assume they were originally made short for speed, but there is no reason not to use the valid values.
    • Changed clip_on to (int *).
    • Added methods to FileRenderer so that subclasses can emit CSG or clipping plane groups around reps for best efficiency.
    • Removed cached material state variables, since 'materialIndex' alone sufficiently describes the material state.
    • Using POV-Ray's "#default" directive to set material properties, instead of defining textures and having subsequent geometry refer to them.
    • POV3DisplayDevice; Real per-vertex shaded triangles. Introducing the use of macros to reduce scene-file space.
    • Constify the triangle() and tricolor() FileRenderer method parameters
    • Initial revision of Tachyon tristrip rendering code. The Tachyon side of things needs a bit more work to make this smooth, but the VMD side appears to work now.
    • fix docs typo
    • Committed Justin's label textsize patch.
    • Fixed an unfortunate dxplugin typo causing the z-axis to be badly scaled for non-cubic cells.
    • Added more debugging info to MSMS output. Tried enabling the -all_components flag, but this seems to universally fail on large structures, as badly or worse than without it, and on smaller structures I get creepy bizarre looking output in some cases, so its not a solution to the problems we have using MSMS on large structures. New code also prints an error when MSMS bombs rather than just eating the error and pretending like things are ok.
    • After parsing data, looks to see if the file stores a name for the dataset and copies it (for APBS, this string is currently meaningless).
    • Remove namdrun from the global plugin Makefile
    • Added README comment about atom selection speed improvements.
    • Updated version number.
  • VMD 1.8.3 Alpha 6 (March 1, 2004)
    • Updated README with volume slice performance note
    • Fixed configure script file list for FLTKOPENGL option.
    • Properly protect the 3-D texture calls with OpenGL 1.2 ifdefs and feature tests as appropriate.
    • Pretty up a couple functions, implement the constructor in the header since its empty, and start fixing some memory leaks in the SymbolTable destructor.
    • Fixed mismatched color array deletion in draw_volume_isosurface_trimesh()
    • Fix memory leak in the CmdMaterialAdd destructor code.
    • Fix two free memory read errors found by Purify in VMDApp when materials are deleted and/or renamed.
    • Fixed the copy constructor in the Timestep to copy unit cell data as it should have been all along.
    • Fix a potential out-of-bounds array read in the NewRibbons code in the direction calculation for the last 'section' drawn.
    • Fix filename string leaks when calls to Stride fail.
    • Fix uninitialized material state.
    • Added POV3DisplayDevice triangle strip representation, featuring vertex-shaded polys.
    • Fix memory leak in the CmdDisplayAxes destructor.
    • Fix leak of orient matrix in the VMDTracker class destructor.
    • Fix VMDTkMenu destructor memory leak for windowProc members.
    • Fix MainFltkMenu destructor code for the extension menus, since we don't special-case the first 3 items anymore.
    • don't leak ImageViewer string.
    • fix a small memory leak in the MainFltkMenu destructor.
    • Fix FileRenderer materialIndex update logic and eliminate the old DTRANSPARENT_ON/OFF display commands.
    • Eliminate the old DTRANSPARENT_ON/OFF display commands which no longer make any sense.
    • Disable installation of namdrun 0.1. Files remain in CVS, but do not get distributed or installed.
    • Fixed leaked ACTC triangle workarea handles in the trimesh code.
    • Update the comments in TclCommands.C atomsel_set() to match the current implementation of DrawMolItem::force_recalc().
    • Delay DrawMolItem::force_recalc() updates until create_cmdlist() is called. If we find any cases where this optimization breaks VMD we can add in a new flag to force atom selection updates to occur synchronously rather than being lazily evaluated.
    • DX reader now reads _entire_ unit cell vectors to allow loading of non-orthogonal unit cells
    • POV-Ray 3.5+ options moved into a common ifdef, and a message is printed if the version of povray doesn't match the version this code is compiled for.
    • Only storing color changes -- greatly reducing the scene file size for most reps that use trimesh and finally surpassing old triangle code in efficiency.
    • Removed color-consolidating hash table, this should be handled in a more general way, probably in FileRenderer.
    • Incorrectly reading the number of grid points; bug caught by Jordi.
    • Added OpenGLCache files to Win32 builds.
    • Make Linux use statically linked glTexImage3D() since they fail to export it via glProcAddress().
    • Add stub to handle downsampling of texture maps and print error messages if the code fails to produce a usable texture map for some reason. This code absolutely depends on the new OpenGLCache code to prevent massive performance hits since the Mipmap calculation is done inside of the render loop where VMD has all of the information it needs to correctly downsample images and setup the Mipmap parameters. The current code doesn't downsample yet, but rather makes a checkerboard texture in the case it can't take the full res image so its obvious when this happens in testing.
    • Using a hashtable to ensure that only unique colors are printed for meshes and that the proper indexes are used when referencing them. Still need to figure out how to print the number of unique colors before printing the colors themselves.
    • Fixed a few cut & paste typos in error messages ("measure minmax" would give an error as if it were "measure rgyr", etc.), and other extremely minor error message cosmetic fixes.
    • perhaps deleting textures in the destructor is too late, as we get a seg fault when we call glDeleteTexture() in further testing. Will have to debug this later.
    • delete remaining cached textures and display lists when the OpenGLRenderer destructor is called.
    • make the display list caching code use the new OpenGLCache class just like the texture caching code. Still has the weird bug with heirarchical lists not working, but the use of the OpenGLCache class cures the other deficiencies it had before, so now I just need to figure out what the deal is with the heirarchical lists not working. (i.e. VDW, Axes, etc.)
    • First revision of 3-D texturing code that uses the OpenGLCache class to do texture lookups rather than re-downloading each time.
    • Added include of the OpenGLCache header.
    • First revision of a very simple class to cache OpenGL object ID's from frame to frame, automatically garbage collecting unreferenced textures, display lists, etc, at the end of a rendering loop. The current implementation is a hacky linked list doing linear searches, it would be best implemented as an integer hash table but this gets the job done in the very short term and gives a massive performance boost over sending textures to OpenGL over and over.
    • Properly assigning materials to mesh2 objects using the #default directive. Trimesh code is still ifdef'd out because the scene files are still slightly larger, though this should be fixed soon.
    • Added serial numbers to the texture related display commands for use in the new texture caching code.
    • Add a new serial number counter for texture IDs. These are still done as a static method on VMDApp, would be better if they were done per VMDApp instance, need a few more changes for that, once it works we'll worry about cleaning this up.
    • Fixed the currently installed version of namdrun.tcl so that it works in localdqs mode (working directory problems). Also very minor doc updates.
    • Revved to new version
  • VMD 1.8.3 Alpha 5 (February 23, 2004)
    • Warn users about uncharged molecules before running APBS.
    • Change the isosurface rep addition logic so that it doesn't cause an extra 'lines' rep to be added in cases where the existing code adds one too.
    • Moved checks for coordinates and atoms to fix a bug that prevented molecules created with a file that didn't contain both from being used.
    • Added OpenGLShader to configure script, since I discovered that Suse actually ships current glext headers which end up enabling the feature detection code on their x86_64 Linux distro.
    • Added AMD64 plugin builds to build.csh
    • Applied the patch for the mismatched atomselect set parameter count crash reported by Justin. (Fixed PR 420)
    • Added implementation of trimesh, using POV 3.5's mesh2 object. Currently ifdef'd out: the scene files aren't actually smaller, and there are problems with the material declaration.
    • Cranked version number
  • VMD 1.8.3 Alpha 4 (February 16, 2004)
    • Fixed a delete that should have been delete [].
    • Fixed another place where Jordi's unbelievable density range crashed the GUI code.
    • Printing a warning about degenerate triangles after creating the scene file; doing the same thing for degenerate cylinders.
    • update README with recent changes/fixes
    • Display resize and reposition commands added to docs, although they're currently X11-specific.
    • Quick and dirty hack that slightly improves the appearance of triangles by using tricolor to bypass the indexed color triangles. Since POV doesn't actually support vertex-colored triangles, however, there's not much of an improvement.
    • Fix solvate error messages to list correct version number.
    • Increase internal buffer size in the isovalue slider string buffer to prevent crashes from huge or otherwise out-of-range floating point values. I hate that we can't use snprintf() due to portability problems.....
    • Increased Inform method-internal buffer sizes to accomodate large numbers that have been shown to cause crashes (Jordi's DX file as an example).
    • Eliminate unnecessary regular expression match() calls, as well as avoid crashes by skipping items for which flag values are already off.
    • Further cleanup of ParseTree::eval_compare()
    • Cleanup of ParseTree::eval_compare()
    • Improve performance of compare_numeric_macro and especially compare_string_macro, no need to call strcmp() if the original flag wasn't true to begin with. This saves function call overhead and redundant computations since the result is just ANDed in.
    • Fixed the "xxx and same yyy as zzz" crash reported by Alek. An additional side effect is that the new code should also be faster.
    • Changed ParseTree::eval() to avoid redundant evaluations of floating point functions in the case that it comes from the single value. Added notes to the appropriate places to warn against adding functions that produce differing results for the same input (i.e. similar to rand()) since that would break this optimization.
    • misc ParseTree cleanup, particularly eval()
    • The default new operator can never return NULL, so there's no point in checking for it and printing warnings in the ParseTree code. Also, the implementation provided no means of bailing out, so its game over anyway.
    • Misc cleanup while working on fixing an atom selection crash.
    • Add comments to symbol_data and ParseTree class definitions where applicable
    • ParseTree.h, eliminated disabled union grouping for data that can't possibly work with the current code, nor did it work when it was originally written (as the comments suggest).
    • Found a combination of tests and printing precision that seems to do a good job of eliminating degenerate triangles without wasting too much computation time or file space for POV3 files.
    • Fix incorrect sign on the "D" term for the clipping planes, same mistake that was made in an early rev of the VOLTEXON code.
    • use char ** for argv consistently throughout VMD, already fixed in other locations.
    • Fix lastmolindex safety check.
    • Added new default: Solvent Accessibility, which uses mg-dummy to find a nice surface without performing the PB calculation.
    • Updated the init() method to use char **argv instead of char *[]argv
    • don't set lastmolindex's repindex if it didn't exist.
    • The graphical representations form now caches the most recently active representation for each molecule, so that going back and forth between different molecules yields the last rep the user had selected in each one. In the even that the cached rep somehow becomes invalid, it is clamped to the valid range with the final bounds check. The cache of active reps is currently implemented as a ResizeArray which can never shrink. Not ideal but since it only contains ints, the wasted memory per inactive molecule ID is tiny.
    • Don't leak the new cbdata callback structure pointer.
    • Isosurface generation is now done 8 times faster when the user is dragging the isovalue slider (unless they hold down a modifier key), so there's much less reason to spam their console with messages indicating its calculating nor to report impressive numbers of resulting points/triangles/lines to justify what used to frequently be a significantly long computation time.
    • Fix z and y loops in the isosurface points rep to use the stepsize parameter as they should have been.
    • Add psfgen_kill_mol() to all error returns.
    • Check and limit segment name to 4 characters.
    • GUI update to implement a "low-resolution-while-dragging" isosurface slider behavior. Pressing one of the modifier keys such as shift/alt/ctrl/meta forces the isosurface to be rendered at full resolution while dragging, in cases where full resolution manipulation is desirable.
    • Disabling input fields when they're unused. Include a possible TODO list to the comments at the beginning of the source.
    • Make isosurface reps use the stepsize parameter.
    • Added isosurface stepsize to the AtomRep data structure
    • Added stepsize parameter to isosurface rep.
    • Fix the tooltip for the draw multiple frame entry field.
    • Added missing ifdef for VMDISOSURFACE
    • Added Justin's patch to set the default rep to Isosurface when only volume data has been loaded. The code is only enabled when the isosurface rep exists in the VMD build however.
    • Fix the defaults for the Isosurface rep to match what the graphics form is doing by default. The GraphicsFltkMenu code needs to use the AtomRep values rather than coding them itself to gaurantee consistency in the future.
    • APBSrun: Better handling of molecules w/ no coordinates; bug reported by Jordi.
    • Detect the existence of the OpenGL ARB non-power-of-two texture map size extension.
    • get rid of unused local variable
    • Now that the IRIX6_64 version of psfgen no longer crashes, AutoIMD should work as well, though further testing is needed to be sure.
    • Eliminate crashing problem on IRIX6_64 for psfgen by removing -ltcl8.4.
    • Added TODO list to source; a gift to future generations.
    • Updated screenshot to reflect new layout of the menu.
    • Small cleanups of the code, and added a workaround to make localDQS detect when a job starts and ends almost instantaneoulsy.
    • * Added support for localdqs queue. There is still a weird delay in determining when the job starts caused by limitations of Tcl (could be worked around). * Added the NotifyWhenStart and GetJobHost calls
    • AutoIMD is now enabled on AIX since the 'psfgen' plugin now exists and seems to work correctly on that platform.
    • Revved to alpha 4
  • VMD 1.8.3 Alpha 3 (February 4, 2004)
    • Dynamically loaded plugins should work on AIX now.
    • More compact ELEC window (532x520 without window decorations).
    • Moved output options in ELEC window to a menu.
    • Save the active color scale in VMD saved states.
    • Added an initial bare-bones version of JobManager, for submitting and managing external binary programs from within VMD plugins.
    • Fixed bug that caused the plugin to attempt to load files from *previous* APBS runs.
    • Maps are checked by default (per Jordi), warning about potential breakage.
    • Window popping up on job completion, cheerily prompting user with a list of fresh dx files waiting to be loaded.
    • When a new molecule is loaded, set it to update selections, colors, and representation by default.
    • Fixed the "four line crash" reported by Justin. Moved calls to atomColor->find() into the create_cmdlist() method instead of prepare(). The code in prepare() now only sets the COL_REGEN flag, which is now processed at the beginning of create_cmdlist(). The default DrawMolItem constructor now sets MOL_REGEN, COL_REGEN, and SEL_REGEN, which when combined with the improved COL_REGEN code cures the crashing found by Justin. Still need to look over DrawMolItem for side-effects such as double-calculation of color updates now that the COL_REGEN flag is paid attention to in the front-end of create_cmdlist().
    • Rearranged ELEC menu, new options for writing output files. Next: automatic loading of these files.
    • Change DrawMolItem needRegen reset code to use proper enum rather than zero.
    • Added compile-time version number checking in LibTachyonDisplayDevice.
    • Generate more compact floating point color specification for C0/C1/C2
    • Eliminate the "Texture" keyword from new VCSTri objects to slim down filesize.
    • fix cut/paste error in VCSTri output
    • change Doxygen default defines to be more inclusive of features we use.
    • Implemented VMD interfaces to the new vertex-colored smooth triangle primitive in Tachyon. The renderings now look identical to VMD for both MSMS and NewRibbons for a correct surface. Tachyon is still slightly less tolerant of surfaces that have backwards facing normals than OpenGL is, but this is a natural result of coarsely tesellated geometry and per-pixel shading with interpolated normals.
    • APBSRun code cleanup, additional error handling, validating ELEC statements when adding or editing.
    • revved to alph alpha 3
  • VMD 1.8.3 Alpha 2 (January 31, 2004)
    • Checking ELEC statements before writing APBS input file.
    • Cure a serious deficiency in the way colors were being calculated for triangles with per-vertex colors. The old code was mapping to the nearest color out of VMD's basic 17 colors. The FileRenderer base class implementation is a desperate measure, and should not be used in general, only as "punt" code. There's not a nice way to fix it in FileRenderer.h since material handling is so renderer-specific, so for now I'll have to fix in the remaining afflicted renderers, which is probably "ok" since they will ultimately want to implement per-vertex coloring anyway... Also changed the way material properties processed in LibTachyonDisplayDevice, in preparation for per-vertex colored triangles.
    • Make the glReadVideoPixelsSUN() extension version of our snapshot code use the "degamma" pixel format so that the results are exactly the same as we'd get with standard OpenGL pixel readback (gamma of 1.0 normally, linear pixel values).
    • Convince doxygen to eat the IMDEnergies comments next round, I hope.
    • Added Doxygen class descriptions and converted comments for the last remaining classes. All of the classes, templates, and structures in VMD have at least minimal documentation now.
    • Documentation for the Solvate plugin, currently only describes the use of the new GUI.
    • added Justin's patch for the Python interface to the SASA feature
    • Started adding docs for solvate gui.
    • Updated documentation for the Python interface, added sasa, and a few other previously undocumented features.
    • Added a Python interface to the solvent accessible surface area feature contributed by Justin.
    • fix mismatched parameters in headers and implementation code
    • Continued progress adding class descriptions and converting comments to Doxygen format. The "Compound List" page in Doxygen is finally starting to take shape.
    • Starting **AND** stopping APBS with the push of a button.
    • Added display command class descriptions, lots of comments on the member variables for the trickier ones, and genereal cleanup
    • further cleanup of mouse header, deleted some old comments that are no longer true, and doxygenized remaining comments
    • doxygenation of existing header comments, added descriptions for numerous command classes that lacked them, and generally prettied up headers that had ragged tabbing and other things.
    • Using new solvate GUI by default.
    • Finally detecting errors while running APBS. Just a quick hack -- I wanted to wait for NAMDRun to be more generalized, but it's the number one bug. Needs testing on other platforms.
    • Validating input and actually running solvate.
    • Disabling "use molecule dimensions" option when "create waterbox" option is active.
    • Doxygenation, and fixed various lies in comments caused by excessive cut/paste
    • Added text about source code formatting, consistent style rules, etc. Added naming conventions for preprocessor macros.
    • Added warnings about avoiding the use of global variables, commenting any such variables profusely, and fixed up some organization.
    • Updated comments about global function names
    • Updated codestyle docs with more current info.
    • Imported some of the old VMD code style/organization guidelines into Doxygen format. Still need to rewrite in terms of CVS rather than RCS. These guidlines are still useful to a newbie reading the code, and hopefully to make it more self consistent, though they could use some updating.
    • Removed old pg doc build rules since this is now entirely done via Doxygen.
    • eliminated old pg main doc file
    • Added definition of GLX_GLXEXT_PROTOTYPES to please the RH9 headers/compilers. This has no effect on local builds here, hopefully it'll be helpful to people running RH9 and other recent distros. Change suggested by Justin.
    • GUI cleanup; added option for using molecule's dimensions for box size. TODO: disable this option when user is creating a waterbox.
    • Added some more tooltips. The behavior of the control tooltips in the graphical representations window is somewhat strange. They may require a little tweaking to make them behave as one expects.
    • GUI for solvate command.
    • Make VMD choose the AIX4 arch even when running on AIX5, since we have no separate AIX5 build presently.
    • Renamed doxygen files for easier idenification
    • Eliminated several of the old PG documentation files which have been superceded by Doxygen etc.
    • Imported some comment text from the old pg docs, doxygenized some of the more useful comments.
    • Began the process of eliminating irrelevant PG docs which have been superceded by the use of Doxygen.
    • Further doxygenation, tab replacement, and elimination of an old and now-unused NAMESTRLEN define in Atom.h
    • deleted Atom.tex pg info from docs
    • Added docs for the 'measure sasa' command
    • Added Justin's 'measure sasa' command. Replaced the calls to random()/srandom() with calls to vmd_random()/srandom() since these aren't available on Windows. Also includes the delete [] fix at the end of the routine per previous emails. Uses the original sample point generator until we have something that's better.
    • Changed Surf to use vmd_random() instead of rand()
    • Added random number generation routines. These are not thread-safe, but we should consider implementing our own thread-safe routines down the road.
    • Applied Justin's patch to cure a memory leak caused by the interaction between the ResizeArray template's shallow copy and the ShapeClass objects' data pointer. Made the MAXDATASIZE constant a #define to cure problems with compiling it on Windows, which doesn't like static const member variables for some reason, though other platforms got along with it just fine.
    • Patched our local FLTK 1.1.4 builds with a fix that cures crashing on 64-bit Solaris builds caused by a bad parameter to XChangeProperty() in Fl_x.cxx. I also filed a detailed bug report at fltk.org.
    • Enable the use of tooltips when VMD is built with FLTK 1.1.x or newer. Added three tooltips for now, we should make a list of controls that deserve tooltips, and what if any changes we want to make to the default tooltip behavior that FLTK gives us. The code uses a VMDFLTKTOOLTIP macro so that VMD still compiles against older revs of FLTK.
    • Fixed APBSRun Bug reported by Justin Gullingsrud that prevented the defaults from being set when no molecules were loaded.
    • AIX4 builds continue to use 1.0.10 until we find a way to build 1.1.x with xlC, or else we'll have to start building these with gcc instead.
    • Linux builds assume that the new FLTK versions are built with Xft support, so we must now also link against Xft. Xft doesn't yet exist in non-XFree86 versions of X-Windows, so this is a pretty Linux- and *BSD-centric extension for now. Its probably possible to add the Xft extension to other X implementations, but not something we can assume is available, so for now we'll only enable it on Linux. If we enable it on the others and the shared object is missing, that'll cause runtime failure of VMD which we don't want.
    • Change to using FLTK 1.1.4 for all builds except for AIX, still have to figure out what to do to get past AIX4 build probs on fltk 1.1.4, could theoretically use 1.0.10 if absolutely necessary.
    • Eliminated some old fltk hackage from configure that should be irrelevant now.
    • Learned about the measure minmax function today, used it to replace my manual calculation of the same (APBSRun).
    • Applied Justin's patch to fix the remotedqs queue and a problem getting the maxprocs value.
  • VMD 1.8.3 Alpha 1 (January 22, 2004)
    • Added the OpenGL extension headers I use to the src tree. These are the headers provided by the OpenGL ARB, and should be the reference against which all others are built. The Windows versions of VMD need these in order to use OpenGL extensions, and in particular these are required for OpenGL shading language at this time. More testing will have to be done to see if these headers are safe to use with vendor-provided OpenGL implementations such as on Apple Mac OS X, Sun, etc.
    • Moved various development related info into the doxygen tree.
    • namdrun Removed all references to the config file and namdbin. AutoIMD now passes the command it wants to execute directly to NAMDRun. The ultimately goal is to let NAMDRun run any program such as APBS. Non-trivial Code-size reduction + creation of a general-purpose "uploadFiles" method. autoimd: Use the new namdrun submitJob params got rid of obsolete imdserver variable reinstated the submitJob catch statement to prevent most instances of AutoIMD getting stuck in an unusable state.
    • Use the VMD icon rather than the Windows-provided icon. (next I ought to make our VMD icon look like the one we use on the Mac..)
    • Explanation of remote-running issues.
    • Documentation for the APBS plugin.
    • Current screenshots of the APBS plugin.
    • Added vmdmovie plugin docs to repository
    • Added code for implementing a local viewer model for specular highlights using the fragment coordinate to calculate the camera ray direction to the rendered fragment.
    • Updated molfile plugin docs with current version numbers, add missing page for the CPMD plugin.
    • Improved handling of case where top molecule has no atoms when setting defaults.
    • All volume sets MUST have min and max values from now on. The need for these values is so pervasive that I can't see not calculating these immediately when volumes are loaded. The existing code does this now, so it should be fine to remove the minmax existence tests.
    • Make the "box+isosurface" mode behave better when the style is set to "Solid". I want to keep the "Solid" box possibility as its useful if you want to see if there are atoms outside the coordinate system of the volume data. (similarly to the 3-D texture maps being clamped to black for data outside the volume box..)
    • Added a new option to display both the volumetric box and the isosurface together at once. Made the new option the default.
    • Now that the points isosurface method is much better, make that the default rather than lines. The lines method is actually the slowest of all three in terms of the amount of geometry it generates (up to 18 lines per voxel), so its really only there for people that prefer that representation.
    • updated comments on isosurface rendering code.
    • Much improved implementation of the "points" isosurface rendering mode.
    • Redesign the points isosurface algorithm to be less data-dependent, and less of a hack honestly.
    • protect use of AtomColor::VOLUME with appropriate ifdef.
    • eliminated old volumetric testng code
    • Eliminate the color array from volume sets. There's no real need for this at present, and if we end up needing it, a better way to do it would be to allow vector-valued volume datasets to be loaded, and then use a variant of the new color by volume coloring method to apply a volume containing per-voxel color data as appropriate. Vector-valued volumes offer other interesting challenges. We'll probably cross this bridge soon enough as I progress toward rendering field lines etc per Alek's request.
    • More cleanup and reparameterization of volumetric texturing routines
    • More cleanup, simplification. Added the VOLUME texture mode to the code used by the volumeslice rep.
    • Misc cleanup, get ready to reuse more code, still quite a bit of shuffling to do.
    • Better default handling; molecule is changed only on user input, molecules are scanned and added to the list as they are loaded.
    • further updates to use helper routines, prepare for implementation of some more shared routines for mapping values to color scales, etc.
    • started reorganization of volume texture routines to reuse more of the setup code.
    • Updated comments in various parts of the programmable shading management code. Fixed a bug left from the initial opengl shading language testing code that would have inconsistently enabled the programmable shader.
    • Moved some ELEC options to the Menu.
    • 3DLabs' driver doesn't do ftransform() currently.
    • updated readme with 3-D texturing comment (though not quite done yet) and previous Gromacs fix from Justin
    • Changed the name returned by the DX plugin to DX map since it could contain any type of information since DX is a general viz package.
    • Added Justin's patch to pre-pend the base filename to volumetric data sets, to prevent specific data volumes from becoming anonymous by virtue of identical names being passed from individual plugins. We could make this smarter at a later time.
    • Added a comment about the default VdW radii used by VMD, since we're trying to sort out what radii to use with APBS etc.
    • Fix AtomLexer code for identifying floating point literals. The old code had two problems. The first problem was a malformed regular expression which failed to recognize floating point numbers given in scientific notation. The second problem was incorrect ordering of lexical matching rules which resulted in floating point literals in scientific notation being matched as more general alphanumeric strings rather than as floats. This has apparently been the case since 1995 when the lexical rules for floating point literals were originally written. The new code appears to work, hopefully it has no conflicts with any other assumptions that are made in the lexer rules. This is what alpha/beta testing are for :-)
    • Added frame borders for grid options, general GUI cleanup.
    • All parameters settable by "autoimd set" now live in their own "settings" namespace. Also got rid of the marginally useful "temperature" setting.
    • Got rid of the NAMDRUN::useCustomFile method and incorporated the functionality in autoimd-template.namd, regardless of jobtype. If we need any jobtype-specific changes to the conf file, this will have to be connsidered again, but it seems that we now cover the sprectrum of possible uses of this functionality.
    • Added FAQ item about having trouble compiling because of missing plugin.h
    • fix up devel FAQ line
    • The "jobspec" now contains only what it needs, rather than a copy of the entire server array (which was just broken right now anyways)
    • Replaced the "exec rm" and "exec ln" with the more portable Tcl equivalents, also got rid of ln in favor of cp to avoid rare but possible headaches.
    • Update the ColorID chooser if we're in volume texture mode as well. Next we need to update the items listed in the chooser based on which mode is active.
    • fix uninitialized local variable use for length calcs.
    • Added storage and query methods for keeping track of the selected volume index. Still needs some work, but the user can now select which volume data set is active.
    • Updated the ifdefs for GL_ARB_shading_language_100
    • Reverted NAMDRun to use the old concept of a universal "job specification" which contains _all_ necessary information on how to kill a job, without requiring the calling program to cache any other info. Fixed a bug on the way in which the localdqs::abortJob didnt work Removed some outdated checks to see if a function name submitJobXXX existed and replaced them by appropriate checks on namespace names.
    • Enable the new volume texturing feature by default. We can always turn it back off if it ends up breaking things or destabilizing the builds.
    • Moved volume texturing code outside of the PBC and draw multiple frames loops. Added some comments about the expected behavior of volume texturing when used in concert with PBC and multiple timesteps. Essentially, pbc only applies to structure data at present, and not to volumetric data, therefore the 3-D texture will be colored black outside the defined volume. This seems like a reasonable limitation to start out with for now. We can address this better later on if there's a strong need to make volume textures work with periodic images.
    • Moved 3-D texturing calls outside of the tests for existence of frame data
    • Fix cut/paste mistakes I made pointed out by Justin.
    • Fixed the color scale code to use the MAPCOLOR macro as it should
    • Added a new helper routine for sizing and allocation of 3-D textures from original volume data sets.
    • Windows for plugin and APBS settings are now modal (still needs to be tested on Windows and OSX); default settings restoration now working.
    • Added Justin's color scale volume texture. As he suggests, its about time to clean all of them up so they don't repeat redundant bits of code, etc. Will do that next...
    • Added Justin's color scale min/max code
    • Turn on the Apple ProcAddress code, and start reporting all of the OpenGL driver bugs to Apple now that have I have the means to do so.
    • The 2-D and 3-D texture parameter range determination code is now guarded by hastex2d/hastex3d tests rather than OpenGL major rev tests, which have been moved into the OpenGLExtensions class. This is a must due to recent changes that allow us to use glTexImage3D() on Win32, where the function has to be dynamically looked up and we could concievably get NULL.
    • Updated installed folder version to 1.4
    • Small bug fix: the list of elec statements was showing deleted statements when changing run type.
    • Added link to nascent development FAQ page.
    • Added FAQs for compiling VMD so that they can be removed from the primary VMD FAQ page. Also updated text, answers, etc.
    • Pretty up the Apple ProcAddress code.
    • Fixed the scaling calculations for volume sets that have non-zero origins, the code now appears to correctly calculates the OpenGL plane equations for volume sets that have orthogonal axes. This is only a short-term implementation however, as this implementation still can't handle volumes with non-orthogonal axes yet. Non-orthogonal axes require the use of sheared texture matrices in order to yield correct texture coordinates. This is probably a good enough implementation to allow us to do a lot of the GUI work however.
    • Fixed incorrect memory use summary for volume sets, had underestimated the size of the gradient map components.
    • Half-finished GUI and control code for volume texturing. Will finish the rest of this once the texture matrices work for volumes with non-orthogonal axes.
    • Just use the HSV texture ramp until all of the texture matrix tweaks are in and we're ready to actually let people use this.
    • Added prototype of volume texturing coloring mode
    • Changed 3-D texture array allocations to use calloc() rather than malloc() so they come pre-cleared to black. Makes it easier to debug texture mapping bugs if there isn't random garbage in the padding parts of the array. Added prototype of volume texture coloring mode code.
    • prototype of volume texture coloring mode
    • Added prototype of volume texture display command, needs work on setting the correct texture matrix still..
    • Fixed a bug in the handling of multiple molecules by one elec statement.
    • Use Tcl builtin "cd" instead of the non-working "exec cd" in autoimd.
    • Fixed some quick typos in the initial code that were causing misc. bugs
    • Combined main and editing windows, fixed molecule center bugs, changed internal apbs configuration representation to reflect GUI changes resulting in cleaner, simpler code.
    • Print more information about the loaded volume set. I'm having trouble debugging some really screwy behavior with 3-D texturing on Windows and MacOS X, this ought to help me figure out what's causing their renderers to fail on the large 3-D textures. The built-in "Position" and "Index" textures both work fine on Windows and MacOS X, but largish 4.7 million voxel data sets cause them to choke and render gibberish on the VolumeSlice rep, for some reason. Yet, no errors are reported by OpenGL on either platform. Could be a bug in VMD itself, or it might be odd platform or driver-specific bugs. The problem doesn't manifest itself on Solaris or Linux at all thus far. In any case, this debugging info will be useful in case people start reporting troubles working with large volume sets.
    • Added a few useful volume set messages that will help debug oddities I've found with a couple data sets.
    • New versions and inclusion of namdrun.tcl
    • New AutoIMD after adapting Justin's major job submission changes
    • Package new namdrun implementation along with AutoIMD for now, until it's functionality and name changes.
    • Slowly adding some files that will comprise the new AutoIMD so that there's at least something to do revision control on, as small bugs and issues are fixed. These file are not currently "wired". More soon...
    • Put the light source w values back to 0. Even though this would be handy for use by fragment shaders, OpenGL itself wants directional lights to have a w of 0.0. So its not just used for vector normalization as I had hoped. Perhaps the better solution for this is to make the fragment shader check w and behave similarly to the fixed-function OpenGL pipeline in this regard.
    • set w coordinate of light direction to 1 since it should be normalized already.
    • Several radio buttons replaced with selectors, GUI options given more descriptive names.
    • Changed OpenGL vertex shader position transform to use the ftransform() function which gaurantees results that exactly match the fixed-function OpenGL pipeline.
    • Fully enable 3-D texturing on Windows builds.
    • Take out the GL_SPHERE_SUN test code since this hasn't become a shipping feature. If it returns we can put it back in. It may be that something similar gets implemented using OpenGL shading language or one of several possible textured-quad hacks.
    • Updated the OpenGL code to support glTexImage3D on Windows. Since windows only provides OpenGL 1.1 functions via static linkage, even core OpenGL 1.2 functions have to be accessed by function pointers obtained from calls to wglProcAddress(). This update should allow the use of the existing 3-D texturing features in VMD on Windows finally. With that, I ought to be able to do things like texture MSMS/Surf surfaces and arbitrary reps with volumetric data such as electrostatics, etc, though a bit of GUI is still needed.
    • Reinstated pqr-writing code: plugin now checks for the existence of pqrplugin and uses that if it's available, reverting to the tcl-based file writer if not. Added option for using internal VMD radii or CHARMM-derived radii for pqr files; it's available in the settings window.
    • Removed pqr writing code, as well as the now unecessary radius finding code, since the pqrplugin can handle writing pqr files. Some of this may be useful in the future, if we decide that we don't want VMD proper to deal with PQR radii and charges.
    • Added more comments to the fragment shader so that the staff at 3DLabs and ATI can more easily understand what's going on.
    • Docs for the pqr plugin.
    • Added the pqr plugin to the makefile.
    • Now writing pqr files. Needs to be tested with other programs (e.g., APBS), and default radius setting must be fixed.
    • Plugin for reading pqr files. Write support not yet complete, coming soon.
    • Fixed bug in reading grid length, as pointed out by Justin Gullingsrud.
    • Rewrote the alpha blended transparency code so that it works correctly with both the glGlobalAlphaSUN() extension as well as programmable shaders. It may also be possible to implement alpha blended transparency using a small (maybe 1x1) texture applied to just the alpha channel somehow. The new code isn't smart enough to switch between multiple available implementation strategies yet.
    • Implemented the shader equivalent of the glGlobalAlphaSUN() extension. The opacity value is provided by the 'vmdopacity' uniform value sent in by VMD, and is set in the final fragment value as the last step in the fragment shader.
    • Added VMD opacity as a uniform accssible by shaders. This ought to allow alpha-blended transparency implementation in the shader code.
    • Replaced the hard-coded light on/off state with access to a new 'vmdlightscale' uniform provided by VMD. At present it is only used to switch lights on and off, but it could also be used to scale light intensity. At present the scaling technique is used because it works on the current ATI drivers whereas branching did not.
    • Added an OpenGL uniform state variable to provide shaders with light on/off state (could also be used to scale light intensity, though that isn't used presently).
    • Protect references to the shaders member with appropriate ifdefs.
    • More fragment shader cleanup
    • Misc cleanup and commenting of the vertex and fragment shaders. Changed ifdefs in the main source so they aren't tied to a particular model of video card, but rather an individual feature/workaround that's required.
    • Improved the formatting of the texture capability startup messages.
    • Make the shader linkage messages displayed at startup format a little more nicely so they are easily seen among the many other startup messages.
    • Added fog mode tests into the fragment shader, to track the active VMD fog settings in the same way the fixed-function OpenGL pipeline does.
    • Set an OpenGL uniform for the fog mode so that shaders can implement fog according to the VMD settings.
    • Added code to implement glUniform1i() to setup integer uniforms for shaders.
    • Fixed various problems in the initial fragment shader fog implementation. The three modes appear to be similar to what OpenGL does now, but the code still lacks a way to derive the fog mode from VMD. Need to add some new uniform state variables to control fog and light state from VMD itself.
    • Separated out the 3DLabs-specific clamp workaround from the other fragment shading computations, added some preliminary code for implementing fog and depth cueing, and cleaned up some comments.
    • Check more return codes in the OpenGLShader class to handle errors more smoothly.
    • Added safety checks so that if shader source files fail to load we gracefully continue, disabling programmable shading features.
    • Made the OpenGL shader initialization code smarter. It now checks to see if the required extensions exist before creating shader objects, and it will delete the shader objects in the case that a shader fails to compile at run-time. The new code should allow a binary with programmable shading to run on a normal machine in fall-back mode.
    • Added comments on the vmdlightfactor array and potential improvements.
    • Replaced fragment shader .xyzw notation with array subscript notation to make it loop-friendly down the road.
    • Replaced a few calls to clamp() with max() which ought to save a few clock cycles. Also improved some of the card-specific ifdefs.
    • More cleanup in the VMD fragment shader.
    • Updated the VMD OpenGL shader with new code that uses program-defined uniform state variables to acquire lighting and material parameters. This code still doesn't implement depth cueing or user-defined clipping planes, but it is getting very close to being usable. The current implementation is limited by the number of instructions allowed in the fragment shader. The ATI Radeon 9600 can handle a little more complex fragment shader than the 3DLabs Wildcat VP 870 will, at least by instruction count. The specular power "shininess" variable must be a constant on the 3DLabs card as they don't implement pow() on variable exponent arguments yet.
    • Prefix all OpenGL shader uniform variables with "vmd" so its more obvious that they are uniforms that come from VMD and not from another code or from OpenGL itself. This should help make the shaders more readable.
    • Fixed the order of clamping operations to match what the standard OpenGL pipeline does.
    • Updated OpenGL shader support with code to copy OpenGL material state into a Uniform named "matparms" which can be referenced by the vertex and pixel shaders. Also eliminated the previous ambient lighting hack so that programmable shading is either always on or always off for the time being. This will need to become a display setting similar to antialiasing.
    • Added the 1, 2, and 4 value Uniform parameter routines to the OpenGL extensions class.
    • Force normalization of the light direction. This may in fact be the cure to a long standing difference in behavior between SGI's OpenGL behavior when GL_NORMALIZE is enabled versus GL_RESCALE_NORMAL. The other vendors must be normalizing the light position when directional lighting is enabled whereas SGI may not be. Need to re-test the logic in the code for GL_RESCALE_NORMAL to see if it can be enabled for SGI now as well. Discovered this problem while testing OpenGL shading language implementation.
    • Added code to set lighting state via OpenGL shading language uniforms, until references to gl_LightSource[n].position work correctly.
    • Added code to register program defined Uniforms for OpenGL shaders to allow VMD to pass lighting state into shaders until such time as available video drivers correctly implement references to the OpenGL light state via gl_LightSource[].position etc.
    • Option windows now close when the main window is iconified or withdrawn. Fixed a bug when adding ELEC statements.
    • Default values are reinitialized every time the main window is deiconified, they should match the top molecule every time the plugin is launched (since VMD "iconifies" plugins instead of destroying them).
    • Seperated initialization code from window-launching code, so it'll be easier to handle iconification and deiconification of the main window.
    • Successfully tested the the joystick button code.
    • Added some code for translating Win32 Joystick button presses into VMD Aux events, though presently disabled until I can test it with a >= 2 button joystick. Long-term it might be better if event classes were dynamically extensible, so that each device could have its own class name. This would make it possible for a user to make different button assignments for each device, i.e. "joy1", "joy2", "joy3" events. Perhaps the device itself ought to supply the class tag as a string. The only devices that would really have to be consistent would be hard-coded items like the keyboard and the mouse. All other devices could be whatever they want. Have to think about that a bit more. Maybe this could be merged with the Tool code in a similar way.
    • eliminate ifdef around the msdecdelayhack code, since its nicely marked with XXX and is enabled at runtime.
    • eliminate unused branch of charge color code.
    • Massive update of copyright and version control headers (12/31/2003)
    • mg-auto default values seem good enough to make it the default calculation type, per Nathan Baker's suggestion.
    • Moved srfm from the mg-manual-specific options, because it's not.
    • Defaults and output for mg-para.
    • Calculating correct coarse/fine grid lengths.
    • Consolidated elec statement variables across elec calculation types -- leads to intuitive behavior when switching between types.
    • Actually handling mg-auto in the output file.
    • Added const to lval/rval pointers since they aren't modified.
    • Added comment to eval_stringfctn() about reason for flags being copied. It'd be nice to get rid of that extra flags copy, but we'll have to check that all of the string functions behave correctly in order to do that. Getting rid of that flags copy could be another performance boost.
    • Misc cleanup in eval_stringfctn().
    • Eliminated multiplication in the eval_mathops() loops, replaced by binary AND operator and setting lincr/rincr to 0 or all 1s as appropriate.
    • Eliminated some indirection in the eval_mathop() loops
    • Misc formatting updates to eval_mathop before I rewrite stuff some more.
    • Misc formatting and cleanup of unnecessary scope protecting for loop
    • Misc formatting changes
    • Justin's patch for improving the performance of atom selections. The patch makes "name CA" perform 3-5 times faster on the 1e79 structure. The new code replaces the use of the JString array with char **, which eliminates various resulting string copies in AtomSel lookup routines, and gets rid of the extend() function by using more intelligent indexing arithmetic.
    • Very minor (trivial, even) GUI cleanup.
    • updated to new version number etc.
    • updated readme to new version number, features, etc.
    • Added trajectory step size control to allow user's to skip frames when making trajectory movies. Better yet would be to allow frame doubling etc as well, but first things first.
    • Atomselection controls are exposed in the GUI.
    • Added apbs plugin to vmd init script.
    • Revved version number to 1.8.3a1 since we're theoretically going to make another release in a month or maybe two.
    • Now using ATOMSELECTIONS to write pqr files! Cleaned up write_mol function so that it only worries about writing molecules.
    • Rewrote several flag array clearing loops that were clearing memory in reverse order, replaced with calls to memset(). Also fixed a few more comment/formatting things.
    • Misc formatting changes.
    • Eliminate last mentions of 'residindex' since it no longer exists.
    • Justin's patch to eliminate the string-based resid storage, replacing remaining spots that use string based representation with use of the integer resid instead. Since the plugin API returns integer resids anyway, the possibility of having string resids has been eliminated, so there's no longer a reason to keep both string and integer representations around any more. The coloring, structure building, and label code are updated to use the integer representation instead.
    • Now checking for the radii file before trying to use it.
    • Properly installing radii.dat.
    • Added a commented out line that fixes the build settings to work with MacOS 10.3. Could probably still use a number of tweaks, but its a good first step. 10.3 builds need a bit more testing before I commit to upgrading the "official" build box to 10.3.
    • Eliminated explicit framework search path inclusion of the system directories. This caused build problems on 10.3 boxes, which are now shipping with their own Tcl/Tk 8.4.x libraries. We have to make sure VMD links against our own Tcl/Tk libs so that they work with the bundle private frameworks. Even eliminating this problem, building on 10.3 requires a few other changes to make the private frameworks continue to work.
    • Turn off OpenGL error checking by default. By the time 1.8.2 has been out for a while we'll have heard if there's any circumstance in which an error occurs on any hardware that presently exists. This will improve performance when VMD is being remote-displayed.
    • Eliminate mention of hard-coded integer return codes in comments, only mention symbolic error constants so we don't lead people to use integers in their source code. (nothing is less readable than code that returns random negative numbers, particularly if not well commented in the first place)
    • Don't return integers, but always use DEFINEs.
    • Fixed bug as reported by Josh Ward -- uncovered a new bug caused by fgets.
    • "Bug" turned out to be the result of unnecessarily verbose warning messages.
    • Committed Justin's patch for the out-of-range values problem that Tim Isgro encountered while writing PDB files containing far-flung waters from a DCD of his simulation.
    • Fixed the apbsrun headers.
    • Adding APBS Run to the standard plugins.
    • Fixed a bug that was segfaulting VMD when the elec keyword was changed; better handling when apbsrun is executed and no molecules are loaded.
    • Added OK/Cancel buttons to settings window.
    • Incorporated Nathan Baker's suggested renaming of "ELEC statements" to "Individual PB calculations". Fixed a bug that prevented APBS from running if the PB calculation window was open. Added a checkbox in the settings window that prevents the apbs executable from actually running.
    • Updated AutoIMD refs a bit, to reflect changes in VMD 1.8.2 and to improve clarity
    • Defaults are handled differently, mesh lengths are set to 1.5 times the molecule dimensions as per Nathan Baker.
    • Changing keywords in the elec statement editing window changes the options displayed. Cleaned up a few bugs, APBS cannot be started if it's already running.
    • Bug fix: AutoIMD now correctly reports invalid "imdfixed" atom-selections
    • AutoIMD: Renamed "Simulation Mode" to "Equilibration Mode"
    • Fixed the behavior of mdio_readbox() when it encounters zero-length periodic cell dimensions. Rather than returning an error and causing trajectory loading to abort, the new code sets the periodic cell side lengths to zero, angles to 90 degrees, and returns a success code. This bug and corresponding patch were submitted by Justin.
    • Running APBS on a filehandle, better handling during APBS runs -- not thoroughly tested.
    • Added settings window for editing working directory and apbs binary location.
    • Now writing pqr files readable by APBS.
    • New version number
  • VMD 1.8.2 final release (December 5, 2003)

Please email any questions to vmd@ks.uiuc.edu.