Highlights
- Clustered light culling new light culling path in Main plus
SRS_CLUSTERED_LIGHT_CULLINGin the RTSS - HDR display output new
hdrDisplayRenderSystem 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
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
- Lighting & rendering
- 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
- Clustered lighting
- 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:
