예제 #1
0
        /// <summary>
        /// Creates a texture for a rendering context. 
        /// </summary>
        /// <param name="renderer">The rendering context</param>
        /// <param name="pixelFormat">One of the enumerated values in SDL_PixelFormatEnum</param>
        /// <param name="accessMode">One of the enumerated values in SDL_TextureAccess</param>
        /// <param name="width">The width of the texture in pixels</param>
        /// <param name="height">The height of the texture in pixels</param>
        public Texture(Renderer renderer, uint pixelFormat , TextureAccessMode accessMode, int width, int height)
        {
            this.pixelFormat = pixelFormat;
            this.accessMode = accessMode;
            Width = width;
            Height = height;
            isLocked = false;

            Handle = SDL.SDL_CreateTexture(renderer.Handle, pixelFormat, (int)accessMode, width, height);
            if (IntPtr.Zero == Handle)
            {
                throw new Exception("Error while creating texture: " + SDL.SDL_GetError());

            }
        }
예제 #2
0
        public Texture(Renderer renderer, Surface surface)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer", Errors.E_RENDERER_NULL);
            }
            if (surface == null)
            {
                throw new ArgumentNullException("surface", Errors.E_SURFACE_NULL);
            }

            this.renderer = renderer;
            FilePath      = surface.FilePath;
            AccessMode    = TextureAccessMode.Static;
            Surface       = surface;

            CreateTextureAndCleanup(surface.Width, surface.Height);
        }
예제 #3
0
        public RenderTarget(Renderer renderer, int width, int height)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException("renderer", Errors.E_RENDERER_NULL);
            }

            this.renderer = renderer;
            Width         = width;
            Height        = height;
            AccessMode    = TextureAccessMode.Target;

            Handle = SDL.SDL_CreateTexture(renderer.Handle, SDL.SDL_PIXELFORMAT_RGBA8888, (int)AccessMode, Width, Height);
            if (Handle == IntPtr.Zero)
            {
                throw new InvalidOperationException(Utilities.GetErrorMessage("RenderTarget"));
            }
        }
예제 #4
0
        internal IntPtr CreateTexture(int width, int height, PixelFormat pixelFormat, TextureAccessMode accessMode)
        {
            uint mappedPixelFormat = PixelFormatMap.EnumToSDL(pixelFormat);

            IntPtr unsafeHandle = SDL.SDL_CreateTexture(renderer.Handle, mappedPixelFormat, (int)accessMode, width, height);

            if (unsafeHandle == IntPtr.Zero)
            {
                throw new InvalidOperationException(Utilities.GetErrorMessage("SDL_CreateTextureFromSurface"));
            }

            return(unsafeHandle);
        }
예제 #5
0
        internal Texture(IRenderer renderer, int width, int height, PixelFormat pixelFormat, TextureAccessMode accessMode)
        {
            if (renderer == null)
            {
                throw new ArgumentNullException(nameof(renderer));
            }

            if (width < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(width));
            }

            if (height < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(height));
            }

            this.renderer = renderer;

            IntPtr unsafeHandle = CreateTexture(width, height, pixelFormat, accessMode);

            safeHandle = new SafeTextureHandle(unsafeHandle);

            QueryTexture(unsafeHandle);
        }
예제 #6
0
 public ITexture CreateTexture(IRenderer renderer, int width, int height, PixelFormat pixelFormat, TextureAccessMode accessMode)
 {
     try
     {
         var texture = new Texture(renderer, width, height, pixelFormat, accessMode);
         logger?.LogTrace($"Texture created. Width = {texture.Width}, Height = {texture.Height}, PixelFormat = {texture.PixelFormat}, AccessMode = {texture.AccessMode}, Handle = {texture.Handle}.");
         return(texture);
     }
     catch (Exception ex)
     {
         logger?.LogError(ex, ex.Message);
         throw;
     }
 }