You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Don't generate for_* methods (so updater fields can be Option instead of Update)
Generation *_option methods to simplify updaters calling other updaters
Generate updater fields with updater(inner_type) only to support custom methods
Rename attributes
Generate field only -> updater(field)
Generate methods + fields -> updater(methods)
Add Init trait to initalize automatically after FromApp::from_app() call
Make ... a glob a glob and implements GlobUpdater
Optimize state index access in App (see Snippet 1)
Actually, current version is convenient to have a way to control state update ordering.
Avoid storing the GPU objects in an Arc, and use App::take instead
Perform last global cleanup/refactoring if necessary, including:
Remove unnecessary app.update() in tests
Put most objects outside Root in tests to simplify borrowing
Remove FontManager and instead update all Text2D when the font is updated.
Make sure all structfield doc references are still valid.
Allow deletion of states (and provide State::delete() callback, for example to delete recursively)
Possible issue: delete state of type T, and then run StateHandle::<T>::get
Possible issue: what happens to Globs when Globals state is deleted?
Either replace GlobRef by Glob, or disallow mutation from GlobRef.
Implement From/Into<[f32; N]> for Vec2, Vec3, ...
Add ModelMapper to derivate a set of models dynamically (for picking, shadow maps, ...)
Get access to shader + textures + raw material data + material type ID from MaterialGlob
Add is_main_rendering field in Target
Ensure that when TextureAnimation.part field is updated, the current frame is reset
Snippet 1:
fnroot_index_or_create<T>(&mutself) -> usizewhereT:RootNode,{let type_id = TypeId::of::<T>();let index = *self.root_indexes.entry(type_id).or_insert_with(|| self.roots.len());if index == self.roots.len(){debug!("Create root node `{}`...", any::type_name::<T>());// reserve slot in case other root node is creating during T::from_app_withlet root = T::from_app_with(self,T::init);self.roots.push(RootNodeData::new::<T>(root));debug!("Root node `{}` created", any::type_name::<T>());}
index
}
Feature
Improve the new API:
Appeverywhere instead ofContextfor more flexibilityTasks
ContextbyApp#315FromApp#316FromAppto be implemented for all glob types #317Instantcreation inFromAppderive macro #322Globals#323for_*methods (so updater fields can beOptioninstead ofUpdate)*_optionmethods to simplify updaters calling other updatersupdater(inner_type)only to support custom methodsupdater(field)updater(methods)Inittrait to initalize automatically afterFromApp::from_app()callApp(see Snippet 1)Arc, and useApp::takeinsteadapp.update()in testsRootin tests to simplify borrowingFontManagerand instead update allText2Dwhen the font is updated.structfielddoc references are still valid.State::delete()callback, for example to delete recursively)T, and then runStateHandle::<T>::getGlobs whenGlobalsstate is deleted?GlobRefbyGlob, or disallow mutation fromGlobRef.From/Into<[f32; N]>forVec2,Vec3, ...ModelMapperto derivate a set of models dynamically (for picking, shadow maps, ...)MaterialGlobis_main_renderingfield inTargetTextureAnimation.partfield is updated, the current frame is resetSnippet 1: