Exemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        BaseCanvasBackend.__init__(self, *args)
        p = self._process_backend_kwargs(kwargs)
        self._initialized = False

        # Deal with config
        _set_config(p.context.config)
        # Deal with context
        p.context.shared.add_ref('sdl2', self)
        if p.context.shared.ref is self:
            share = None
        else:
            other = p.context.shared.ref
            share = other._id.window, other._native_context
            sdl2.SDL_GL_MakeCurrent(*share)
            sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1)

        sdl2.SDL_GL_SetSwapInterval(1 if p.vsync else 0)
        flags = sdl2.SDL_WINDOW_OPENGL
        flags |= sdl2.SDL_WINDOW_SHOWN  # start out shown
        flags |= sdl2.SDL_WINDOW_ALLOW_HIGHDPI
        flags |= sdl2.SDL_WINDOW_RESIZABLE if p.resizable else 0
        flags |= sdl2.SDL_WINDOW_BORDERLESS if not p.decorate else 0
        if p.fullscreen is not False:
            self._fullscreen = True
            if p.fullscreen is not True:
                logger.warning('Cannot specify monitor number for SDL2 '
                               'fullscreen, using default')
            flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP
        else:
            self._fullscreen = False
        self._mods = list()
        if p.position is None:
            position = [sdl2.SDL_WINDOWPOS_UNDEFINED] * 2
        else:
            position = None
        self._id = sdl2.ext.Window(p.title, p.size, position, flags)
        if not self._id.window:
            raise RuntimeError('Could not create window')
        if share is None:
            self._native_context = sdl2.SDL_GL_CreateContext(self._id.window)
        else:
            self._native_context = sdl2.SDL_GL_CreateContext(share[0])
        self._sdl_id = sdl2.SDL_GetWindowID(self._id.window)
        _VP_SDL2_ALL_WINDOWS[self._sdl_id] = self

        # Init
        self._initialized = True
        self._needs_draw = False
        self._vispy_canvas.set_current()
        self._vispy_canvas.events.initialize()
        if not p.show:
            self._vispy_set_visible(False)
Exemplo n.º 2
0
Arquivo: _sdl2.py Projeto: kod3r/vispy
    def __init__(self, *args, **kwargs):
        BaseCanvasBackend.__init__(self, *args)
        title, size, position, show, vsync, resize, dec, fs, parent, context, \
            = self._process_backend_kwargs(kwargs)
        self._initialized = False

        # Deal with context
        if not context.istaken:
            context.take('sdl2', self)
            _set_config(context.config)
            share = None
        elif context.istaken == 'sdl2':
            other = context.backend_canvas
            share = other._id.window, other._native_context
            sdl2.SDL_GL_MakeCurrent(*share)
            sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1)
        else:
            raise RuntimeError('Different backends cannot share a context.')

        sdl2.SDL_GL_SetSwapInterval(1 if vsync else 0)
        flags = sdl2.SDL_WINDOW_OPENGL
        flags |= sdl2.SDL_WINDOW_SHOWN  # start out shown
        flags |= sdl2.SDL_WINDOW_ALLOW_HIGHDPI
        flags |= sdl2.SDL_WINDOW_RESIZABLE if resize else 0
        flags |= sdl2.SDL_WINDOW_BORDERLESS if not dec else 0
        if fs is not False:
            self._fullscreen = True
            if fs is not True:
                logger.warning('Cannot specify monitor number for SDL2 '
                               'fullscreen, using default')
            flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP
        else:
            self._fullscreen = False
        self._mods = list()
        if position is None:
            position = [sdl2.SDL_WINDOWPOS_UNDEFINED] * 2
        self._id = sdl2.ext.Window(title, size, position, flags)
        if not self._id.window:
            raise RuntimeError('Could not create window')
        if share is None:
            self._native_context = sdl2.SDL_GL_CreateContext(self._id.window)
        else:
            self._native_context = sdl2.SDL_GL_CreateContext(share[0])
        self._sdl_id = sdl2.SDL_GetWindowID(self._id.window)
        _VP_SDL2_ALL_WINDOWS[self._sdl_id] = self

        # Init
        self._initialized = True
        self._needs_draw = False
        self._vispy_set_current()
        self._vispy_canvas.events.initialize()
        if not show:
            self._vispy_set_visible(False)
Exemplo n.º 3
0
 def __init__(self, stimDisplayRes,
              stimDisplayPosition):  #,stimDisplayMirrorChild):
     self.stimDisplayRes = stimDisplayRes
     # self.stimDisplayMirrorChild = stimDisplayMirrorChild
     sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
     self.stimDisplayRes = stimDisplayRes
     self.stimDisplayPosition = stimDisplayPosition
     self.Window = sdl2.video.SDL_CreateWindow(
         byteify('stimDisplay', "utf-8"), self.stimDisplayPosition[0],
         self.stimDisplayPosition[1], self.stimDisplayRes[0],
         self.stimDisplayRes[1],
         sdl2.SDL_WINDOW_OPENGL | sdl2.SDL_WINDOW_SHOWN
         | sdl2.SDL_RENDERER_ACCELERATED | sdl2.SDL_RENDERER_PRESENTVSYNC)
     self.glContext = sdl2.SDL_GL_CreateContext(self.Window)
     gl.glMatrixMode(gl.GL_PROJECTION)
     gl.glLoadIdentity()
     gl.glOrtho(0, stimDisplayRes[0], stimDisplayRes[1], 0, 0, 1)
     gl.glMatrixMode(gl.GL_MODELVIEW)
     gl.glDisable(gl.GL_DEPTH_TEST)
     gl.glReadBuffer(gl.GL_FRONT)
     gl.glClearColor(0, 0, 0, 1)
     start = time.time()
     while time.time() < (start + 2):
         sdl2.SDL_PumpEvents()
     self.refresh()
     self.refresh()
Exemplo n.º 4
0
def _create_handles(window_title, window_position, window_size, window_flags,
                    renderer_info):
    """Create the SDL2 handles."""
    window_flags = sdl2.SDL_WINDOW_SHOWN | window_flags
    if renderer_info.api == GraphicsAPI.OPENGL:
        window_flags |= sdl2.SDL_WINDOW_OPENGL
        window = sdl2.SDL_CreateWindow(
            window_title.encode(),
            window_position.x, window_position.y,
            window_size.x, window_size.y,
            window_flags)
        if not window:
            raise RuntimeError(sdl2.SDL_GetError().decode())

        context = sdl2.SDL_GL_CreateContext(window)
        if not context:
            raise RuntimeError(sdl2.SDL_GetError().decode())

        # Try to disable the vertical synchronization. It applies to the active
        # context and thus needs to be called after `SDL_GL_CreateContext`.
        sdl2.SDL_GL_SetSwapInterval(0)

        return _Handles(
            window=window,
            renderer=_GLHandles(context=context))
Exemplo n.º 5
0
    def __init__(self, Δx=1.0, Δy=1.0, m=10, n=10):
        self.Δx = Δx
        self.Δy = Δy
        self.m = m
        self.n = n
        self.width = Δx * m
        self.height = Δy * n

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            print(sdl2.SDL_GetError())
            return

        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION, 3)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION, 3)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                                 sdl2.SDL_GL_CONTEXT_PROFILE_CORE)
        self.window = sdl2.SDL_CreateWindow(
            b"Example 1", sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED, 640, 480,
            sdl2.SDL_WINDOW_OPENGL | sdl2.SDL_WINDOW_ALWAYS_ON_TOP)
        sdl2.SDL_SetWindowInputFocus(self.window)
        self.context = sdl2.SDL_GL_CreateContext(self.window)
        self.setupGL()
        self.prepGrid()
        self.prepBuffers()
        sdl2.SDL_RaiseWindow(self.window)
Exemplo n.º 6
0
    def __init__(self, shader_programs=None, version=(3, 3)):
        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            print(sdl2.SDL_GetError())
            return -1

        self.window = sdl2.SDL_CreateWindow(b"SDL2 OpenGL Context",
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            self.viewport[2], self.viewport[3],
                                            sdl2.SDL_WINDOW_OPENGL)
        if not self.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,
                                  version[0])
        video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_MINOR_VERSION,
                                  version[1])
        video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_PROFILE_MASK,
                                  video.SDL_GL_CONTEXT_PROFILE_CORE)
        self.context = sdl2.SDL_GL_CreateContext(self.window)

        self.update()
Exemplo n.º 7
0
    def __init__(self, width, height, title):
        self.width, self.height = width, height
        self.title = title

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            print(sdl2.SDL_GetError())
            exit(-1)

        self.window = sdl2.SDL_CreateWindow(
            str.encode(self.title), sdl2.SDL_WINDOWPOS_CENTERED,
            sdl2.SDL_WINDOWPOS_CENTERED, self.width, self.height,
            sdl2.SDL_WINDOW_OPENGL | sdl2.SDL_WINDOW_SHOWN)
        if not self.window:
            print(sdl2.SDL_GetError())
            exit(-1)

        # Force OpenGL 4.3 'core' context. This is needed for compute shader support.
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4)
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3)
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,
                            SDL_GL_CONTEXT_PROFILE_CORE)

        SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8)
        SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8)
        SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8)
        SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8)
        SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32)
        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24)
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1)
        self._context = sdl2.SDL_GL_CreateContext(self.window)
