SDL2-FFI

 view release on metacpan or  search on metacpan

lib/SDL2/FFI.pm  view on Meta::CPAN

package SDL2::FFI 0.08 {
    use lib '../lib', 'lib';

    # ABSTRACT: FFI Wrapper for SDL (Simple DirectMedia Layer) Development Library
    use strict;
    use warnings;
    use experimental 'signatures';
    use base 'Exporter::Tiny';
    use SDL2::Utils;
    our %EXPORT_TAGS;
    CORE::state $SDL_ASSERT_LEVEL = 2;
    sub SDL_ASSERT_LEVEL { $SDL_ASSERT_LEVEL //= 2; $SDL_ASSERT_LEVEL; }

    sub _exporter_validate_opts {
        my $class = shift;
        my ($globals) = @_;
        if    ( $globals->{'assert=0'} ) { $SDL_ASSERT_LEVEL = 0 }
        elsif ( $globals->{'assert=1'} ) { $SDL_ASSERT_LEVEL = 1 }
        elsif ( $globals->{'assert=2'} ) { $SDL_ASSERT_LEVEL = 2 }
        elsif ( $globals->{'assert=3'} ) { $SDL_ASSERT_LEVEL = 3 }

        #...;   # do stuff here
        #use Data::Dump;
        #ddx $globals;
        $class->SUPER::_exporter_validate_opts(@_);
    }
    my $platform = $^O;                            # https://perldoc.perl.org/perlport#PLATFORMS
    my $Windows  = !!( $platform eq 'MSWin32' );
    #
    load_lib('SDL2');
    #
    require SDL2::stdinc;
    require SDL2::assert;                          # Enable with use var like C<use SDL2 -assert=3;>
    require SDL2::atomic;
    require SDL2::rwops;                           # Does not belong here?
    require SDL2::audio;
    require SDL2::clipboard;
    require SDL2::cpuinfo;
    require SDL2::error;
    require SDL2::events;
    require SDL2::filesystem;
    require SDL2::gamecontroller;
    require SDL2::haptic;
    require SDL2::hints;
    require SDL2::joystick;
    require SDL2::loadso;
    require SDL2::log;
    require SDL2::messagebox;
    require SDL2::metal;
    require SDL2::mutex;
    require SDL2::power;
    require SDL2::render;
    require SDL2::rwops;
    require SDL2::sensor;
    require SDL2::shape;
    require SDL2::system;
    require SDL2::thread;
    require SDL2::timer;
    require SDL2::version;
    require SDL2::video;
    require SDL2::locale;
    require SDL2::misc;
    #
    require SDL2::platform;    # We bypass config.h to get platform.h
    require SDL2::syswm;
    #
    #
    define init => [
        [ SDL_INIT_TIMER          => 0x00000001 ],
        [ SDL_INIT_AUDIO          => 0x00000010 ],
        [ SDL_INIT_VIDEO          => 0x00000020 ],
        [ SDL_INIT_JOYSTICK       => 0x00000200 ],
        [ SDL_INIT_HAPTIC         => 0x00001000 ],
        [ SDL_INIT_GAMECONTROLLER => 0x00002000 ],
        [ SDL_INIT_EVENTS         => 0x00004000 ],
        [ SDL_INIT_SENSOR         => 0x00008000 ],
        [ SDL_INIT_NOPARACHUTE    => 0x00100000 ],
        [   SDL_INIT_EVERYTHING => sub {
                SDL_INIT_TIMER() | SDL_INIT_AUDIO() | SDL_INIT_VIDEO() | SDL_INIT_EVENTS()
                    | SDL_INIT_JOYSTICK() | SDL_INIT_HAPTIC() | SDL_INIT_GAMECONTROLLER()
                    | SDL_INIT_SENSOR();
            }
        ]
    ];

    # https://github.com/libsdl-org/SDL/blob/main/include/SDL.h
    push @{ $EXPORT_TAGS{default} }, qw[:init];
    attach
        init => {
        SDL_Init          => [ ['uint32'] => 'int' ],
        SDL_InitSubSystem => [ ['uint32'] => 'int' ],
        SDL_QuitSubSystem => [ ['uint32'] ],
        SDL_WasInit       => [ ['uint32'] => 'uint32' ],
        SDL_Quit          => [ [] ],
        },
        unknown => { SDL_SetMainReady => [ [] => 'void' ] };



( run in 2.843 seconds using v1.01-cache-2.11-cpan-2398b32b56e )