示例#1
0
 def stop(self):
     if __debug__:
         sdl2.SDL_DestroyWindow(self.tileDataWindow.window)
         sdl2.SDL_DestroyWindow(self.tileView1Window.window)
         sdl2.SDL_DestroyWindow(self.tileView2Window.window)
         sdl2.SDL_DestroyWindow(self.spriteWindow.window)
     sdl2.SDL_DestroyWindow(self._window.window)
     sdl2.ext.quit()
示例#2
0
文件: window.py 项目: einarf/ModernGL
 def destroy(self):
     """
     Gracefully close the window
     """
     sdl2.SDL_GL_DeleteContext(self.context)
     sdl2.SDL_DestroyWindow(self.window)
     sdl2.SDL_Quit()
示例#3
0
def main():
    window_size = (DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT)
    sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
    window = sdl2.SDL_CreateWindow(
        b"Lab 1 - Cardioid", sdl2.SDL_WINDOWPOS_CENTERED,
        sdl2.SDL_WINDOWPOS_CENTERED, window_size[0], window_size[1],
        sdl2.SDL_WINDOW_SHOWN | sdl2.SDL_WINDOW_RESIZABLE)
    # CREATE !!!
    renderer = sdl2.SDL_CreateRenderer(window, -1,
                                       sdl2.SDL_RENDERER_ACCELERATED)

    running = True
    event = sdl2.SDL_Event()
    while running:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
            elif event.type == sdl2.SDL_WINDOWEVENT:
                if event.window.event == sdl2.SDL_WINDOWEVENT_SIZE_CHANGED:
                    new_width = event.window.data1
                    new_height = event.window.data2
                    print("Window {} resized to {}x{}".format(
                        event.window.windowID, new_width, new_height))
                    window_size = (new_width, new_height)
            draw(renderer, window_size)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
    return 0
示例#4
0
 def close(self):
     sdl2.SDL_DestroyWindow(self._native_window)
     del __windows__[self._native_id]
     for i in range(len(self._timer_stack)):
         handler, interval = self._timer_stack[i]
         self._clock.unschedule(handler)
     self.dispatch_event('on_close')
示例#5
0
def run():
    sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
    window = sdl2.SDL_CreateWindow(b"Hello World", sdl2.SDL_WINDOWPOS_CENTERED,
                                   sdl2.SDL_WINDOWPOS_CENTERED, 592, 460,
                                   sdl2.SDL_WINDOW_SHOWN)
    fname = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                         "resources", "hello.bmp")
    image = sdl2.SDL_LoadBMP(fname.encode("utf-8"))
    windowsurface = sdl2.SDL_GetWindowSurface(window)
    sdl2.SDL_BlitSurface(image, None, windowsurface, None)
    sdl2.SDL_UpdateWindowSurface(window)
    sdl2.SDL_FreeSurface(image)

    running = True
    event = sdl2.SDL_Event()
    while running:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break
        sdl2.SDL_Delay(10)

    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
    return 0
示例#6
0
 def initialize(self):
     if os.name == "nt":
         ctypes.windll.shcore.SetProcessDpiAwareness(1)
     sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING)
     IMG_Init(IMG_INIT_PNG)
     # Ugly hack to determine resolution scaling factor as early as possible.
     win = sdl2.SDL_CreateWindow(
         "ResolutionTest".encode("utf-8"),
         sdl2.SDL_WINDOWPOS_UNDEFINED,
         sdl2.SDL_WINDOWPOS_UNDEFINED,
         100,
         100,
         sdl2.SDL_WINDOW_HIDDEN | sdl2.SDL_WINDOW_ALLOW_HIGHDPI,
     )
     rend = sdl2.SDL_CreateRenderer(win, -1, sdl2.SDL_RENDERER_ACCELERATED)
     win_w = ctypes.c_int()
     rend_w = ctypes.c_int()
     sdl2.SDL_GetWindowSize(win, ctypes.byref(win_w), None)
     sdl2.SDL_GetRendererOutputSize(rend, ctypes.byref(rend_w), None)
     # Windows HiDPI is silly like this. You get back different window sizes than you put in.
     self.win_scale = win_w.value / 100.0
     Environment.scale.default = rend_w.value / 100.0
     sdl2.SDL_DestroyRenderer(rend)
     sdl2.SDL_DestroyWindow(win)
     # Initialize our font cache and calculate DPI scaling.
     Font.initialize()