Exemplo n.º 8
0
    def __init__(self, width, height):
        self.width = width
        self.height = height

        # init SDL
        sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
        self.window = sdl2.SDL_CreateWindow(
            b"SPARK(&pyspk) Fireworks Demo",
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            width, height,
            sdl2.SDL_WINDOW_SHOWN | sdl2.SDL_WINDOW_OPENGL)
        sdl2.SDL_CaptureMouse(True)

        # init OpenGL
        self.context = sdl2.SDL_GL_CreateContext(self.window)
        sdl2.SDL_GL_SetSwapInterval(0)
        gl.glClearColor(0.0, 0.0, 0.0, 1.0)
        surface = sdl2.SDL_GetWindowSurface(self.window)
        gl.glViewport(0, 0, surface.contents.w, surface.contents.h)
        # load Textures
        texture = loadTexture(b'res/flare.bmp', gl.GL_ALPHA, gl.GL_REPEAT)

        # init FTGL
        if not notext:
            font = FTGL.TextureFont('res/font.ttf')
            font.FaceSize(24)
            self.font = font

        # init SPARK(pyspk)
        # random seed initialization
        spk.setRandomSeed(int(time.time()))
        # step configuration
        spk.System.setClampStep(True, 0.1)  # clamp the step to 100 ms
        spk.System.useAdaptiveStep(0.001, 0.01)  # use an adaptive step from 1ms to 10ms (1000fps to 100fps)

        # the base system
        self.basesystem = BaseSystem(self.height, texture)

        print('SPARK FACTORY AFTER INIT :')
        spk.Factory.getInstance().traceAll()

        # init Variables
        self.running = True
        self.paused = False
        self.deltaTime = 0
        self.step = 0
        self.text = 2
        self.renderValue = 0
        self.angleY = 0.0
        self.camPosZ = 5.0
        self.spacePressed = -1.0
        self.systems = []
        self.nbParticles = ''
        self.fps = ''
        self.frames = [sdl2.SDL_GetTicks()-1]
        self.lasttime = self.frames[-1]
Exemplo n.º 9
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise ValueError("Failed to initialize sdl2")

        # Configure OpenGL context
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       self.gl_version[0])
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION,
                                       self.gl_version[1])
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                                       sdl2.SDL_GL_CONTEXT_PROFILE_CORE)
        sdl2.video.SDL_GL_SetAttribute(
            sdl2.SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DEPTH_SIZE, 24)

        # Display/hide mouse cursor
        sdl2.SDL_ShowCursor(
            sdl2.SDL_ENABLE if self.cursor else sdl2.SDL_DISABLE)

        # Configure multisampling
        if self.samples > 1:
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLEBUFFERS, 1)
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLESAMPLES,
                                           self.samples)

        # Built the window flags
        flags = sdl2.SDL_WINDOW_OPENGL
        if self.fullscreen:
            # Use primary desktop screen resolution
            flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP
        else:
            if self.resizable:
                flags |= sdl2.SDL_WINDOW_RESIZABLE

        # Create the window
        self.window = sdl2.SDL_CreateWindow(
            self.title.encode(),
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            self.width,
            self.height,
            flags,
        )

        if not self.window:
            raise ValueError("Failed to create window:", sdl2.SDL_GetError())

        self.context = sdl2.SDL_GL_CreateContext(self.window)
        sdl2.video.SDL_GL_SetSwapInterval(1 if self.vsync else 0)

        self.ctx = moderngl.create_context(require=self.gl_version_code)
        self.set_default_viewport()
        self.print_context_info()
Exemplo n.º 10
0
    def __init__(self):
        """
        Initializes sdl2, sets up key and mouse events and
        creates a ``moderngl.Context`` using the context sdl2 createad.

        Using the sdl2 window requires sdl binaries and PySDL2.
        """
        super().__init__()
        self.window_closing = False
        self.tmp_size_x = c_int()
        self.tmp_size_y = c_int()

        print("Using sdl2 library version:", self.get_library_version())

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise ValueError("Failed to initialize sdl2")

        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       self.gl_version.major)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION,
                                       self.gl_version.minor)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                                       sdl2.SDL_GL_CONTEXT_PROFILE_CORE)
        sdl2.video.SDL_GL_SetAttribute(
            sdl2.SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DEPTH_SIZE, 24)
        sdl2.SDL_ShowCursor(
            sdl2.SDL_ENABLE if self.cursor else sdl2.SDL_DISABLE)
        if self.samples > 1:
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLEBUFFERS, 1)
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLESAMPLES,
                                           self.samples)

        flags = sdl2.SDL_WINDOW_OPENGL
        if self.fullscreen:
            flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP
        else:
            if self.resizable:
                flags |= sdl2.SDL_WINDOW_RESIZABLE

        self.window = sdl2.SDL_CreateWindow(self.title.encode(),
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            self.width, self.height, flags)

        if not self.window:
            raise ValueError("Failed to create window:", sdl2.SDL_GetError())

        self.context = sdl2.SDL_GL_CreateContext(self.window)
        sdl2.video.SDL_GL_SetSwapInterval(1 if self.vsync else 0)

        self.ctx = moderngl.create_context(require=self.gl_version.code)
        context.WINDOW = self
        self.fbo = self.ctx.screen
        self.set_default_viewport()
