Пример #1
0
        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();
        }
Пример #2
0
 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();
 }
Пример #3
0
 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();
 }
Пример #4
0
 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();
 }
Пример #5
0
        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));
        }
Пример #6
0
        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();
        }
Пример #7
0
        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();
 }
Пример #11
0
        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);
 }
Пример #13
0
 public ContextScreenClippingBindings(IContext context, IContextCaps caps)
 {
     United   = new ContextScreenClippingUnitedBindings(context);
     Separate = new ContextScreenClippingSeparateBindings(context, caps);
 }