示例#7
0
 def shutdown(self):
     """Shut down the renderer."""
     renderer_shutdown()
     sdl.SDL_GL_DeleteContext(self.ctx)
     self.ctx = None
     sdl.SDL_DestroyWindow(self.win)
     self.win = None
示例#8
0
文件: gui.py 项目: shdwdln/hienoi
    def terminate(self):
        """Cleanup the GUI resources."""
        self._renderer.cleanup()
        if hienoi.renderer.get_info().api == GraphicsAPI.OPENGL:
            sdl2.SDL_GL_DeleteContext(self._handles.renderer.context)

        sdl2.SDL_DestroyWindow(self._handles.window)
        sdl2.SDL_Quit()
示例#9
0
 def clear(self):
     # release resources
     if self.context:
         sdl2.SDL_GL_DeleteContext(self.context)
         self.context = None
     if self.window:
         sdl2.SDL_DestroyWindow(self.window)
         self.window = None
示例#10
0
def main():
    sdl2.sdl2_load(ctypes.util.find_library('SDL2'), # '/usr/local/lib/libSDL2.dylib'
                   ttf_libpath = ctypes.util.find_library('SDL2_ttf'),
                   img_libpath = ctypes.util.find_library('SDL2_image')
                   )
    sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING)

    WINDOW_W = 640
    WINDOW_H = 360
    window = sdl2.SDL_CreateWindow(b"Minimal SDL_Image Test via python-sdl2", 0, 0, WINDOW_W, WINDOW_H, sdl2.SDL_WINDOW_OPENGL)

    renderer = sdl2.SDL_CreateRenderer(window, -1, 0)

    sdl2.IMG_Init(sdl2.IMG_INIT_JPG|sdl2.IMG_INIT_PNG|sdl2.IMG_INIT_TIF|sdl2.IMG_INIT_WEBP)

    rwops_ptr = sdl2.SDL_RWFromFile(bytes(sys.argv[1], 'utf-8'), b"rb")

    print("PNG?: %s" % ('true' if sdl2.IMG_isPNG(rwops_ptr) else 'false'))

    texture = sdl2.IMG_LoadTexture_RW(renderer, rwops_ptr, 1)

    wh = 300
    pos = sdl2.SDL_Rect()
    pos.x = int((WINDOW_W - wh) / 2)
    pos.y = int((WINDOW_H - wh) / 2)
    pos.w = wh
    pos.h = wh

    sdl2.SDL_RenderCopy(renderer, texture, None, ctypes.byref(pos))

    sdl2.SDL_RenderPresent(renderer)

    fpsdelay = 100
    count = 0
    event = sdl2.SDL_Event()
    done = False
    while not done:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            # 'type' and 'timestamp' are common members for all SDL Event structs.
            event_type = event.common.type
            event_timestamp = event.common.timestamp
            # print("Event : type=0x%s, timestamp=%s" % (event_type, event_timestamp) )

            if event_type == sdl2.SDL_KEYDOWN:
                if event.key.keysym.sym == sdl2.SDLK_ESCAPE:
                    done = True

        sdl2.SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF)
        sdl2.SDL_RenderClear(renderer)
        sdl2.SDL_RenderCopy(renderer, texture, None, ctypes.byref(pos))
        sdl2.SDL_RenderPresent(renderer)

        sdl2.SDL_Delay(fpsdelay)

    sdl2.IMG_Quit()
    sdl2.SDL_DestroyRenderer(renderer)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
示例#11
0
 def _vispy_close(self):
     # Force the window or widget to shut down
     if self._id is not None:
         _id = self._id.window
         self._vispy_canvas = None
         self._id = None
         sdl2.SDL_DestroyWindow(_id)
         del _VP_SDL2_ALL_WINDOWS[self._sdl_id]
         self._sdl_id = None
         gc.collect()  # enforce gc to help context get destroyed
示例#12
0
    def quit(self):
        self.is_running = False
        # Give time for the other thread to end
        ti.sleep(0.05)

        # Destroy the SDL context
        sdl2.SDL_DestroyRenderer(self.renderer)
        sdl2.SDL_HideWindow(self.window)
        sdl2.SDL_DestroyWindow(self.window)
        sdl2.SDL_Quit()
示例#13
0
 def __del__(self):
     del self.joysticks_interface
     if self.has_sdl_gamecontroller:
         sdl2.SDL_QuitSubSystem(sdl2.SDL_INIT_GAMECONTROLLER)
     if self.has_sdl_joystick:
         sdl2.SDL_QuitSubSystem(sdl2.SDL_INIT_JOYSTICK)
     if self.has_sdl_audio:
         sdl2.SDL_CloseAudioDevice(self.audio_dev)
         sdl2.SDL_QuitSubSystem(sdl2.SDL_INIT_AUDIO)
     sdl2.SDL_DestroyTexture(self.texture)
     sdl2.SDL_DestroyRenderer(self.renderer)
     sdl2.SDL_DestroyWindow(self.screen)
     sdl2.SDL_Quit()
示例#14
0
 def _do_create_window(self, width, height):
     """Create a new SDL window """
     flags = sdl2.SDL_WINDOW_RESIZABLE | sdl2.SDL_WINDOW_SHOWN
     if self.fullscreen:
          flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP | sdl2.SDL_WINDOW_BORDERLESS
     sdl2.SDL_DestroyWindow(self.display)
     self.display = sdl2.SDL_CreateWindow(self.caption,
                 sdl2.SDL_WINDOWPOS_CENTERED, sdl2.SDL_WINDOWPOS_CENTERED,
                 width, height, flags)
     self._set_icon()
     self.display_surface = sdl2.SDL_GetWindowSurface(self.display)
     self.screen_changed = True
     self.window_width, self.window_height = width, height
示例#15
0
文件: machine.py 项目: jm-/casint
 def __exit__(self, exc_type, exc_value, traceback):
     sdl2.SDL_DestroyTexture(self.texture_graph)
     sdl2.SDL_DestroyTexture(self.texture_text)
     sdl2.SDL_DestroyTexture(self.texture_scroll)
     sdl2.SDL_DestroyTexture(self.font_text)
     sdl2.SDL_DestroyTexture(self.font_text_inverted)
     sdl2.SDL_DestroyTexture(self.font_graph)
     sdl2.SDL_DestroyTexture(self.font_graph_inverted)
     # clean up stored picts
     for pict in list(self.picts.values()):
         sdl2.SDL_DestroyTexture(pict)
     sdl2.SDL_DestroyWindow(self.window)
     sdl2.SDL_DestroyRenderer(self.renderer)
     sdl2.SDL_Quit()
示例#16
0
    def dispose(self):
        if self._window is not None:
            sdl2.SDL_HideWindow(self._window)

        if self._timer is not None:
            self._loop.destroy_timer(self._timer)
        self._timer = None

        if self._window is not None:
            sdl2.SDL_DestroyWindow(self._window)
        self._window = None

        if self._glcontext is not None:
            sdl2.SDL_GL_DeleteContext(self._glcontext)
        self._glcontext = None
示例#17
0
    def __init__(self, config):
        """Constructor.

        Instantiates a window and sets up an OpenGL context for it, which is
        immediately made active, using the given configuration data.

        :param config: Renderer-specific configuration.
        :type config: mapping-like interface.
        """
        try:
            width = int(config['width'])
            height = int(config['height'])
            gl_major, gl_minor = [
                int(v) for v in config.get('openglversion', '3.3').split('.')
            ]
        except (KeyError, TypeError, ValueError) as err:
            raise ConfigError(err)

        # create a SDL window
        self.win = sdl.SDL_CreateWindow(b'Surviveler',
                                        sdl.SDL_WINDOWPOS_CENTERED,
                                        sdl.SDL_WINDOWPOS_CENTERED, width,
                                        height, sdl.SDL_WINDOW_OPENGL)
        if self.win is None:
            raise RuntimeError('failed to create SDL window')

        # create an OpenGL context
        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_CONTEXT_PROFILE_MASK,
                                sdl.SDL_GL_CONTEXT_PROFILE_CORE)
        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_CONTEXT_MAJOR_VERSION, gl_major)
        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_CONTEXT_MINOR_VERSION, gl_minor)
        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_DOUBLEBUFFER, 1)
        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_DEPTH_SIZE, 24)
        self.ctx = sdl.SDL_GL_CreateContext(self.win)

        if self.ctx is None:
            sdl.SDL_DestroyWindow(self.win)
            raise RuntimeError('failed to initialize OpenGL context')

        # initialize renderer
        renderer_init()

        self._width = width
        self._height = height

        LOG.info('renderer initialized; created {}x{} window'.format(
            width, height))
示例#18
0
def run():
    if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
        print(sdl2.SDL_GetError())
        return -1

    window = sdl2.SDL_CreateWindow(b"OpenGL demo",
                                   sdl2.SDL_WINDOWPOS_UNDEFINED,
                                   sdl2.SDL_WINDOWPOS_UNDEFINED, 800, 600,
                                   sdl2.SDL_WINDOW_OPENGL)
    if not window:
        print(sdl2.SDL_GetError())
        return -1

    context = sdl2.SDL_GL_CreateContext(window)

    GL.glMatrixMode(GL.GL_PROJECTION | GL.GL_MODELVIEW)
    GL.glLoadIdentity()
    GL.glOrtho(-400, 400, 300, -300, 0, 1)

    x = 0.0
    y = 30.0

    event = sdl2.SDL_Event()
    running = True
    while running:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == sdl2.SDL_QUIT:
                running = False

        GL.glClearColor(0, 0, 0, 1)
        GL.glClear(GL.GL_COLOR_BUFFER_BIT)
        GL.glRotatef(10.0, 0.0, 0.0, 1.0)
        GL.glBegin(GL.GL_TRIANGLES)
        GL.glColor3f(1.0, 0.0, 0.0)
        GL.glVertex2f(x, y + 90.0)
        GL.glColor3f(0.0, 1.0, 0.0)
        GL.glVertex2f(x + 90.0, y - 90.0)
        GL.glColor3f(0.0, 0.0, 1.0)
        GL.glVertex2f(x - 90.0, y - 90.0)
        GL.glEnd()

        sdl2.SDL_GL_SwapWindow(window)
        sdl2.SDL_Delay(10)
    sdl2.SDL_GL_DeleteContext(context)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
    return 0
示例#19
0
 def close(self):
     """ Close the SDL2 interface. """
     video.VideoPlugin.close(self)
     if sdl2 and numpy:
         # free windows
         sdl2.SDL_DestroyWindow(self.display)
         # free surfaces
         for s in self.canvas:
             sdl2.SDL_FreeSurface(s)
         sdl2.SDL_FreeSurface(self.work_surface)
         sdl2.SDL_FreeSurface(self.overlay)
         # free palettes
         for p in self.show_palette:
             sdl2.SDL_FreePalette(p)
         sdl2.SDL_FreePalette(self.composite_palette)
         # close SDL2
         sdl2.SDL_Quit()
