Пример #1
0
    def test_get_set_texture_blend_mode(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)
        renderer = render.create_renderer(window, -1,
                                          render.SDL_RENDERER_SOFTWARE)
        self.assertIsInstance(renderer, render.SDL_Renderer)

        tex = render.create_texture(renderer, pixels.SDL_PIXELFORMAT_ARGB8888,
                                    render.SDL_TEXTUREACCESS_STREAMING, 10, 10)
        self.assertIsInstance(tex, render.SDL_Texture)

        modes = (video.SDL_BLENDMODE_NONE,
                 video.SDL_BLENDMODE_ADD,
                 video.SDL_BLENDMODE_BLEND,
                 video.SDL_BLENDMODE_MOD,
                 )
        for mode in modes:
            render.set_texture_blend_mode(tex, mode)
            tmode = render.get_texture_blend_mode(tex)
            self.assertEqual(tmode, mode)

        render.destroy_texture(tex)
        self.assertRaises(sdl.SDLError, render.set_texture_blend_mode, tex,
                          modes[2])
        self.assertRaises(sdl.SDLError, render.get_texture_blend_mode, tex)

        render.destroy_renderer(renderer)
        video.destroy_window(window)
Пример #2
0
    def test_get_set_texture_color_mod(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)
        renderer = render.create_renderer(window, -1,
                                          render.SDL_RENDERER_SOFTWARE)
        self.assertIsInstance(renderer, render.SDL_Renderer)

        tex = render.create_texture(renderer, pixels.SDL_PIXELFORMAT_ARGB8888,
                                    render.SDL_TEXTUREACCESS_STREAMING, 10, 10)
        self.assertIsInstance(tex, render.SDL_Texture)
        colors = ((16, 22, 185),
                  (32, 64, 128),
                  (64, 32, 128),
                  (64, 32, 255),
                  (255, 32, 64),
                  (255, 32, 128),
                  (0, 0, 0),
                  (255, 255, 255),
                  (128, 128, 128),
                  )
        for r, g, b in colors:
            render.set_texture_color_mod(tex, r, g, b)
            tr, tg, tb = render.get_texture_color_mod(tex)
            self.assertEqual((tr, tg, tb), (r, g, b))

        render.destroy_texture(tex)
        self.assertRaises(sdl.SDLError, render.set_texture_color_mod, tex,
                          10, 20, 30)
        self.assertRaises(sdl.SDLError, render.get_texture_color_mod, tex)

        render.destroy_renderer(renderer)
        video.destroy_window(window)
Пример #3
0
    def test_query_texture(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)
        renderer = render.create_renderer(window, -1,
                                          render.SDL_RENDERER_SOFTWARE)
        self.assertIsInstance(renderer, render.SDL_Renderer)

        formats = (pixels.SDL_PIXELFORMAT_ARGB8888,
                   pixels.SDL_PIXELFORMAT_RGB555,
                   pixels.SDL_PIXELFORMAT_RGBA4444,
                   pixels.SDL_PIXELFORMAT_ARGB2101010,
                   pixels.SDL_PIXELFORMAT_YUY2
                   )
        access = (render.SDL_TEXTUREACCESS_STATIC,
                  render.SDL_TEXTUREACCESS_STREAMING,
                  render.SDL_TEXTUREACCESS_TARGET)
        for fmt in formats:
            for acc in access:
                for w in range(1, 300, 5):
                    for h in range(1, 300, 5):
                        tex = render.create_texture(renderer, fmt, acc, w, h)
                        self.assertIsInstance(tex, render.SDL_Texture)
                        qf, qa, qw, qh = render.query_texture(tex)
                        self.assertEqual(qf, fmt)
                        self.assertEqual(qa, acc)
                        self.assertEqual(w, qw)
                        self.assertEqual(h, qh)
                        render.destroy_texture(tex)

        render.destroy_renderer(renderer)
        video.destroy_window(window)
