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
>

Reply via email to