コード例 #1
0
    def add_background(self,
                       user_pos,
                       user_color=(),
                       opacity=0.69,
                       shader_code=plasma_hearts_shader_code,
                       last_canvas=None):
        """ add another render context """
        if not user_color:
            root = App.get_running_app().root
            if root:
                ids = root.ids
                user_color = (ids.color_red.value, ids.color_green.value,
                              ids.color_blue.value, ids.color_alpha.value)
            else:
                user_color = (.69, .36, .39, .6)
        # noinspection PyUnresolvedReferences
        import kivy.core.window  # not needed directly, import to ensure creation of window render context

        render_ctx = RenderContext(opacity=opacity,
                                   use_parent_modelview=True,
                                   use_parent_projection=True,
                                   use_parent_frag_modelview=True)
        with render_ctx:
            rectangle = Rectangle(pos=self.pos, size=self.size)
        self.compile_fragment_shader(render_ctx, shader_code)
        print("ADDING RENDER CONTEXT OK=", render_ctx.shader.success, user_pos,
              user_color, opacity)

        background_idx = len(self.backgrounds) if hasattr(self,
                                                          'backgrounds') else 0
        if background_idx:
            last_canvas = self.backgrounds[-1]['render_ctx']
        else:
            self.backgrounds = list()
            self.user_pos = user_pos = list((self.center_x, 0))
        if last_canvas:
            # rc.add(last_canvas)
            last_canvas.add(render_ctx)
        self.backgrounds.append(
            dict(render_ctx=render_ctx,
                 rectangle=rectangle,
                 user_pos=user_pos,
                 user_color=user_color,
                 opacity=opacity))
        Clock.schedule_interval(partial(self.update_glsl, background_idx),
                                1 / 30.)
コード例 #2
0
ファイル: game_interface.py プロジェクト: maroxe/Banania
    def __init__(self, *args, **kwargs):
        # We must do this, if no other widget has been loaded the
        # GL context may not be fully prepared
        EventLoop.ensure_window()
        # Most likely you will want to use the parent projection
        # and modelviev in order for your widget to behave the same
        # as the rest of the widgets
        self.canvas = RenderContext(use_parent_projection=True,
                                    use_parent_modelview=True)
        self.canvas.shader.source = 'shaders/flame.glsl'
        Clock.schedule_interval(self.update_shader, 0)
        self.effects = {}

        self.count = 0.
        self.center = (0, 0)
        self.scale_obj = config.get_scale_object()
        super(self.__class__, self).__init__(*args, **kwargs)
コード例 #3
0
    def assign(self, widget, scrollview_container=None):
        if self._anim:
            Logger.info('Placeholder: assign with animation')
            return
        # first update our size to the new texture size.
        self.size = self.newtexture.size
        self.texture_size = self.newtexture.size

        self._hotspots = widget.get_hotspots()

        visual_bbox = None
        if scrollview_container:
            visual_bbox = StableScrollView.BBox(
                *scrollview_container._get_pure_viewbox())
        if not visual_bbox or not self.collide_widget(visual_bbox):
            self.anim_on_complete(1.0)
        else:
            self._cntx = RenderContext(use_parent_projection=True)
            self._cntx.shader.fs = FADE_TRANSITION_FS
            with self._cntx:
                # here, we are binding a custom texture at index 1
                # this will be used as texture1 in shader.
                BindTexture(texture=self.newtexture, index=1)

                # create a rectangle with texture (will be at index 0)
                pos = self.to_window(self.x, self.y)
                self._cntx_rect = Rectangle(size=self.size,
                                            pos=pos,
                                            texture=self.holder,
                                            tex_coords=self.holder.tex_coords)

                # callback to update position
                #Callback(self._cntx_callback)

            # set the texture1 to use texture index 1
            self._cntx['t'] = 0.0
            self._cntx['tex_in'] = 1
            self._cntx['tex_out'] = 0
            self.canvas.add(self._cntx)

            # set the animation in progress
            self._anim = Animation(duration=0.250, s=0)
            self._anim.bind(on_progress=self.anim_on_progress,
                            on_complete=self.anim_on_complete)
            self._anim.start(self)
コード例 #4
0
    def create_drawings(self):
        from kivy.graphics import PushMatrix, PopMatrix
        #from kivy.utils import get_color_from_hex as rgb
        from kivy.graphics import RenderContext
        self._grc = RenderContext(use_parent_modelview=True,
                                  use_parent_projection=True)

        with self._grc.before:
            PushMatrix()

        with self._grc:
            self._gcolor = Color(*self.color)
            self._ellipses = [Ellipse() for i in xrange(len(self.points))]

        with self._grc.after:
            PopMatrix()

        return [self._grc]
コード例 #5
0
    def __init__(self, grid, **kwargs):
        self.canvas = RenderContext()
        self.canvas.shader.source = SIMPLE_SHADER
        self._atlas = Atlas(BG_ATLAS_ATLAS)
        self._tex = CoreImage(BG_ATLAS_IMAGE).texture

        super().__init__(size_hint=(1, 1), **kwargs)
        with self.canvas:
            PushMatrix()
            UpdateNormalMatrix()

            vertices = []
            indices = []
            rows = 40
            cols = 40
            blk_h = 1. / rows
            blk_w = 1. / cols
            n = 0
            tex_names = list(self._atlas.textures.keys())
            for i, j in product(range(cols), range(rows)):
                tex_name = tex_names[(i + j) % len(tex_names)]
                win_x1, win_y1 = blk_w * i - .5, blk_h * j - .5
                win_x2, win_y2 = blk_w * (i + 1) - .5, blk_h * (j + 1) - .5
                tex_pos = self._atlas[tex_name].uvpos
                tex_size = self._atlas[tex_name].uvsize
                tex_x1, tex_y1 = tex_pos
                tex_x2, tex_y2 = tex_pos[0] + tex_size[0], tex_pos[
                    1] + tex_size[1]
                vertices.extend([
                    win_x1, win_y1, 0, tex_x1, tex_y1, win_x2, win_y1, 0,
                    tex_x2, tex_y1, win_x1, win_y2, 0, tex_x1, tex_y2, win_x2,
                    win_y2, 0, tex_x2, tex_y2
                ])

                indices.extend([n, n + 1, n + 2, n + 2, n + 1, n + 3])
                n += 4

            fmt = [(b'v_pos', 3, 'float'), (b'v_uv', 2, 'float')]
            self.mesh = Mesh(texture=self._tex,
                             vertices=vertices,
                             indices=indices,
                             fmt=fmt,
                             mode="triangles")
            PopMatrix()
コード例 #6
0
ファイル: effectwidget.py プロジェクト: cchang888/kivy3dgui
    def __init__(self, **kwargs):
        # Make sure opengl context exists
        EventLoop.ensure_window()
        self.mask_effect = kwargs.get("mask_effect", None)
        self.motion_effect = kwargs.get("motion_effect", None)

        self.canvas = RenderContext(use_parent_projection=True,
                                    use_parent_modelview=True)

        self.size = C_SIZE
        with self.canvas:
            #self._viewport = Rectangle(size=(800,600), pos=self.pos)
            self.fbo = Fbo(size=C_SIZE,
                           with_depthbuffer=True,
                           compute_normal_mat=True,
                           clear_color=(0.3, 0.3, 0.7, 1))

        with self.fbo.before:
            #Rectangle(size=(800, 600))
            PushMatrix()
            self.fbo_translation = Translate(-self.x, -self.y, 0)
            BindTexture(texture=self.mask_effect.texture, index=4)
            BindTexture(texture=self.motion_effect.texture, index=5)

        with self.fbo:
            Color(0, 0, 0)
            BindTexture(texture=self.mask_effect.texture, index=4)
            BindTexture(texture=self.motion_effect.texture, index=5)
            self.fbo_rectangle = Rectangle(size=C_SIZE)
            self._instructions = InstructionGroup()

        with self.fbo.after:
            PopMatrix()
            self.cbs = Callback(self.reset_gl_context)

        super(EffectWidget, self).__init__()
        self.size = C_SIZE

        Clock.schedule_interval(self.update_glsl, 0)

        self._instructions.add(Callback(self.setup_gl_context))

        self.refresh_fbo_setup()
        Clock.schedule_interval(self.update_fbos, 0)
コード例 #7
0
    def create_drawings(self):
        from kivy.graphics import Line, RenderContext

        # very first time, create a texture for the shader
        if not hasattr(SmoothLinePlot, '_texture'):
            tex = Texture.create(size=(1, 64), colorfmt='rgb')
            tex.add_reload_observer(SmoothLinePlot._smooth_reload_observer)
            SmoothLinePlot._texture = tex
            SmoothLinePlot._smooth_reload_observer(tex)

        self._grc = RenderContext(fs=SmoothLinePlot.SMOOTH_FS,
                use_parent_modelview=True,
                use_parent_projection=True)
        with self._grc:
            self._gcolor = Color(*self.color)
            self._gline = Line(points=[], cap='none', width=8.,
                    texture=SmoothLinePlot._texture)

        return [self._grc]
コード例 #8
0
ファイル: screenmanager.py プロジェクト: tuxcanfly/kivy
    def add_screen(self, screen):
        self.screen_in.pos = self.screen_out.pos
        self.screen_in.size = self.screen_out.size
        self.manager.real_remove_widget(self.screen_out)

        self.fbo_in = self.make_screen_fbo(self.screen_in)
        self.fbo_out = self.make_screen_fbo(self.screen_out)
        self.manager.canvas.add(self.fbo_in)
        self.manager.canvas.add(self.fbo_out)

        self.render_ctx = RenderContext(fs=self.fs)
        with self.render_ctx:
            BindTexture(texture=self.fbo_out.texture, index=1)
            BindTexture(texture=self.fbo_in.texture, index=2)
            Rectangle(size=(1, -1), pos=(0, 1))
        self.render_ctx['projection_mat'] = Matrix().\
            view_clip(0, 1, 0, 1, 0, 1, 0)
        self.render_ctx['tex_out'] = 1
        self.render_ctx['tex_in'] = 2
        self.manager.canvas.add(self.render_ctx)
コード例 #9
0
ファイル: guiwindow.py プロジェクト: Mmalherbe/fridgepy
    def __init__(self,controller,width = 480,height = 320, **kwargs):
        App.__init__(self)
        self.controller = controller
        self.productFound = ""
        self.wid = Widget()
        self.canvas = RenderContext()
        self.image_Found = None

        self.RealTimeImageOfProduct = None
        self.event = None
        self.lblProductName = None
        self.wid.height = height
        self.wid.width = width
        self.btnheight = 10
        self.btnwidth = 90
        self.stock_layout = None
        self.stock_root = None
        self.stocklblWdith = None
        self.stocklblHeight = 50
        self.imgSaving = False
コード例 #10
0
    def create_drawings(self):
        from kivy.graphics import Line, RenderContext
        from kivy.graphics.texture import Texture

        # very first time, create a texture for the shader
        if not hasattr(SmoothLinePlot, '_texture'):
            tex = Texture.create(size=(1, 64), colorfmt='rgb')
            tex.blit_buffer(SmoothLinePlot.GRADIENT_DATA, colorfmt='rgb')
            SmoothLinePlot._texture = tex

        self._grc = RenderContext(fs=SmoothLinePlot.SMOOTH_FS,
                                  use_parent_modelview=True,
                                  use_parent_projection=True)
        with self._grc:
            self._gcolor = Color(*self.color)
            self._gline = Line(points=[],
                               cap='none',
                               width=2.,
                               texture=SmoothLinePlot._texture)

        return [self._grc]
コード例 #11
0
    def __init__(self, **kwargs):

        Window.bind(mouse_pos=self.get_mouse_pos)

        self.canvas = RenderContext(use_parent_projection=True,
                                    use_parent_modelview=True,
                                    use_parent_frag_modelview=True)

        with self.canvas:
            self.fbo = Fbo(size=self.size)
            self.fbo_color = Color(1, 1, 1, 1)
            self.fbo_rect = Rectangle(size=self.size, pos=self.pos)

        with self.fbo:
            ClearColor(0, 0, 0, 0)
            ClearBuffers()

        super(ShaderWidget, self).__init__(**kwargs)

        self.fs = shader_watter_bubble
        Clock.schedule_interval(self.update_glsl, 0)
コード例 #12
0
ファイル: screenmanager.py プロジェクト: won21kr/kivy
    def add_screen(self, screen):
        self.screen_in.pos = self.screen_out.pos
        self.screen_in.size = self.screen_out.size
        self.manager.real_remove_widget(self.screen_out)

        self.fbo_in = self.make_screen_fbo(self.screen_in)
        self.fbo_out = self.make_screen_fbo(self.screen_out)
        self.manager.canvas.add(self.fbo_in)
        self.manager.canvas.add(self.fbo_out)

        self.render_ctx = RenderContext(fs=self.fs, vs=self.vs,
                use_parent_modelview=True, use_parent_projection=True)
        with self.render_ctx:
            BindTexture(texture=self.fbo_out.texture, index=1)
            BindTexture(texture=self.fbo_in.texture, index=2)
            x, y = self.screen_in.pos
            w, h = self.fbo_in.texture.size
            Rectangle(size=(w, h), pos=(x, y),
                    tex_coords=self.fbo_in.texture.tex_coords)
        self.render_ctx['tex_out'] = 1
        self.render_ctx['tex_in'] = 2
        self.manager.canvas.add(self.render_ctx)
コード例 #13
0
    def __init__(self, **kwargs):
        # Instead of using canvas, we will use a RenderContext,
        # and change the default shader used.
        self.canvas = RenderContext(use_parent_projection=True,
                                    use_parent_modelview=True,
                                    use_parent_frag_modelview=True)

        with self.canvas:
            self.fbo = Fbo(size=self.size)
            self.fbo_color = Color(1, 1, 1, 1)
            self.fbo_rect = Rectangle()

        with self.fbo:
            ClearColor(0, 0, 0, 0)
            ClearBuffers()

        # call the constructor of parent
        # if they are any graphics object, they will be added on our new canvas
        super(ShaderWidget, self).__init__(**kwargs)

        # We'll update our glsl variables in a clock
        Clock.schedule_interval(self.update_glsl, 0)
コード例 #14
0
    def __init__(self, **kwargs):
        super(Paintbrush, self).__init__(**kwargs)
        self.fbo = Fbo(size=(10, 10))
        self.mesh = Mesh()
        self.points = []
        self.vertices = []
        self.indices = []
        self.line_widths = []
        self.cap_vertices_index = 0
        self.cap_indices_index = 0
        self.mask_lines = []
        self.mask_alphas = []
        self.canvas = RenderContext()
        self.canvas.shader.fs = mask_shader
        self.buffer_container = None
        self.rgb = (0, 1, 1)
        # We'll update our glsl variables in a clock
        Clock.schedule_interval(self.update_glsl, 0)

        # Maintain a window of history for autocorrelations
        self.ac_window = []
        self.ac_position = 0
        self.periodicity_factor = 1.0
コード例 #15
0
ファイル: main.py プロジェクト: AntonWarrior/MatteApp1
class MainApp(App):

    canvas = RenderContext()
    felproc_ova_regel = 2
    antal = 1


    def build(self):
        return GUI

    def on_start(self):
        #hämta firebase datan
        result = requests.get("https://derivataapp1.firebaseio.com/" + str(self.antal) + ".json")
        #print("was it okay?", result.ok)
        #dekoda binär data från firebase
        data = json.loads(result.content.decode())
        #print(data)



    def change_screen(self, screen_name):
        screen_manager = self.root.ids['screen_manager']
        screen_manager.current = screen_name
コード例 #16
0
    def __init__(self, **kwargs):
        # change the default canvas to RenderContext, we can change the shader
        self.canvas = RenderContext()
        self.canvas.shader.fs = hsv_kinect

        # add kinect depth provider, and start the thread
        self.kinect = KinectDepth()
        self.kinect.start()

        # parent init
        super(KinectViewer, self).__init__(**kwargs)

        # allocate texture for pushing depth
        self.texture = Texture.create(
            size=(640, 480), colorfmt='luminance', bufferfmt='ushort')
        self.texture.flip_vertical()

        # create default canvas element
        with self.canvas:
            Color(1, 1, 1)
            Rectangle(size=Window.size, texture=self.texture)

        # add a little clock to update our glsl
        Clock.schedule_interval(self.update_transformation, 0)
