On Mon, Sep 24, 2012 at 10:41 AM, Tobias Leich <em...@froggs.de> wrote: > Hi Chris, > > The performance is poor of course. > > I tried to use the piddle's pointer (->dataref or so) but it looks like > it is not pointing to a usable memory area.
$piddle->get_dataref returns a scalar reference to a perl PV whose string content _is_ the data block. You should be able to get the starting location for the pixel data (i.e., the string) via SvPV. > It looks like there are more than 4 bytes per pixel, and libSDL can't > handle that. Per the above, the get_dataref returns an RV to an Sv with the data in the string. It is just a contiguous block of memory. As far as I know, all the SDL memory buffers are just contiguous blocks of memory (ignoring variations due to stride, alignment,...) > The pdl.pl example is working, I see colored squares. I don't know what the output should look like. I'm cc-ing our PDL mailing list in the hopes that someone with access to both PDL and SDL can give it a try. Is there a cygwin install of SDL and libSDL? > I think we should need to improve our examples btw, there is not a > single comment, thats bad. > In the pdl.pl is a var $ref, which is never used. Thats a bit confusing. I think the ref is from a previous iteration in the code trying to get things working. Speaking of documentation, do you have any on the actual perl<->libSDL bindings an data structures? Trying to read XS is not the simplest way to sort things out--- especially since I am far for an expert on some of the tricky XS technologies. --Chris > Cheers, Tobias > > Am 24.09.2012 16:09, schrieb Chris Marshall: >> I took a look at the gist and it looks reasonable >> (I can't run it because I don't have the SDL module >> and lib installed on my system), however... >> >> I would expect the performance to be *very* poor >> since the image data is essentially being converted >> from packed byte data to a perl list and then poked >> a byte at a time into the SDL surface data. >> >> The better approach would be to wrap a PDL object >> (a.k.a. piddle) into an SDL surface. Then you could >> just lock, copy the data via a PDL direct assignment, >> unlock and use SDL. There is an examples/pdl.pl >> that shows how to do the wrapping. >> >> BUT, I took a look at the xs code and it appears >> that your SDL_Surface objects no longer use a >> packed-string representation for the SDL surface >> data. If that is the case, I would be surprised if >> the pdl.pl example works at all now. >> >> If someone could verify this, I would appreciate it. >> If that is the case, it should be straightforward to >> modify the SDL_CreateRGBSurfaceFrom routine >> to allow for a SvPV for pixel data as one alternative. >> >> Given the power of PDL for whole-image data >> manipulation, allowing for easy interoperability >> with the current SDL module would benefit both >> our user and developer communities. >> >> Regards, >> Chris >> >> >> On Sun, Sep 23, 2012 at 3:07 PM, Tobias Leich <em...@froggs.de> wrote: >>> Hi, Andrei asked some days ago how to load an image via PDL and but it >>> in a Surface to use it in SDL. >>> >>> The example is here: https://gist.github.com/3772701 >>> >>> I'll put that in the examples folder too. >>> >>> Cheers, Tobias >