Пример #4
0
    def test_create_destroy_texture(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)
        renderer = render.create_renderer(window, -1,
                                          render.SDL_RENDERER_SOFTWARE)
        self.assertIsInstance(renderer, render.SDL_Renderer)

        formats = (pixels.SDL_PIXELFORMAT_ARGB8888,
                   pixels.SDL_PIXELFORMAT_RGB555,
                   pixels.SDL_PIXELFORMAT_RGBA4444,
                   pixels.SDL_PIXELFORMAT_RGBA8888,
                   pixels.SDL_PIXELFORMAT_ARGB2101010,
                   pixels.SDL_PIXELFORMAT_YUY2
                   )
        access = (render.SDL_TEXTUREACCESS_STATIC,
                  render.SDL_TEXTUREACCESS_STREAMING,
                  render.SDL_TEXTUREACCESS_TARGET)
        for fmt in formats:
            for acc in access:
                for w in range(1, 300, 5):
                    for h in range(1, 300, 5):
                        tex = render.create_texture(renderer, fmt, acc, w, h)
                        self.assertIsInstance(tex, render.SDL_Texture)
                        render.destroy_texture(tex)

        self.assertRaises(sdl.SDLError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, 1, -10, 10)
        self.assertRaises(sdl.SDLError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, 1, 10, -10)
        self.assertRaises(sdl.SDLError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, 1, -10, -10)
        self.assertRaises(ValueError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, -5, 10, 10)
        self.assertRaises(ValueError, render.create_texture, renderer,
                          -10, 1, 10, 10)
        self.assertRaises((AttributeError, TypeError),
                          render.create_texture, None,
                          pixels.SDL_PIXELFORMAT_RGB555, 1, 10, 10)
        self.assertRaises((AttributeError, TypeError),
                          render.create_texture, "Test",
                          pixels.SDL_PIXELFORMAT_RGB555, 1, 10, 10)
        self.assertRaises(ValueError, render.create_texture, renderer,
                          "Test", 1, 10, 10)
        self.assertRaises(ValueError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, None, 10, 10)
        self.assertRaises(ValueError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, "Test", 10, 10)

        render.destroy_renderer(renderer)
        self.assertRaises(sdl.SDLError, render.create_texture, renderer,
                          pixels.SDL_PIXELFORMAT_RGB555, 1, 10, 10)
        video.destroy_window(window)
Пример #5
0
    def test_get_set_render_target(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)

        skipcount = 0
        for i in range(render.get_num_render_drivers()):
            renderer = render.create_renderer(window, i,
                                              render.SDL_RENDERER_ACCELERATED)
            self.assertIsInstance(renderer, render.SDL_Renderer)

            supported = render.render_target_supported(renderer)
            if not supported:
                skipcount += 1
                render.destroy_renderer(renderer)
                continue

            render.set_render_target(renderer)
            self.assertIsNone(render.get_render_target(renderer))

            tex = render.create_texture(renderer,
                                        pixels.SDL_PIXELFORMAT_ARGB8888,
                                        render.SDL_TEXTUREACCESS_TARGET,
                                        10, 10)
            render.set_render_target(renderer, tex)
            self.assertIsInstance(render.get_render_target(renderer),
                                  render.SDL_Texture)
            render.destroy_texture(tex)

            # TODO: Check in the SDL codebase, why the code below does
            # not fail...
            # tex2 = render.create_texture(renderer,
            #                              pixels.SDL_PIXELFORMAT_ARGB8888,
            #                              render.SDL_TEXTUREACCESS_STREAMING,
            #                              10, 10)
            # self.assertRaises(SDLError, render.set_render_target, renderer,
            #                   tex2)
            # render.destroy_texture(tex2)

            render.destroy_renderer(renderer)
        video.destroy_window(window)

        if skipcount == render.get_num_render_drivers():
            self.skipTest("None of the renderers supports render targets")
Пример #6
0
    def create_texture_sprite(self, renderer, size=(0, 0), pformat=pixels.SDL_PIXELFORMAT_RGBA8888, static=True):
        """Creates a texture sprite.

        A size tuple containing the width and height of the sprite needs
        to be provided.

        TextureSprite objects are assumed to be static by default,
        making it impossible to access their pixel buffer in favour for
        faster copy operations. If you need to update the pixel data
        frequently, static can be set to False to allow a streaming
        access on the underlying texture pixel buffer.
        """
        if isinstance(renderer, render.SDL_Renderer):
            sdlrenderer = renderer
        elif isinstance(renderer, RenderContext):
            sdlrenderer = renderer.renderer
        else:
            raise TypeError("renderer must be a Renderer or SDL_Renderer")
        access = render.SDL_TEXTUREACCESS_STATIC
        if not static:
            access = render.SDL_TEXTUREACCESS_STREAMING
        texture = render.create_texture(sdlrenderer, pformat, access, size[0], size[1])
        return TextureSprite(texture)
Пример #7
0
    def test_get_set_texture_alpha_mod(self):
        window = video.create_window("Test", 10, 10, 10, 10,
                                     video.SDL_WINDOW_HIDDEN)
        self.assertIsInstance(window, video.SDL_Window)
        renderer = render.create_renderer(window, -1,
                                          render.SDL_RENDERER_SOFTWARE)
        self.assertIsInstance(renderer, render.SDL_Renderer)

        tex = render.create_texture(renderer, pixels.SDL_PIXELFORMAT_ARGB8888,
                                    render.SDL_TEXTUREACCESS_STREAMING, 10, 10)
        self.assertIsInstance(tex, render.SDL_Texture)

        for alpha in range(0, 255):
            render.set_texture_alpha_mod(tex, alpha)
            talpha = render.get_texture_alpha_mod(tex)
            self.assertEqual(talpha, alpha)

        render.destroy_texture(tex)
        self.assertRaises(sdl.SDLError, render.set_texture_color_mod, tex,
                          10, 20, 30)
        self.assertRaises(sdl.SDLError, render.get_texture_color_mod, tex)

        render.destroy_renderer(renderer)
        video.destroy_window(window)