Results 1 to 10 of 15

Thread: Csfml.pas

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    PGD Staff code_glitch's Avatar
    Join Date
    Oct 2009
    Location
    UK (England, the bigger bit)
    Posts
    933
    Blog Entries
    45
    So, quick update with everything working... Albeit with a bit of a kludge - if anyone has a way to do this properly please do chime in. What I've done is this:

    Header:
    Code:
    function  bad_sfRenderWindow_pollEvent(renderWindow: PsfRenderWindow; event: PsfEvent): Boolean; cdecl; external CSFML2_LIB_GRAPHICS; external name 'sfRenderWindow_pollEvent'; 
    function sfRenderWindow_pollEvent(renderWindow: PsfRenderWindow; event: PsfEvent): Boolean; Overload;
    And in the implementation section:
    Code:
    function  sfRenderWindow_pollEvent(renderWindow: PsfRenderWindow; event: PsfEvent): Boolean; 
       
    begin 
        sfRenderWindow_pollEvent := bad_sfRenderWindow_pollEvent(renderWindow, event); 
        event^.key.code := SwapEndian(event^.key.code) + 1; 
    end;
    And now the testbed works flawlessly on my system I've bundled it all up so if you're on a 64 bit linux system - see here: https://www.dropbox.com/s/a0x4krmxbd...rdfixed.tar.gz

    Having seen the testbed code - I'm quite tempted to pick this up as an API for some really quick n dirty development (ala ludum dare ) nice work piradyne

    Edit/Disclaimer: for my 'kludge' to work, 32 bit users may have to change from longword to a 32 bit equivalent. And systems with a different endian-ness may need to remove the swapendian call... But hey - I don't have my username for no reason at all
    Last edited by code_glitch; 05-07-2014 at 03:02 PM.
    I once tried to change the world. But they wouldn't give me the source code. Damned evil cunning.

  2. #2
    Ahh cool. In the updated header I had changed the types to enum and set the min enum size to 4 which solved the keycode issue on my end (at least for delphi). The next problem (there is always a problem, haha) is how Delphi handles function result for a structure. I found this reference:
    http://rvelthuis.de/articles/articles-convert.html (go down to the return types section)

    If you call any of the routines that return a record value you will find that they do not work.... Arrrrrrrg! I've been trying to sort this out using the advance in that article but to no avail. The problem is that (at least in Delphi XE6) it simply will not let you type cast the Int64 type to anything ... other than a record that just so happens to be the same size as the Int64.... freaking Arrrrrg! So the sfVectorXXX types will work fine using this methods, but any other structure larger than Int64, Delphi will just say "invalid typecast". I have not tested this on any other Pascal compiler so not sure if it will be a problem say on FPC or not. But, code_glitch if you can check this it would be much appreciated.

    The only solution that I know of is the change the signature of the routines on the c side. I really do not want to have to do this which then means I have more work to keep them up to date and then the same for all the other platforms. Oh my... what started out a looking like a fast and simple solution is turning into a small nightmare... Such as life however... good times, good times. Haha.

  3. #3
    Alrighty then... looks like I will have to make necessary changes to the function signatures to NOT return c structs. So it's not a simple matter of "hooking" to existing DLLs or just recompiling the CSFML sources from the sfml site. I'm having to make some important changes to the code base to make it all work. It will be a little more time before the latest round of changes are completed... maybe another day or so. Because the DLL is being changed to work better with Pascal, I will rename it to PSFML.PAS. I finally was able to get the OGL spinning cube thingy to work. And now... the mission continues....

    code_glitch... thanks bro for your help. Maybe you can help me figure out how to get the code base compiled for Linux and OSX at some point.
    Last edited by drezgames; 05-07-2014 at 09:57 PM.

  4. #4
    PGD Staff code_glitch's Avatar
    Join Date
    Oct 2009
    Location
    UK (England, the bigger bit)
    Posts
    933
    Blog Entries
    45
    Sure thing and keep up the great work. Not sure about OS X since I've never properly coded for it but Linux shouldn't be a problem Just let me know when you have your headers in a state here you'd want them to go cross platform
    I once tried to change the world. But they wouldn't give me the source code. Damned evil cunning.

  5. #5
    Phew! Finally.... I got the thing finished. I put up a new build. See link in first post. As been stated, the problem with the original CSFML c bindings was that they returned direct c struct from a lot of the routines. The problem with Delphi for example is that it can not handle struct returned as function results from languages like c. It will simply ignore them. As a result, I had to make a special version that would play nice with Delphi and other similar languages.

    At the moment, the psfml dll is for win32 and psfml.pas has been tested with Delphi only. I made this for use in a project that I am working so at the moment it suites my needs. If others are interested maybe we can work together and get it tested with say FPC. I want to also get the dll built for Linux and MacOS. So I welcome the help and feedback. I think I got all of the routine fixed up, but I may have missed some. Look for any routine that has a struct param or return one. All structs should be passed/received as a pointer.

    Enjoy!

  6. #6
    Hi Jarrod,

    is possile to use it on iOS or Android?

    Thanks
    Sesilla

  7. #7
    Hi,

    According to this post:
    http://en.sfml-dev.org/forums/index.php?topic=13716.0

    sfml can be used with android/iOS... so that part is covered. However, it will be a while until PSFML can be used there... i.e.... i need to figure out how to get it compiled for those platforms. It is on the radar, just OSX and Linux will most likely come first.

    All this stuff... is waaay overly complicated. Just look at what you must do to get stuff compiled and working on different platforms. I just hate all these complexities. It's got to be easier, jeez. I almost went insane trying get the c/c++ code compiled for windows. Linux and OSX will be even more thorny spikes, haha.

    I'm working on a project that, hopefully if I can get it done... will be a lot easier to use across different platforms.
    Last edited by drezgames; 06-07-2014 at 10:49 PM.

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •