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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)