Currently 0 A.D. performance is lower than that of similar RTS games, especially when playing with many units on a map. This page collects some tasks and suggestions to improve performance of pyrogenesis, the engine used by 0 A.D.. To discuss other performance related ideas you can use the Performance Optimizations forum thread.
Ongoing improvements
Feature | Relevant link(s) | Performance impact | Status
|
---|
Support OpenGL 4 | #3054 forum thread | Big | Work in progress
|
Threading to use more than one CPU core | #2618 | Big | Not started
|
Short/Vertex Pathfinder Rewrite | #1942 | Big | Not started
|
Improvement/replacement for AI entitycollections | #2370 | Big | Stalled
|
Assorted "megapatch" patches | git branch | Medium | Stalled
|
GUI code improvement | #885 | Medium | Stalled
|
ComponentManager optimization | #1860 | Medium | Stalled
|
General pathfinder optimizations | #3588 | Medium | Work in progess
|
Implement caching of terrain normals | #2039 | Medium | Stalled
|
Calculate visible patches only when frustum changes | #2431 | Medium | Stalled
|
UnitAI/UnitMotion repathing improvement | #1200 | Medium | Not started
|
Optimize TestRayAASquare in Geometry.cpp | #3588 | Small | Work in progess
|
Enable the JPS cache | #3290 | Small | Stalled
|
Disable off-screen animation | TODO in CCmpUnitRenderer.cpp | Small | Not started
|
Skinning optimisations | #2026 | Small | Stalled
|
More optimization with many selected units | #2179 | Small | Work in progress
|
Optimisation of Fixed Point Trigonometic Approximations | #2109 | Small | Work in progress
|
Implement a Quadtree/Octree | forum thread 1 forum thread 2 | ? | Stalled
|
Rewrite the AI base system in C++ | forum thread | ? | Not started
|
Benchmark mode | #837 | n/a | Not started
|
Heap usage profiling | #187 | n/a | Not started
|
Implement profiling for any thread | #807 | n/a | Not started
|
Completed improvements
Feature | Relevant link(s) | Performance impact | Appeared in
|
---|
Pathfinder optimizations | r17310 r17350 r17413 r17500 | Medium | alpha20
|
Optimize range queries | #3717 | Medium | alpha20
|
Optimization of isBoxVisible | #3712 | Small | alpha20
|
Reduce calls to CalculateTerritories | r17560 | Small | alpha20
|
Long/Tile Pathfinder Rewrite | #1756 r16751 | Big | alpha19
|
Other Pathfinder optimizations | r17251 r17284 | Medium | alpha19
|
RangeManager improvement | #2430 | Medium | alpha19
|
UnitAI improvements | r17264 | Medium | alpha19
|
Several AI optimizations | r16008 r16027 r16028 r16030 r16035 r16042 r16073 | Medium | alpha18
|
Upgrade SpiderMonkey to v31 | #2462 | Medium | alpha18
|
Reduce lag when selecting units | r16068 | Medium | alpha18
|
Unnecessary global message subscription | r16055 | Medium | alpha18
|
Add type specific method to cmpResourceGatherer | r16036 | Medium | alpha18
|
Visibility performance improvement | r16166 r16248 r16281 r16328 r16337 | Medium | alpha18
|
Improve performance of unitAI looking for new targets | r16057 | Small | alpha18
|
Improve fogging performance | r15956 | Small | alpha18
|
Replace CParser | #2589 | Small | alpha18
|
Dynamic message subscriptions | r15400 | Medium | alpha17
|
New unit renderer | r15265 r15266 | Medium | alpha17
|
Increase performance of random map generation | r15621 | Medium | alpha17
|
Use new ES6 keyed collections (e.g. Map, Set) | #2475 | Small | alpha17
|
Optimise silhouette rendering | r15483 | Small | alpha17
|
Improve GCC build flags on x86 | #2329 | Small | alpha17
|
Build fcollada with -O2 | r15675 | Small | alpha17
|
Improve UnitAI range query performance | #2156 | Medium | alpha16
|
Save GUI Sprites and Images in vectors / maps as pointers | #1984 | Small | alpha16
|
Improve speed of territory computation | r14530 r14531 | Small | alpha16
|
Speed-up of the foam generation code | r14514 | Small | alpha16
|
Make entity selection faster | #2358 | Small | alpha16
|
Minor LOS optimization | r14463 | Small | alpha16
|
Graphic settings system | #475 | n/a | alpha16
|
Renderer optimizations | r13902 r13903 r13904 r13906 r13911 | Medium | alpha15
|
Optimize fixed multiplies on Windows | r13873 | Medium | alpha15
|
CCmpRangeManager optimization | #1707 | Medium | alpha15
|
Optimization with many selected units | r14296 r14306 | Small | alpha15
|
Optimize Move() in !CCmpUnitMotion | #2094 | Small | alpha15
|
Text rendering optimizations | r14017 r14018 r14019 r14020 | Small | alpha15
|
Avoid slightly-expensive QueryInterface?() calls | r13825 | Small | alpha15
|
Improve game setup GUI performance | r13828 | Small | alpha15
|
GetPercentMapExplored optimization | #2012 | Medium | alpha14
|
Disable distance-sorting for most transparent objects | r13753 | Medium | alpha14
|
VBO support for minimap entity rendering | r13454 | Small | alpha14
|
Water improvements | r13374 r13555 r13720 | Small | alpha14
|
JS GUI code optimization | #1878 | Small | alpha14
|
AI API v3 and Aegis AI | forum thread | Medium | alpha13
|
GetInterpolatedTransform math optimization | #1854 | Small | alpha13
|