Exemplo n.º 11
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise ValueError("Failed to initialize sdl2")

        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       self.gl_version[0])
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION,
                                       self.gl_version[1])
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                                       sdl2.SDL_GL_CONTEXT_PROFILE_CORE)
        sdl2.video.SDL_GL_SetAttribute(
            sdl2.SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_DEPTH_SIZE, 24)

        sdl2.SDL_ShowCursor(
            sdl2.SDL_ENABLE if self.cursor else sdl2.SDL_DISABLE)

        if self.samples > 1:
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLEBUFFERS, 1)
            sdl2.video.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLESAMPLES,
                                           self.samples)

        flags = sdl2.SDL_WINDOW_OPENGL
        if self.fullscreen:
            flags |= sdl2.SDL_WINDOW_FULLSCREEN_DESKTOP
        else:
            if self.resizable:
                flags |= sdl2.SDL_WINDOW_RESIZABLE

        self._window = sdl2.SDL_CreateWindow(
            self.title.encode(),
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            self.width,
            self.height,
            flags,
        )

        if not self._window:
            raise ValueError("Failed to create window:", sdl2.SDL_GetError())

        self._context = sdl2.SDL_GL_CreateContext(self._window)

        sdl2.video.SDL_GL_SetSwapInterval(1 if self.vsync else 0)

        if self._create_mgl_context:
            self.init_mgl_context()

        self.set_default_viewport()
Exemplo n.º 12
0
    def __init__( self, width=256, height=256, title=None, visible=True, aspect=None,
                  decoration=True, fullscreen=False, config=None, context=None, color=(0,0,0,1)):
        """ """

        window.Window.__init__(self, width=width,
                                     height=height,
                                     title=title,
                                     visible=visible,
                                     aspect=aspect,
                                     decoration=decoration,
                                     fullscreen=fullscreen,
                                     config=config,
                                     context=context,
                                     color=color)

        if config is None:
            config = configuration.Configuration()
        set_configuration(config)

        flags  = sdl2.SDL_WINDOW_SHOWN
        # flags |= sdl2.SDL_WINDOW_ALLOW_HIGHDPI
        flags |= sdl2.SDL_WINDOW_RESIZABLE
        flags |= sdl2.SDL_WINDOW_OPENGL
        if visible:
            flags |= sdl2.SDL_WINDOW_SHOWN
        else:
            flags |= SDL_WINDOW_HIDDEN
        if not decoration:
            flags |= sdl2.SDL_WINDOW_BORDERLESS

        self._native_window = sdl2.SDL_CreateWindow(self._title,
                                                    sdl2.SDL_WINDOWPOS_UNDEFINED,
                                                    sdl2.SDL_WINDOWPOS_UNDEFINED,
                                                    width, height, flags)
        self._native_context = sdl2.SDL_GL_CreateContext(self._native_window)
        self._native_id = sdl2.SDL_GetWindowID(self._native_window)
        sdl2.SDL_GL_SetSwapInterval(0)

        # OSX: check framebuffer size / window size. On retina display, they
        #      can be different so we try to correct window size such as having
        #      the framebuffer size of the right size
        # w,h = ctypes.c_int(),ctypes.c_int()
        # sdl2.SDL_GL_GetDrawableSize(self._native_window, w, h)
        # w,h = w.value(), h.value()
        # if w != width or h!= height:
        #     width = width/2
        #     height= height/2
        #     sdl2.SDL_SetWindowSize(self._native_window, int(width), int(height))

        self._height = height
        self._width = width
        __windows__[self._native_id] = self
Exemplo n.º 13
0
    def __init__(self):
        self.shaderID = 0
        self.vaoID = 0

        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            print(sdl2.SDL_GetError())
            return -1
        self.window = sdl2.SDL_CreateWindow(b"OpenGL demo",
                                            sdl2.SDL_WINDOWPOS_UNDEFINED,
                                            sdl2.SDL_WINDOWPOS_UNDEFINED, 1024,
                                            720, sdl2.SDL_WINDOW_OPENGL)
        if not self.window:
            print(sdl2.SDL_GetError())
            return -1
        # Force OpenGL 4.1 'core' context.
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       4)
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MINOR_VERSION,
                                       1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_PROFILE_MASK,
                                       sdl2.video.SDL_GL_CONTEXT_PROFILE_CORE)
        self.context = sdl2.SDL_GL_CreateContext(self.window)
        glClearColor(0.4, 0.4, 0.4, 1.0)
        glEnable(GL_DEPTH_TEST)
        glEnable(GL_MULTISAMPLE)
        self.createTriangle(0.8)
        vertex = """#version 400 core

layout (location = 0) in vec3  inPosition;
layout (location = 1) in vec3 inColour;
out vec3 vertColour;
void main()
{
  gl_Position = vec4(inPosition, 1.0);
  vertColour = inColour;
}"""
        fragment = """#version 400 core
in vec3 vertColour;
out vec4 fragColour;
void main()
{
  fragColour = vec4(vertColour,1.0);
}
"""
        self.loadShaderFromStrings(vertex, fragment)

        self.width = 1024
        self.height = 720
Exemplo n.º 14
0
    def initialize(self):
        """ Direct translation of the C++ code
        """
        if sdl.SDL_Init(sdl.SDL_INIT_EVERYTHING) < 0:
            return False

        sdl.SDL_GL_SetAttribute(sdl.SDL_GL_DOUBLEBUFFER, 1)
        self.window = sdl.SDL_CreateWindow('PySDL2 OpenGL',
                                           sdl.SDL_WINDOWPOS_CENTERED,
                                           sdl.SDL_WINDOWPOS_CENTERED,
                                           WND_SIZE[0], WND_SIZE[1], WND_FLAGS)
        if not self.window: return False
        self.glcontect = sdl.SDL_GL_CreateContext(self.window)
        # Open GL
        self.init_gl()
        return True
