[fpc-pascal] FPC Graphics options?

Nikolay Nikolov nickysn at gmail.com
Fri May 12 20:10:12 CEST 2017



On 05/12/2017 10:30 AM, Marco van de Voort wrote:
> In our previous episode, Graeme Geldenhuys said:
>> Speed:
>>     In recent graphics work I've done, I've noticed that FPC is fantastic
>>     at created cross-platform applications. But the generated binaries
>>     are NOT fast at all - no matter how many compiler parameters and
>>     artificial speed optimisations we tried to implement. Sloppy Java
>>     code ended up 3x faster than the best I could get out of FPC
>>     generated binaries.
> (Quite confusing paragraph mixing up graphics (which is typically bound in
> speed by the drawing API that you use) and generated code speed, what did
> you actually mean?)
Indeed, Graeme's example (a software raytracer) has absolutely *nothing* 
to do with the slowness of the win32/win64 graph unit. The bottleneck in 
the graph unit implementation is the speed of the windows gdi drawing 
routines, which were never really designed to be used in the way Turbo 
Pascal's graph unit works. Because the TP7 graph unit was designed for 
DOS, where you get direct access to the video hardware, normally, 
there's simply no concept for double buffering. TP7 graph unit programs 
never really render a full frame and then call SwapBuffers(), they just 
draw on the screen and it's immediately visible. The way the win32/win64 
graph unit is implemented, is by effectively doing the equivalent of 
SwapBuffers() after each graph procedure/function call that draws 
something. Ptcgraph uses a different approach and that's why it is in 
practice much faster. All the ptcgraph graph drawing procedures and 
functions render to a software framebuffer, which is periodically 
blitted to the screen in a separate thread (at about 60 fps, but the 
framerate isn't really controlled). This works great, especially on 
modern multicore CPUs. Of course, this goes up to a point, where the 
resolution gets too high for software rendering and the framerate drops 
somewhat (but this happens at Full HD resolutions, that TP7 programs are 
unlikely to use - and even there the speed may be acceptable, if the CPU 
is fast enough). The main disadvantage is that you get a CPU core loaded 
at 100%, but this isn't really that much worse, compared to what certain 
"modern" applications do :) I even know a happy ptcgraph user, who uses 
ptcgraph in Full HD resolutions on a Raspberry PI. :) So, please, try 
ptcgraph and see if it makes a difference for you.

Best regards,
Nikolay



More information about the fpc-pascal mailing list