+16
Under review

Direct3D 10 Renderer fork of OxyPlot, I've done it

Sergey Popov 3 years ago in New features • updated by Ss Oi 2 years ago 6
69ms vs 623ms per frame on two StairStep series with 35182 points each, approx. 1.6Mb of binary data

Works only on Direct3D10, but I assume it can be ported to Direct3D9

The problem is: I want to contribute to OxyPlot, but I guess I'd better put an opensource fork with credits, so someone can port rendering from it to Oxy. Rendering is kinda heavily optimised now, all up to LineSeries itself, and I will continue to get rid of unnecessary stuff. Right now actual rendering is mostly carried out by geometry shaders. I push raw points' data in screen coords to the vertex buffers as line lists and strips, and shaders process it into triangle stripes. Now, for example, I'm moving line clipping routines to the vertex shader stage frustum culling. I'd like to move screen coords transformation to the shader stage too in the nearest future.

So stay tuned, major performance breakthrough for OxyPlot is near.


Under review
Hi Sergey, this is very cool! Wow :-) It would be great to see a pull request for such a new port. Please create a GitHub issue first, and reference it in the commit descriptions. 

Is it based on SharpDX? Any other dependencies?
Yeah, It is SharpDX based, no other deps, but actually a lot of tweaks were made within old code, to reduce the amount of calculations, mostly while going from screen coords to axis coords and vice versa. As a result my fork will be faster even without GPU acceleration. Now I'm working on using single-precision calculations where it is reasonable. Memory footprint became a bit larger and adding points. Gimme a week and I'll fork :)

10 times faster rendering sounds good. But does this project dead?

Can you please upload an example in which the performance with SharpDX definitively is better? That really helps, and thank you indeed.