Change log
The latest version will always be attached to this post.
High speed download links to an external site will also be provided.
Update 2016-10-01
The previously uploaded version 0.4.7.5 build has expired. A new, extended trial is now available from the download link below and attached to this post.
If you already have the plugin installed you only need to replace the DX11.dll file in your Compiler/plugins-user folder, so rather than download the entire installation folder again you can get just the plugin from
here.
This version is set to expire in July 2017, by which time I certainly hope to have gotten a newer version out.
Latest build build (0.4.7.5) 2016-01-04 - high speed download
Support for creating and using texture arrays, cubemaps and cubemap arrays has been implemented.
Limbs will now have their bounding boxes recalculated to take changes to their associated meshes' vertex data into account.
The old DX11 SET CAMERA RENDER TARGET function has been renamed to DX11 SET NEW CAMERA RENDER TARGET, since it creates a new render target. It is now possible to create standalone render targets using DX11 CREATE RENDER TARGET and then set them to cameras using the (new) DX11 SET CAMERA RENDER TARGET function.
Finally fixed the input initialization bug that caused the escapekey to be recorded at startup and thus trigger an immediate close of the program unless the escapekey was disabled for this purpose. This would happen if another window took focus or if the render window was clicked in before it was fully loaded.
The DX11 IS MOUSE BUTTON XXX / DX11 IS KEY XXX functions have been changed to return signed integers instead of unsigned booleans. This means that you can now write shorthands like DX11 MOVE CAMERA cam, (DX11 IS MOUSE BUTTON DOWN(0) - DX11 IS MOUSE BUTTON DOWN(1)) * speed# with it working properly. Previously the resulting "-1" if only the right mouse button was pressed would be interpreted as an unsigned value and wrap around to ~4.3 billions instead.
Added the available D3D11_COMPARISON_XXX constants to DX11Constants.dba.
The mouse cursor will no longer be automatically positioned in the upper left corner of the rendering window upon initialization. If you want this behaviour (or to otherwise set the starting position for the mouse cursor) you can use the DX11 SET MOUSE POSITION function.
Four sampler slots have been reserved for the lighting system. As such only 12 are available for user shader techniques as of now. This number may increase up to 14 in the future. 12 samplers should still be more than enough as most different textures will be sampled in the same way (ie. using the same sampler state) anyway.
Unreleased build Build 0.4.7.1 MA on 2015-11-30
Fixed a bounding box transformation oversight that would sometimes result in incorrect bounds being used for objects, thus for example causing them to be culled when not actually being out of view of the rendering camera.
Fixed a bug which caused render target setting to fail when using a Texture2DArray as the render target resource to bind. Note that Texture2DArrays weren't available in previous official demo builds anyway so this issue should never have occurred.
Added support for specifying a set of optional paths that will be searched if a file to be loaded cannot be found in the current working directory.
-> Along with this, loading of media included with DBPro executables is also facilitated.
-> New functions: DX11 REGISTER FILE PATH, DX11 UNREGISTER FILE PATH and DX11 RESET FILE PATHS.
Unreleased build 0.4.7.0 on 2015-11-08
Added functionality for changing screen resolution / fullscreen state at runtime (DX11 SET DISPLAY MODE). Unlike it's DBPro counterpart, all data loaded into VRAM at the point of calling this function will be retained, ie. there is no need to manually reload all objects, textures, etc.
Available display modes supported by the current system can also be retrieved.
When alt+tabbing, or otherwise forcefully changing focus from a fullscreen exclusive window, the render window will be automatically windowed to allow this. When switching back to the window, ie. by clicking in it, alt+tabbing to it, or minimizing the window(s) that are on top of it, it will now switch back to fullscreen mode.
Added the Display category to the documentation, complete with some new basic functions (window moving, caption changing, etc.).
Added text input functionality.
Added manual camera viewport control.
Fixed a bug where attempting to draw text would sometimes cause a crash if the text only contained control characters and nothing actually visible.
Fixed various discovered errors in the documentation.
Unreleased build 0.4.6.5 on 2015-11-02
Fixed a bug where glued objects/limbs/cameras did not have their world sectors properly updated if only a parent object was moved, but not the child object itself, which could thus lead to erroneous early clipping of objects and limbs.
Fixed an issue where box objects had an "incorrect" texture coordinate orientation. The uv coordinates for primitive cubes and boxes now match those created by the standard DBPro library.
Added an optional parameter for the DX11 CREATE OBJECT QUAD function to allow orienting it so that it faces in the negative Z-direction ("towards the screen") instead of facing the positive Z-direction ("away from the screen") as all other objects do by default. In order to maintain backwards compatibility the default behaviour is that quads created using this function still face the in positive Z-direction.
Added DX11 GET OBJECT SECTOR X/Y/Z and DX11 GET WORLD SECTOR X/Y/Z functions.
Unreleased build 0.4.6.4 on 2015-10-29
Fixed a string table bug where DX11 PRINT TO PIXELMAP was accidentally called DX11 PRINT TEXT TO PIXELMAP instead.
Added missing functions DX11 GET CAMERA FOV, DX11 GET CAMERA ASPECT, DX11 GET CAMERA NEAR RANGE and DX11 GET CAMERA FAR RANGE.
Fixed a bug with the DX11 GET MATRIX ELEMENT function where this would check the range and thus potentially return zeroes for valid row/column indices while also having the possibility to try to index into non-existing rows/columns, thus causing an invalid access operation.
Fixed the documentation for various DX11 BUILD ??? MATRIX functions which accidentally didn't list that these functions return the created matrix.
Added functions DX11 BUILD ROTATION MATRIX X, DX11 BUILD ROTATION MATRIX Y and DX11 BUILD ROTATION MATRIX Z.
Changed the transform class to compute rotation matrices in a different way. This (hopefully) alleviates an issue where there would be rotational discrepancies when combining euler and free-flight rotations for the same object/limb/camera.
Changed the decomposition method from rotation matrix to euler angles (for correct reporting by DX11 GET OBJECT ROTATION X/Y/Z while using free-flight rotations) to a more efficient one. The resulting angles are identical to those computed with the previous approach.
Changed the way view matrices are built for cameras. This should hopefully lessen accumulative floating point errors when using free-flight rotations.
Fixed a bug with the sector object grouping system where objects could potentially be "left behind" if they moved into a new sector by such a large difference from its previous positioning that it would no longer be in a shared sub-sector, thus making the object stuck in its old sector, to which its new position wouldn't even belong.
Unreleased build 0.4.6.3 on 2015-10-24
Fixed a bug where a per-mesh buffer table allocation was accidentally several times too large. Should reduce memory usage by 224 bytes per mesh.
Fixed a bug where absolute include file names failed to be resolved during precompilation.
Fixed a bug where attempting to generate mip maps for an uncompressed DDS texture would fail with an error message saying the texture could not be loaded.
Fixed an issue where setting the same state of a sprite would overwrite a flag stating that the sprite needs to be updated even if the cause of this requested update was a different state. This was the cause of the visual artifacts with drawn text suddenly jumping horizontally or appearing blurred sometimes when the printed text would change from one string to another.
Added functionality for attaching 3D entities (camera, objects and limbs) to each others' transforms ("GLUE XXX TO YYY"-style behaviour).
Unreleased build 0.4.6.2 on 2015-09-23
Fixed a bug where DX11 FRUSTUM CULL BB was accidentally returning true if the bounding box in question did PASS culling.
Also fixed return type of DX11 FRUSTUM CULL BB to a full integer; it would previously only work if assigned to variables explicitly declared "as boolean".
Fixed a documentation bug where DX11 ENABLE ESCAPEKEY was accidentally listed as DX11 ENABLE ESCAPE KEY.
Added DX11 GET CAMERA VIEWPORT WIDTH / HEIGHT functions.
Added convenience DX11 GET SCREEN WIDTH / HEIGHT functions.
Unreleased build 0.4.6.15 on 2015-09-21
Implemented a means of live patching the DBPro compiler upon execution, as well as performing compile-time "precompilation" on the DBPro source.
This facilitates the introduction of line number reporting upon errors arising within the plugin.
It also eliminates the arbitrary limit of the DBPCompiler only allowing linking to the first 1000 functions within a single dll, which the DX11 plugin is going to go beyond shortly.
Beware that further testing is required to ascertain the feasability of this approach.
Unreleased build 0.4.6.1 on 2015-09-14
Added support for drawing 2D to any camera complete with individual sprite masking (previously 2D operations were restricted to only the main (screen) camera).
Fixed a string table oversight where DX11 SET CAMERA ASPECT RATIO was previously accidentally called DX11 SET CAMERA ASPECT, while the documentation still added the RATIO word, prompting confusion at compilation time from DBPro.
Fixed a bug where orthographic cameras would not have their transform data properly initialized, thus potentially causing incorrect rendering results unless the transform had all its components manually set from DBPro after creating such a camera.
Added pivot fixing functionality for objects, limbs and cameras.
Fixed a bug where DX11 CREATE OBJECT SPHERE would fail if it wasn't created from a vertex layout containing a TANGENT0 semantic element.
Unreleased build 0.4.6.0 on 2015-09-11
Added support for free-flight transformations.
Forward, up and right vectors can now be obtained for objects, limbs and cameras to afford space and orientation calculations using those.
Fixed a bug where DX11 MOVE OBJECT / LIMB / CAMERA would not always update to use the latest rotation before moving.
Fixed a bug introduced in build 0.4.5.4 where primitive objects created using the DX11 CREATE OBJECT XXX functions would not have the default shader technique set on creation.
Unreleased build 0.4.5.4 on 2015-09-09
Added support for multi-pass shaders. The DX11 SET OBJECT SHADER TECHNIQUE and DX11 SET LIMB SHADER TECHNIQUE functions now take an optional third argument for setting the pass that the technique is to be used for.
Also added a new, very simple example project demonstrating the basics of multi-pass shading.
Unreleased build 0.4.5.3 on 2015-09-05
Rewrote the mip map auto generation functionality for DDS texture loading; it should now work with arbitrary formats, including compressed ones.
DDS textures now support import-time conversion to the standard BGRA32 (0xaarrggbb) pixel format if requested via the fourth parameter to DX11 LOAD IMAGE.
Added the DX11 SAVE TEXTURE function.
This saves a previously imported texture (image) including mip maps and specific pixel formats. It is faster to load a precomputed texture saved using this function than it is to import it from a 2D image format (BMP, PNG, JPG, etc.) each time you run your program / game.
Unreleased build 0.4.5.2 on 2015-09-04
Fixed an oversight where there was no automatic generation of mip maps for DDS textures when setting the generateMipMaps flag.
Unreleased build 0.4.5.1 on 2015-09-03
Fixed a bug where cylinder meshes (such as created using the DX11 CREATE OBJECT CYLINDER function) had a counter-clockwise face winding order and as such appeared to be in-facing.
Imported as well as engine-constructed meshes can now either import per-vertex tangents and binormals, or have these be generated from existing normal and uv data.
Fixed a bug where vertex colours would be written to the vertex buffer as four float instead of four byte values when imported from external object files, thus potentially overwriting any subsequent 12 bytes of per-vertex data if these had a higher priority such that they were imported before the colour (ie. normal data).
Fixed a bug where the meshes created by DX11 CREATE OBJECT SPHERE accidentally had their top and bottom normals reversed.
Changed the built-in quad (plane) creation routine so that these will have a proper orientation (facing the positive instead of negative Z axis).
Objects created using DX1 CREATE OBJECT QUAD will be rotated 180° around its Y axis by default to account for this.
This solves the issue where using DX11 SET OBJECT LOOKAT for an internally generated quad caused its back face (as opposed to front face) to face the given position.
Fixed an oversight where the documentation and keyword file was stating the function name DX11 GET MATRIX IDENTITY instead of DX11 GET IDENTITY MATRIX, which is the actual callable function.
Moved the DX11 GET VIEW MATRIX and DX11 GET PROJECTION MATRIX functions from the math documentation list to the camera documentation list.
Removed the DX11 GET WORLD MATRIX and replaced it with separate DX11 GET OBJECT WORLD MATRIX and DX11 GET LIMB WORLD MATRIX, in order to allow better user control.
Added the DX11 SET BOOLEAN PARAMETER / DX11 SET INTEGER PARAMETER / DX11 SET FLOAT PARAMETER functions.
These are intended for future use to allow setting further parameters without having to provide them all to the DX11 INIT function.
Fixed a string table typo making the 3-parameter version of DX11 DRAW IMAGE not being callable from DBPro.
Build 0.4.5.0 on 2015-03-04 - high speed download
Completely rewrote the mesh animation system. This fixes previous bugs (incorrect mesh deformation and an incorrect string table entry causing DX11 GET ANIMATION FRAMES PER SECOND to not return anything at all) as well as provides a generally better animation platform for possible future extensions, such as shader-based animation.
Better animation interpolation approach should provide smoother transitions when changing animations being played on a certain object.
Animations can now be played in reverse.
A certain frame range of an animation can be played instead of the entire animation, complete with a custom settable frame in that range to start the animation at.
Animations can be resumed from where they were previously stopped.
Build 0.4.0.0 on 2014-10-19 - high speed download
Added support for DirectCompute (compute shaders and GPU-writable buffer and texture resources).
Added read-only buffers for use with any shader stage to complement the GPU-writable ones. A GPU-writable buffer can be written to by one shader and read from by another. Of course such GPU-generated buffer contents can also be read back to the CPU.
Added SetBuffer()-functionality to allow up to 8 data buffers as well whereever textures could previously be bound (objects, limbs, sprites).
Added a null mesh type that allows executing vertex shaders without any actual vertex data. This increases efficiency by removing some CPU dependency where a vertex shader can construct its geometry itself, such as for screen quads or particle planes for example.
Added depth/stencil states which allow configuration of depth and stencil per-pixel testing.
All shaders will now compile using shader model 5 if in DX11 mode or shader model 4 in DX10 mode, unless you specify your own version to the shader loading functions. This differs from the earlier behaviour where shader model 5 would be used by default even in DX10 mode (which only supports SM4).
The DX11 LOAD XXX SHADER functions will now properly terminate the program if the shader compilation fails. The previous behaviour allowed the program to continue with invalid shaders, waiting for a crash when trying to access it.
Fixed a faulty string table entry which made the fillColour argument of DX11 CREATE PIXELMAP not being used.
Fixed faulty documentation and keyword entries for the DX11 TRANSFORM VECTOR ... functions to reflect the fact that they can either write their result to a target vector or create and return a temporary vector.
Added constants for sampler state texture address modes and access modes for resources (textures / buffers).
Changed the way in which mesh transform data is supplied to shaders to use a structured buffer bound to register t24 indexable by the instance id (available from the input assembler using the SV_InstanceId semantic in your vertex shaders) instead of the previous approach where per-instance data was intermingled with per-vertex data. All default and example shaders have been updated to use this new approach.
Fixed memory leaks where Rasterizer and Sampler states weren't released when changed (recreated) during runtime.
Reduced number of available cbuffer stages to 12. My previous assumption that there were 16 available was wrong and it is in fact limited to 14 (as weird a number as that is). The top two buffer resources are reserved for future per-frame data that will be supplied by the engine.
Added DX11 SET CONSTANT BUFFER which allows changing the cbuffer currently bound to a certain shader technique stage during runtime.
Improved error handling.
Added DX11 GET CAMERA FORWARD VECTOR X/Y/Z.
Fixed a bug where DX11 GET PROJECTION MATRIX accidentally returned the view matrix instead.
Fixed a bug where the various DX11 SET XXX LOOKAT functions didn't update the rotation of the underlying transform properly.
Fixed a bug where the introduction of sprite shaders from the latest version (0.3.0.0) accidentally caused sprites to be depth clipped by 3D geometry.
Fixed a problem where the DBPro program would hang after displaying the message box as part of the Ziggurat engine's error handling.
(¤ Requires more testing).
Added DX11 ??? EXISTS functions for all resource types.
Added DX11 IS SPRITE OVERLAPPING which allows for developing crude collision detection.
Fixed DX11 DRAW RECT to draw the rectangle with normal corner interpolated colours instead of using bilinear filtering, which to me is the more expected result of a gradient.
Added two new examples demonstrating how to make a screen quad without any vertex data (using a "null mesh") as well as a particle system running entirely on the GPU using a mixture of compute shader programs and rendering shaders using data generated by the compute shaders.
Build 0.3.0.0 on 2014-07-25 - high speed download
Added support for hull, domain and geometry shaders; good for hardware tessellation, displacement mapping, particles etc.
Increased maximum number of textures and sampler states per limb from 8 to 16.
Added support for custom sprite shaders
Added various updates and extended functionality to the 2D drawing system
Added
sprite layers as a way of grouping sprites together with regards to draw ordering.
Added functionality for drawing shapes, text, images and sprites directly to the screen on a per-frame basis.
The full-screen mode now lets you use a custom resolution instead of being locked to the current system resolution.
Added string table entries / dll exports for certain functions that had been previously left out of the DBP dll.
Added two new example programs with full DBPro and HLSL source demonstrating how to achieve
dynamic displacement mapping using hardware tessellation and
mass-foliage rendering using geometry shaders.
Build 0.2.0.0 on 2014-05-01:
Added backwards compatibility for DX10 / DX10.1 graphics cards. The computer must still have the DX11 runtime installed, but won't need an actual DX11-capable GPU in order for this to work. All default shaders have been recompiled using shader model 4 so that they will work with these cards.
Added support for importing and playing skeletal animations.
Added functionality for drawing lines in 3D space.
Added functionality for retrieving a limb from an object by its name.
Added functionality for creating vertex layouts from the perhaps more familiar flexible vertex formats (FVF) used for the same purpose in standard DBPro.
Added an optional flag to the DX11 GET LIMB POSITION X/Y/Z functions for retrieving limb positions after applying any animation influence.
Added various default resources that the engine will use if none are specified (vertex layouts, fonts, shaders, default textures etc.).
Improved error handling.
Fixed various issues found during development (I gave up trying to keep track of them).
Build 0.1.0.1 on 2014-03-06:
Added rudimentary error handling - at least it shouldn't just outright crash in ~75% of the cases or so now.
Added checks for whether external media files actually exist before trying to read them.
Added a default vertex layout to reduce the necessary code to setup simple tests somewhat.
Added DX11 ADD CONSTANT BUFFER to the string table (it had accidentally been omitted from there and thus unusable in the previous releases).
Fixed a bug where DX11 GET CAMERA ANGLE Y was actually returning the X angle instead.