예제 #1
0
 def test_SDL_RenderDrawPoint(self):
     points = ((-4, -3), (-4, 3), (4, -3), (0, 0), (1, 1), (10, 10),
               (99, 99), (4, 22), (57, 88), (45, 15), (100, 100))
     r, g, b, a = 0xAA, 0xBB, 0xCC, 0xDD
     w, h = 100, 100
     sf = surface.SDL_CreateRGBSurface(0, w, h, 32, 0xFF000000, 0x00FF0000,
                                       0x0000FF00, 0x000000FF)
     color = pixels.SDL_MapRGBA(sf.contents.format, r, g, b, a)
     renderer = render.SDL_CreateSoftwareRenderer(sf)
     self.assertIsInstance(renderer.contents, render.SDL_Renderer)
     ret = render.SDL_SetRenderDrawColor(renderer, r, g, b, a)
     self.assertEqual(ret, 0)
     for x, y in points:
         ret = render.SDL_RenderDrawPoint(renderer, x, y)
         self.assertEqual(ret, 0)
     render.SDL_RenderPresent(renderer)
     view = PixelView(sf.contents)
     for x, y in points:
         npx = max(x + 1, w)
         npy = max(y + 1, h)
         ppx = max(x - 1, 0)
         ppy = max(y - 1, 0)
         if x < 0 or x >= w or y < 0 or y >= h:
             continue
         self.assertEqual(hex(view[y][x]), hex(color))
         if (npx, npy) not in points:
             self.assertNotEqual(hex(view[npy][npx]), hex(color))
         if (ppx, ppy) not in points:
             self.assertNotEqual(hex(view[ppy][ppx]), hex(color))
     render.SDL_DestroyRenderer(renderer)
     del view
     surface.SDL_FreeSurface(sf)
