8

ちょっとした学習経験として、SDL (1.2.14) のいくつかの部分を Python 3.2 の拡張機能として Cython にラップしようとしています。

C 構造体を Python に直接ラップする方法を理解するのに問題があり、次のようにその属性に直接アクセスできます。

struct_name.attribute

たとえば、構造体 SDL_Surface を使用します。

typedef struct SDL_Rect {
    Uint32 flags
    SDL_PixelFormat * format
    int w, h
    Uint16 pitch
    void * pixels
    SDL_Rect clip_rect
    int refcount
} SDL_Rect;

そして、Pythonで次のように使用できるようにします。

import SDL
# initializing stuff

Screen = SDL.SetVideoMode( 320, 480, 32, SDL.DOUBLEBUF )

# accessing SDL_Surface.w and SDL_Surface.h
print( Screen.w, ' ', Screen.h )

今のところ、SDL_SetVideoMode と SDL_Surface をこのように SDL.pyx というファイルにラップしました。

cdef extern from 'SDL.h':
    # Other stuff

    struct SDL_Surface:
        unsigned long flags
        SDL_PixelFormat * format
        int w, h
        # like past declaration...

    SDL_Surface * SDL_SetVideoMode(int, int, int, unsigned )


cdef class Surface(object):
    # not sure how to implement       


def SetVideoMode(width, height, bpp, flags):
    cdef SDL_Surface * screen = SDL_SetVideoMode  

    if not screen:
        err = SDL_GetError()
        raise Exception(err)

    # Possible way to return?...
    return Surface(screen)

SDL.Surface をどのように実装すればよいですか?

4

1 に答える 1