Implemented procedural loading of textures with new streamer algorithm
Fixed thread safety issues in streamer (double-buffered old level tracking variables)
Texture streamer now only processes once per frame
--HG--
branch : nfb
Textures are assigned a “weight” by tuneable criteria:
- Area of screen coverage taken by objects containing material (more accurate and generic than distance)
- Type of texture (separate weight for normal, diffuse, spec maps)
- Last used time (to keep textures loaded for recently seen objects that are outside of the view frustum)
Those factors combine together to give a “weight”, which represents a proportion relative to all other textures weights
Mipmap levels are stripped off of each texture until they occupy the amount of memory they should proportionally have
This is in contrast to the global ceiling of texture resolution that slowly drops until the textures fit
--HG--
branch : nfb
extra : rebase_source : 0710cebf76f196f5fea20b6df51be539fafbd834
- Implemented connection between LOD groups and texture streaming, which delays the switch to a new LOD group until the required textures have completed streaming in.
- Corrected bug in KRMaterial that resulted in reflection cube texture names being formatted incorrectly in the mtl file
- Scene graph now requires that lod_group nodes only be contained within lod_set nodes.
- Scene graph group nodes that do not have a LOD minimum or maximum distance are now stored as "node" rather than as "lod_group" nodes.
- IMPORTANT! Scenes exported with this version will not be backwards compatible with earlier versions due to the requirement of lod_set nodes.
--HG--
branch : nfb
extra : rebase_source : 1ff640b85338a794841ebbb2bf0087306ff59143