Urho3D 1.6 release category:

Source package

Binary package

Porting notes

If you are migrating your existing project from earlier release version of Urho3D, please read this notes.

Changelog

  • Physically based rendering shaders, techniques, renderpaths and example materials / demo scene.
  • AngelScript support on Emscripten and 64-bit iOS, based on generic bindings.
  • JSON load/save option for scenes, nodes and materials.
  • Tags added to nodes & UI elements.
  • EventProfiler subsystem.
  • Improved mouse mode handling on Emscripten.
  • Texture2DArray class added.
  • RibbonTrail class added.
  • Variance shadow mapping option.
  • Normal offset option as an alternative to reducing self-shadowing artifacts.
  • Arbitrary (freeform) vertex declarations. Legacy bitmask based vertex declarations emulated using them.
  • API-independent graphics class headers. Should ensure Urho library ABI compatibility between builds made on different APIs.
  • PackageFile support also on Android from within the .apk.
  • Optional additive animation blending mode. Based on calculating difference from the bind pose on the fly.
  • Directional billboard mode.
  • Fixed screen size option for billboards & Text3D.
  • Rendering scale added to UI.
  • Context-wide global variable implementation. Replaces the previous script-only global variables mechanism.
  • Aggregate initializers for containers.
  • C++11 binding to Urho events using std::bind.
  • C++11 variadic template version of SendEvent().
  • 64-bit integer support in Serializer / Deserializer.
  • Template versions of math functions.
  • Container class API improvements.
  • SharedPtr / WeakPtr implicit upcasting support.
  • Matrix2 class.
  • Rename escape key name to KEY_ESCAPE for consistency with SDL.
  • Make keycodes lowercase for consistency with SDL.
  • API to get joysticks by name.
  • Detect number of CPU cores on Emscripten if possible.
  • Utilize SDLActivity’s get arguments feature.
  • Configurable minidump write location.
  • Engine parameter for enabling/disabling high DPI window mode.
  • Skip using the engine frame limiter on iOS when targeting 60 fps or above, to prevent erratic frame rate from sleep calls.
  • Text effect enhancements.
  • TmxFile2D & SpriteSheet2D improvements.
  • Sprite2D edge offset parameter for removing bleeding artifacts.
  • Drawable2D distance sorting.
  • Interpolation mode IM_NONE (no interpolation) added to ValueAnimation.
  • Segmented PhysicsWorld ray query for performance optimization.
  • Hit fraction added to physics cast results.
  • Allow custom collision shape subclasses & custom Bullet collision configuration.
  • Expanded data returned from NavigationMesh path queries.
  • Clone() added to Technique, ParticleEffect & ParticleEffect2D classes.
  • SetFontSize() added to Text & Text3D.
  • IntRect / IntVector2 setters & getters added to XMLElement.
  • TryAcquire() added to Mutex class.
  • Vector2 Angle() function added.
  • StringUtils ToInt() & ToUInt() take an optional base parameter.
  • Convenience function Context::CreateObject.
  • Convenience template version of ReleaseResource().
  • Allow Vector4 to substitute for Color in Variant::GetColor().
  • Additional Variant types can function as parameters for AngelScript function / method calls.
  • Improve FixedUpdate event to allow it to originate from either PhysicsWorld or PhysicsWorld2D.
  • Particle effect, animation playback & sound playback finish events.
  • CrowdAgent emits events also from its node.
  • Event sent after cloning a Node or Component is done.
  • b2Contact pointer added to PhysicsWorld2D collision events.
  • Execute DelayedStart() before FixedUpdate() if FixedUpdate comes sooner than the first Update.
  • Allow updating AnimatedModel’s bone bounding box manually.
  • Texture SetData() functions modified to use raw Image ptr for consistency and script bindings simplicity.
  • Graphics::SetDither() for controlling backbuffer dithering, relevant on mobiles with 16bit backbuffer.
  • Graphics::Draw() & DrawInstanced() overload with base vertex index.
  • UIBatch::AddQuad() with arbitrary positions & UVs.
  • Use glReadPixels() to get pixel data from rendertargets on GLES.
  • Highp precision used for GLES shadows.
  • Change deferred shaders to use proper world space to be easier to understand.
  • Send ElapsedTime uniform to UI rendering.
  • Allow overriding culling mode in a pass.
  • SendEvent renderpath command that can be used to interleave custom low-level rendering.
  • TRANSLUCENT lighting option in shaders, which takes absolute value of N dot L.
  • NOUV shader option added for D3D11 compatibility when model data does not contain UVs.
  • Buffer variants supported as shader parameters; will be interpreted as an array of floats.
  • View & inverse view uniforms supplied to shaders. Obsolete camera rotation uniform removed.
  • Skydome shader & technique added.
  • Optional object index vertex attribute that can be used by custom instancing schemes.
  • Optional additional per-instance Vector4 data, supplied to the shaders as extra texcoords.
  • Logging of D3D9 / D3D11 HRESULTs and proper failure check discipline for D3D object creation.
  • Improved occluder sorting.
  • Optimize to not render invisible View3Ds.
  • Optimized Image::Clear() for RGBA case.
  • Optimized SinCos() function added to speed up e.g. billboard calculations.
  • Optimized IsPowerOfTwo() function.
  • Optimization to amount of Frustum::UpdatePlanes() calls in rendering.
  • Update to Civetweb 1.7.
  • Update to GLEW 1.13.0.
  • Update to libcpuid 0.2.2.
  • Update to LuaJIT 2.1.0.
  • Update to LZ4 r131.
  • Update to nanodbc 2.12.4.
  • Update to pugixml 1.7.
  • Update to SDL 2.0.4.
  • Update to SQLite 3.13.0.
  • Update to stb_image 2.12, stb_image_write 1.02, stb_rect_pack 0.08 & stb_vorbis 1.09.
  • Use Readline library if available for Lua & SQLite.
  • Generic ARM on Linux platform support.
  • Android NDK r11 & r12 support.
  • Reduce exposure to SDL headers from Urho’s headers.
  • Support for Codelite CMake invocation.
  • Improved multiarch support in auto-detection.
  • Scaffolding rake task improvements.
  • Build speedup improvements.
  • Avoid SDL when building mini Urho3D for PackageTool.
  • Avoid hardcoding sample list in build script.
  • Output option in PackageTool.
  • Enhance Urho3D-CMake-common module to auto find Urho3D library.
  • Automatical bumping of year in the source code when crossing to a new year.
  • Move to use subtrees for some thirdparty libraries.
  • For downstream use: auto detect Urho3D lib type from build artifact.
  • Refactored mechanism to detect CPU instruction extensions for build.
  • Set PCH flags at target level, not compile unit level.
  • Perform cleanup when installing headers to the build tree.
  • try_run logic to auto-discover build options.
  • try_compile mechanism to verify ABI compatibility of found Urho3D library.
  • SDL build options added: PulseAudio, EGL, Wayland, Mir.
  • LuaJIT related build fixes.
  • Eliminate the need for KNET_UNIX define.
  • Enable class index in documentation.
  • Editor: if original node selected when pasting, do not paste as its child, but rather behave similarly as if performing a Duplicate action.
  • Editor: particle editor improvements.
  • Editor: node & UI element tag editing.
  • Editor: use fixed size billboards for the debug icons.
  • Editor: add gamma correction & HDR rendering toggles.
  • Editor: reorder components, nodes & UI elements by holding down Ctrl when drag-dropping.
  • Editor: fix sharp edges in UI when opacity is reduced.
  • Editor: fix “is enabled” checkbox moving to wrong location when node is edited.
  • AssetImporter: allow saving animations without actual skinned geometry.
  • AssetImporter: allow saving a subset of an animation.
  • AssetImporter: generate non-deforming skinning information when a model has non-skinned subgeometries.
  • AssetImporter: support multiple color & UV channels.
  • Fix various missing script bindings & missing export specifiers for classes.
  • Fix various uninitialized variables.
  • Fix hardware shadow support always returning false on OpenGL after the Graphics headers refactor.
  • Fix wrong UV index in drawable OBJ export.
  • Fix backbuffer not getting cleared when just UI & texture viewports are being rendered.
  • Fix DirExists() on Android.
  • Fix potential crash when using MessageBox from C++.
  • Fix erroneous fog shader uniform being set in some rendering cases.
  • Fix serialization of localized Text elements.
  • Fix use of deprecated usleep() function in favor of nanosleep().
  • Fix UI slider knob behavior when it’s fixed size.
  • Fix toggling mouse visibility right at application start.
  • Fix instancing in HLSL water shader.
  • Fix Android / iOS reporting mouse as grabbed.
  • Fix update event subscription in Material class.
  • Fix window getting maximized after fullscreen -> windowed change on Windows + SDL 2.0.4.
  • Fix bogus SDL joystick registration on Android.
  • Fix AngelScript ScriptInstance variable hot reload. Removes the need for a specific implementation from the editor.
  • Fix OgreImporter animation save & Jack’s walk animation.
  • Fix incorrect enemy orientation on spawn in NinjaSnowWar.
  • Fix insertion of further drawable updates during threaded drawable update.
  • Fix runtime DLL not being installed to tool directory.
  • Fix Emscripten performance loss due to enabling SSE mode incorrectly.
  • Fix ODBCConnection compile error on windows.
  • Fix incorrect terrain index data generation.
  • Fix AssetImporter to handle potential multiple root node situations better.
  • Fix incorrect 2D drawable culling optimization.
  • Fix transform applying order for parented 2D rigidbodies.
  • Fix incorrect rendering caused by not updating shader parameter has when a material is cloned.
  • Fix FileWatcher getting in stuck on read() on Linux.
  • Fix WorldToHeightMap() in Terrain.
  • Fix 2D particle emitter potentially causing memory overwrite by emitting more particles than allocated.
  • Fix culling issues when non-master AnimatedModels are larger than the master.
  • Fix potentially incorrect viewport update order.
  • Fix D3D11 dynamic textures to use only 1 mip level, as more does not work.
  • Fix SDL Windows-specific mouse move internals not working in some cases (e.g. without Aero) leading to wrong relative mouse input.
  • Fix basepath not being applied to file entries in PackageTool.
  • Fix initial position of kinematic rigidbodies after being loaded.
  • Fix temporary AnimatedModel’s bones to be temporary as well.
  • Fix SSE / ABI incompatibility related crashes with Bullet.
  • Fix HasSubscribedToEvent() missing from scripting.
  • Fix UI scrollbar snap epsilon attribute default value.
  • Fix error in DropDownList serialization.
  • Fix String::DecodeUTF16().
  • Fix deploying .pak files to Emscripten samples.
  • Fix UI style late applying when a child element is added.
  • Fix CustomGeometry bounding box update when committing new data.
  • Fix sprite textures to use clamp addressing by default instead of wrap.
  • Fix depth test potentially disabled in OpenGL by third party programs such as MSI Afterburner (re-enable every frame.)
  • Fix writing rendertarget inverse size uniforms incorrectly (Vector2 instead of Vector4.)
  • Fix off by one error in mipmap data size counting.
  • Fix FindUrho3D CMake module behaving incorrectly when called more than once.
  • Fix PhysicsWorld::GetRigidBodies() to use immediate contact test for static bodies.
  • Fix sampling of depth buffer in read-only mode on D3D11.
  • Fix ForwardDepth renderpath potentially missing depth clear on OpenGL.
  • Fix DropDownList placeholder text not auto-hiding when an item is selected.
  • Fix possible crash issue when exiting engine with background loaded resources still in queue.
  • Fix FindDirect3D CMake code for CMake old versions.
  • Fix issues with parented rigidbodies when moving them from code.
  • Fix math class equality operator in SSE builds on specific Visual Studio versions.
  • Fix ScreenToWorldPoint() to return the specified Z distance.
  • Fix vegetation shadow shader on D3D11.
  • Fix & simplify setup of the “universal” builtin target in iOS build.
  • Fix build system to install/package Emscripten shared js & data files.
  • Fix Application.h to be usable without other include files.
  • Fix lighting interpolator order in D3D11 shaders.
  • Fix node’s Z coordinate not retained in 2D physics movement.
  • Fix potential crash and performance issues in Octree raycasts by making them non-threaded; in practice the spin-up time for work items could override any threading benefits.
  • Fix missing DelayedStart functionality in LuaScriptInstance.
  • Fix point fill mode on D3D11.
  • Fix input focus loss when using an external window handle.
  • Fix missing D3D SDK search on VS2010 and earlier.
  • Fix ABI incompatibility in BoundingBox class depending on URHO3D_SSE flag.
 