Exemplo n.º 15
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))
Exemplo n.º 16
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
Exemplo n.º 17
0
 def __enter__(self):
     sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
     self.window = sdl2.SDL_CreateWindow(
         b'Shadertest',
         sdl2.SDL_WINDOWPOS_UNDEFINED,
         sdl2.SDL_WINDOWPOS_UNDEFINED,
         1,
         1,
         sdl2.SDL_WINDOW_OPENGL,
     )
     sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MAJOR_VERSION, 4)
     sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MINOR_VERSION, 2)
     sdl2.video.SDL_GL_SetAttribute(
         sdl2.video.SDL_GL_CONTEXT_PROFILE_MASK,
         sdl2.video.SDL_GL_CONTEXT_PROFILE_CORE,
     )
     self.context = sdl2.SDL_GL_CreateContext(self.window)
Exemplo n.º 18
0
def main():
    global rend

    if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
        print(sdl2.SDL_GetError())
        return 0

    x, y = 0, 0

    # window = sdl2.ext.Window("ekkek", 600,600, sdl2.SDL_WINDOW_OPENGL)
    window = sdl2.SDL_CreateWindow(TITLE, sdl2.SDL_WINDOWPOS_UNDEFINED,
                                   sdl2.SDL_WINDOWPOS_UNDEFINED, 600, 600,
                                   sdl2.SDL_WINDOW_OPENGL)
    context = sdl2.SDL_GL_CreateContext(window)
    rend = Renderer()
    time = sdl2.SDL_GetTicks()
    prev_time = sdl2.SDL_GetTicks()
    frame_time = 0
    e = ioproc(sdl2.SDL_Event())
    dt = 1000. / 60.

    #while sdl2.SDL_WaitEvent(ctypes.byref(sdl2.SDL_QUIT)):
    while e.checkEvents():
        # time = sdl2.SDL_GetTicks()
        # frame_time = time - prev_time
        # prev_time = time
        # while sdl2.SDL_PollEvent(ctypes.byref(e)) !=0:
        #     if(e.type == sdl2.SDL_QUIT):
        #         running = False

        time += dt
        frame_time = time - sdl2.SDL_GetTicks()
        if (frame_time <= 0):
            frame_time = 1
        tms.sleep(frame_time / 1000.)

        # update shit here
        # ...
        rend.doShit()
        rend.draw()
        sdl2.SDL_GL_SwapWindow(window)

    # rend.unload()     #Unload assimp imports
    sdl2.SDL_GL_DeleteContext(context)
    sdl2.SDL_Quit()
Exemplo n.º 19
0
    def __init__(self,
                 width,
                 height,
                 title='Window',
                 alpha_blending=True,
                 full_screen=False,
                 gl_major=4,
                 gl_minor=1):
        self._width = width
        self._height = height
        self._aspect_ratio = float(width) / float(height)
        self._viewport = Rect(0, 0, width, height)
        self._full_screen = full_screen

        # Create the window
        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            print(sdl2.SDL_GetError())

        self._window = sdl2.SDL_CreateWindow(str.encode(title),
                                             sdl2.SDL_WINDOWPOS_UNDEFINED,
                                             sdl2.SDL_WINDOWPOS_UNDEFINED,
                                             width, height,
                                             sdl2.SDL_WINDOW_OPENGL)

        if not self._window:
            print(sdl2.SDL_GetError())
            return

        # Set up OpenGL
        video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_MAJOR_VERSION, gl_major)
        video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_MINOR_VERSION, gl_minor)
        video.SDL_GL_SetAttribute(video.SDL_GL_CONTEXT_PROFILE_MASK,
                                  video.SDL_GL_CONTEXT_PROFILE_CORE)
        self._context = sdl2.SDL_GL_CreateContext(self._window)
        self._projection_matrix = self._ortho_projection()

        if alpha_blending:
            glEnable(GL_BLEND)
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        if full_screen:
            self.full_screen = True

        # Post processing steps
        self._pp_steps = []
Exemplo n.º 20
0
def setup(title="SDL window", width=640, height=480):
    ''' creates and SDL window and context '''

    if sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING):
        print('\x1b[0;37;41m' + sdl2.SDL_GetError() + '\x1b[0m')
        sdl2.SDL_Quit()

    sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION, 3)
    sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION, 3)
    sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                             sdl2.SDL_GL_CONTEXT_PROFILE_CORE)

    window = sdl2.SDL_CreateWindow(title, sdl2.SDL_WINDOWPOS_UNDEFINED,
                                   sdl2.SDL_WINDOWPOS_UNDEFINED, width, height,
                                   sdl2.SDL_WINDOW_OPENGL)

    context = sdl2.SDL_GL_CreateContext(window)
    return window, context
