On 06/21/2017 08:05 PM, James Richters wrote:
Is there a more direct way of getting aggpas to send its output to ptcgraph?
Currently I'm doing as in the demo programs and defining an array then using
putimage() to transfer the array to ptcgraph... this is fairly slow, especially
for fullscreen high resolution applications. I'm trying to follow through
some of the demos included with ptcpas and it seems they do something like:
{ lock surface pixels }
pixels := surface.lock;
Then using a pointer defined by pixels, the program makes changes to all the
pixels, then
{ unlock surface }
surface.unlock;
and
{ copy surface to console }
surface.copy(console, area, area);
send the changes to the screen. I'm wondering if I can have aggpas work with
the ptcgraph buffer directly, and maybe this would be more efficient than
putimage()
Any ideas?
It's more complicated than that, because ptcgraph does all these
operations in a separate thread. See the sources for ptcgraph and for
the ptcwrapper unit. However, putimage can be accelerated, although it
would still have to do a memory copy. This can be done, by implementing
and adding a PutImage procedure in the TModeInfo record, which is filled
in, during initialization. See the QueryAdapterInfo function in the
ptcgraph.pp. It does a series of:
InitMode(graphmode);
with graphmode do
begin
...
end;
And inside the 'with' statement, various procedure variables are set.
There, a PutImage routine can be added as well. Look at e.g.
ptc_putpixelproc_16bpp to see how the surface is locked and how the
actual drawing to the surface is done, inside ptcgraph.
Nikolay
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal