We're continuing to integrate X-Plane 11.10 (with mixed success!); we'll get more info on 11.10 posted once we're in beta. 11.05r2 will come out as soon as I get my hard drive fully restored - from the looks of the comments this should be Real Soon Now™.
This post is for plugin developers - if you don't write plugins, I suggest cat pictures instead.
For as long as there has been OBJ animation, X-Plane has called the XLMGetDataXXX APIs from inside the OBJ engine as drawing is taking place. These calls eventually show up in your plugin in your dataref read callback. You might even see X-Plane code on the stack if you put a break-point in your read accessors.
This design has two major draw-backs:
- It's bad for multi-core. Since the plugin API is single-threaded, operations requiring us to know the animation state of an object (drawing, collision testing, etc.) require us to be on the main thread. So this doesn't scale well.
- It's inefficient. We might have to draw your aircraft several times - one or more times for reflections, one or more time for cascading shadow generation, and once to draw (or more for multi-monitor). The work to fetch those datarefs is done multiple times, even though we don't want different answers between drawing passes.
(In fact, it's worse than that - if you have the same dataref used in multiple animations, we just request the dataref over and over...not real clever.)
X-Plane 11.10 changes this for the first time: we are starting to collect the entire set of datarefs we need to draw a model in a single burst. We can then save these dataref results and reuse them.
This is just the beginning of a series of changes to make the rendering engine multicore-friendly. Hopefully it won't affect any add-ons* - this should have no effect unless you are doing highly illegal things with the SDK.
I am hoping we'll see some performance benefit by not spending as much time in plugin code, but I don't have numbers yet.
* Plugins that read the object-draw-location datarefs to do multiplex their datarefs on multiple models should still work; we set those object-location datarefs before we collect all of the datarefs for your model.