Exemplo n.º 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
Exemplo n.º 22
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()
Exemplo n.º 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()
Exemplo n.º 24
0
    def _async_init(self):
        # Create an SDL2 window
        sdl2.ext.init()
        if sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO) != 0:
            raise RuntimeError(sdl2.SDL_GetError())
        self._window = sdl2.SDL_CreateWindow(
            self._window_title.encode(),
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED,
            self.width,
            self.height,
            sdl2.SDL_WINDOW_OPENGL
            | sdl2.SDL_WINDOW_RESIZABLE
            | sdl2.SDL_WINDOW_UTILITY,
        )

        # Create an OpenGL context
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       self.OPENGL_VERSION[0])
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MINOR_VERSION,
                                       self.OPENGL_VERSION[1])
        sdl2.video.SDL_GL_SetAttribute(
            sdl2.video.SDL_GL_CONTEXT_PROFILE_MASK,
            sdl2.video.SDL_GL_CONTEXT_PROFILE_CORE,
        )
        self._glcontext = sdl2.SDL_GL_CreateContext(self._window)
        sdl2.SDL_GL_MakeCurrent(self._window, self._glcontext)

        # Activate vertical synchronization
        sdl2.SDL_GL_SetSwapInterval(1)

        # Set the GLX context
        GLX.glXMakeCurrent(self.x11display, self.x11window, self.glx_context)

        # Call subclass custom initialization
        self.init(**self._init_kwds)

        # Start rendering
        sdl2.SDL_ShowWindow(self._window)
        self._timer = self._loop.create_timer(self._on_update)
        self._loop.set_timer(self._timer, 1, int(1000.0 / 60.0))
Exemplo n.º 25
0
    def _init_gl(self):
        """Set up OpenGL."""
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MAJOR_VERSION,
                                       3)
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_MINOR_VERSION,
                                       1)
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_CONTEXT_PROFILE_MASK,
                                       sdl2.video.SDL_GL_CONTEXT_PROFILE_CORE)
        sdl2.video.SDL_GL_SetAttribute(sdl2.video.SDL_GL_DOUBLEBUFFER, 1)
        self._gl_context = sdl2.SDL_GL_CreateContext(self._window.window)

        GL.glClearColor(0, 0, 0, 1)

        GL.glEnable(GL.GL_DEPTH_TEST)
        GL.glDepthMask(GL.GL_TRUE)
        GL.glDepthFunc(GL.GL_LEQUAL)
        GL.glDepthRange(0, 1)

        GL.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA)
        GL.glEnable(GL.GL_BLEND)

        GL.glEnable(GL.GL_CULL_FACE)
        GL.glCullFace(GL.GL_BACK)
Exemplo n.º 26
0
 def init_sdl(self):
     """
     Create a window and initialize opengl
     """
     sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING)
     sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MAJOR_VERSION, 3)
     sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_MINOR_VERSION, 2)
     sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_CONTEXT_PROFILE_MASK,
                              sdl2.SDL_GL_CONTEXT_PROFILE_CORE)
     sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
     sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_DEPTH_SIZE, 24)
     sdl2.SDL_GL_SetSwapInterval(0)  # 0 = no vsync
     self.window = sdl2.SDL_CreateWindow(
         "DPT GLITCH GUY", sdl2.SDL_WINDOWPOS_UNDEFINED,
         sdl2.SDL_WINDOWPOS_UNDEFINED, DEF_WINDOW_WIDTH, DEF_WINDOW_HEIGHT,
         sdl2.SDL_WINDOW_OPENGL | sdl2.SDL_WINDOW_SHOWN)
     assert self.window, "Error: Could not create window"
     sdl2.SDL_SetWindowResizable(self.window, True)
     glcontext = sdl2.SDL_GL_CreateContext(self.window)
     gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
     gl.glEnable(gl.GL_CULL_FACE)
     gl.glEnable(gl.GL_BLEND)
     gl.glClearColor(0.6, 0.6, 0.6, 0.0)
Exemplo n.º 27
0
    def __init__(self,
                 width=256,
                 height=256,
                 title=None,
                 visible=True,
                 decoration=True,
                 fullscreen=False,
                 config=None,
                 context=None):
        """ """

        window.Window.__init__(self, width, height, title, visible, decoration,
                               fullscreen, config, context)
        if config is None:
            config = configuration.Configuration()
        set_configuration(config)

        flags = sdl2.SDL_WINDOW_SHOWN
        flags |= sdl2.SDL_WINDOW_ALLOW_HIGHDPI
        flags |= sdl2.SDL_WINDOW_RESIZABLE
        flags |= sdl2.SDL_WINDOW_OPENGL
        if visible:
            flags |= sdl2.SDL_WINDOW_SHOWN
        else:
            flags |= SDL_WINDOW_HIDDEN
        if not decoration:
            flags |= sdl2.SDL_WINDOW_BORDERLESS

        self._native_window = sdl2.SDL_CreateWindow(
            self._title, sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED, width, height, flags)
        self._native_context = sdl2.SDL_GL_CreateContext(self._native_window)
        self._native_id = sdl2.SDL_GetWindowID(self._native_window)

        sdl2.SDL_GL_SetSwapInterval(0)

        __windows__[self._native_id] = self
