Skip to content

Commit 45cfb4d

Browse files
committed
Get renderer & texture support info during tests
1 parent d48453d commit 45cfb4d

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

sdl2/test/render_test.py

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from sdl2.rect import SDL_FPoint
1111
from sdl2.pixels import SDL_Color
1212
from sdl2 import render, video, surface, pixels, blendmode, rect
13+
from sdl2.ext.compat import byteify, stringify
1314
from sdl2.ext.pixelaccess import PixelView
1415

1516
# TODO: Ensure all functions in module have corresponding tests
@@ -142,20 +143,30 @@ def test_SDL_GetNumRenderDrivers(self):
142143
def test_SDL_GetRenderDriverInfo(self):
143144
renderers = []
144145
errs = []
146+
pxformats = {}
145147
drivers = render.SDL_GetNumRenderDrivers()
146148
for x in range(drivers):
147149
sdl2.SDL_ClearError()
148150
info = render.SDL_RendererInfo()
149151
ret = render.SDL_GetRenderDriverInfo(x, info)
150152
if ret != 0:
151-
err = sdl2.SDL_GetError().decode("utf-8")
153+
err = stringify(sdl2.SDL_GetError())
152154
errs.append("Renderer {0} error: {1}".format(x, err))
153-
else:
154-
renderers.append(info.name.decode("utf-8"))
155-
print("Render drivers supported by current SDL2 binary:")
156-
print(renderers)
155+
continue
156+
rname = stringify(info.name)
157+
renderers.append(rname)
158+
pxformats[rname] = []
159+
for i in range(info.num_texture_formats):
160+
fmt_name = pixels.SDL_GetPixelFormatName(info.texture_formats[i])
161+
pxformats[rname].append(stringify(fmt_name).split("_")[-1])
157162
assert len(renderers)
158163
assert "software" in renderers
164+
print("Render drivers supported by current SDL2 binary:")
165+
print(renderers)
166+
print("\nTexture formats supported by each renderer:")
167+
for rname in renderers:
168+
print(rname)
169+
print(" - " + " ".join(pxformats[rname]))
159170

160171
def test_SDL_CreateWindowAndRenderer(self):
161172
window = POINTER(video.SDL_Window)()
@@ -238,34 +249,44 @@ def test_SDL_GetRenderer(self):
238249
dogc()
239250

240251
def test_SDL_GetRendererInfo(self):
241-
failed = 0
252+
renderers = []
253+
max_sizes = {}
254+
errs = []
242255
rcount = render.SDL_GetNumRenderDrivers()
243256
for i in range(rcount):
244-
window = video.SDL_CreateWindow(b"Test", 10, 10, 10, 10,
245-
video.SDL_WINDOW_HIDDEN)
257+
sdl2.SDL_ClearError()
258+
window = video.SDL_CreateWindow(
259+
b"Test", 10, 10, 10, 10, video.SDL_WINDOW_HIDDEN
260+
)
246261
assert isinstance(window.contents, video.SDL_Window)
247262
renderer = render.SDL_CreateRenderer(window, i, self._RENDERFLAGS)
248263
if not (renderer and renderer.contents):
249-
failed += 1
264+
err = stringify(sdl2.SDL_GetError())
265+
errs.append("Unable to create renderer {0}: {1}".format(i, err))
250266
video.SDL_DestroyWindow(window)
251267
continue
252268
assert isinstance(renderer.contents, render.SDL_Renderer)
253269
info = render.SDL_RendererInfo()
254270
ret = render.SDL_GetRendererInfo(renderer, byref(info))
255-
assert ret == 0
271+
if ret == 0:
272+
rname = stringify(info.name)
273+
max_size = (info.max_texture_width, info.max_texture_height)
274+
renderers.append(rname)
275+
max_sizes[rname] = max_size
276+
else:
277+
err = stringify(sdl2.SDL_GetError())
278+
errs.append("Renderer {0} error: {1}".format(i, err))
256279
render.SDL_DestroyRenderer(renderer)
257-
258-
#self.assertRaises(sdl.SDLError, render.SDL_GetRendererInfo,
259-
# renderer)
260-
261280
video.SDL_DestroyWindow(window)
262-
assert not (failed == rcount), "could not create a renderer"
263-
with pytest.raises((AttributeError, TypeError)):
264-
render.SDL_GetRendererInfo(None)
265-
with pytest.raises((AttributeError, TypeError)):
266-
render.SDL_GetRendererInfo("Test")
267281
dogc()
268282

283+
assert len(renderers)
284+
assert "software" in renderers
285+
print("Render drivers loadable on the current system:")
286+
for rname in renderers:
287+
w, h = max_sizes[rname]
288+
print(" - " + rname + " (max texture size: {0}x{1})".format(w, h))
289+
269290
def test_SDL_CreateDestroyTexture(self):
270291
window = video.SDL_CreateWindow(b"Test", 10, 10, 10, 10,
271292
video.SDL_WINDOW_HIDDEN)

0 commit comments

Comments
 (0)