Skip to content

v14.6.0

Latest

Choose a tag to compare

@paroj paroj released this 09 Sep 21:47

Highlights

  • Clustered light culling new light culling path in Main plus SRS_CLUSTERED_LIGHT_CULLING in the RTSS
  • HDR display output new hdrDisplay RenderSystem option, implemented on D3D11, Vulkan, EGL and Win32/GL
  • Editing and camera orbit gizmos, including a dedicated sample
  • Hardening of all asset loaders fuzz-driven validation for Mesh/Skeleton serializers, scripts, streams and Zip archives

Details in announcement post

What's Changed

  • Main
    • Lighting & rendering
      • add support for clustered light culling
      • add RSC_UNIFORM_BUFFERS
      • RenderSystem - add hdrDisplay option
      • SceneManager - avoid trashing light caches on program change
      • Frustum - add Rect projectSphere overload
      • DistanceSort - fix tie-break
      • guard against anim_texture with 0 frames
      • catch circular shadow material reference (incl. follow-up fix)
      • tolerate the null renderable manualRender documents
      • PixelUtil::getMemorySize - multiply as size_t
    • GPU parameters
      • AutoParamDataSource - more efficient caching of MVP
      • move GpuParamsDirty and LastLightHash to AutoParamDataSource
      • GpuSharedParameters - add linear colours option
      • GpuSharedParameters - allow using auto params
      • GpuSharedParameters - handle ACT_LIGHT_ types
      • deprecate AutoConstantDefinition::elemenType
      • UnifiedProgram - catch delegation to unified
      • UnifiedProgram - validate delegates before recursing
    • Scene graph
      • add Node::removeFromParent (#3606)
      • assert that Node does not add itself as child
      • Node - make _setDerived functions always work
      • Node - use vector for ChildUpdateSet
      • const Node::convert functions and helpers to get Pose indices from Mesh
      • SceneNode - selectively display SceneNodes
      • SceneNode::setDirection - compute parent space
    • Animation & skeletons
      • Root - make sure very first frame applies animation and updates controllers
      • Animation - null VertexData in createVertexTrack is invalid
      • Entity - add _updateSkeleton() and some explanation of when to use it
      • Entity - showBoundingSpheres()
      • SkeletonInstance - remove broken overrides and pass info to ctor
    • Mesh
      • derive numLods from MeshLodUsageList
      • properly fix vector::size usage
      • fix buildTangentVectors comment
      • TangentSpaceCalc - ensure parity is never 0
    • MeshSerializer
      • disable legacy formats by default
      • add basic buffer size checks / do bounds checking
      • add checkStreamRemainingSize (also for v1.8)
      • add validation to MeshSerializerImpl_v1_2 path
      • validate numLods (also in legacy loaders) and numLODs before assignment
      • sync LODlist in legacy loaders, initalise exportedLodCount
      • reject duplicate LOD data and multiple LOD chunks (also for 1.8)
      • validate LOD bufferIdx, manual LOD flag and MeshLodUsageGenerated
      • assert that generated LOD has indexData
      • improve/tighten vertex element validation, ensure vertex declaration exists and is complete
      • validate element offsets, more geometry data validation, move null check to calcGeometrySize
      • validate EdgeLists and edge data, catch duplicate edge data
      • release EdgeData on exception, set mEdgeListsBuilt early to ensure cleanup
      • readExtremes - validate data
      • tighten validation to chunk instead of stream
      • MeshVersionData - use unique_ptr for memory mgmt
      • keep mMeshLodUsageList in sync (later reverted)
    • SkeletonSerializer: validate bone handles
    • Streams & serialization
      • Serializer - make destructor virtual, normalize bool values, validate mCurrentstreamLen
      • StreamSerialiser - validate Chunk length and string length
      • StreamSerialiser - avoid memory leak / fix potential memory leak
      • checkStreamRemainingSize - catch invalid stream state
      • DataStream::getLine - do not stop at \0
      • MemoryDataStream - also clamp skip operation, fix read cnt underflow, seek clamps to end
    • Image codecs
      • Codec - deprecate magicNumberMatch, provide default magicNumberToFileExt
      • DDS - validate image metadata
      • KTX - validate image metadata
    • Scripts
      • ScriptCompiler - catch recursive variable expansion, validate variable lookup walk
      • ScriptCompiler - validate inheritance parent, check parent type before casting, simplify locateTarget
      • ScriptLexer - limit nesting depth to 100, reduce MAX_BRACE_LAYER
      • ScriptParser - ensure correct import format
      • ScriptTranslator - catch unified shader delegating to itself, check parent type before casting
      • ScriptTranslator - validate affector and emitter parent, validate Compositor input id
      • ScriptTranslator - validate/fixup texture anim format, fixup point attenuation parsing
      • ScriptTranslator - tighten compositor texture, scene_blend and single parameter parsing
      • ScriptTranslator - fix advancing in shared_params
      • ScriptTranslator - simplify code (getAtomId, short addError, processResourceName, iteration and particle system parsing)
    • ZipArchive
      • add decompression bomb protection and improve the check
      • close file on error path
      • find* - fix non recursive matching
      • fix zip_entry_open call in the non-strict lookup fallback
      • update bundled zip to v0.3.14
    • Math
      • add Math::inverseLerp
      • lerp - use faster formulation
      • use faster Sign formulation
      • saturate - implement in terms of Clamp
      • fix off by one in uint16Cast
      • make Radian and Degree trivially copyable
    • Misc
      • Any - dont create a vtable
      • make TRect trivially copyable
      • move operator<< to cpp so we dont need ostream
      • DefaultDebugDrawer - slight cleanup
      • Bone - update setManuallyControlled doc
      • Profiler - fixed duplicate setEnabled(true) causing shutdown
      • correctly set android platform libs
  • RTSS
    • Clustered lighting
      • add SRS_CLUSTERED_LIGHT_CULLING
      • allow injecting clustered lights into light SRS
      • ClusteredLightCulling - check for hasPerRenderableLights and per-pixel lighting
      • Froxels - use bitfieldExtract if available
      • signal per-pixel lighting being active
    • Lighting
      • FFPLighting - do light iteration in shader
      • Lighting - use smoothed distance attenuation
      • do not attenuate directional lights
      • fix attenuation when using relaxed precision
      • PerPixelLighting - fix precision for D3D11 compat
      • GBuffer - disable light evaluation
    • CookTorrance / IBL
      • allow loading AO maps from R channel
      • ambient should mix with diffuseColour
      • make energyCompensation visible
      • use same light count logic as FFPLighting
      • relaxed precision fixes, fix typo in/out, fix uninitialized warning
      • IBL - dfgLUTmultiscatter is in RGN_INTERNAL
      • IBL - setNumMipmaps is invalid if we have no texture
      • IBL - we have to also flip the diffuse normal
      • fix dfgLUT border addressing
    • allow referencing shared_params
    • write uniform parameters before deps for global access
    • cloneShaderBasedTechniques - also copy non-FFP marks
    • PSSM - improve debug drawing
    • fix static initialization order
  • UnifiedShader: add uvecN types
  • Overlay: add support for imgui 1.92
  • Bites: provide editing gizmos and camera orbit gizmo including sample (#3557)
  • Python/HighPy/SWIG
    • HighPy - imshow: allow displaying data from memory
    • HighPy - PixelBox now needs a memoryview
    • HighPy - window_pixel_data: return a memoryview
    • move image data construction to SWIG
    • SWIG - allow 3D image formats via memoryview
    • SWIG - enable compactdefaultargs on python
  • Plugins
    • DotScene - unregister in uninstall
  • Codecs
    • STBI - catch stbi_failure_reason = NULL
    • STBI - set STBI_MAX_DIMENSIONS
    • STBI - validate image dimensions
    • Assimp - fix keyframe predecessor search and interpolation factor units
    • Assimp - key stray scale keyframes by their own time, fall keyless tracks back to bind pose
  • Tools
    • MeshUpgrader - default to tangents with parity, warn if we dont generate tangents
    • XMLConverter - make bone hierarchy optional in XML, only write it if needed
    • XMLConverter - process bones in single pass, remove unused function declaration
  • D3D11
    • implement hdrDisplay
    • blitFromMemory - correctly respect pitches
    • getMaximumDepthInputValue should be +1
    • HardwareBuffer - auto-discard if possible
  • GLSupport
    • EGL - add basic hdrDisplay support
    • EGL - chooseGLConfig should not be throwing
    • Win32 - implement hdrDisplay
    • factor out _blitFromMemory and common _unregisterContext
    • make sure recreated FBO binds depth
    • correctly set platform libs on android
    • OSX - do not dereference a NULL display mode list (#3700)
  • GL*
    • GL & GLES2 - clean up _blitFromMemory
    • TextureBuffer - no need to reset pixelbox
    • GL3Plus - fix compute float count calculation
    • GLES2 - disable BGRA on WebGL
    • GLES2 - TextureBuffer: simplify & fix blitToMemory
  • Vulkan
    • add VK_EXT_metal_surface window support (macOS via MoltenVK)
    • implement hdrDisplay
    • bump max texture units
  • Metal: export the RenderSystem include directories on the target
  • Android
    • keep the internal cpufeatures target off the installed export
    • update template
  • CMake: allow FMA for some components
  • Tests
    • move fuzz tests to ogre tree
    • add script_fuzz
  • Docs
    • SceneManager - update usePerRenderableLights doc
    • update RTSS documentation
    • document UseScale on Node methods (#3599)
  • Samples
    • Skeletal Animation - showcase root motion animation
    • MultiLight - showcase clustered light culling
    • Browser - also log error in Windows

Development is funded by your contributions

If you use Ogre commercially, consider supporting its development in return: