/// <summary> /// Initializes a new instance of the OpenGLTexture2D class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="pixels">A pointer to the raw pixel data with which to populate the texture.</param> /// <param name="width">The texture's width in pixels.</param> /// <param name="height">The texture's height in pixels.</param> /// <param name="bytesPerPixel">The number of bytes which represent each pixel in the raw data.</param> /// <param name="options">The texture's configuration options.</param> public OpenGLTexture2D(UltravioletContext uv, IntPtr pixels, Int32 width, Int32 height, Int32 bytesPerPixel, TextureOptions options) : base(uv) { Contract.EnsureRange(width > 0, nameof(width)); Contract.EnsureRange(height > 0, nameof(height)); Contract.EnsureRange(bytesPerPixel >= 3 || bytesPerPixel <= 4, nameof(bytesPerPixel)); var isSrgb = (options & TextureOptions.SrgbColor) == TextureOptions.SrgbColor; var isLinear = (options & TextureOptions.LinearColor) == TextureOptions.LinearColor; if (isSrgb && isLinear) { throw new ArgumentException(UltravioletStrings.TextureCannotHaveMultipleEncodings); } var caps = uv.GetGraphics().Capabilities; var srgbEncoded = (isLinear ? false : (isSrgb ? true : uv.Properties.SrgbDefaultForTexture2D)) && caps.SrgbEncodingEnabled; var format = OpenGLTextureUtil.GetFormatFromBytesPerPixel(bytesPerPixel); var internalformat = OpenGLTextureUtil.GetInternalFormatFromBytesPerPixel(bytesPerPixel, srgbEncoded); if (format == gl.GL_NONE || internalformat == gl.GL_NONE) { throw new NotSupportedException(OpenGLStrings.UnsupportedImageType); } CreateNativeTexture(uv, internalformat, width, height, format, gl.GL_UNSIGNED_BYTE, (void *)pixels, (options & TextureOptions.ImmutableStorage) == TextureOptions.ImmutableStorage); }
/// <summary> /// Initializes a new instance of the <see cref="DynamicTextureAtlas"/> class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="width">The width of the texture atlas in pixels.</param> /// <param name="height">The height of the texture atlas in pixels.</param> /// <param name="spacing">The number of pixels between cells on the texture atlas.</param> /// <param name="options">The texture's configuration options.</param> private DynamicTextureAtlas(UltravioletContext uv, Int32 width, Int32 height, Int32 spacing, TextureOptions options) : base(uv) { Contract.EnsureRange(width > 0, nameof(width)); Contract.EnsureRange(height > 0, nameof(height)); Contract.EnsureRange(spacing >= 0, nameof(spacing)); var isSrgb = (options & TextureOptions.SrgbColor) == TextureOptions.SrgbColor; var isLinear = (options & TextureOptions.LinearColor) == TextureOptions.LinearColor; if (isSrgb && isLinear) { throw new ArgumentException(UltravioletStrings.TextureCannotHaveMultipleEncodings); } var caps = uv.GetGraphics().Capabilities; var srgbEncoded = (isLinear ? false : (isSrgb ? true : uv.Properties.SrgbDefaultForTexture2D)) && caps.SrgbEncodingEnabled; var surfOptions = (srgbEncoded ? SurfaceOptions.SrgbColor : SurfaceOptions.LinearColor); this.IsFlipped = Ultraviolet.GetGraphics().Capabilities.FlippedTextures; this.Width = width; this.Height = height; this.Spacing = spacing; this.Surface = Surface2D.Create(width, height, surfOptions); this.Texture = Texture2D.CreateDynamicTexture(width, height, options, this, (dt2d, state) => { ((DynamicTextureAtlas)state).Flush(); }); Clear(true); Invalidate(); }
public void MoveCameraHeight(UltravioletContext context, int height) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.Height = viewport.Height + height; context.GetGraphics().SetViewport(viewport); }
public void MoveCameraY(UltravioletContext context, int y) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.Y = viewport.Y + y; context.GetGraphics().SetViewport(viewport); }
public void MoveCameraX(UltravioletContext context, int x) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.X = viewport.X + x; context.GetGraphics().SetViewport(viewport); }
public void ChangeHeight(UltravioletContext context, int height) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.Height = height; context.GetGraphics().SetViewport(viewport); }
public void ChangePositionY(UltravioletContext context, int y) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.Y = y; context.GetGraphics().SetViewport(viewport); }
public void ChangeMinDepth(UltravioletContext context, int Mindepth) { Ultraviolet.Graphics.Viewport viewport = Ultraviolet.GetGraphics().GetViewport(); viewport.MinDepth = Mindepth; context.GetGraphics().SetViewport(viewport); }
/// <summary> /// Initializes a new instance of the <see cref="OpenGLTexture3D"/> class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="data">A list of pointers to the raw pixel data for each of the texture's layers.</param> /// <param name="width">The texture's width in pixels.</param> /// <param name="height">The texture's height in pixels.</param> /// <param name="bytesPerPixel">The number of bytes which represent each pixel in the raw data.</param> /// <param name="options">The texture's configuration options.</param> public OpenGLTexture3D(UltravioletContext uv, IList <IntPtr> data, Int32 width, Int32 height, Int32 bytesPerPixel, TextureOptions options) : base(uv) { Contract.Require(data, nameof(data)); Contract.EnsureRange(width > 0, nameof(width)); Contract.EnsureRange(height > 0, nameof(height)); Contract.EnsureRange(bytesPerPixel == 3 || bytesPerPixel == 4, nameof(bytesPerPixel)); var isLinear = (options & TextureOptions.LinearColor) == TextureOptions.LinearColor; var isSrgb = (options & TextureOptions.SrgbColor) == TextureOptions.SrgbColor; if (isLinear && isSrgb) { throw new ArgumentException(UltravioletStrings.TextureCannotHaveMultipleEncodings); } var caps = uv.GetGraphics().Capabilities; var srgbEncoded = isLinear ? false : (isSrgb ? true : uv.Properties.SrgbDefaultForSurface3D) && caps.SrgbEncodingEnabled; var format = OpenGLTextureUtil.GetFormatFromBytesPerPixel(bytesPerPixel); var internalformat = OpenGLTextureUtil.GetInternalFormatFromBytesPerPixel(bytesPerPixel, srgbEncoded); if (format == gl.GL_NONE || internalformat == gl.GL_NONE) { throw new NotSupportedException(OpenGLStrings.UnsupportedImageType); } var pixels = IntPtr.Zero; try { pixels = CreateConcatenatedPixelBuffer(data, width * height * bytesPerPixel); CreateNativeTexture(uv, internalformat, width, height, data.Count, format, gl.GL_UNSIGNED_BYTE, (void *)pixels, true); } finally { if (pixels != IntPtr.Zero) { Marshal.FreeHGlobal(pixels); } } }
/// <summary> /// Initializes a new instance of the <see cref="OutOfBandRenderTarget"/> class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> internal OutOfBandRenderTarget(UltravioletContext uv) : base(uv) { renderTarget = RenderTarget2D.Create(1, 1); colorBuffer = Texture2D.CreateRenderBuffer(RenderBufferFormat.Color, 1, 1, RenderBufferOptions.SrgbColor); renderTarget.Attach(colorBuffer); if (uv.GetGraphics().Capabilities.SupportsDepthStencilTextures) { depthBuffer = Texture2D.CreateRenderBuffer(RenderBufferFormat.Depth24Stencil8, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(depthBuffer); } else { depthBuffer = Texture2D.CreateRenderBuffer(RenderBufferFormat.Depth16, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(depthBuffer); stencilBuffer = Texture2D.CreateRenderBuffer(RenderBufferFormat.Stencil8, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(stencilBuffer); } }
/// <summary> /// Initializes a new instance of the <see cref="OutOfBandRenderTarget"/> class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> internal OutOfBandRenderTarget(UltravioletContext uv) : base(uv) { renderTarget = RenderTarget2D.Create(1, 1); colorBuffer = RenderBuffer2D.Create(RenderBufferFormat.Color, 1, 1, RenderBufferOptions.None); renderTarget.Attach(colorBuffer); if (uv.GetGraphics().Capabilities.SupportsDepthStencilTextures) { depthBuffer = RenderBuffer2D.Create(RenderBufferFormat.Depth24Stencil8, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(depthBuffer); } else { depthBuffer = RenderBuffer2D.Create(RenderBufferFormat.Depth16, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(depthBuffer); stencilBuffer = RenderBuffer2D.Create(RenderBufferFormat.Stencil8, 1, 1, RenderBufferOptions.WillNotBeSampled); renderTarget.Attach(stencilBuffer); } }
/// <summary> /// Initializes a new instance of the <see cref="OpenGLTexture3D"/> class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="width">The texture's width in pixels.</param> /// <param name="height">The texture's height in pixels.</param> /// <param name="depth">The texture's depth in layers.</param> /// <param name="options">The texture's configuration options.</param> public OpenGLTexture3D(UltravioletContext uv, Int32 width, Int32 height, Int32 depth, TextureOptions options) : base(uv) { Contract.EnsureRange(width > 0, nameof(width)); Contract.EnsureRange(height > 0, nameof(height)); Contract.EnsureRange(depth > 0, nameof(depth)); var isLinear = (options & TextureOptions.LinearColor) == TextureOptions.LinearColor; var isSrgb = (options & TextureOptions.SrgbColor) == TextureOptions.SrgbColor; if (isLinear && isSrgb) { throw new ArgumentException(UltravioletStrings.TextureCannotHaveMultipleEncodings); } var caps = uv.GetGraphics().Capabilities; var srgbEncoded = isLinear ? false : (isSrgb ? true : uv.Properties.SrgbDefaultForSurface3D) && caps.SrgbEncodingEnabled; var format = OpenGLTextureUtil.GetFormatFromBytesPerPixel(4); var internalformat = OpenGLTextureUtil.GetInternalFormatFromBytesPerPixel(4, srgbEncoded); CreateNativeTexture(uv, internalformat, width, height, depth, format, gl.GL_UNSIGNED_BYTE, null, immutable); }
/// <summary> /// Initializes a new instance of the OpenGLRenderBuffer2D class. /// </summary> /// <param name="uv">The Ultraviolet context.</param> /// <param name="format">The render buffer's format.</param> /// <param name="width">The render buffer's width in pixels.</param> /// <param name="height">The render buffer's height in pixels.</param> /// <param name="options">The render buffer's configuration options.</param> public OpenGLRenderBuffer2D(UltravioletContext uv, RenderBufferFormat format, Int32 width, Int32 height, RenderBufferOptions options) : base(uv) { Contract.EnsureRange(width > 0, nameof(width)); Contract.EnsureRange(height > 0, nameof(height)); var isSrgb = (options & RenderBufferOptions.SrgbColor) == RenderBufferOptions.SrgbColor; var isLinear = (options & RenderBufferOptions.LinearColor) == RenderBufferOptions.LinearColor; if (isSrgb && isLinear) { throw new ArgumentException(UltravioletStrings.BuffersCannotHaveMultipleEncodings); } if ((isSrgb || isLinear) && format != RenderBufferFormat.Color) { throw new ArgumentException(UltravioletStrings.EncodingSpecifiedForNonColorBuffer); } var caps = uv.GetGraphics().Capabilities; var srgbEncoded = (isLinear ? false : (isSrgb ? true : uv.Properties.SrgbDefaultForRenderBuffer2D)) && caps.SrgbEncodingEnabled; this.format = format; this.width = width; this.height = height; this.immutable = (options & RenderBufferOptions.ImmutableStorage) == RenderBufferOptions.ImmutableStorage; this.willNotBeSampled = (options & RenderBufferOptions.WillNotBeSampled) == RenderBufferOptions.WillNotBeSampled; if (willNotBeSampled) { using (var state = OpenGLState.ScopedCreateRenderbuffer(out renderbuffer)) { AllocateRenderbufferStorage(width, height); } } else { switch (format) { case RenderBufferFormat.Color: { var texformat = OpenGLTextureUtil.GetFormatFromBytesPerPixel(4); var texinternalformat = OpenGLTextureUtil.GetInternalFormatFromBytesPerPixel(4, srgbEncoded); this.texture = new OpenGLTexture2D(uv, texinternalformat, width, height, texformat, gl.GL_UNSIGNED_BYTE, IntPtr.Zero, immutable, true); this.SrgbEncoded = this.texture.SrgbEncoded; } break; case RenderBufferFormat.Depth24Stencil8: this.texture = new OpenGLTexture2D(uv, gl.GL_DEPTH24_STENCIL8, width, height, gl.GL_DEPTH_STENCIL, gl.GL_UNSIGNED_INT_24_8, IntPtr.Zero, immutable, true); break; case RenderBufferFormat.Depth32: this.texture = new OpenGLTexture2D(uv, gl.GL_DEPTH_COMPONENT32, width, height, gl.GL_DEPTH_COMPONENT, gl.GL_UNSIGNED_INT, IntPtr.Zero, immutable, true); break; case RenderBufferFormat.Depth16: this.texture = new OpenGLTexture2D(uv, gl.GL_DEPTH_COMPONENT16, width, height, gl.GL_DEPTH_COMPONENT, gl.GL_UNSIGNED_SHORT, IntPtr.Zero, immutable, true); break; case RenderBufferFormat.Stencil8: this.texture = new OpenGLTexture2D(uv, gl.GL_STENCIL_INDEX8, width, height, gl.GL_STENCIL, gl.GL_UNSIGNED_INT, IntPtr.Zero, immutable, true); break; default: throw new NotSupportedException(nameof(format)); } } }
public static void CreateViewPort(Rectangle rec) { Ultraviolet.Graphics.Viewport viewport = new Ultraviolet.Graphics.Viewport(rec); _context.GetGraphics().SetViewport(viewport); }
public void ClearView(UltravioletContext context, Color color) { context.GetGraphics().Clear(color); }