Change History
7.0 Changes
September 24, 2001
This is a list of the changes in the LightWave 7.0 release that affect the SDK. The
changes include a new Layout tool class and two new globals, as well as extensive
enhancement of many of the info globals defined in lwrender.h.
Layout supports 51 new commands of its own plus another 46 that it now propagates to the
various editors.
One change and one bug fix were made to the SDK for the LightWave 7.0B patch. These have been marked here with "[ B ]".
Structures associated with the ShaderHandler class and the Preview Functions and Item Info globals were changed, but the shader version number and the global name strings weren't incremented. In all cases, the changes involve members added to the ends of structures, so they have no effect on existing plug-ins. New plug-ins can use the Product Info global to verify that they're running in at least LightWave 7.0 before they use the new structure members.
LWCUSTOMOBJ_VERSION(CustomObjHandler) has been incremented.- A
quadfunction for drawing solid quad polygons has been added to LWCustomObjAccess. - Quads can be image-mapped using new
setTextureandsetUVsfunctions.setTextureaccepts a square image inGL_RGBAformat, andsetUVssets the UV coordinates at the corners of a quad. - The
textfunction accepts a new justification argument, 0 for left, 1 for center, 2 for right. - The color argument to
setColornow takes a fourth array element for the color's alpha level. - Since custom objects can draw semi-transparent primitives,
viewPosandviewDirvectors have been added so that plug-ins can depth-sort their primitives.
- The header now defines
_WIN32_WINNT.
LWDISPLACEMENT_VERSION(DisplacementHandler) has been incremented because of changes to LWMeshInfo.
LWCHANNELINFO_GLOBAL(Channel Info) has been incremented to "Channel Info 2".serverApplyandserverRemovefunctions have been added to LWChannelInfo. Also added wereserverFlagsandserverInstancefunctions that return the flags and instance data of a channel handler.- A new event code,
LWCEVNT_VALUE, has been added to signal changes to channels.
- This is a new header file containing the definition of a new plug-in class, LayoutTool.
- An
LWEVNT_SELECTevent code has been added (MasterHandler).
- A
polFlagsfunction has been added to LWMeshInfo. pntVIDGetandpntVPIDGetfunctions have been added to LWMeshInfo. These are likepntVGetandpntVPGet, but they don't require a preceeding call topntVSelect, making them more reliable when called from threaded code.- Because of LWMeshInfo changes,
LWOBJECTFUNCS_GLOBAL(Scene Objects) has been incremented to "Scene Objects 4".
- A new global (Layout Monitor) has been created to
provide a standard monitor for Layout. The server name is
LWLMONFUNCS_GLOBAL.
- A new global (Context Menu) has been created to
provide context menus in Panels. The server name is
LWCONTEXTMENU_GLOBAL. LWPANELS_API_VERSION(Panels) has been incremented. Panels using the newPANF_NOBUTTflag will not have Continue or Cancel buttons.PANF_RESIZEpanels can be resized.
- A
setPresetfunction has been added to LWPreviewFuncs (Preview Functions).
- Due to an error,
LWSCENEINFO_GLOBAL(Scene Info) was defined as "LW Scene Info 2" in the public version oflwrender.hreleased with LightWave 6.5B. It should have been "LW Scene Info 3". The correct definition has been restored in the LightWave 7.0 headers. - Four functions (
flags,lookAhead,goalStrengthandstiffness) have been added to LWItemInfo (Item Info). LWOBJECTINFO_GLOBAL(Object Info) has been incremented to "LW Object Info 4".- Eight new functions (
boneSource,morphTarget,morphAmount,edgeOpts,edgeColor,subdivOrder,polygonSizeandexcluded) have been added to LWObjectInfo. Theexcludedfunction returns TRUE if the object has been excluded from the given light. - The LWObjectInfo
flagsfunction returns new flagsLWOBJF_UNAFFECT_BY_FOG,LWOBJF_MORPH_MTSEandLWOBJF_MORPH_SURFACES. LWBONEINFO_GLOBAL(Bone Info) has been incremented to "LW Bone Info 3".- Four new functions (
strength,falloff,jointCompandmuscleFlex) have been added to LWBoneInfo. - The LWBoneInfo
flagsfunction returns new flagsLWBONEF_JOINT_COMP,LWBONEF_JOINT_COMP_PAR,LWBONEF_MUSCLE_FLEXandLWBONEF_MUSCLE_FLEX_PAR. LWLIGHTINFO_GLOBAL(Light Info) has been incremented to "LW Light Info 3".- Eight new functions (
falloff,projImage,shadMapSize,shadMapAngle,shadMapFuzz,quality,rawColor,intensity) have been added to LWLightInfo. - The
coneAnglesfunction now includes a time argument (since the angles can be enveloped) and returns values in radians rather than degrees. - A time argument has been added to the LWLightInfo
rangefunction. - The LWLightInfo
flagsfunction returns new flagsLWLFL_FIT_CONEandLWLFL_CACHE_SHAD_MAP. LWINTERFACEINFO_GLOBAL(Interface Info) has been incremented to "LW Interface Info 3".- The LWInterfaceInfo
itemColorfunction returns the color used to draw the item in the interface. The newboxThresholdfield contains the bounding box threshold, andalertLevelcontainsLWALERT_BEGINNER,LWALERT_INTERMEDIATEorLWALERT_EXPERT.
replacement_percentageandreplacement_colorfields have been added to LWShaderAccess (ShaderHandler). Use these to set the surface color when your shader calculates lighting and you therefore don't want LightWave to overwrite your color.- [ B ]
reflectionBlurandrefractionBlur. fields have been added to the shader access structure.
- Two new channel definitions for reflection and refraction blurring have been added (Surface Functions).
- A
textfunction andpxScale(pixel scale) field have been added to LWWireDrawAccess.
LWTEXTUREFUNCS_GLOBAL(Texture Functions) has been incremented to "Texture Functions 2", and four new functions have been added to LWTextureFuncs.texturereturns a texture ID, given the ID of a texture layer.name,typeandcontextreturn information about a texture.
- Due to an error, the public version of
lwvparm.h(Variant Parameters) released with LightWave 6.5 and 6.5B contained an incorrect definition of the LWVParmFuncsgetEnvfunction. This definition showedgetEnvtaking a single argument and returning a single envelope ID. The correct definition showsgetEnvreturning void. It writes up to three envelope IDs in an array passed as the second argument. This definition has been restored in the current header.
- The file written by
SaveCommandListnow includes Graph Editor, Image Editor and Surface Editor commands, and Layout now dispatches those commands to their respective components. - The
Refreshcommand now defers its work until the system is idle, for improved interactivity. ARefreshNowcommand has been added for cases in which synchronous updates are desired. The newRedrawandRedrawNowcommands are similar except that they don't cause motions and geometry to be recomputed. - The
PluginOptionscommand has been replaced byMasterPlugins, to reflect the fact that the name of the panel it invokes has changed in the interface. - Other new commands:
RecentScenes ItemActive PolygonSize ReplaceObjectLayer ItemLock UnaffectedByFog SquashTool ItemVisibility BoneStrengthMultiply ShowTargetLines ItemColor BoneMinRange BoundingBoxThreshold RadiosityType BoneMaxRange VIPER RecentContentDirs BoneJointComp Presets AlertLevel BoneJointCompParent EnableDeformations AddButton BoneJointCompAmounts MatchGoalOrientation Generics BoneMuscleFlex KeepGoalWithinReach ClearAudio BoneMuscleFlexParent LimitH LoadAudio BoneMuscleFlexAmounts LimitP PlayAudio LightQuality LimitB RayTraceTransparency ShadowMapFuzziness HStiffness LoadObjectLayer ShadowMapFitCone PStiffness MorphMTSE ShadowMapAngle BStiffness MorphSurfaces
- The new
setcontentcommand sets the content directory.
- New (or newly available) Graph Editor commands include:
GE_OpenWindow GE_DeleteSelKeys GE_MoveKeys GE_SetWindowPos GE_ReduceKeys GE_CreateExpression GE_SetWindowSize GE_LockKeys GE_AttachExpression GE_ApplyServer GE_CopySelKeys GE_AttachExpressionID GE_RemoveServer GE_PasteKeys GE_SetGroup GE_GetLayoutSel GE_LeaveFootprints GE_SetEnv GE_SelectAllCurves GE_PickupFootprints GE_SetEnvID GE_FilterSelection GE_BacktrackFootprints GE_LoadExpressions GE_BakeCurves GE_CopyTimeslice GE_SaveExpressions GE_SnapKeysToFrames GE_PasteTimeslice GE_ClearBin GE_SelectAllKeys GE_MatchFootprintAtFrame
- The newly available Image Editor commands are:
IE_OpenWindow IE_SetClipTable IE_SetWindowPos
- The surface system supports a new
Surf_SetBakerImagecommand.
Miscellaneous
- When the user changes the item order, plug-ins are now notified of the new IDs only
after the item data have actually been rearranged. Globals that take item IDs as arguments
should now behave correctly when called from within a handler's
changeIDcallback. - In LWSN, master plug-ins now receive a
LoadScenecommand event at the end of scene loading. Since the issuing of commands is not supported in LWSN, the LWMasterAccess structure contains dummy functions in this situation. - Attempts by plug-ins to trace rays during Wireframe or Quickshade renders were causing crashes. This has been fixed (the ray tracing functions now always return -1 in those modes).
- The Directory Info global now returns the correct result for "Content" in Modeler.
- Low and high angles are now returned by the Item Info
limitsfunction even if the corresponding limits are turned off. - A condition that could cause mesh info queries to fail after an object is cleared from the scene has been fixed.
- All enabled environment plug-ins are now evaluated (although this can be a waste of time since each one will overwrite the results of the previous one).
- The
PreviousItemandNextItemcommands now skip over locked items. - When Adaptive Sampling is on and Antialiasing is off, the
minSamplesPerPixelfrom the Scene Info global is now zero, since some pixels may be totally skipped. - The Item Info
controllerfunction now returns correct values. - Button names specified by generic plug-ins are now used if present.
- The envelope commands are now safe to use when there is no current item.
- Object serial numbers are now computed during rather than after cloning so that plug-ins can get the final object names as they are created.
- Since they may draw semi-transparent primitives, custom objects are now processed after all other 3D elements (including the grid).
- [ B ] During scene file loading, newline characters after plug-in server names were not being read before the plug-ins loaded their data. This has been fixed.
6.5B Changes
May 8, 2001
This is a list of the changes in the LightWave 6.5B patch that affect the SDK. As with previous changes, these in most cases won't require you to rewrite or recompile your existing code.
Structures associated with the CustomObjHandler class and the Particle Services, Object Info and Interface Info globals were changed, but the custom object version number and the global name strings weren't incremented. This was discovered too close to the release of 6.5B to be remedied. In all cases, the changes involve members added to the ends of structures, so they have no effect on existing plug-ins. New plug-ins that need to distinguish between the old and new structures can use the program build numbers returned by the Product Info global.
- A
textfunction was added to LWCustomObjAccess (Custom Objects). - Added
LWVIEW_SCHEMAto the codes for theviewfield of the LWCustomObjAccess structure. - Added
LWCOF_SCHEMA_OKto the flags that can be returned from the LWCustomObjHandlerflagscallback
- Added preprocessor symbols for some of the file type strings used with the File Type and Directory Info globals.
- Added
LWEVNT_TIMEto the event codes that can be passed to the Master classeventcallback. This event notice is sent whenever the frame slider is moved, which includes playing the scene, but not playing back a preview.
- Bracketed
MIN,MAXandABSmacros within preprocessor conditionals so that they won't conflict with versions of the macros that might be defined elsewhere.
- Incremented
LWOBJECTFUNCS_GLOBAL(Scene Objects) to "Scene Objects 3" - Added
userNameandrefNamefunctions to the LWObjectFuncs structure. These return, respectively, the name of the object as seen by the user, and an unambiguous internal name for the object that can be used to refer to it in commands.
- Added LWValPointer to the data types in the LWValue union used by Panels. Besides being more type-friendly, this change is in anticipation of 64-bit operating systems on which ints and pointers may not be the same size.
- LWValPointer used in the definitions of the
CON_PAN,CON_PANFUNandCON_SETEVENTmacros.
- The
LWPSB_ENBbuffer (Particle Services) now encodes three states (LWPST_DEAD,LWPST_ALIVE,LWPST_LIMBO) instead of two (on/off). - Added
LWPSB_CAGE(collision age) buffer containing the time since the last collision. - Added
remParticlefunction to LWPSysFuncs.
- Incremented
LWSCENEINFO_GLOBAL(Scene Info) to "LW Scene Info 3". - Added
numThreadsto LWSceneInfo. - Added
LWROPT_PARTICLEBLURoption for the LWSceneInforenderOptsfunction. - Added
patchLevelandmetaballResfunctions to LWObjectInfo (Object Info). - Added
LWLFL_NO_OPENGLto the flags for LWLightInfo (Light Info). - Incremented
LWCAMERAINFO_GLOBAL(Camera Info) to "LW Camera Info 2". - Added
flags,resolution,pixelAspect,separation,regionLimits,maskLimitsandmaskColorfunctions to LWCameraInfo. - Added
LWCAMF_STEREO,LWCAMF_LIMITED_REGIONandLWCAMF_MASKcamera info flags. - Added
itemVisfunction anddisplayFlagsandgeneralFlagsfields to the LWInterfaceInfo (Interface Info) structure.
- Added
LANGID_KOREANdefinition.
- Added
itemNameto LWTxtrParamDesc (Texture Functions)
- Added
XPTAG_NULLdefine, which replacesNULLin the Xp macros for XPanels.
- The arguments to the new
AddPosition,AddRotationandAddScaleare relative rather than absolute. These are useful for multiple selections and should also improve the reusability of scripts generated by macro recorders. - An
EditServercommand has been added which opens a plug-in's interface. The syntax is the same as theRemoveServercommand, with class name and index arguments. If the index isn't specified, the last plug-in in the list is used, making it easy for a script to add a plug-in and immediately open its interface without having to know its index. - The
AutoConfirmcommand now recognizes an argument value of -1, which will automatically respond negatively to all Yes/No or OK/Cancel dialogs. - The
AddEnvelopeandRemoveEnvelopecommands now operate on all three parts of a color envelope as a unit (".R", ".G", and ".B" suffixes are ignored). - Other new commands:
ShadowExclusion GradientBackdrop ParentInPlace NoiseReduction ZenithColor FractionalFrames RadiosityIntensity SkyColor PolygonEdgeFlags CausticIntensity GroundColor BoneFalloffType VolumetricRadiosity NadirColor ShadowMapSize DynamicUpdate
- The new
mesheditcommand allows plug-ins to execute MeshDataEdit class plug-ins.
- The
Surf_SetSurfcommand was using the display name rather than the filename to identify objects. This has been corrected.
Miscellaneous
- The mesh info
pntBasePosandpntOtherPosfunctions obtained from the Object Info global now provide better information for frozen meshes. The revisedpntBasePosreturns the same point positions that Layout uses for object coordinate texture mapping. These are completely undeformed positions in the case of regular polygons and subpatches, and positions at freezing time for metaballs and partigons.pntOtherPosnow returns the actual world coordinates used by Layout. The new behavior of these functions should remove the need to use "helper" displacement plug-ins to gather vertex positions. - An Alert Level popup has been added to the General Options panel. At the Intermediate
and Advanced levels, messages displayed using the message
global's
info,warnanderrorfunctions may appear in the status line rather than in separate dialog windows. - The
changeIDhandler callback is now called when all lights or all cameras are cleared at once. - The
illuminateraytracing function was returning 0 if the position was partially shadowed, which can happen when the light is a linear or area light. The return value is now 1.0 in such cases, and the partial shadowing is accounted for in the returned color. - The
sourcemember of the LWVolumeAccess structure is now set to the camera ID for directly viewed volumetrics, to the light ID for shadow rays, and toLWITEM_NULLfor other types of rays. - The Z buffer given to image filters no longer has unfilled holes when unenhanced antialiasing is used with adaptive sampling and without motion blur or depth of field.
- Previously, if an object replacement plug-in tried to replace an object that had been cloned with an object of the same filename, the change was ignored, since two objects with the same name weren't allowed to have different geometry. This has been fixed by freeing and replacing all instances of the object in such cases, just as manual object replacement does.
- Objects loaded by object import plug-ins no longer cause a crash when the scene is later saved.
- Custom object plug-ins were unable to draw points unless one of the other drawing functions had been called first. This has been fixed.
- Custom objects using the
LWCSYS_ICONmode are no longer affected by object scaling. - When the Item Info
paramfunction was called during a custom object plug-in'sevaluatefunction, and FSPE was turned on, the interactive (non-keyframed) position of the item being queried could be forgotten. This has been fixed (but it's generally more efficient for plug-ins to callparamduring their newTime functions). - When an object is cloned, the clones are now named earlier in the copying process so
that custom object and displacement
plug-ins can look up the names from inside their
createfunctions. - The viewports are now updated whenever a custom object, displacement or item motion plug-in is added, edited, or removed.
- Keyframe shifting and scaling now work by looping through all members of the envelope group of each affected item, including envelopes added by plug-ins.
- Manual operation of the envelope (E) button for color settings is now properly recorded in the command history.
- Item selections made by clicking in the viewports or the Scene Editor or by using the current item popups are now recorded in the command history so that master plug-ins are notified when these selection changes occur.
- Master plug-ins whose
flagsfunctions returnLWMAST_LAYOUTare no longer cleared with the scene. - The MeshEditOp
pntVMapfunction no longer crashes when passed polygons created during the same mesh edit. - The MeshEditOp polygon creation functions no longer crash when passed null vertex pointers. They instead return an error.
6.5 Changes
November 4, 2000
This is a list of the changes in the LightWave 6.5 patch that affect the SDK. In most cases, the changes won't require you to rewrite or recompile your existing code. The most significant exception is for variant parameters, which have been updated to support parameters modulated by textures.
- Definitions of variant parameters have been moved to a new header, lwvparm.h.
- New buffers (
LWBUF_REFL_RED,LWBUF_REFL_GREENandLWBUF_REFL_BLUE) have been added to the list of buffers available to image filters and pixel filters. These contain the RGB levels for reflections calculated by raytracing and environment mapping.
LWIMAGELIST_GLOBAL(Image List) has been incremented to "LW Image List 3".- Added LWImageList functions:
hasAlpha,alpha,alphaSpot,evaluate.
- Added File I/O type
LWIO_BINARY_IFF. This type supports 4-byte chunk sizes for block reading and writing of IFF files.
LWMESHEDIT_VERSION(MeshDataEdit) has been incremented to 4.- Added MeshEditOp functions
pointVPGet,pointVEval,pntVPMap. These are for per-polygon vertex mapping. - The second argument to
initUVis now float * rather than float[2] so thatinitUVcan be used to initialize per-polygon UVs.
- Added vertex map types for color vmaps:
LWVMAP_RGBandLWVMAP_RGBA. - Added LWMeshInfo function
pntVPGetfor per-polygon vertex mapping.
LWOBJECTIMPORT_VERSION(ObjectLoader) has been incremented to 3.- Added LWObjectImport function
vmapPDVfor per-polygon vertex mapping. - The second argument to
pivotand the third argument tovmapValare now const.
- New
illuminatespecial item typesLWITEM_RADIOSITYandLWITEM_CAUSTICSallow callers ofilluminateto get information about global illumination at a spot. LWOBJECTINFO_GLOBAL(Object Info) has been incremented to "LW Object Info 3".- The texture IDs of the displacement and clip maps of each object can now be obtained
using the new
dispMapandclipMapObject Info functions. LWINTERFACEINFO_GLOBAL(Interface Info) has been incremented to "LW Interface Info 2"- New Interface Info function
schemaPosreturns the positions of items in schematic viewports. (Use the newSchematicPositioncommand to set them.) - New Interface Info field
dynaUpdatecontains Layout's Dynamic Update setting, which can beLWDYNUP_OFF,LWDYNUP_DELAYEDorLWDYNUP_INTERACTIVE. - Added a Time Info global that returns the frame and time for the image currently being rendered.
- ServerUserName has been replaced by ServerTagInfo, which among other things allows plug-ins to specify how they should be added to LightWave's menu system.
- New LWShelfFuncs function
addNamedPreset.
LWSURFACEFUNCS_GLOBAL(Surface Functions) incremented to "Surface Functions 2".- Added surface channel
SURF_VCOLfor color vertex maps. - Added Surface Functions routines
getColorVMapandsetColorVMap.
LWTEXTURE_VERSION(ProceduralTextureHandler) has been incremented to 5.- Texture class plug-ins can now return RGBA levels, in support of which added
LWTextureAccess field
txRGBA[4], LWTextureHandler flagLWTEXF_SELF_COLORand LWTextureAccess flagLWTXEF_COLOR.
- New LWTxtrParamDesc flag
LWGF_AUTOSIZEfor gradient textures that can automatically adjust their min and max.
LWTXTREDFUNCS_GLOBAL(Texture Editor) has been incremented to "Texture Editor 2".- New callback type
LW_GradAutoSizeFuncfor gradient autosizing. - New Texture Editor functions for supporting multiselection (
selectAdd,selectRem,selectClr,selectFirst,selectNext) and automatic ranges for gradient textures (setGradientAutoSize).
- New header (variant parameters were formerly defined in lwenvel.h).
- Added
LWVPDTtexture data types. - Added arguments (texture context, event callback, plug-in name and userdata) to the
LWVParmFuncs
createfunction. - Added a micropolygon argument to
getValfor texture evaluation. - New functions
getState,setState,editTex,initMP,getEnvandgetTex.getStateandsetStatereplace thehasEnvandsetEnvStatefunctions, which have been removed. The new functions support textures in addition to envelopes.
- Added
XpENABLEhint (XPanels).
SaveSceneCopyandSaveObjectCopysave a copy of the scene or the object in a file with a new name without affecting the current name in Layout.PreviousSiblingandNextSiblingallow easy navigation among a set of items that share the same parent.AddEnvelopeandRemoveEnvelopeallow plug-ins and scripts to "press the E button" for a Layout parameter. Each command takes a channel name as its argument (the same names that appear when channels are expanded in the Scene Editor).- By passing
AutoConfirman argument greater than zero, plug-ins and scripts can use this command to automatically respond affirmatively to all confirmation requesters before commands are issued to clear items, etc. This feature should be used with care, and it should be turned off by passing it a zero before control is returned to the user. EditPluginsopens the new dialog for displaying, adding, and deleting servers.SaveObjectandSaveTransformednow accept a filename argument.CommandInputnow accepts a command argument.MaskPositionallows plug-ins and scripts to set exact pixel values for the left, top, width, and height of the camera mask. One potential use is to create scene files for portions of a frame which can be rendered separately and then perfectly recombined by summing the resulting images (assuming the mask color is black).SchematicPositionsets the X and Y of the current item's schematic node. This and theschemaPosfunction added to the Interface Info global allow plug-ins to arrange items in Schematic viewports.Antialiasingtakes an argument from 0 to 4, as in scene files.- Other new commands:
TopView CacheRadiosity RayTraceShadows BottomView CacheCaustics RayTraceReflection BackView EnableVolumetricLights RayTraceRefraction FrontView RadiosityTolerance MorphTarget RightView EnhancedAA IncludeLight LeftView FogType ExcludeLight SchematicView FogMinDistance PolygonEdgeColor CenterItem FogMaxDistance CacheShadowMap FitAll FogMinAmount MaskColor FitSelected FogMaxAmount LightIntensityTool ShowSafeAreas FogColor EnableVIPER ShowFieldChart AddPartigon
- The
revertcommand reloads an existing object file.
Miscellaneous
- When items are moved, rotated, or scaled, using either the mouse or the numeric fields, the appropriate position, rotation, or scale commands are now added to the command history, which in turn generates events for master plug-ins.
- The
newTimecallbacks of shaders, volumetrics, and pixel filters are now called only after all geometry has been finalized. This fixes a problem that occurs when plug-ins of one of those classes depend on the results of displacement plug-ins. - There can now be any number of custom object plug-ins per object, and they are added using a server pane rather than a popup.
- RGB and alpha image savers are now recorded in scene files by name rather than by index, preventing problems caused by different machines having different saver lists. Image saver indices in existing scene files will continue to work as before.
- When the
newTimefunctions of shaders, environment plug-ins, volumetric plug-ins and lights, pixel filters, custom object and displacement plug-ins are called, inverse kinematics have already been computed. Therefore, the Item Infoparamfunction now simply returns existing vectors in such cases (assuming the time argument matches the current time), allowing those plug-ins to properly account for IK. - When a subpatch object is being deformed and its Subdivision Order is later than the
deformation, the interior patch points are no longer deformed. In particular, the
evaluatefunctions of displacement plug-ins will no longer be called for the patch points.
6.0B Changes
May 11, 2000
This is a list of the changes in the LightWave 6.0B patch that affect the SDK. In most cases, the changes are additions to global services that won't affect the operation of existing code. In some cases, however, you will have to recompile, and in a few, it may be necessary to rewrite a small amount of your code that was written prior to the release of the patch.
- Added
serverfunction to the Channel Info global.
- Added
LWBUF_MOTION_XandLWBUF_MOTION_Yfor vector blur feature. The buffers will be filled in with the image coordinate movement at each pixel during the time the shutter was open. For example, if part of an object has moved 11 pixels right and 6 pixels down since the previous frame, and the blur length is 50%, the motion buffers will contain 5.5 and 3.0 in that part of the frame. Camera motion is also taken into account. This information can be used by filters to perform a Photoshop-style vector motion blur.
- Generic plug-ins are now first activated with a
version number of 4. If that doesn't work, the
saveScenefunction is replaced with one that saves old format scenes, and version numbers 3, 2, and 1 are tried.
- Added new dialog types to Message Functions global, incremented the service name. (3/23)
- The new Locale Info global has been implemented (but the old Language ID global is still supported as well).
- Added
sceneLoadandsceneSaveto Image List global, now "Image List 2". - Changed LWImageID to LWPixmapID in Image Utility functions.
- Added
LWMAST_LAYOUTtype for masters that survive scene clearing.
modeandvmapfunctions added to the state query global, incremented the service name.
- fixed
PAN_SETDATA,PAN_SETDRAW,PAN_SETKEYS; touched upPAN_SETH,MOVE_PAN; addedPAN_SETW.
- Changed
closeto accept void arg.
- New API.
- Removed obsolete functions
setDraw,setMesh,remParticle.
- Only items matching the current edit mode are now eligible to have their
LWITEMF_SELECTEDbit set by the Interface InfoitemFlagsfunction. - Added
LWIP_PIVOT_ROTto let plug-ins get pivot rotation. - If the Item Info
paramfunction is called while the user is dragging items in a viewport and the time argument matches the current time, the function can now return temporary, non-keyframed data. One benefit of this change is that expressions can react to interactively moved items even if Auto Key is turned off. - changed flag name to
LWOBJF_UNSEEN_BY_CAMERA. - A
serverfunction has been added to the Item Info global. It takes an item ID, a class name, and an index (which starts with one, as in the tag functions). The return value is the name of whatever server is applied in the specified "slot" (or NULL if there isn't one). Naturally the ID is ignored for classes like volumetrics, filters, etc. - Added
flagsandfogto Object Info. - Corrected "LW Comp Info" to "LW Compositing Info".
- Added
renderCamerato LWSceneInfo structure. - Added
type,color, andsqueezeto LWBackdropInfo structure. - A function to get the ID of the camera used for rendering has been added to the Scene Info global. It accepts a time argument in order to be ready for automated camera switching in the future.
- Added
serverFlagsandcontrollerto Item Info. - The first frame, last frame, and step size used by the frame slider and by Layout previews can now be obtained through the Interface Info global.
- The vectors returned by the Item Info
paramfunction now take pivot rotation into account. - Attempts by plug-ins to look up information about their items while in the process of being created due to cloning should no longer fail.
- Added
polygonIDto LWShaderAccess. - Added
vertsWPosto LWShaderAccess.
- New API.
- Removed closed notification function typedef.
- Removed closed notification from shelf subscription.
- Added
isOpen.
- The
byNamefunction now has an additional object name argument. If the object name is set to NULL, the function will return all the surfaces that share the same name, behaving as before.
layerEnvGrprenamedlayerEnvGroup.- Input parameter type defines added.
polygonIDadded to LWMicropol structure.setParamandgetParamfunctions added.- Added
evaluateUV, which sets the UV values given the 3D position of the point in world and local coordinates, plus the world and local dominant axis. This does the coordinate transfromation and projection from 3D to 2D. - Added new tags to set and get images and vmaps.
- Added
vertsWPosto LWMicropol. - Added
setEnvGroupandenvGroupfunctions. - Added
layerTypefunction. - Added tags for getting and setting opacity, reference object, repeat options, pixel blending, AA, AA strength.
setParamandgetParamfunctions removed (put into lwtxtr.h).- Added
refresh, which refreshes the editor if some parameters have been changed without user interaction. The clientID should be NULL if trying to update surface textures (= default client). That's what texture guide is doing. - Added
currentLayer, which gets the currently selected layer in the texture editor. If client is NULL, uses surface's texture editor.
- Removed adaptive flag.
- The
flagsfunction of each volumetric plug-in is now called to determine whether to include it in reflection, refraction, or shadow computations. - The
LWVEF_RAYTRACEbit in the LWVolumeAccess structure is now set when evaluating volumetric plug-ins for a ray.
- Added focus event code.
- Added refresh codes.
- Added
XpXREQCFG,XpBORDER,XpDLGTYPEhints.
- The usage string for the
AddPluginscommand now shows that it accepts a filename argument. - The
AddToSelectionandRemoveFromSelectioncommands have been added to allow plug-ins and scripts to create and manage multiple selections. They accept a hexadecimal item ID as an argument, and the usual selection rules apply (for example, if only one item of the current type is selected, it can't be deselected). - Other new commands include
SubdivisionOrderandResolutionMultiplier, which work just like the identically named scene file lines. - A
RemoveServercommand has been added. LikeApplyServer, it takes a class name argument, but it differs in that it takes an index rather than a server name (in case there are multiple instances of the same server). Consistent with the Item Infoserverfunction, these indices count from one. Item-specific plug-ins like motion and displacement handlers are removed from the current item.
- The
SaveCommandListcommand in Layout has been duplicated in Modeler. - A new batch command
maketesball2has been added which takes the new segments parameter for tesselated spheres. The oldmaketesballcommand still works using the old level parameter. The segments parameter directly sets the number of segments along the the edges between the 12 polyhedral vertices. Power of two segment values are equivalent to the old level values: 1 = level 0, 2 = level 1, 4 = level 2, 8 = level 3, 16 = level 4, 32 = level 5, etc. - A new
maketext2batch command has been added which accepts alignment settings. It also takes fonts as zero-based indices, fixing a long lived bug. - Added more arguments to the
bevelbatch command to bring it more in line with the options of the Bevel tool. - There are new plug-in commands for selecting the current object and for setting the vmap for the current morph, texture or weight map.
- The
Surf_SetSurfcommand now has an additional object name argument. This specifies in which object library the surface should be set (there can be multiple surfaces with the same name in different objects). Surf_RemoveShadercommand now works this way: Removes all shaders that use the specified name, and if name is NULL, removes all shaders.
- Added
Env_ApplyServer<classname> <servername>. - Added
Env_RemoveServer<clasname> <index>.
- modlib: Added object name argument to
mgGetSurfacesByNamein surface.c. - rapts: Changed
layerEnvGrptolayerEnvGroup.
Miscellaneous
- A new Plug-in Options panel has been added. It contains the controls for generic and master plug-ins that used to be on the General Options panel, as well as an Add Plug-ins button and some UI ranch space for the masters.
- There is now a dedicated options button which calls
ServerInterfacefor the current animation saver. This is intended to be the official way to edit compression settings, etc. Saver plug-ins whose interfaces are in theirloadoropenfunctions should be rewritten. - The DirectoryType config file entry for images is now used as the default location for image loading, replacing the ImagesDirectory line. Several other old config file lines have also been discontinued in favor of new DirectoryType entries.
- Envelopes for displacement and clip map channels are now added to the envelope groups of the objects they belong to. This makes them appear in the right place in the Graph Editor hierarchy.