Unique documentation page title category:

In order to get a more favourable SEO factor on our documentation pages, we have changed our documentation page generation logic slightly to generate a unique title per page. Instead of using a single title “Documentation” for all the pages like in the past, we now use the value of the Doxygen’s page tile in the HTML title tag. We have also take this opportunity to enable the jekyll-seo-tag gem for our website. So now all our pages, including documentation pages, have auto-generated SEO tags. Hope we have done everything correctly.

 

(Fixed) Documentation pages generation issue category:

It has come to our attention that all our documentation pages have not been generated correctly recently. All the pages currently do not have the “doc-switcher” which supposedly allows user to switch the version of the page to the corresponding Urho3D release that you are using. The pages also have missing CSS and/or JS files for the “doc-navigation” to function properly. For the former issue, you can workaround to switch the version manually by altering the URL to the version you want to use. e.g. https://urho3d.github.io/documentation/HEAD/index.html for HEAD version or https://urho3d.github.io/documentation/1.5/index.html for 1.5 version. You only need to do this once as all the other links found in a documentation page will follow to your chosen version (they are statically generated for one specific version). Unfortunately there is no good workaround for the latter issue. You may find it difficult in navigating some of the documentation pages as the result.

The root cause of the problem has been identified. We have hit a bug in the GitHub Pages which is still not running the latest good version of the Jekyll. The issues are not reproducible locally with the latest version. Therefore, we have decided not to take any action and to wait it out for GitHub Pages to upgrade their Jekyll version. We are sorry for any inconvenience has caused.

UPDATE: It appears that part of the cause was self-inflicted. We had not adapted all our Liquid tags correctly after migrating to Jekyll 3.0. Correcting that seems to make GitHub Pages happy as well.

 

New and improved class index page category:

A few days ago one of the contributor has submitted a PR to switch on the generation of the class index page for our doxygen-generated documentation. The new index page can now be accessed under the ‘Classes’ documentation navigation button in our main website. We have improved the usability of this class index page. It is also vieweable using a wide variety of browser viewport sizes like all our pages do. Happy coding!