Exemplo n.º 28
0
Arquivo: 3dwf.py Projeto: 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()
Exemplo n.º 29
0
    def __init__(self, width, height):
        self.width = width
        self.height = height

        # init SDL
        sdl2.SDL_Init(sdl2.SDL_INIT_EVERYTHING)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_DOUBLEBUFFER, 1)
        self.window = sdl2.SDL_CreateWindow(
            b"SPARK(&pyspk) Rain Demo", sdl2.SDL_WINDOWPOS_UNDEFINED,
            sdl2.SDL_WINDOWPOS_UNDEFINED, width, height,
            sdl2.SDL_WINDOW_SHOWN | sdl2.SDL_WINDOW_OPENGL)
        sdl2.SDL_CaptureMouse(True)

        # init OpenGL
        self.context = sdl2.SDL_GL_CreateContext(self.window)
        sdl2.SDL_GL_SetSwapInterval(0)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLEBUFFERS, 1)
        sdl2.SDL_GL_SetAttribute(sdl2.SDL_GL_MULTISAMPLESAMPLES, 4)
        gl.glClearColor(0.8, 0.8, 0.8, 0.0)
        surface = sdl2.SDL_GetWindowSurface(self.window)
        gl.glViewport(0, 0, surface.contents.w, surface.contents.h)
        # gl.glDisable(gl.GL_DEPTH)
        gl.glDisable(gl.GL_DEPTH_TEST)
        # load Textures
        self.txPaving = loadTexture(b'res/paving.bmp',
                                    gl.GL_RGB,
                                    gl.GL_REPEAT,
                                    mipmap=True)
        txSplash = loadTexture(b'res/waterdrops.bmp', gl.GL_ALPHA, gl.GL_CLAMP)
        # init fog
        gl.glEnable(gl.GL_FOG)
        gl.glFogi(gl.GL_FOG_MODE, gl.GL_EXP2)

        # init FTGL
        if not notext:
            font = FTGL.TextureFont('res/font.ttf')
            font.FaceSize(24)
            self.font = font

        # init SPARK(pyspk)
        # random seed initialization
        spk.setRandomSeed(int(time.time()))
        # step configuration
        spk.System.setClampStep(True, 0.1)  # clamp the step to 100 ms
        spk.System.useAdaptiveStep(
            0.001,
            0.01)  # use an adaptive step from 1ms to 10ms (1000fps to 100fps)
        # create Renderer
        self.sizeRatio = self.width / 1440
        self.basicRenderer = GLPointRenderer.create(
            1.0)  # bare renderer for comparison(F4)
        dropRenderer = GLPointRenderer.create()
        dropRenderer.setType(spk.POINT_CIRCLE)
        dropRenderer.setSize(2.0 * self.sizeRatio)
        dropRenderer.enableBlending(True)
        self.dropRenderer = dropRenderer
        rainRenderer = GLLineRenderer.create()
        rainRenderer.setLength(-0.1)
        rainRenderer.enableBlending(True)
        self.rainRenderer = rainRenderer
        splashRenderer = GLQuadRenderer.create()
        splashRenderer.setScale(0.05, 0.05)
        splashRenderer.setTexturingMode(spk.TEXTURE_2D)
        splashRenderer.setTexture(txSplash)
        splashRenderer.enableBlending(True)
        splashRenderer.enableRenderingHint(spk.DEPTH_WRITE, False)
        self.splashRenderer = splashRenderer
        # create Model
        rain_enable = spk.FLAG_RED | spk.FLAG_GREEN | spk.FLAG_BLUE | spk.FLAG_ALPHA | spk.FLAG_MASS
        rain_mutable = spk.FLAG_NONE
        rain_random = spk.FLAG_MASS
        rainModel = spk.Model.create(rain_enable, rain_mutable, rain_random)
        rainModel.setParam(spk.PARAM_ALPHA, 0.2)
        rainModel.setImmortal(True)
        self.rainModel = rainModel
        dropModel = spk.Model.create(rain_enable, rain_mutable,
                                     rain_random)  # same as rain
        dropModel.setParam(spk.PARAM_ALPHA, 0.6)
        self.dropModel = dropModel
        splash_enable = spk.FLAG_RED | spk.FLAG_GREEN | spk.FLAG_BLUE | spk.FLAG_ALPHA | spk.FLAG_SIZE | spk.FLAG_ANGLE
        splash_mutable = spk.FLAG_SIZE | spk.FLAG_ALPHA
        splash_random = spk.FLAG_SIZE | spk.FLAG_ANGLE
        splashModel = spk.Model.create(splash_enable, splash_mutable,
                                       splash_random)
        splashModel.setParam(spk.PARAM_ANGLE, 0.0, 2.0 * math.pi)
        splashModel.setParam(spk.PARAM_ALPHA, 1.0, 0.0)
        self.splashModel = splashModel
        # create Emitter
        rainZone = spk.Ring.create(spk.Vector3D(0.0, 5.0, 0.0))
        self.rainZone = rainZone
        rainEmitter = spk.SphericEmitter.create(spk.Vector3D(0.0, -1.0, 0.0),
                                                0.0, 0.03 * math.pi)
        rainEmitter.setZone(rainZone)
        self.rainEmitter = rainEmitter
        self.dropEmitter = spk.SphericEmitter.create(
            spk.Vector3D(0.0, 1.0, 0.0), 0.0, 0.2 * math.pi)
        # create Group
        gravity = spk.Vector3D(0.0, -2.0, 0.0)
        rainGroup = spk.Group.create(rainModel, 8000)
        rainGroup.setCustomUpdate(lambda p, t: self.killRain(p, t))
        rainGroup.setRenderer(rainRenderer)
        rainGroup.addEmitter(rainEmitter)
        rainGroup.setFriction(0.7)
        rainGroup.setGravity(gravity)
        self.rainGroup = rainGroup
        dropGroup = spk.Group.create(dropModel, 16000)
        dropGroup.setRenderer(dropRenderer)
        dropGroup.setFriction(0.7)
        dropGroup.setGravity(gravity)
        self.dropGroup = dropGroup
        splashGroup = spk.Group.create(splashModel, 2400)
        splashGroup.setRenderer(splashRenderer)
        self.splashGroup = splashGroup
        # create System
        system = spk.System.create()
        system.addGroup(splashGroup)
        system.addGroup(dropGroup)
        system.addGroup(rainGroup)
        self.system = system

        print('SPARK FACTORY AFTER INIT :')
        spk.Factory.getInstance().traceAll()

        # init Variables
        self.running = True
        self.paused = False
        self.deltaTime = 0
        self.step = 0
        self.text = 2
        self.renderValue = 0
        self.renderEnv = True
        self.angleY = 0.0
        self.angleX = 12.0
        self.posX = 0.0
        self.posZ = 0.0
        self.rainRatio = 0.5
        self.recompute = True
        self.nbParticles = ''
        self.fps = ''
        self.strRainRate = ''
        self.frames = [sdl2.SDL_GetTicks() - 1]
        self.lasttime = self.frames[-1]
