view pytouhou/lib/_sdl.pxd @ 612:73f134f84c7f

Request a RGB888 context, since SDL2’s default of RGB332 sucks. On X11/GLX, it will select the first config available, that is the best one, while on EGL it will iterate over them to select the one closest to what the application requested. Of course, anything lower than RGB888 looks bad and we really don’t want that.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 26 Mar 2015 20:20:37 +0100
parents 19d930f9e3f0
children 80687f258001
line wrap: on
line source

# -*- encoding: utf-8 -*-
##
## Copyright (C) 2013 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 3 only.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##

cdef extern from "SDL.h" nogil:
    ctypedef unsigned int Uint32
    ctypedef unsigned short Uint16
    ctypedef unsigned char Uint8

    int SDL_INIT_VIDEO

    int SDL_Init(Uint32 flags)
    void SDL_Quit()


IF UNAME_SYSNAME == "Windows":
    cdef extern from "SDL_main.h" nogil:
        void SDL_SetMainReady()


cdef extern from "SDL_error.h" nogil:
    const char *SDL_GetError()


cdef extern from "SDL_video.h" nogil:
    ctypedef enum SDL_GLattr:
        SDL_GL_CONTEXT_MAJOR_VERSION
        SDL_GL_CONTEXT_MINOR_VERSION
        SDL_GL_CONTEXT_PROFILE_MASK
        SDL_GL_DOUBLEBUFFER
        SDL_GL_RED_SIZE
        SDL_GL_GREEN_SIZE
        SDL_GL_BLUE_SIZE
        SDL_GL_DEPTH_SIZE

    ctypedef enum SDL_GLprofile:
        SDL_GL_CONTEXT_PROFILE_CORE
        SDL_GL_CONTEXT_PROFILE_COMPATIBILITY
        SDL_GL_CONTEXT_PROFILE_ES

    ctypedef enum SDL_WindowFlags:
        SDL_WINDOWPOS_CENTERED
        SDL_WINDOW_OPENGL
        SDL_WINDOW_RESIZABLE

    ctypedef struct SDL_Window:
        pass

    ctypedef void *SDL_GLContext

    int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
    int SDL_GL_SetSwapInterval(int interval)
    SDL_Window *SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
    SDL_GLContext SDL_GL_CreateContext(SDL_Window *window)
    void SDL_GL_SwapWindow(SDL_Window *window)
    void SDL_GL_DeleteContext(SDL_GLContext context)
    void SDL_DestroyWindow(SDL_Window *window)

    void SDL_SetWindowSize(SDL_Window *window, int w, int h)


cdef extern from "SDL_scancode.h" nogil:
    ctypedef enum SDL_Scancode:
        SDL_SCANCODE_Z
        SDL_SCANCODE_X
        SDL_SCANCODE_P
        SDL_SCANCODE_LSHIFT
        SDL_SCANCODE_UP
        SDL_SCANCODE_DOWN
        SDL_SCANCODE_LEFT
        SDL_SCANCODE_RIGHT
        SDL_SCANCODE_LCTRL
        SDL_SCANCODE_ESCAPE
        SDL_SCANCODE_HOME


cdef extern from "SDL_events.h" nogil:
    ctypedef enum SDL_EventType:
        SDL_KEYDOWN
        SDL_QUIT
        SDL_WINDOWEVENT

    ctypedef struct SDL_Keysym:
        SDL_Scancode scancode

    ctypedef struct SDL_KeyboardEvent:
        Uint32 type
        SDL_Keysym keysym

    ctypedef enum SDL_WindowEventID:
        SDL_WINDOWEVENT_RESIZED

    ctypedef struct SDL_WindowEvent:
        Uint32 type
        SDL_WindowEventID event
        int data1
        int data2

    ctypedef union SDL_Event:
        Uint32 type
        SDL_KeyboardEvent key
        SDL_WindowEvent window

    int SDL_PollEvent(SDL_Event *event)


cdef extern from "SDL_keyboard.h" nogil:
    const Uint8 *SDL_GetKeyboardState(int *numkeys)


