Warp3D API design history ------------------------- 11.4.98 - First provisional design done. 23.4.98 - Added a new state for fullscreen antialiasing (W3D_ANTI_FULLSCREEN/W3D_Q_ANTI_FULLSCREEN) - The fog modes were not prefixed by W3D_, now they are. - Added support for LogicOp's, since actual 3D hardware supports this and because it's part of the GL pipeline. New W3D API function: SetLogicOp New W3DHW API function: SetLogicOp New mode value: W3D_LO_xxxx New error value: W3D_UNSUPPORTEDLOGICOP New query flag: W3D_Q_LOGICOP New state: W3D_LOGICOP New field in the context structure: logicop - New W3D/W3DHW API functions 'ReadZPixel' and 'ReadZSpan' allow to retrieve Z values from the Z buffer. This is necessary if the application itself wants to draw objects with respect to Z buffering. - Added support for color/index masking. New W3D API function: SetMask New W3DHW API function: SetMask New error value: W3D_MASKNOTSUPPORTED New query flag: W3D_Q_MASKING New fields in the context structure: mask_xxx - Added support for line/polygon stippling New query flags: W3D_DRAW_LINE_ST/W3D_DRAW_POLY_ST New elements of W3D_Line/W3D_Triangle: 'st_factor' and 'st_pattern' - Added support for stencil buffer/stencil test. New W3D API functions: AllocStencilBuffer, ClearStencilBuffer FreeStencilBuffer,SetStencilMode New W3DHW API functions: AllocStencilBuffer, ClearStencilBuffer FreeStencilBuffer, SetStencilMode, FillStencilBuffer, ReadStencilPixel, ReadStencilSpan New modes for stencil test: W3D_ST_xxx New error codes W3D_NOSTENCILBUFFER, W3D_UNSUPPORTEDSTTEST New state W3D_STENCILBUFFER New query flags W3D_Q_STENCILBUFFER, W3D_Q_STENCIL_MASK, W3D_Q_STENCIL_FUNC, W3D_Q_STENCIL_SFAIL, W3D_Q_STENCIL_DPFAIL W3D_Q_STENCIL_DPPASS New fields in the context structure: stencilbuffer, stbufferalloc, stencil_xxxx 13. 5.98 - Added support for rectangular textures. Removed elements texsize and texsizeexp, added elements texwidth, texwidthexp, texheight and texheightexp to the texture structure. Added new tag for W3D_AllocTexObj: W3D_ATO_WIDTH and W3D_ATO_HEIGHT. Removed tag W3D_ATO_SIZE. Note that the values of other tags have changed. Added new query flag W3D_Q_RECTTEXTURES which allows the application to find out, if rectangular textures are supported. Removed query flag W3D_Q_MAXTEXSIZE, added W3D_Q_MAXTEXWIDTH and W3D_Q_MAXTEXHEIGHT 1. 7.98 - Added W3D_Q_MAXTEXWIDTH_P, W3D_Q_MAXTEXHEIGHT_P because some 3D hardware (like Virge) have different size restrictions dependant on linear/perspective mode. Note, that the value of W3D_Q_RECTTEXTURES has changed. - New fields 'maxtexwidth', 'maxtexheight', 'maxtexwidthp' 'maxtexheightp' in the context structure (added by Hans Joerg/Thomas Frieden). - New functions W3D_GetTexFmtInfo, W3DHW_GetTexFmtInfo allow to get information about texture format (for example, if texture format is supported directly by 3D hardware, so no conversion is needed). - W3D_Query redesigned. Now it's possible to query the hardware features without context structure by providing the desired destination format. Additionally, the query now can be done for RGBA/Chunky textures differently. W3DHW_Query changed according to W3D_Query. - Added new functions W3D_DrawTriFan, W3D_DrawTriStrip, W3DHW_DrawTriFan, W3DHW_DrawTriStrip, which draw multiple triangles at once. This might enhance performance on some 3D hardware. - Added new structure W3D_Triangles which is used for the triangle strip/fan drawing functions. 27. 7.98 - Changed the order of some functions arguments, namely function with taglists that had additional parameters behind the taglist parameter. This is done to avoid confusion with vararg stubs, where the taglist is built on the stack. - Added the call to W3DHW_DestroyContext in W3D_CreateContext. This is needed to allow the HW driver to free up memory it allocated. 31. 7.98 - Added the W3D_ATO_MIPMAPPTRS tag, to provide a better way of specifiying where the predefined mipmaps are 1. 8.98 - Removed the need of a palette pointer in W3D_UpdateTexImage. If it`s NULL, the old palette will be used 7. 8.98 - Added a new variable to the ViRGE driver: if "Warp3D/ViRGE/Pass24" is set to "on" or "1", ARGB textures are not converted but rather passed through unmodified. This seems to cause problems, since 32 bit textures are not correctly handled. This variable is best left unset, until the 32bit texture problem is fixed. 8. 8.98 - BUGFIX ViRGE Driver: When running under Z2, the triangle U/V Base registers where not correctly written, resulting in a wrongly aligned texture in perspective mode. Fixed. 12. 8.98 - BUGFIX in main library: Texture objects were freed, but not removed from the list. That way, memory was freed twice when the context was destroyed. Fixed. 17. 8.98 - Added a semaphore for locking hardware access. CyberGraphics doesn't do it. - The drawing functions do not modify their parameter structures anymore. 18. 8.98 - BUGFIX ViRGE driver: The list header was removed, not the last texture. Fixed. 23. 8.98 - Implemented the ZBuffer functions in the main library. 24. 8.98 - Implemented the stencil buffer functions in the main library. This completes the implementation of the main library until a major api update comes along... - Made minor changes to the API. Some int and unsigned chars were replaced with Amiga types (ULONG, UBYTE). The functions that are affected by this change are: W3D_FillStencilBuffer, W3D_ReadStencilPixel, W3D_ReadStencilSpan, W3D_SetDrawRegion, W3D_SetMask, W3D_SetStencilMode, W3D_UpdateTexImage 31. 8.98 - New fog and mipmap calculations put into the main library and the ViRGE driver. 2. 9.98 - Subdividers made it into the Virge driver 13. 9.98 - ZBuffering implemented 19. 9.98 - Corrected a bug that prevented dirty textures to be updated in video ram. Fixed. 22. 9.98 - Numerous bugs detected while porting ADescent to Warp3D. o Updating of resident textures was broken. Fixed. o Updating of mipmap levels only for generated mipmaps, not user-supplied. Fixed. o Minor bugs in general. Fixed Best of all, ADescent now fully works with Warp3D, including special effects like fogging, mipmapping. 24. 9.98 - Added hinting defines 25. 9.98 - Hinting actually implemented 27. 9.98 - Various updates implemented: W3DHW_LockHardware mechanism 1.10.98 - Added indirect drawing: Drawing request may be queued and drawn later. 3.10.98 - Now, indirect drawing actually works! 3.10.98 - W3D_Flush now does hardware locking by itself - W3D_SetDrawRegion and W3D_UpdateTexImage now flush the queue if the context is indirect - W3D_LockHardware can now be switch to blocking and non-blocking mode - Created new functions in GFX driver: W3DGFX_CreateContext, W3DGFX_DestroyContext 6.10.98 - W3D_ALWAYS_DISABLED disappeared, it's the same as W3D_NOT_SUPPORTED, anyway. - Removed the ChunkyTex parameter from W3D_Query 8.10.98 - Various updates to ensure Mesa convergence - New functions for stencil buffer - Global texture settings 9.10.98 - Removed a bug in chunky texture usage and mipmap creation 10.10.98 - Fixed and changed numerous thing too much to mention 13.10.98 - Changes in W3DGFX_FreeVMem, W3DGFX_LockHardware 15.10.98 - Linedrawing now works (almost) 16.10.98 - LineDraw ZBuffering works 17.10.98 - Lots of changes: More implicit Flushes, some more stacked calls 22.10.98 - Again, too much to be mentioned here 27.10.98 - Changes galore. The API seems to be in it`s final form now 29.10.98 - Nope. New functions: W3D_GetDestFmt 03.11.98 - Even more stuff. 07.11.98 - removed the AUTOLOCKING feature. Now, a programmer *must* use locking. If this is too inconvenient, indirect drawing does a similar job. 08.11.98 - Implemented a self-organising memory list for the CyberGraphX driver. This prevents memory fragmantation by merging adjacent blocks and keeping the list sorted, with minimal overhead. 18.11.98 - Rectangular textures are now available for the ViRGE driver. these are implemented in a memory-efficient way: they are only expanded to square textures when uploaded to gfx board memory. To allow repeating of these textures, they are duplicated to fill up the rest with the gfx boards blitter, so this also minimizes the bus transfer 18.11.98 - Too much work ;) (to be mentioned here) - 17.12.98 21.12.98 - Fixed the 'false color bug' that was introduced by endian problems on Z2 machines - W3D_Virge.library bumped to revision 1.1 01.01.99 - Numerous fixes and improvements - - API revision bumped to 2.0 05.02.99 05.02.99 - Again, problems too numerous to mention. Most signifficant changes include - fixing of the Permedia and CyberGFX4 drivers, thanks to the numerous reports 21.03.99 from the 3dworld mailing list. Thanks to all of them...