예제 #2
0
    def test_IMG_LoadTexture(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            tex = sdlimage.IMG_LoadTexture(rd, filename.encode("utf-8"))
            self.assertIsInstance(tex.contents, render.SDL_Texture)
            render.SDL_DestroyTexture(tex)

        #self.assertRaises(sdl.SDLError, sdlimage.load_texture, rd,
        #                  RESOURCES.get_path("rwopstest.txt"))

        #self.assertRaises(sdl.SDLError, sdlimage.load_texture, rd, None)
        #self.assertRaises(sdl.SDLError, sdlimage.load_texture, rd, 1234)
        #self.assertRaises((AttributeError, TypeError),
        #                  sdlimage.load_texture, None,
        #                  RESOURCES.get_path("surfacetest.bmp"))
        #self.assertRaises((AttributeError, TypeError),
        #                  sdlimage.load_texture, "Test",
        #                  RESOURCES.get_path("surfacetest.bmp"))
        #self.assertRaises((AttributeError, TypeError),
        #                  sdlimage.load_texture, 1234,
        #                  RESOURCES.get_path("surfacetest.bmp"))

        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #3
0
 def test_SDL_CreateSoftwareRenderer(self):
     sf = surface.SDL_CreateRGBSurface(0, 100, 100, 32, 0xFF000000,
                                       0x00FF0000, 0x0000FF00, 0x000000FF)
     renderer = render.SDL_CreateSoftwareRenderer(sf)
     self.assertIsInstance(renderer.contents, render.SDL_Renderer)
     render.SDL_DestroyRenderer(renderer)
     surface.SDL_FreeSurface(sf)
예제 #4
0
    def test_IMG_LoadTexture_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            if fmt == "tga":
                # SDL_image does not support loading TGA via
                # IMG_LoadTexture_RW()
                continue
            if fmt in ("svg", "webp"):
                # FIXME: svg and webp crashes with SDL2_image 2.0.2
                continue
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            print(filename)
            with open(filename, "rb") as fp:
                tex = sdlimage.IMG_LoadTexture_RW(rd, rwops.rw_from_object(fp),
                                                  0)
                self.assertIsNotNone(tex)
                self.assertIsInstance(tex.contents, render.SDL_Texture)
                render.SDL_DestroyTexture(tex)

        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #5
0
 def test_SDL_RenderGetSetIntegerScale(self):
     sf = surface.SDL_CreateRGBSurface(0, 100, 100, 32, 0xFF000000,
                                       0x00FF0000, 0x0000FF00, 0x000000FF)
     renderer = render.SDL_CreateSoftwareRenderer(sf)
     assert isinstance(renderer.contents, render.SDL_Renderer)
     assert render.SDL_RenderGetIntegerScale(renderer) == SDL_FALSE
     assert render.SDL_RenderSetIntegerScale(renderer, SDL_FALSE) == 0
     assert render.SDL_RenderGetIntegerScale(renderer) == SDL_FALSE
     assert render.SDL_RenderSetIntegerScale(renderer, SDL_TRUE) == 0
     assert render.SDL_RenderGetIntegerScale(renderer) == SDL_TRUE
     assert render.SDL_RenderSetIntegerScale(renderer, SDL_FALSE) == 0
     assert render.SDL_RenderGetIntegerScale(renderer) == SDL_FALSE
     render.SDL_DestroyRenderer(renderer)
     surface.SDL_FreeSurface(sf)
예제 #6
0
 def test_SDL_RenderGetSetIntegerScale(self):
     sf = surface.SDL_CreateRGBSurface(0, 100, 100, 32, 0xFF000000,
                                       0x00FF0000, 0x0000FF00, 0x000000FF)
     renderer = render.SDL_CreateSoftwareRenderer(sf)
     self.assertIsInstance(renderer.contents, render.SDL_Renderer)
     self.assertEqual(render.SDL_RenderGetIntegerScale(renderer), SDL_FALSE)
     self.assertEqual(render.SDL_RenderSetIntegerScale(renderer, SDL_FALSE),
                      0)
     self.assertEqual(render.SDL_RenderGetIntegerScale(renderer), SDL_FALSE)
     self.assertEqual(render.SDL_RenderSetIntegerScale(renderer, SDL_TRUE),
                      0)
     self.assertEqual(render.SDL_RenderGetIntegerScale(renderer), SDL_TRUE)
     self.assertEqual(render.SDL_RenderSetIntegerScale(renderer, SDL_FALSE),
                      0)
     self.assertEqual(render.SDL_RenderGetIntegerScale(renderer), SDL_FALSE)
     render.SDL_DestroyRenderer(renderer)
     surface.SDL_FreeSurface(sf)
예제 #7
0
    def test_IMG_LoadTextureTyped_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            fp = open(filename, "rb")
            fmtx = fmt.upper().encode("utf-8")
            rw = rwops.rw_from_object(fp)
            tex = sdlimage.IMG_LoadTextureTyped_RW(rd, rw, 0, fmtx)
            fp.close()
            self.assertIsInstance(tex.contents, render.SDL_Texture)
            render.SDL_DestroyTexture(tex)
        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #8
0
    def test_IMG_LoadTexture_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)
        skip = ['svg', 'tga']#, 'webp'] # TGA not supported, others broken
        fname = "surfacetest.%s"
        for fmt in formats:
            if fmt in skip:
                continue
            testdir = os.path.dirname(os.path.abspath(__file__))
            filename = os.path.join(testdir, "resources", fname % fmt)
            print(filename)
            with open(filename, "rb") as fp:
                tex = sdlimage.IMG_LoadTexture_RW(rd, rwops.rw_from_object(fp), 0)
                self.assertIsNotNone(tex)
                self.assertIsInstance(tex.contents, render.SDL_Texture)
                render.SDL_DestroyTexture(tex)

        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #9
0
 def test_IMG_LoadTextureTyped_RW(self):
     sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
     rd = render.SDL_CreateSoftwareRenderer(sf)
     skip = ['svg']  # SVG broken for LoadTextureTyped_RW
     fname = "surfacetest.%s"
     for fmt in formats:
         if fmt in skip:
             continue
         testdir = os.path.dirname(os.path.abspath(__file__))
         filename = os.path.join(testdir, "resources", fname % fmt)
         with open(filename, "rb") as fp:
             rw = rwops.rw_from_object(fp)
             fmtx = fmt.upper().encode("utf-8")
             tex = sdlimage.IMG_LoadTextureTyped_RW(rd, rw, 0, fmtx)
             assert tex is not None
             assert isinstance(tex.contents, render.SDL_Texture)
         render.SDL_DestroyTexture(tex)
     render.SDL_DestroyRenderer(rd)
     surface.SDL_FreeSurface(sf)
예제 #10
0
    def test_IMG_LoadTexture_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            if fmt == "tga":
                # SDL_image does not support loading TGA via
                # IMG_LoadTexture_RW()
                continue
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            fp = open(filename, "rb")
            tex = sdlimage.IMG_LoadTexture_RW(rd, rwops.rw_from_object(fp), 0)
            fp.close()
            self.assertIsInstance(tex.contents, render.SDL_Texture)
            render.SDL_DestroyTexture(tex)

        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #11