示例#20
0
 def cleanup(self):
     """
     destroys opengl and sdl resources allocated
     """
     for val in self.all_filters.itervalues():
         val.cleanup_shader()
     self.filters = []
     if self.final_filter:
         self.final_filter.cleanup_shader()
     if self.console:
         self.console.cleanup()
     self.final_filter = None
     self.cleanup_img_fb()
     self.cleanup_image_texture()
     if self.window:
         sdl2.SDL_DestroyWindow(self.window)
         self.window = None
     self.view.reset()
示例#21
0
def run():
    if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
        print(sdl2.SDL_GetError())
        return -1

    window = sdl2.SDL_CreateWindow(b"OpenGL demo",
                                   sdl2.SDL_WINDOWPOS_UNDEFINED,
                                   sdl2.SDL_WINDOWPOS_UNDEFINED, 800, 600,
                                   sdl2.SDL_WINDOW_OPENGL)
    if not window:
        print(sdl2.SDL_GetError())
        return -1

    # Force OpenGL 3.3 'core' context.
    # Must set *before* creating GL context!
    video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_MAJOR_VERSION, 3)
    video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_MINOR_VERSION, 3)
    video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_PROFILE_MASK,
                              video.SDL_GL_CONTEXT_PROFILE_CORE)
    context = sdl2.SDL_GL_CreateContext(window)

    # Setup GL shaders, data, etc.
    initialize()

    event = sdl2.SDL_Event()
    running = True
    while running:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == sdl2.SDL_QUIT:
                running = False
            elif (event.type == sdl2.SDL_KEYDOWN
                  and event.key.keysym.sym == sdl2.SDLK_ESCAPE):
                running = False

        render()

        sdl2.SDL_GL_SwapWindow(window)
        sdl2.SDL_Delay(10)

    sdl2.SDL_GL_DeleteContext(context)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
    return 0
示例#22
0
 def __exit__(self, type, value, traceback):
     """Close the SDL2 interface."""
     base.VideoPlugin.__exit__(self, type, value, traceback)
     if sdl2 and numpy and self._has_window:
         # free windows
         sdl2.SDL_DestroyWindow(self.display)
         # free surfaces
         for s in self.canvas:
             sdl2.SDL_FreeSurface(s)
         sdl2.SDL_FreeSurface(self.work_surface)
         sdl2.SDL_FreeSurface(self.overlay)
         # free palettes
         for p in self.show_palette:
             sdl2.SDL_FreePalette(p)
         sdl2.SDL_FreePalette(self.composite_palette)
         # close IME
         sdl2.SDL_StopTextInput()
         # close SDL2
         sdl2.SDL_Quit()
示例#23
0
    def __buildWindow(self):
        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise Exception(sdl2.SDL_GetError())

        sdlimage.IMG_Init(sdlimage.IMG_INIT_PNG | sdlimage.IMG_INIT_JPG)

        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                                 sdl2.SDL_GL_CONTEXT_PROFILE_CORE)

        self.window = sdl2.SDL_CreateWindow(b'ETGG2801 Example', 0, 0,
                                            self.size[0], self.size[1],
                                            sdl2.SDL_WINDOW_OPENGL)

        self.glcontext = sdl2.SDL_GL_CreateContext(self.window)
        if not self.glcontext:
            sdl2.SDL_DestroyWindow(self.window)
            raise Exception(sdl2.SDL_GetError())

        # keep application from receiving text input events
        sdl2.SDL_StopTextInput()
示例#24
0
    def __buildWindow(self):
        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise Exception(sdl2.SDL_GetError())

        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION, self.major)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION, self.minor)

        self.window = sdl2.SDL_CreateWindow(b'ETGG2801 Example',
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            self.size[0], self.size[1],
                                            sdl2.SDL_WINDOW_OPENGL)

        self.glcontext = sdl2.SDL_GL_CreateContext(self.window)
        if not self.glcontext:
            sdl2.SDL_DestroyWindow(self.window)
            raise Exception(sdl2.SDL_GetError())

        # keep application from receiving text input events
        sdl2.SDL_StopTextInput()