cdef extern from "SDL_timer.h" nogil:
    Uint32 SDL_GetTicks()
    void SDL_Delay(Uint32 ms)


cdef extern from "SDL_rect.h" nogil:
    ctypedef struct SDL_Rect:
        int x, y
        int w, h


cdef extern from "SDL_surface.h" nogil:
    ctypedef struct SDL_Surface:
        int w, h
        unsigned char *pixels

    void SDL_FreeSurface(SDL_Surface *surface)
    int SDL_BlitSurface(SDL_Surface *src, const SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect)
    SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask)


cdef extern from "SDL_rwops.h" nogil:
    ctypedef struct SDL_RWops:
        pass

    SDL_RWops *SDL_RWFromConstMem(const void *mem, int size)
    int SDL_RWclose(SDL_RWops *context)


cdef extern from "SDL_image.h" nogil:
    int IMG_INIT_PNG

    int IMG_Init(int flags)
    void IMG_Quit()
    SDL_Surface *IMG_LoadPNG_RW(SDL_RWops *src)


cdef extern from "SDL_mixer.h" nogil:
    ctypedef enum:
        MIX_DEFAULT_FORMAT

    ctypedef struct Mix_Music:
        pass

    ctypedef struct Mix_Chunk:
        pass

    int Mix_Init(int flags)
    void Mix_Quit()

    int Mix_OpenAudio(int frequency, Uint16 format_, int channels, int chunksize)
    void Mix_CloseAudio()

    int Mix_AllocateChannels(int numchans)

    Mix_Music *Mix_LoadMUS(const char *filename)
    Mix_Chunk *Mix_LoadWAV_RW(SDL_RWops *src, int freesrc)

    void Mix_FreeMusic(Mix_Music *music)
    void Mix_FreeChunk(Mix_Chunk *chunk)

    int Mix_PlayMusic(Mix_Music *music, int loops)
    #int Mix_SetLoopPoints(Mix_Music *music, double start, double end)

    int Mix_Volume(int channel, int volume)
    int Mix_VolumeChunk(Mix_Chunk *chunk, int volume)
    int Mix_VolumeMusic(int volume)

    int Mix_PlayChannel(int channel, Mix_Chunk *chunk, int loops)


cdef extern from "SDL_pixels.h" nogil:
    ctypedef struct SDL_Color:
        Uint8 r, g, b, a


cdef extern from "SDL_ttf.h" nogil:
    ctypedef struct TTF_Font:
        pass

    int TTF_Init()
    void TTF_Quit()
    TTF_Font *TTF_OpenFont(const char *filename, int ptsize)
    void TTF_CloseFont(TTF_Font *font)
    SDL_Surface *TTF_RenderUTF8_Blended(TTF_Font *font, const char *text, SDL_Color fg)


cdef extern from "SDL_messagebox.h" nogil:
    int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window)


cdef extern from "SDL_blendmode.h" nogil:
    ctypedef enum SDL_BlendMode:
        SDL_BLENDMODE_NONE
        SDL_BLENDMODE_BLEND
        SDL_BLENDMODE_ADD
        SDL_BLENDMODE_MOD


cdef extern from "SDL_render.h" nogil:
    ctypedef struct SDL_Renderer:
        pass

    ctypedef struct SDL_Texture:
        pass

    ctypedef struct SDL_Point:
        pass

    SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, int index, Uint32 flags)
    void SDL_RenderPresent(SDL_Renderer *renderer)
    int SDL_RenderClear(SDL_Renderer *renderer)
    SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface)
    int SDL_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect)
    int SDL_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, const SDL_Rect *dstrect, double angle, const SDL_Point *center, bint flip)
    int SDL_RenderSetClipRect(SDL_Renderer *renderer, const SDL_Rect *rect)
    int SDL_RenderSetViewport(SDL_Renderer *renderer, const SDL_Rect *rect)

    int SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b)
    int SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha)
    int SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blend_mode)