0
    def test_IMG_LoadTextureTyped_RW(self):
        sf = surface.SDL_CreateRGBSurface(0, 10, 10, 32, 0, 0, 0, 0)
        rd = render.SDL_CreateSoftwareRenderer(sf)

        fname = "surfacetest.%s"
        for fmt in formats:
            if fmt == "webp":
                # FIXME: crashew with SDL_image 2.0.2
                continue
            if fmt == "svg":
                # FIXME: svg crashes with SDL2_image 2.0.2
                continue
            filename = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                                    "resources", fname % fmt)
            print(filename)
            with open(filename, "rb") as fp:
                rw = rwops.rw_from_object(fp)
                fmtx = fmt.upper().encode("utf-8")
                tex = sdlimage.IMG_LoadTextureTyped_RW(rd, rw, 0, fmtx)
                self.assertIsNotNone(tex)
                self.assertIsInstance(tex.contents, render.SDL_Texture)
            render.SDL_DestroyTexture(tex)
        render.SDL_DestroyRenderer(rd)
        surface.SDL_FreeSurface(sf)
예제 #12
0
    def test_SDL_RenderGetSetLogicalSize(self):
        w, h = 100, 100
        sf = surface.SDL_CreateRGBSurface(0, w, h, 32, 0xFF000000, 0x00FF0000,
                                          0x0000FF00, 0x000000FF)

        renderer = render.SDL_CreateSoftwareRenderer(sf)
        view = PixelView(sf.contents)

        magenta = 255, 0, 255, 255
        green = 0, 255, 0, 255

        magenta_int = sum(c << (i * 8)
                          for i, c in enumerate(reversed(magenta)))
        green_int = sum(c << (i * 8) for i, c in enumerate(reversed(green)))

        def clear_green():
            ret = render.SDL_SetRenderDrawColor(renderer, green[0], green[1],
                                                green[2], green[3])
            self.assertEqual(ret, 0)
            ret = render.SDL_RenderClear(renderer)
            self.assertEqual(ret, 0)

        def draw_magenta_pixel(x, y):
            ret = render.SDL_SetRenderDrawColor(renderer, magenta[0],
                                                magenta[1], magenta[2],
                                                magenta[3])
            self.assertEqual(ret, 0)
            ret = render.SDL_RenderDrawPoint(renderer, x, y)
            self.assertEqual(ret, 0)

        # Test 1
        # If we set the logical renderer size to 1 x 1, drawing a point
        # at 0, 0 should have the same effect as filling the entire
        # (square) window with magenta - no green should show through.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, 1, 1)
        self.assertEqual(ret, 0)
        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, 1)
        self.assertEqual(got_height.value, 1)

        clear_green()
        draw_magenta_pixel(0, 0)

        for x, y in itertools.product(range(w), range(h)):
            self.assertEqual(view[y][x], magenta_int,
                             'No pixel should be green')

        # Test 2
        # Reset the logical size to the original target by using 0, 0
        # only the first and last pixel should be magenta. The rest
        # should be green.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, 0, 0)
        self.assertEqual(ret, 0)

        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, 0)
        self.assertEqual(got_height.value, 0)

        clear_green()

        draw_magenta_pixel(0, 0)
        draw_magenta_pixel(w - 1, h - 1)

        for x, y in itertools.product(range(w), range(h)):
            if (x, y) == (0, 0) or (x, y) == (w - 1, h - 1):
                self.assertEqual(view[y][x], magenta_int,
                                 'First and last pixel should be magenta')
            else:
                self.assertEqual(view[y][x], green_int,
                                 'All other pixels should be green')

        # Test 3
        # Set the logical size to 1/10, making a logical pixel draw be
        # 10 x 10 real pixel blocks.
        got_width, got_height = c_int(), c_int()

        ret = render.SDL_RenderSetLogicalSize(renderer, w // 10, h // 10)
        self.assertEqual(ret, 0)

        render.SDL_RenderGetLogicalSize(renderer, byref(got_width),
                                        byref(got_height))
        self.assertEqual(got_width.value, w // 10)
        self.assertEqual(got_height.value, h // 10)

        clear_green()

        draw_magenta_pixel(0, 0)
        for x, y in itertools.product(range(w), range(h)):
            if x < 10 and y < 10:
                self.assertEqual(
                    view[y][x], magenta_int,
                    'Top-left 10 x 10 pixel block should be magenta')
            else:
                self.assertEqual(view[y][x], green_int,
                                 'All other pixels should be green')

        render.SDL_DestroyRenderer(renderer)
        surface.SDL_FreeSurface(sf)