|
10 | 10 | from sdl2.rect import SDL_FPoint |
11 | 11 | from sdl2.pixels import SDL_Color |
12 | 12 | from sdl2 import render, video, surface, pixels, blendmode, rect |
| 13 | +from sdl2.ext.compat import byteify, stringify |
13 | 14 | from sdl2.ext.pixelaccess import PixelView |
14 | 15 |
|
15 | 16 | # TODO: Ensure all functions in module have corresponding tests |
@@ -142,20 +143,30 @@ def test_SDL_GetNumRenderDrivers(self): |
142 | 143 | def test_SDL_GetRenderDriverInfo(self): |
143 | 144 | renderers = [] |
144 | 145 | errs = [] |
| 146 | + pxformats = {} |
145 | 147 | drivers = render.SDL_GetNumRenderDrivers() |
146 | 148 | for x in range(drivers): |
147 | 149 | sdl2.SDL_ClearError() |
148 | 150 | info = render.SDL_RendererInfo() |
149 | 151 | ret = render.SDL_GetRenderDriverInfo(x, info) |
150 | 152 | if ret != 0: |
151 | | - err = sdl2.SDL_GetError().decode("utf-8") |
| 153 | + err = stringify(sdl2.SDL_GetError()) |
152 | 154 | 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]) |
157 | 162 | assert len(renderers) |
158 | 163 | 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])) |
159 | 170 |
|
160 | 171 | def test_SDL_CreateWindowAndRenderer(self): |
161 | 172 | window = POINTER(video.SDL_Window)() |
@@ -238,34 +249,44 @@ def test_SDL_GetRenderer(self): |
238 | 249 | dogc() |
239 | 250 |
|
240 | 251 | def test_SDL_GetRendererInfo(self): |
241 | | - failed = 0 |
| 252 | + renderers = [] |
| 253 | + max_sizes = {} |
| 254 | + errs = [] |
242 | 255 | rcount = render.SDL_GetNumRenderDrivers() |
243 | 256 | 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 | + ) |
246 | 261 | assert isinstance(window.contents, video.SDL_Window) |
247 | 262 | renderer = render.SDL_CreateRenderer(window, i, self._RENDERFLAGS) |
248 | 263 | 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)) |
250 | 266 | video.SDL_DestroyWindow(window) |
251 | 267 | continue |
252 | 268 | assert isinstance(renderer.contents, render.SDL_Renderer) |
253 | 269 | info = render.SDL_RendererInfo() |
254 | 270 | 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)) |
256 | 279 | render.SDL_DestroyRenderer(renderer) |
257 | | - |
258 | | - #self.assertRaises(sdl.SDLError, render.SDL_GetRendererInfo, |
259 | | - # renderer) |
260 | | - |
261 | 280 | 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") |
267 | 281 | dogc() |
268 | 282 |
|
| 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 | + |
269 | 290 | def test_SDL_CreateDestroyTexture(self): |
270 | 291 | window = video.SDL_CreateWindow(b"Test", 10, 10, 10, 10, |
271 | 292 | video.SDL_WINDOW_HIDDEN) |
|
0 commit comments