Clutter Wiki

Views
From ClutterProject
Jump to: navigation, search

Contents

Cogl Road Map

See also: ClutterRoadMap

This is the official road map for Cogl API and features. Please send other suggestions to the Clutter mailinglist or open a feature request bug.

1.4

Target date for API freeze: 2010-08-23

N.B.: This is only a preliminary road map for Clutter 1.4

High level features

These reflect the main feature requests we have currently so we can aim to keep development focused:

Render lists
Here we are aiming to use proven game engine techniques to provide scene graph level optimizations for how we render in Clutter. This is a bit like the Cogl journal on steroids and will allow us to reorder all the primitives of the scene to minimize state changes and allow Clutter to use the depth buffer to emulate the painters algorithm we currently use. It's an ambitious target but critical for optimizing many common UI layouts such as virtual keyboards, contact lists or icon views which currently cause a huge amount of state changes.
Cogl tracing
Here we are trying to provide the tools to record Cogl function calls to a file and allow us to replay those commands in isolation. This will be valuable for analyzing and tracking the performance of Cogl and our use of OpenGL for real world applications.
Large displays
Here we are aiming to give Clutter the means to support displays larger than the GPUs render target limits. Much of this is a Clutter problem but instead of extending the Clutter backends to manage multiple native windows it would probably be best to formalize the CoglOnscreen abstraction and start migrating the backends to use them instead. Clutter will then need to add some internal abstractions that allow stages to be comprised of multiple CoglOnscreen framebuffers.

Detailed schedule

description effort status
Provide the mechanisms for Clutter to perform scenegraph level re-ordering of primitives to optimize GPU utilization.
Implement a CoglRenderlist API which should provide a means to maintain a list of retained primitives and help Clutter sort those primitives by state, define barriers according to certain state changes (that don't allow sorting entries across barriers) and to traverse them for painting with a fast index for transparent vs opaque primitives. 3 weeks not started
Re-work CoglMaterial internals so we track the ancestry of materials (to give a natural state sorting metric); allow sparse tracking of state (for a more scalable design as we plan to track more state in CoglMaterial); allow cheap copying (for fast logging into a journal/renderlist) and allow cheap "linking" (so Clutter can derive the materials for rendering a renderlist but with weaker semantics regarding modification of its ancestors.) 1 month rib: pending review
Add a fragment processing backend absraction in CoglMaterial so we can have separate fixed, arbfp and glsl backends, continuing the ARBfp work that Damien started. ~ 1 week more rib: Done. (merged into master)
CoglTexturePixmapX11 so we no longer have Clutter using raw GL. (Also a dependency for cogl-trace) 3 weeks bpeel: Done. (merged into master)
Copy-on-write CoglTextures. When logging primitives into a renderlist we can't allow modifications to the textures referenced by the corresponding material. 1 week bpeel: started, but decided not needed
Retained Cogl Path handles supporting cheap copy-on-write semantics for fast logging into a journal/renderlist N/A bpeel: Done. (merged into master)
Retained Clip stack handles supporting cheap copy-on-write semantics for fast logging into a journal/renderlist. N/A bpeel: Done. (merged into master)
Add cogl_handle_get/set_user_data API so that Clutter can associate private data with the CoglMaterials of renderlist entries. Namely it's own private materials that force the vertex processing to override the z values. 1 day rib: Done. (merged into master)
_clutter_actor_get_children: We need a reliable way to iterate the children of any actor not just containers. 1 day more ebassi: started
Formalize the the per-parent state tracking in ClutterActors. To support renderlists we need to associate a list of primitives with a specific parent of a given actor. 1 day not started
A toolkit hook mechanism for Clutter to hook into cogl_push/pop_framebuffer and cogl_begin/end_gl so Clutter can switch between renderlists or force a flush. 2 days not started
Modify Cogl primitives so they can be redirected through a CoglRenderlist 2 weeks not started
Research how best to sort and render renderlists for Gen X vs SGX hardware. 2 weeks not started
Make cogl material responsible for the depth testing state. Add cogl_material_{get,set}_depth_test_enabled, cogl_material_{get,set}_depth_test_function, cogl_material_{get,set}_depth_writing_enabled, cogl_material_{set,get}_depth_range APIs, write a corresponding unit test and deprecate cogl_set_depth_test_enable 2 days rib: Done. (but not merged into master)
Add cogl_framebuffer_set_depth_range API 1 day rib: decided to make it a material API instead
Add cogl_material_set_fog API and deprecate cogl_set_fog and cogl_disable_fog 2 days not started
Add cogl_material_set_backface_culling_enable API and deprecate cogl_set_backface_culling_enable 1 day not started
Cogl tracing capabilities 3 weeks more rib: started (branch wip/cogl-trace)
Improve math utilities (Add quaternion + euler APIs) 2 weeks more rib: debugging + docs (branch wip/cogl-math)
Add cogl_texture_set_purgeable API to support APPLE_object_purgeable extension 2 days more ebassi: started (branch wip/object-purgeable)
Add cogl_material_set_front_face_order API 1 day not started
Add cogl_material_set_color_mask API 1 day not started
Improve introductory documentation, including description of coordinate spaces, transformations and basic GPU principles not started
Support compressed texture formats not started
Add cogl_framebuffer_get_{red,green,blue,alpha}_bits API and deprecate cogl_get_bitmasks N/A ebassi: done (patch attached to the bug)
Personal tools