< Summary

Class:Imagini.Drawing.RendererInfo
Assembly:Imagini.2D
File(s):/home/razer/vscode-projects/project-grove/imagini/Imagini.2D/Drawing/RendererInfo.cs
Covered lines:33
Uncovered lines:2
Coverable lines:35
Total lines:88
Line coverage:94.2% (33 of 35)
Covered branches:5
Total branches:6
Branch coverage:83.3% (5 of 6)

Metrics

MethodCyclomatic complexity NPath complexity Sequence coverage Branch coverage
.cctor()4090%75%
.ctor(...)20100%100%

File(s)

/home/razer/vscode-projects/project-grove/imagini/Imagini.2D/Drawing/RendererInfo.cs

#LineLine coverage
 1using System.Collections.Generic;
 2
 3using static SDL2.SDL_error;
 4using static SDL2.SDL_pixels;
 5using static SDL2.SDL_render;
 6
 7namespace Imagini.Drawing
 8{
 9    public sealed class RendererInfo
 10    {
 6611        internal int Index { get; private set; }
 12
 113        private static List<RendererInfo> s_renderers =
 114            new List<RendererInfo>();
 15
 316        public string Name { get; private set; }
 317        public IReadOnlyCollection<PixelFormat> PixelFormats { get; private set; }
 18
 19        /// <summary>
 20        /// Indicates whether this renderer is hardware accelerated.
 21        /// </summary>
 7222        public bool IsHardwareAccelerated { get; private set; }
 23
 24        /// <summary>
 25        /// Indicates whether this is a software renderer.
 26        /// </summary>
 027        public bool IsSoftware => !IsHardwareAccelerated;
 28
 29        /// <summary>
 30        /// Indicates whether this renderer supports rendering to texture.
 31        /// </summary>
 6632        public bool SupportsRenderingToTexture { get; private set; }
 33
 34        /// <summary>
 35        /// Indicates whether this renderer supports refresh rate synchronization.
 36        /// </summary>
 337        public bool SupportsVSync { get; private set; }
 38
 39        /// <summary>
 40        /// Returns the maximum supported texture width.
 41        /// </summary>
 342        public int MaxTextureWidth { get; private set; }
 43        /// <summary>
 44        /// Returns the maximum supported texture height.
 45        /// </summary>
 346        public int MaxTextureHeight { get; private set; }
 47
 48        /// <summary>
 49        /// Returns the all available renderers.
 50        /// </summary>
 6651        public static IReadOnlyCollection<RendererInfo> All => s_renderers;
 52
 353        private RendererInfo(int index, SDL_RendererInfo info)
 54        {
 355            Index = index;
 356            Name = Util.FromNullTerminated(info.name);
 357            MaxTextureWidth = info.max_texture_width;
 358            MaxTextureHeight = info.max_texture_height;
 359            var flags = info.flags;
 360            IsHardwareAccelerated = flags.HasFlag(SDL_RendererFlags.SDL_RENDERER_ACCELERATED);
 361            SupportsRenderingToTexture = flags.HasFlag(SDL_RendererFlags.SDL_RENDERER_TARGETTEXTURE);
 362            SupportsVSync = flags.HasFlag(SDL_RendererFlags.SDL_RENDERER_PRESENTVSYNC);
 63
 364            var formats = new List<PixelFormat>((int)info.num_texture_formats);
 3265            for (int i = 0; i < info.num_texture_formats; i++)
 66            {
 67                unsafe {
 1368                    var format = *(info.texture_formats + i);
 1369                    formats.Add((PixelFormat)format);
 70                }
 71            }
 372            PixelFormats = formats;
 373        }
 74
 75        static RendererInfo()
 76        {
 177            Lifecycle.TryInitialize();
 178            int numRenderers = SDL_GetNumRenderDrivers();
 179            if (numRenderers < 0)
 080                throw new ImaginiException($"Could not obtain renderer info: {SDL_GetError()}");
 881            for (int i = 0; i < numRenderers; i++)
 82            {
 383                SDL_GetRenderDriverInfo(i, out SDL_RendererInfo info);
 384                s_renderers.Add(new RendererInfo(i, info));
 85            }
 186        }
 87    }
 88}