texture generation languagedesigned for bandwidth critical applications. The compression ratio varies from about five times smaller to ten times smaller than the equivalent textual files.
Data(&FFD).
Gouraudis now supported ().
Invarincecommand has been extended to cover all the main texture generation routines.
Generating Texturesprite. This is used to provide visual feedback to the user about where textures are being generated. It is not displayed when resizing or changing palette.
Invarince
command. This is intended to allow textures to be resized without altering their percieved scale. This command replaces those referred to in the history of v1.05. Please refer to the Languagefile for more details.
Mutating
, Animating
, On
and Off
functions. On
and Off
return &FFFF and &0 respectively.
OneD
commands which are like the OneDimensional
commands, only they act on a specified buffer.
Inversion
commands ().
CreateOneDFilter
, OneDTransform
, SmoothOneDTransform
, OneDStoreBuffers
, OneDCombineBuffers
and OneDSwapBuffers
.
Minus
function: Minus(X) = -X. Unless X=&8000 in which case then Minus(X) = &8000.
One
, Two
and Three
constant values. These are partly for use in referring to buffer numbers.
QuickTwoDPoint
, TwoDPoint
, QuickOneDPoint
and OneDPoint
commands added. These have the syntax TwoDPoint(Zero|One,X,Y).
This is the first command which implements a new convention, namely, if a command which normally contains the phrase dimensionhas this element replaced by
Dand an additional buffer number is added as its first parameter, then the command will perform as expected.
TwoDFill
and OneDFill
commands added. The syntax is: TwoDFill(Zero|One,Value)
where Zero|One
represents the buffer number and the buffer is completely filled with the value Value
.
filter creationfunctions, but produce results which are invariant to resizing (i.e. increasing the size of a texture does not rescale it, but produces more of the same texture. This will still tesselate. These commands are all prefixed by the letter
I. They do not currently work and should not be used yet.
North, South, West, East, NorthWest, SouthWest, NorthEast
and SouthEast
constant functions and their one- and two-letter abbreviations. These return values from zero to seven, and are currently of little use.
Outputwindows. This will be redesigned to make more space shortly.
SaveSpritedialogue to indicate whether a given image uses a palette or not.
CeilingAdd
, FloorSubtract
, HalvingAdd
, HalvingSubtract
, SimpleAdd
and SimpleSubtract
functions. With these in place, all the relevant combination-type functions are now implemented without using self-modifying code in order to increase speed on StrongARM-equipped machines.
PseudoExposure
command. This takes one parameter and affects any subsequent DefineLightSource
commands. It offers some control over how non-linear colour distorting effects, which produce over-exposed looking results with washed out highlights when using lightsources, are handled. If it is set to &1000, then no colour distortions occur. This can produce a slightly flat effect, however. The default value is &FFFF which means that highlights (usually whitish) are fairly commonly produced.
For those who want to be able to play back multiple image sprite files on their backdrop with full cacheing, it seems worth pointing out at this juncture that this is not the job of an algorithmic texture generation program, but should be performed by the program which manages the backdrop.
It is hoped thet the author will be able to point interested parties to such a program in the near future.
Run !TexturGdn -Remote.
Errorcommand ().
Registeredfunction which returns 0 if the user only has the Freeware version of Texture Garden.
DefineLightSourcecommand tweaked to reduce non-linearities near the zenith, and and its theta parameter's sign has reversed (to make the syntax sensible). These changes mean that this command is not backwards compatable with the one in version 0.55 ().
DefineLightSource
and ShineLightOnVirtualSprite
commands added. These are used to produce a range of bumpmapping effects by drawing on techniques used in ray tracing. More details are provided in Docs.Language, Docs.Technical and Docs.Features.
Specular
, Gourad
, Phong
, Specular
and SpecularPhong
commands added. These affect how individual lightsources interact with the textures' surfaces.
ResizeBumpMap
command to allow the front end to resize the new textures.
CreateColours(Model)
command added. This is intended to replace the CreateColoursUsingRGBData
, CreateColoursUsingHSVData
and CreateColoursUsingCIEData
commands. It takes as parameters either RGB
(0), HSV
(1) or CIE
(2). Parameters greater than 2 are reserved and should not be used. The use of the old commands is still allowable, and they will remain available. This fairly major has been made partly so that it will be easier to implement an editor for palette files, and partly for the sake of consistency with the new SetColour
command.
SetColour
command added. This chooses a colour to be used when painting directly to a virtual sprite, or when selecting the colour of lightsources.
CreateColours, SetColour, RGB, HSV, CIE, Specular, Gourad, Phong, DefineLightSource
, and the cheesey ShineLightOnVirtualSprite
.
heighton the left. This is more logical than the reverse and it now corresponds to the display produced by the raw palette files.
Abortedsprite so that it now fits properly inside a 64 pixel wide icon ().
OS_EvaluateExpression
SWI.
Docsdirectory moved out of the application directory.
Ditheringsection in the Docs.Technical file for details.
ErrorText <string>
command provided. This is similar to Error(Value)
which generates an error report containing the value of its parameter.
ReportText <string>
command provided. This is similar to Report(Value)
which sends a WIMP message (no. &804C0) to a debugging program. This may be of use for sending commands to dircecly control !Zephyr.
If IsLessThanOrEqualTo(LogBitsPerPixel,&2) Then Dithering(&4000) Else If IsEqualTo(LogBitsPerPixel,&3) Then Dithering(&2000) Else Dithering(&0)
commands which were recommended until now.
AddToPercentage
command.
file_xxxsprite ().
Run !TexturGdn -file <batchfile>
. More details may be found under Batch processingin the Docs.Technical file.
Percentage
command.
Add(A,B)
, Subtract(A,B)
, Min(A,B)
, Max(A,B)
, Multiply(A,B)
and ScaledMultiply(A,B)
functions. These are intended to be complete replacements for: Combine(UnboundedAddition,A,B)
, Combine(UnboundedSubtraction,A,B)
, Combine(Maximise,A,B)
, Combine(Minimise,A,B)
and Combine(Multiplication,A,B)
. These functions have been added for a number of reasons. Improved readability of textures is one factor. Another is that because all commands using combination types currently execute using self-modifying code, this may produce a performance hit when using the StrongARM processor. As the Multiplication
command was used internally in resizing textures, this operation should now be much faster. The old commands now merely call their new replacements so the new ones should consequently always be used in place of their predecessors. The old commands will be retained.
Error
command, but sends the value to a WIMP debugging program such as my own !Zephyr.
Abortedmessage when Escape is pressed, or there is an error in texture generation.
ptr_handsprite was not in the WIMP's sprite pool fixed ().
Zapuses dynamic areas. These problems should now have been fixed and ZapTexture should now be fully RISC-PC compatible. Thanks are extended to James Harvey for the initial bug report, and to James Holtom for the use of his RISC-PC ().
LinearFieldSegment
().
Cosmetic improvementssection to the !ReadMe file.
CreateColoursUsingCIEData
command. The PRM's documentation on the SWI used by this command seems to be completely wrong and the SWI itself behaves in a very strange fashion, however, hopefully everything will work.
MakeVirtualSprite
and MakeSpriteFromVirtualSprite
implemented. These commands quietly usher in a new era of texture generation within Texture Garden by providing full support for multiple layer textures. This is described in the Docs.Technical file, and in the Docs.Languagefile.
Getting startedsection to the !ReadMe file.
Write/Click/Dragicon types in my dialogue boxes which meant the caret needed to be positioned manually inside them by using simple
Writableicons which the WIMP deals with correctly. The WIMP still cannot consistently cope with situations where it has to borrow the caret from another application ().
Rawfile export to text editors and similar applications. This seemed to be because Texture Garden was taking such a long time to generate the data that by the time it had finished the editor had forgotten all about what was going on. This had the unfortunate side effect that the file was left in the
!Scrapdirectory and not deleted. This turned out to be the straw that broke the camel's back for the raw file option. It has been completely deleted and replaced by a far more useful array of information concerning the sprite which is to be saved.
Rapid exitoption and preference.
Resize
and ResizeSprite
commands. These take all the effort out of resizing textures.
Resize
and ResizeSprite
commands. You can now resize textures dynamically by dragging their bottom right-hand corners.XOS_SynchroniseCodeAreas
SWI is now called where self-modifying code is used. If there is a performance hit when using this on older machines, it is quite small. This means calling the XOS_PlatformFeatures
SWI is probably not needed.
OS_File
commands used for loading code. Whether the program works on StrongARM chips now depends on the following:Absolutefiles compressed using
!Crunchwork.
GardenSptmodule.
TwoDimensionalStore
, TwoDimensionalSwap
and TwoDimensionalMask(Type)
commands. New internal TG_miscop
Texture Garden call added with two reason codes for memory allocation.
Zapmode updated so it recognises the new commands.
Resize
, MakeVirtualSprite
and MakeSpriteFromVirtualSprite
also added at this stage so the user should not need to update their Zapmode too frequently.
Messagesfile closed properly.
!MsgPressapplication.
!TexturGdnso the
Zapmode does not need to treat files beneath a
Palettedirectory specially.
small_diroand
small_apposprites are not in the WIMP's sprite pool ().
Textures.!ReadMefile modified so that it is more aesthetically pleasing in the new
Zapmode and it has a
Checksumwhich enables it to be loaded by unregistered users of Texture Garden.
!).
Escapenow stops animations and breeding as well as aborting drags.
Paletteand
SaveAnidialogue boxes are brought up with a small leading menu. This involves unlinking the pointer, moving the mouse over the sub-menu pointer , and then moving it back again. This is a bit ugly. There may yet be ways of hiding the leading menu, though making it vanish looks very difficult. The problem is that the
Wimp_DecodeMenu
SWI fails to keep track of sub-menus if they are opened directly by the program, and not by the WIMP. I therefore have to pretend that the user has selected the sub-menu themselves. Totally bypassing the Wimp_DecodeMenu
SWI and writing code specifically may solve this, but means doing all the work in the program.
Wimp_DecodeMenu
relies on the fact that the window handles of
the dialogue boxes encounters in menu structures remain unchanged
from when the sub-menu is created to when the Wimp_DecodeMenu
SWI is called. Because my palette window needs to be deleted and recreated if its sprite area changes position in memory, the WIMP's menu decoding has forgotten about the dialogue box because it has changed its handle. At the moment this causes the entire menu to collapse.
Texture Garden.
Optionsmenu implemented.
Addand
Deleteicons are less prominent and
Select palettehas been moved to the left and is consequently quicker to access.
!Helpfile made more coherent.
Cancelicons added to the dialogue boxes.
Outputcategory.
Open main windowand
Open options windowoptions.
JPEGand
Monooptions, and a backend that uses these in conjunction with a JPEG quality variable. This was done to shield the user from some of the complexities of
!ChangeFSIs command-line options.
!Sprites22and
!Spritesfiles updated with more 3D icons.
Texturesdirectory within
!Scrap. This means that:
!Editand all other editors.
Zapcan now use the fact that the file is within a
Texturesdirectory to set the editing mode correctly.
!Scrap, and if it is saved from the editor then that is where it goes.
fixed, but using some dodgy code that could have unexpected side effects if more than one program is being run which accepts text files at the icon bar. This problem can be demonstrated by loading two text editors and dragging a file directly from Texture Garden into each in turn. As this kind of circumstance will probably occur very infrequently, this problem has not yet been addressed.
.s added to this file for clarity.
Zapreleased.
!Sprites22and
!Spritesfiles updated with slightly 3D icons.
!Sprites22and
!Spritesfiles updated with better icon versions.
ptr_handsprite used for drags.
Optionstemplates improved to provide more room.