コード例 #17
0
    def __init__(self, **kwargs):
        # Instead of using canvas, we will use a RenderContext,
        # and change the default shader used.
        self.canvas = RenderContext(use_parent_projection=True)

        # We create a framebuffer at the size of the window
        # FIXME: this should be created at the size of the widget
        with self.canvas:
            self.fbo = Fbo(size=Window.size, use_parent_projection=True)

        # Set the fbo background to black.
        with self.fbo:
            Color(0, 0, 0)
            Rectangle(size=Window.size)

        # call the constructor of parent
        # if they are any graphics object, they will be added on our new canvas
        super(ShaderWidget, self).__init__(**kwargs)

        # We'll update our glsl variables in a clock
        Clock.schedule_interval(self.update_glsl, 0)

        # Don't forget to set the texture property to the texture of framebuffer
        self.texture = self.fbo.texture
コード例 #18
0
 def __init__(self, **kwargs):
     self.canvas = RenderContext(use_parent_projection=True)
     self.canvas.shader.source = 'multiquad.glsl'
     super(QuadRenderer, self).__init__(**kwargs)
     self.draw_quads(6000)
コード例 #19
0
ファイル: benchmark.py プロジェクト: adhodzic/scanner
 def __init__(self):
     self.ctx = RenderContext()
     self.root = root = Widget()
     for x in range(10000):
         root.add_widget(Widget())
     self.ctx.add(self.root.canvas)
コード例 #20
0
ファイル: my.py プロジェクト: wine3603/mosculp-demo-ui
 def __init__(self, **kwargs):
     super(Renderer, self).__init__(**kwargs)
     self.canvas = RenderContext(compute_normal_mat=True)
     self.canvas.shader.source = resource_find('simple.glsl')
     self._touches = []
コード例 #21
0
ファイル: main.py プロジェクト: victor-rene/kivy
 def __init__(self, **kwargs):
     self.canvas = RenderContext()
     super(ShaderViewer, self).__init__(**kwargs)
     Clock.schedule_interval(self.update_shader, 0)
コード例 #22
0
ファイル: main.py プロジェクト: victor-rene/kivy
 def __init__(self, **kwargs):
     super(ShaderEditor, self).__init__(**kwargs)
     self.test_canvas = RenderContext()
     s = self.test_canvas.shader
     self.trigger_compile = Clock.create_trigger(self.compile_shaders, -1)
     self.bind(fs=self.trigger_compile, vs=self.trigger_compile)
コード例 #23
0
 def __init__(self, **kwargs):
     self.canvas = RenderContext()
     super(ShaderViewer, self).__init__(**kwargs)
     self.canvas.shader.fs = fs_header + self.fs
     self.canvas.shader.vs = vs_header + self.vs
     Clock.schedule_interval(self.update_shader, 0)
コード例 #24
0
 def __init__(self, other_widget, **kwargs):
     self.other_widget = other_widget
     self.canvas = RenderContext(use_parent_projection=True)
     self.canvas.shader.source = 'niceline.glsl'
     super(NiceLineRenderer, self).__init__(**kwargs)
コード例 #25
0
ファイル: main.py プロジェクト: poikilos/KivyExamplesPy3
 def __init__(self, **kwargs):
     self.canvas = RenderContext(use_parent_projection=True)
     self.canvas.shader.source = 'multiquad.glsl'
     super(MultiQuadRenderer, self).__init__(**kwargs) 
     self.draw_mesh_rectangle(20)
     self.draw_mesh_rectangle(200)
コード例 #26
0
    def __init__(self, *args, **kwargs):
        self.canvas = RenderContext(use_parent_projection=True,
                                    use_parent_modelview=True)

        Clock.schedule_once(self.post_init, 0)
        super().__init__(*args, **kwargs)
コード例 #27
0
 def __init__(self, **kwargs):
     self.canvas = RenderContext()
     self.canvas.shader.fs = alpha_fragment
     super(AlphaScatter, self).__init__(**kwargs)
     Clock.schedule_once(self.init_shader, 0)