public ContextBufferBindings(IContext context, IContextCaps caps) { Array = new BufferBinding(context, BufferTarget.Array); CopyRead = new BufferBinding(context, BufferTarget.CopyRead); CopyWrite = new BufferBinding(context, BufferTarget.CopyWrite); ElementArray = new Binding<IBuffer>(context, (c, o) => { c.Bindings.VertexArray.Set(null); c.GL.BindBuffer((int)All.ElementArrayBuffer, o.SafeGetHandle()); }); PixelPack = new BufferBinding(context, BufferTarget.PixelPack); PixelUnpack = new BufferBinding(context, BufferTarget.PixelUnpack); Texture = new BufferBinding(context, BufferTarget.Texture); DrawIndirect = new BufferBinding(context, BufferTarget.DrawIndirect); TransformFeedback = new Binding<IBuffer>(context, (c, o) => { c.Bindings.TransformFeedback.Set(null); c.GL.BindBuffer((int)All.TransformFeedbackBuffer, o.SafeGetHandle()); }); Uniform = new BufferBinding(context, BufferTarget.Uniform); ShaderStorage = new BufferBinding(context, BufferTarget.ShaderStorage); DispatchIndirect = new BufferBinding(context, BufferTarget.DispatchIndirect); Query = new BufferBinding(context, BufferTarget.Query); AtomicCounter = new BufferBinding(context, BufferTarget.AtomicCounter); UniformIndexed = Enumerable.Range(0, caps.MaxUniformBufferBindings) .Select(i => new Binding<BufferRange>(context, (c, o) => { if (o.Buffer == null || o.Offset == 0 && o.Size == o.Buffer.SizeInBytes) c.GL.BindBufferBase((int)BufferTarget.Uniform, (uint)i, o.Buffer.SafeGetHandle()); else c.GL.BindBufferRange((int)BufferTarget.Uniform, (uint)i, o.Buffer.SafeGetHandle(), (IntPtr)o.Offset, (IntPtr)o.Size); })) .ToArray(); }
public ContextTextureBindings(IContext context, IContextCaps caps) { ActiveUnit = new Binding<int>(context, (c, x) => c.GL.ActiveTexture((int)All.Texture0 + x)); Units = Enumerable.Range(0, caps.MaxCombinedTextureImageUnits) .Select(i => new Binding<ITexture>(context, (c, o) => { c.Bindings.Textures.ActiveUnit.Set(i); c.GL.BindTexture((int)o.Target, o.SafeGetHandle()); })) .ToArray(); }
public ContextBindings(IContext context, IContextCaps caps) { Buffers = new ContextBufferBindings(context, caps); Textures = new ContextTextureBindings(context, caps); Framebuffers = new ContextFramebufferBindings(context); Program = new Binding <IShaderProgram>(context, (c, o) => c.GL.UseProgram(o.SafeGetHandle())); VertexArray = new Binding <IVertexArray>(context, (c, o) => c.GL.BindVertexArray(o.SafeGetHandle())); TransformFeedback = new Binding <ITransformFeedback>(context, (c, o) => c.GL.BindTransformFeedback((int)All.TransformFeedback, o.SafeGetHandle())); Renderbuffer = new Binding <IRenderbuffer>(context, (c, o) => c.GL.BindRenderbuffer((int)RenderbufferTarget.Renderbuffer, o.SafeGetHandle())); Samplers = Enumerable.Range(0, caps.MaxCombinedTextureImageUnits) .Select(i => new Binding <ISampler>(context, (c, o) => c.GL.BindSampler((uint)i, o.SafeGetHandle()))) .ToArray(); }
public ContextBindings(IContext context, IContextCaps caps) { Buffers = new ContextBufferBindings(context, caps); Textures = new ContextTextureBindings(context, caps); Framebuffers = new ContextFramebufferBindings(context); Program = new Binding<IShaderProgram>(context, (c, o) => c.GL.UseProgram(o.SafeGetHandle())); VertexArray = new Binding<IVertexArray>(context, (c, o) => c.GL.BindVertexArray(o.SafeGetHandle())); TransformFeedback = new Binding<ITransformFeedback>(context, (c, o) => c.GL.BindTransformFeedback((int)All.TransformFeedback, o.SafeGetHandle())); Renderbuffer = new Binding<IRenderbuffer>(context, (c, o) => c.GL.BindRenderbuffer((int)RenderbufferTarget.Renderbuffer, o.SafeGetHandle())); Samplers = Enumerable.Range(0, caps.MaxCombinedTextureImageUnits) .Select(i => new Binding<ISampler>(context, (c, o) => c.GL.BindSampler((uint)i, o.SafeGetHandle()))) .ToArray(); }
public ContextStates(IContext context, IContextCaps caps) { ScreenClipping = new ContextScreenClippingBindings(context, caps); Rasterizer = new ContextRasterizerBindings(context); DepthStencil = new ContextDepthStencilBindings(context); Blend = new ContextBlendBindings(context, caps); PatchVertexCount = new Binding <int>(context, (c, x) => { if (x != 0) { c.GL.PatchParameter((int)All.PatchVertices, x); } }); UnpackAlignment = new Binding <int>(context, (c, x) => c.GL.PixelStore((int)All.UnpackAlignment, x)); }
public ContextBlendBindings(IContext context, IContextCaps caps) { BlendEnable = new EnableCapBinding(context, EnableCap.Blend); BlendColor = new Binding <Color4>(context, (c, x) => c.GL.BlendColor(x.Red, x.Green, x.Blue, x.Alpha)); SampleMaskEnable = new EnableCapBinding(context, EnableCap.SampleMask); SampleMasks = Enumerable.Range(0, caps.MaxSampleMaskWords) .Select(i => new Binding <uint>(context, (c, x) => c.GL.SampleMask((uint)i, x))) .ToArray(); AlphaToCoverageEnable = new EnableCapBinding(context, EnableCap.SampleAlphaToCoverage); United = new ContextBlendTargetBinding(context, null); Separate = Enumerable.Range(0, caps.MaxDrawBuffers) .Select(i => new ContextBlendTargetBinding(context, i)) .ToArray(); }
public ContextBlendBindings(IContext context, IContextCaps caps) { BlendEnable = new EnableCapBinding(context, EnableCap.Blend); BlendColor = new Binding<Color4>(context, (c, x) => c.GL.BlendColor(x.Red, x.Green, x.Blue, x.Alpha)); SampleMaskEnable = new EnableCapBinding(context, EnableCap.SampleMask); SampleMasks = Enumerable.Range(0, caps.MaxSampleMaskWords) .Select(i => new Binding<uint>(context, (c, x) => c.GL.SampleMask((uint)i, x))) .ToArray(); AlphaToCoverageEnable = new EnableCapBinding(context, EnableCap.SampleAlphaToCoverage); United = new ContextBlendTargetBinding(context, null); Separate = Enumerable.Range(0, caps.MaxDrawBuffers) .Select(i => new ContextBlendTargetBinding(context, i)) .ToArray(); }
public ContextTextureBindings(IContext context, IContextCaps caps) { ActiveUnit = new Binding <int>(context, (c, x) => c.GL.ActiveTexture((int)All.Texture0 + x)); Units = Enumerable.Range(0, caps.MaxCombinedTextureImageUnits) .Select(i => new Binding <ITexture>(context, (c, o) => { c.Bindings.Textures.ActiveUnit.Set(i); if (o != null) { c.GL.BindTexture((int)o.Target, o.Handle); } else { c.GL.BindTexture((int)All.Texture2D, 0); } })) .ToArray(); }
public ContextScreenClippingSeparateBindings(IContext context, IContextCaps caps) { Viewports = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding<ViewportFloat>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.ViewportIndexed((uint)i, x.X, x.Y, x.Width, x.Height); })).ToArray(); DepthRanges = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding<DepthRangeDouble>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.DepthRangeIndexed((uint)i, x.Near, x.Far); })).ToArray(); ScissorBoxes = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding<ScissorBox>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.ScissorIndexed((uint)i, x.X, x.Y, x.Width, x.Height); })).ToArray(); }
public ContextScreenClippingSeparateBindings(IContext context, IContextCaps caps) { Viewports = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding <ViewportFloat>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.ViewportIndexed((uint)i, x.X, x.Y, x.Width, x.Height); })).ToArray(); DepthRanges = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding <DepthRangeDouble>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.DepthRangeIndexed((uint)i, x.Near, x.Far); })).ToArray(); ScissorBoxes = Enumerable.Range(0, caps.MaxViewports) .Select(i => new Binding <ScissorBox>(context, (c, x) => { c.States.ScreenClipping.SeparationModeCache = SeparationMode.Separate; c.GL.ScissorIndexed((uint)i, x.X, x.Y, x.Width, x.Height); })).ToArray(); }
public ContextBufferBindings(IContext context, IContextCaps caps) { Array = new BufferBinding(context, BufferTarget.Array); CopyRead = new BufferBinding(context, BufferTarget.CopyRead); CopyWrite = new BufferBinding(context, BufferTarget.CopyWrite); ElementArray = new Binding <IBuffer>(context, (c, o) => { c.Bindings.VertexArray.Set(null); c.GL.BindBuffer((int)All.ElementArrayBuffer, o.SafeGetHandle()); }); PixelPack = new BufferBinding(context, BufferTarget.PixelPack); PixelUnpack = new BufferBinding(context, BufferTarget.PixelUnpack); Texture = new BufferBinding(context, BufferTarget.Texture); DrawIndirect = new BufferBinding(context, BufferTarget.DrawIndirect); TransformFeedback = new Binding <IBuffer>(context, (c, o) => { c.Bindings.TransformFeedback.Set(null); c.GL.BindBuffer((int)All.TransformFeedbackBuffer, o.SafeGetHandle()); }); Uniform = new BufferBinding(context, BufferTarget.Uniform); ShaderStorage = new BufferBinding(context, BufferTarget.ShaderStorage); DispatchIndirect = new BufferBinding(context, BufferTarget.DispatchIndirect); Query = new BufferBinding(context, BufferTarget.Query); AtomicCounter = new BufferBinding(context, BufferTarget.AtomicCounter); UniformIndexed = Enumerable.Range(0, caps.MaxUniformBufferBindings) .Select(i => new Binding <BufferRange>(context, (c, o) => { if (o.Buffer == null || o.Offset == 0 && o.Size == o.Buffer.SizeInBytes) { c.GL.BindBufferBase((int)BufferTarget.Uniform, (uint)i, o.Buffer.SafeGetHandle()); } else { c.GL.BindBufferRange((int)BufferTarget.Uniform, (uint)i, o.Buffer.SafeGetHandle(), (IntPtr)o.Offset, (IntPtr)o.Size); } })) .ToArray(); }
public ContextScreenClippingBindings(IContext context, IContextCaps caps) { United = new ContextScreenClippingUnitedBindings(context); Separate = new ContextScreenClippingSeparateBindings(context, caps); }