D GUI Framework (responsive grid teaser)

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Thu May 23 07:28:49 UTC 2019


On Thursday, 23 May 2019 at 06:07:53 UTC, Robert M. Münch wrote:
> On 2019-05-22 17:01:39 +0000, Manu said:
>> I mean, there are video games that render a complete screen 
>> full of zillions of high-detail things every frame!
>
> Show me a game that renders this with a CPU only approach into 
> a memory buffer, no GPU allowed. Total different use-case.

I wrote a very flexible generic scanline prototype renderer in 
the 90s that rendered 1024x768 using 11 bits each for red and 
green and 10 for blue and hardcoded alpha blending. It provided 
interactive framerates on the lower end for a large number of 
circular objects covering the screen, but it took almost all the 
CPU. It even used callbacks for flexibility and X-Windows with 
shared-memory, so it was written for flexibility, not very high 
performance.

Today this very simple renderer would probably run at 400-4000FPS 
on the CPU rendering to RAM.

So, it isn't difficult to write a decent performance scanline 
renderer today. You just have to think a lot about the specifics 
of the CPU pipeline and CPU caching. That's all. A tile based one 
is more work, but will easily perform way beyond any requirement.

I'm not saying you should do it. It would be CPU specific and 
seems like a waste of time, but the basics are really very 
simple. Just use a very fast bin sort for the left and right edge 
in the x-direction, then use a sorting algorithm that is fast for 
almost-sorted-lists for the z-direction (to handle alpha 
blending).

Basically brute force, no fancy datastructure. Brute force can 
perform decently if you use algorithms that tend to be linear on 
average.



More information about the Digitalmars-d-announce mailing list