Exemplo n.º 30
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)

    quad = [
        -0.5, -0.5, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.0, 0.0, 1.0, 0.0, 0.5,
        0.5, 0.0, 0.0, 0.0, 1.0, -0.5, 0.5, 0.0, 1.0, 1.0, 1.0
    ]

    quad = numpy.array(quad, dtype=numpy.float32)

    indices = [0, 1, 2, 2, 3, 0]

    indices = numpy.array(indices, dtype=numpy.uint32)

    # Setup GL shaders, data, etc.
    vertex_shader = shaders.compileShader(
        """
   #version 330 
   in vec3 position; 
   in vec3 color; 

   out vec3 newColor; 
   void main() 
   { 
      gl_Position = vec4(position, 1.0f); 
      newColor = color; 
   } 
   """, GL.GL_VERTEX_SHADER)

    fragment_shader = shaders.compileShader(
        """
   #version 330 
   in vec3 newColor; 

   out vec4 outColor; 
   void main()
   {
      outColor = vec4(newColor, 1.0f); 
   }
   """, GL.GL_FRAGMENT_SHADER)

    shaderProgram = shaders.compileProgram(vertex_shader, fragment_shader)

    GL.glUseProgram(shaderProgram)

    VAO = GL.glGenVertexArrays(1)
    GL.glBindVertexArray(VAO)

    # Need VBO for triangle vertices and colours
    VBO = GL.glGenBuffers(1)
    GL.glBindBuffer(GL.GL_ARRAY_BUFFER, VBO)
    GL.glBufferData(GL.GL_ARRAY_BUFFER, 96, quad, GL.GL_STATIC_DRAW)

    EBO = GL.glGenBuffers(1)
    GL.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, EBO)
    GL.glBufferData(GL.GL_ELEMENT_ARRAY_BUFFER, 24, indices, GL.GL_STATIC_DRAW)

    position = GL.glGetAttribLocation(shaderProgram, "position")
    GL.glVertexAttribPointer(position, 3, GL.GL_FLOAT, GL.GL_FALSE, 24,
                             ctypes.c_void_p(0))
    GL.glEnableVertexAttribArray(position)

    color = GL.glGetAttribLocation(shaderProgram, "color")
    GL.glVertexAttribPointer(color, 3, GL.GL_FLOAT, GL.GL_FALSE, 24,
                             ctypes.c_void_p(12))
    GL.glEnableVertexAttribArray(color)

    event = sdl2.SDL_Event()
    running = True

    GL.glClearColor(0, 0, 0, 1)

    while running:
        while sdl2.SDL_PollEvent(ctypes.byref(event)) != 0:
            if event.type == sdl2.SDL_QUIT:
                running = False
        try:
            GL.glClear(GL.GL_COLOR_BUFFER_BIT)
            GL.glDrawElements(GL.GL_TRIANGLES, 6, GL.GL_UNSIGNED_INT, None)

        finally:
            GL.glUseProgram(0)

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

    sdl2.SDL_GL_DeleteContext(context)
    sdl2.SDL_DestroyWindow(window)
    sdl2.SDL_Quit()
    return 0