DXSceneIs |
IsCachingCommandLists a Boolean that specifies if Ab3d.DXEngine records all DirectX commands into DirectX CommandLists.
When IsCachingCommandLists is set to true, then Ab3d.DXEngine records all DirectX commands into DirectX CommandLists and reuses the command lists on next frame if only camera and light properties have changed. In this case only the new camera data is loaded into the graphics card and then all the previously rendered CommandLists are replayed. This way the rendering performance is greatly improved because the render time is almost zero (this is the time to prepare and process the DirectX commands by the Ab3d.DXEngine and by the DirectX and drives).
Note that command list caching works only for objects in StandardGeometryRenderingQueue - that rendering queue contains only standard geometry objects with WpfMaterial or StandardMaterial.
In cases when the frame is rendered because of some other changes (for example change in material or transformation), then caching CommandLists slightly decreases performance because the actual rendering needs to wait until the CommandLists are prepared (otherwise the rendering on the main thread starts immediately - the DirectX commands are immediately sent to the graphics card). What is more the multi-threaded distribution of work is not so granular and does use the cores so good based on their performance.
A general rule is that if your scene is not changed a lot and most of times the new frames are rendered because the camera is changing, then the performance benefits of caching CommandLists are much bigger then slight slowdown when rendering a changed scene.
Note that actual CommandLists caching starts when number of objects to render is bigger then the threshold value defined in the static MinObjectsForCachedCommandLists field from the RenderObjectsRenderingStep (400 by default).