示例#25
0
    def run(self):
        event = sdl2.SDL_Event()
        while self.running:
            while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
                if event.type == sdl2.SDL_QUIT:
                    self.running = False
                elif event.type == sdl2.SDL_KEYDOWN:
                    self.keyPressed[event.key.keysym.scancode] = True
                    self.onKeyDown(event.key.keysym.scancode)
                elif event.type == sdl2.SDL_KEYUP:
                    self.keyPressed[event.key.keysym.scancode] = False
                    self.onKeyUp(event.key.keysym.scancode)
                elif event.type == sdl2.SDL_MOUSEBUTTONDOWN:
                    self.mouseButtonPressed[event.button.button] = True
                    self.onMouseButtonDown(event.button.button)
                elif event.type == sdl2.SDL_MOUSEBUTTONUP:
                    self.mouseButtonPressed[event.button.button] = False
                    self.onMouseButtonUp(event.button.button)
                elif event.type == sdl2.SDL_MOUSEMOTION:
                    self.mouseX = event.motion.x
                    self.mouseY = event.motion.y

            self.currentTime = sdl2.SDL_GetTicks()
            elapsedTime = self.currentTime - self.lastTime
            self.lastTime = self.currentTime
            dt = elapsedTime * 0.001

            self.timer += dt
            if (self.timer >= self.fixedTimeStep):
                self.timer -= self.fixedTimeStep
                self.update(self.fixedTimeStep)
                
            self.render()

        sdl2.SDL_DestroyWindow(self.window)
        sdl2.SDL_Quit()
示例#26
0
 def stop(self):
     sdl2.SDL_DestroyWindow(self._window)
     sdl2.SDL_Quit()
示例#27
0
 def finish(self):
     if self.window:
         sdl2.SDL_DestroyTexture(self.texture)
         sdl2.SDL_DestroyRenderer(self.renderer)
         sdl2.SDL_DestroyWindow(self.window)
     sdl2.SDL_Quit()
