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
quad
function for drawing solid quad polygons has been added to LWCustomObjAccess. - Quads can be image-mapped using new
setTexture
andsetUVs
functions.setTexture
accepts a square image inGL_RGBA
format, andsetUVs
sets the UV coordinates at the corners of a quad. - The
text
function accepts a new justification argument, 0 for left, 1 for center, 2 for right. - The color argument to
setColor
now takes a fourth array element for the color's alpha level. - Since custom objects can draw semi-transparent primitives,
viewPos
andviewDir
vectors 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".serverApply
andserverRemove
functions have been added to LWChannelInfo. Also added wereserverFlags
andserverInstance
functions 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_SELECT
event code has been added (MasterHandler).
- A
polFlags
function has been added to LWMeshInfo. pntVIDGet
andpntVPIDGet
functions have been added to LWMeshInfo. These are likepntVGet
andpntVPGet
, 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_NOBUTT
flag will not have Continue or Cancel buttons.PANF_RESIZE
panels can be resized.
- A
setPreset
function 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.h
released 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
,goalStrength
andstiffness
) 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
,polygonSize
andexcluded
) have been added to LWObjectInfo. Theexcluded
function returns TRUE if the object has been excluded from the given light. - The LWObjectInfo
flags
function returns new flagsLWOBJF_UNAFFECT_BY_FOG
,LWOBJF_MORPH_MTSE
andLWOBJF_MORPH_SURFACES
. LWBONEINFO_GLOBAL
(Bone Info) has been incremented to "LW Bone Info 3".- Four new functions (
strength
,falloff
,jointComp
andmuscleFlex
) have been added to LWBoneInfo. - The LWBoneInfo
flags
function returns new flagsLWBONEF_JOINT_COMP
,LWBONEF_JOINT_COMP_PAR
,LWBONEF_MUSCLE_FLEX
andLWBONEF_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
coneAngles
function 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
range
function. - The LWLightInfo
flags
function returns new flagsLWLFL_FIT_CONE
andLWLFL_CACHE_SHAD_MAP
. LWINTERFACEINFO_GLOBAL
(Interface Info) has been incremented to "LW Interface Info 3".- The LWInterfaceInfo
itemColor
function returns the color used to draw the item in the interface. The newboxThreshold
field contains the bounding box threshold, andalertLevel
containsLWALERT_BEGINNER
,LWALERT_INTERMEDIATE
orLWALERT_EXPERT
.
replacement_percentage
andreplacement_color
fields 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 ]
reflectionBlur
andrefractionBlur
. fields have been added to the shader access structure.
- Two new channel definitions for reflection and refraction blurring have been added (Surface Functions).
- A
text
function 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.texture
returns a texture ID, given the ID of a texture layer.name
,type
andcontext
return 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 LWVParmFuncsgetEnv
function. This definition showedgetEnv
taking a single argument and returning a single envelope ID. The correct definition showsgetEnv
returning 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
SaveCommandList
now includes Graph Editor, Image Editor and Surface Editor commands, and Layout now dispatches those commands to their respective components. - The
Refresh
command now defers its work until the system is idle, for improved interactivity. ARefreshNow
command has been added for cases in which synchronous updates are desired. The newRedraw
andRedrawNow
commands are similar except that they don't cause motions and geometry to be recomputed. - The
PluginOptions
command 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
setcontent
command 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_SetBakerImage
command.
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
changeID
callback. - In LWSN, master plug-ins now receive a
LoadScene
command 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
limits
function 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
PreviousItem
andNextItem
commands now skip over locked items. - When Adaptive Sampling is on and Antialiasing is off, the
minSamplesPerPixel
from the Scene Info global is now zero, since some pixels may be totally skipped. - The Item Info
controller
function 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
text
function was added to LWCustomObjAccess (Custom Objects). - Added
LWVIEW_SCHEMA
to the codes for theview
field of the LWCustomObjAccess structure. - Added
LWCOF_SCHEMA_OK
to the flags that can be returned from the LWCustomObjHandlerflags
callback
- Added preprocessor symbols for some of the file type strings used with the File Type and Directory Info globals.
- Added
LWEVNT_TIME
to the event codes that can be passed to the Master classevent
callback. This event notice is sent whenever the frame slider is moved, which includes playing the scene, but not playing back a preview.
- Bracketed
MIN
,MAX
andABS
macros 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
userName
andrefName
functions 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_PANFUN
andCON_SETEVENT
macros.
- The
LWPSB_ENB
buffer (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
remParticle
function to LWPSysFuncs.
- Incremented
LWSCENEINFO_GLOBAL
(Scene Info) to "LW Scene Info 3". - Added
numThreads
to LWSceneInfo. - Added
LWROPT_PARTICLEBLUR
option for the LWSceneInforenderOpts
function. - Added
patchLevel
andmetaballRes
functions to LWObjectInfo (Object Info). - Added
LWLFL_NO_OPENGL
to the flags for LWLightInfo (Light Info). - Incremented
LWCAMERAINFO_GLOBAL
(Camera Info) to "LW Camera Info 2". - Added
flags
,resolution
,pixelAspect
,separation
,regionLimits
,maskLimits
andmaskColor
functions to LWCameraInfo. - Added
LWCAMF_STEREO
,LWCAMF_LIMITED_REGION
andLWCAMF_MASK
camera info flags. - Added
itemVis
function anddisplayFlags
andgeneralFlags
fields to the LWInterfaceInfo (Interface Info) structure.
- Added
LANGID_KOREAN
definition.
- Added
itemName
to LWTxtrParamDesc (Texture Functions)
- Added
XPTAG_NULL
define, which replacesNULL
in the Xp macros for XPanels.
- The arguments to the new
AddPosition
,AddRotation
andAddScale
are relative rather than absolute. These are useful for multiple selections and should also improve the reusability of scripts generated by macro recorders. - An
EditServer
command has been added which opens a plug-in's interface. The syntax is the same as theRemoveServer
command, 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
AutoConfirm
command now recognizes an argument value of -1, which will automatically respond negatively to all Yes/No or OK/Cancel dialogs. - The
AddEnvelope
andRemoveEnvelope
commands 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
meshedit
command allows plug-ins to execute MeshDataEdit class plug-ins.
- The
Surf_SetSurf
command was using the display name rather than the filename to identify objects. This has been corrected.
Miscellaneous
- The mesh info
pntBasePos
andpntOtherPos
functions obtained from the Object Info global now provide better information for frozen meshes. The revisedpntBasePos
returns 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.pntOtherPos
now 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
,warn
anderror
functions may appear in the status line rather than in separate dialog windows. - The
changeID
handler callback is now called when all lights or all cameras are cleared at once. - The
illuminate
raytracing 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
source
member of the LWVolumeAccess structure is now set to the camera ID for directly viewed volumetrics, to the light ID for shadow rays, and toLWITEM_NULL
for 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_ICON
mode are no longer affected by object scaling. - When the Item Info
param
function was called during a custom object plug-in'sevaluate
function, 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 callparam
during 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
create
functions. - 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
flags
functions returnLWMAST_LAYOUT
are no longer cleared with the scene. - The MeshEditOp
pntVMap
function 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_GREEN
andLWBUF_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
initUV
is now float * rather than float[2] so thatinitUV
can be used to initialize per-polygon UVs.
- Added vertex map types for color vmaps:
LWVMAP_RGB
andLWVMAP_RGBA
. - Added LWMeshInfo function
pntVPGet
for per-polygon vertex mapping.
LWOBJECTIMPORT_VERSION
(ObjectLoader) has been incremented to 3.- Added LWObjectImport function
vmapPDV
for per-polygon vertex mapping. - The second argument to
pivot
and the third argument tovmapVal
are now const.
- New
illuminate
special item typesLWITEM_RADIOSITY
andLWITEM_CAUSTICS
allow callers ofilluminate
to 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
dispMap
andclipMap
Object Info functions. LWINTERFACEINFO_GLOBAL
(Interface Info) has been incremented to "LW Interface Info 2"- New Interface Info function
schemaPos
returns the positions of items in schematic viewports. (Use the newSchematicPosition
command to set them.) - New Interface Info field
dynaUpdate
contains Layout's Dynamic Update setting, which can beLWDYNUP_OFF
,LWDYNUP_DELAYED
orLWDYNUP_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_VCOL
for color vertex maps. - Added Surface Functions routines
getColorVMap
andsetColorVMap
.
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_COLOR
and LWTextureAccess flagLWTXEF_COLOR
.
- New LWTxtrParamDesc flag
LWGF_AUTOSIZE
for 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_GradAutoSizeFunc
for 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
LWVPDT
texture data types. - Added arguments (texture context, event callback, plug-in name and userdata) to the
LWVParmFuncs
create
function. - Added a micropolygon argument to
getVal
for texture evaluation. - New functions
getState
,setState
,editTex
,initMP
,getEnv
andgetTex
.getState
andsetState
replace thehasEnv
andsetEnvState
functions, which have been removed. The new functions support textures in addition to envelopes.
- Added
XpENABLE
hint (XPanels).
SaveSceneCopy
andSaveObjectCopy
save a copy of the scene or the object in a file with a new name without affecting the current name in Layout.PreviousSibling
andNextSibling
allow easy navigation among a set of items that share the same parent.AddEnvelope
andRemoveEnvelope
allow 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
AutoConfirm
an 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. EditPlugins
opens the new dialog for displaying, adding, and deleting servers.SaveObject
andSaveTransformed
now accept a filename argument.CommandInput
now accepts a command argument.MaskPosition
allows 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).SchematicPosition
sets the X and Y of the current item's schematic node. This and theschemaPos
function added to the Interface Info global allow plug-ins to arrange items in Schematic viewports.Antialiasing
takes 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
revert
command 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
newTime
callbacks 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
newTime
functions 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 Infoparam
function 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
evaluate
functions 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
server
function to the Channel Info global.
- Added
LWBUF_MOTION_X
andLWBUF_MOTION_Y
for 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
saveScene
function 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
sceneLoad
andsceneSave
to Image List global, now "Image List 2". - Changed LWImageID to LWPixmapID in Image Utility functions.
- Added
LWMAST_LAYOUT
type for masters that survive scene clearing.
mode
andvmap
functions 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
close
to 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_SELECTED
bit set by the Interface InfoitemFlags
function. - Added
LWIP_PIVOT_ROT
to let plug-ins get pivot rotation. - If the Item Info
param
function 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
server
function 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
flags
andfog
to Object Info. - Corrected "LW Comp Info" to "LW Compositing Info".
- Added
renderCamera
to LWSceneInfo structure. - Added
type
,color
, andsqueeze
to 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
serverFlags
andcontroller
to 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
param
function 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
polygonID
to LWShaderAccess. - Added
vertsWPos
to LWShaderAccess.
- New API.
- Removed closed notification function typedef.
- Removed closed notification from shelf subscription.
- Added
isOpen
.
- The
byName
function 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.
layerEnvGrp
renamedlayerEnvGroup
.- Input parameter type defines added.
polygonID
added to LWMicropol structure.setParam
andgetParam
functions 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
vertsWPos
to LWMicropol. - Added
setEnvGroup
andenvGroup
functions. - Added
layerType
function. - Added tags for getting and setting opacity, reference object, repeat options, pixel blending, AA, AA strength.
setParam
andgetParam
functions 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
flags
function of each volumetric plug-in is now called to determine whether to include it in reflection, refraction, or shadow computations. - The
LWVEF_RAYTRACE
bit 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
,XpDLGTYPE
hints.
- The usage string for the
AddPlugins
command now shows that it accepts a filename argument. - The
AddToSelection
andRemoveFromSelection
commands 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
SubdivisionOrder
andResolutionMultiplier
, which work just like the identically named scene file lines. - A
RemoveServer
command 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 Infoserver
function, these indices count from one. Item-specific plug-ins like motion and displacement handlers are removed from the current item.
- The
SaveCommandList
command in Layout has been duplicated in Modeler. - A new batch command
maketesball2
has been added which takes the new segments parameter for tesselated spheres. The oldmaketesball
command 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
maketext2
batch 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
bevel
batch 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_SetSurf
command 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_RemoveShader
command 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
mgGetSurfacesByName
in surface.c. - rapts: Changed
layerEnvGrp
tolayerEnvGroup
.
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
ServerInterface
for the current animation saver. This is intended to be the official way to edit compression settings, etc. Saver plug-ins whose interfaces are in theirload
oropen
functions 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.