You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
The thought behind Array2D was that it would be more efficient from a memory allocation perspective to have one fixed buffer that grows than it would be to have a vector of vectors. In reality, the runtime of inserting into the middle of one large buffer, and shifting all the resulting elements, ends up far outweighing any memory allocation overhead. In the mesh optimizer, things are added to the end of each sub-vector one by one. It isn't known up front how many elements each sub-vector will have. With vertex welding enabled, it is far more likely that a given vertex will be influenced by a large number of joints. When using the Array2D to store the influences, and a vertex with a low index has more than 4 influences, those influences have to be inserted into close to the front of the big vector, and all the other elements shifted. Array2D was doing this with a linear shift, shifting the elements by 1 at a time, and not providing any exponential growth on the amount of elements reserved by each sub-vector. The result is a linear insertion time. By contrast, using vector<vector<Influence>> instead gives us back the amortized constant insertion time. Since the skin influences are just added to the end of each sub-vector, no shifting of the elements is necessary. And since the amount of original vertex indices is known up front, the number of sub-vectors can still be pre-created, so the sub-vectors themselves never need to shift. Signed-off-by: Chris Burel <burelc@amazon.com> |
4 years ago | |
|---|---|---|
| .. | ||
| Include/Config | 4 years ago | |
| Source | 4 years ago | |
| Tests | 4 years ago | |
| CMakeLists.txt | 4 years ago | |
| sceneprocessing_editor_files.cmake | 4 years ago | |
| sceneprocessing_editor_static_files.cmake | 4 years ago | |
| sceneprocessing_editor_tests_files.cmake | 4 years ago | |
| sceneprocessing_files.cmake | 4 years ago | |
| sceneprocessing_tests_files.cmake | 4 years ago | |