示例#28
0
文件: 3dwf.py 项目: mfkiwl/pysdr
def main():
    if len(sys.argv) != 2:
        print("usage: 3dwf.py REMOTE_ADDRESS", file=sys.stderr)
        sys.exit(1)

    nbins = 256
    overlap = 192
    rem_address = (sys.argv[1], 3731)

    conn = socket.create_connection(rem_address)

    sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO | sdl2.SDL_INIT_AUDIO)

    window = sdl2.SDL_CreateWindow(b"3D Waterfall", sdl2.SDL_WINDOWPOS_CENTERED,
                                   sdl2.SDL_WINDOWPOS_CENTERED, 800, 600,
                                   sdl2.SDL_WINDOW_RESIZABLE | sdl2.SDL_WINDOW_OPENGL)
    context = sdl2.SDL_GL_CreateContext(window)

    wf = WFViewer(nbins)
    wf.init(800, 600)
    wf.shift = 0

    filt = interp_fir_filter(lowpass(np.pi / 4, 512) * np.hamming(512), 4)
    freqx = freq_translator((0.8/8.0) * np.pi)

    headlen = max(filt.nhistory, overlap)
    ringbuf = RingBuf(headlen, np.zeros(headlen + (nbins - overlap) * 512, dtype=np.complex64))

    # FIXME
    global audio_edge
    audio_edge = 0

    def callback(unused, buf, buflen):
        global audio_edge
        bufbuf = pybuf_from_memory(buf, buflen, 0x200) # PyBUF_WRITE
        array = np.frombuffer(bufbuf, np.float32)

        assert len(array) % filt.interp == 0 # TODO
        nreqframes = len(array) // filt.interp

        loc_ringbuf_edge = ringbuf.fill_edge
        if loc_ringbuf_edge < 0 or (loc_ringbuf_edge - audio_edge) % len(ringbuf) < nreqframes:
            print("audio underrun", file=sys.stderr)
            array.fill(0)
            return

        # TODO
        if audio_edge + nreqframes > len(ringbuf):
            audio_edge = 0

        slic = ringbuf.slice(audio_edge - filt.nhistory, audio_edge + nreqframes)
        array[:] = np.real(freqx(filt(slic))) * wf.volume
        audio_edge += nreqframes
        sdl2.SDL_PushEvent(UPDATE_EVENT)

    audio_spec = sdl2.SDL_AudioSpec(8000,
                                    sdl2.AUDIO_F32,
                                    1,
                                    512,
                                    sdl2.SDL_AudioCallback(callback))
    audio_dev = sdl2.SDL_OpenAudioDevice(None, 0, audio_spec, None, 0)
    if audio_dev == 0:
        raise Error('could not open audio device')

    err_queue = queue.Queue()

    def readfunc(nbytes):
        bytes = b''

        while len(bytes) < nbytes:
            ret = conn.recv(nbytes - len(bytes))

            if not ret:
                raise Exception('end of stream')

            bytes += ret

        return bytes

    def thread_target():
        try:
            input_thread(readfunc, ringbuf, nbins, overlap, wf)
        except Exception as e:
            err_queue.put(e)
            event = sdl2.SDL_Event()
            event.type = sdl2.SDL_QUIT
            sdl2.SDL_PushEvent(event)

    other_thread = threading.Thread(target=thread_target)
    other_thread.setDaemon(True)
    other_thread.start()

    sdl2.SDL_PauseAudioDevice(audio_dev, 0)

    running = True
    event = sdl2.SDL_Event()
    while running:
        sdl2.SDL_WaitEvent(ctypes.byref(event))

        while True:
            if event.type == sdl2.SDL_QUIT:
                running = False
                break

            wf.event(event)

            if sdl2.SDL_PollEvent(ctypes.byref(event)) == 0:
                break

        # FIXME
        wf.shift = ((ringbuf.fill_edge - audio_edge) % len(ringbuf)) / (nbins - overlap)
        wf.draw()
        sdl2.SDL_GL_SwapWindow(window)

    try:
        for exc in iter(err_queue.get_nowait, None):
            sdl2.SDL_ShowSimpleMessageBox(sdl2.SDL_MESSAGEBOX_ERROR, b"Exception", str(exc).encode("ascii"), None)
    except queue.Empty:
        pass

    sdl2.SDL_CloseAudioDevice(audio_dev)
    sdl2.SDL_GL_DeleteContext(context)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
示例#29
0
current_scene_index = menu_scene_index
sceneList[current_scene_index].Pause = False

# Clear Screen to Black
sdl2.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255)
sdl2.SDL_RenderClear(renderer)

# Main Game Loop
while sceneList[current_scene_index].Running:
    # Process Events
    sceneList[current_scene_index].process_events()

    if sceneList[current_scene_index].RequestChange:
        sceneList[current_scene_index].RequestChange = False
        if current_scene_index == menu_scene_index:
            current_scene_index = game_scene_index
            sceneList[current_scene_index].init_as_game(None)
        else:
            current_scene_index = menu_scene_index

    # Render Graphics
    perform_rendering(renderer, sceneList[current_scene_index].entities)
    pass

# Clean up
for scene in sceneList:
    scene.stop_entities()
sdl2.SDL_DestroyRenderer(renderer)
sdl2.SDL_DestroyWindow(window)
sdl2.SDL_Quit()
示例#30
0
 def destroy(self):
     '''Destroy and quit SDL2 window'''
     sdl2.SDL_DestroyWindow(self.window)  # Close and destroy SDL2 window
     sdl2.SDL_Quit()  # Clean up SDL2
     logging.info('Destroyed SDL2 window and quited SDL2')