[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] pygame.pixelcopy.array_to_surface(Dest, Src) not working




On 24 December 2016 at 19:25, Russell Jones <russell.jones@xxxxxxxxx> wrote:

On 24 December 2016 at 17:39, Mikhail V <mikhailwas@xxxxxxxxx> wrote:
The problem is however, transpose adds overhead, ca. 10-15% performance hit,
Have you played with order='FORTRAN'? See
https://docs.scipy.org/doc/numpy/reference/generated/numpy.isfortran.html

I personally have'nt used "Fortran" order in arrays, and the perfromance for the case
I have tested does not respond to the order of axes, but it shows that applying
transpose to array is not a cheap operation and I should avoid it in the main loop.

But I have played a lot with surface.get_buffer() to find out what
is actually stored in the surface. So for 32 bit surface it turned out
that pixels are stored in BGRA format and in "C" axes order, of course
if one assumes that nothing else gets in the way during data copying.

And for surfarray:
        tmp = pygame.surfarray.pixels2d(some_surface)
        print numpy.isfortran(tmp)

Returns "True", so it is indeed "FORTRAN" order.
And that is the main point here, probably this
should not be so, and all those Surfarray/pixelcopy methods
should correspond the "C" order?
Just to avoid confusion by those familiar with numpy and additional operations.
Probably there is more criterias here that I am not aware of
and objective arguments to prefer "FORTRAN" order, apart
from having more traditional [x,y] notation?


Mikhail