예제 #1
0
        public GLDescriptorSetLayout(MgDescriptorSetLayoutCreateInfo pCreateInfo)
        {
            if (pCreateInfo.Bindings != null)
            {
                var highestBinding = 0U;
                var uniforms       = new List <GLUniformBinding>();

                foreach (var binding in pCreateInfo.Bindings)
                {
                    highestBinding = Math.Max(binding.Binding, highestBinding);

                    var uniform = new GLUniformBinding {
                        Binding         = binding.Binding,
                        DescriptorType  = binding.DescriptorType,
                        DescriptorCount = binding.DescriptorCount,
                        StageFlags      = binding.StageFlags,
                    };
                    uniforms.Add(uniform);
                }

                var count = highestBinding + 1;

                Uniforms = new GLUniformBinding[count];
                foreach (var uni in uniforms)
                {
                    Uniforms[uni.Binding] = uni;
                }
            }
            else
            {
                Uniforms = new GLUniformBinding[0];
            }
        }
예제 #2
0
        public GLNextPipelineLayout(MgPipelineLayoutCreateInfo pCreateInfo)
        {
            if (pCreateInfo.SetLayouts.Length == 1)
            {
                var layout = (IGLDescriptorSetLayout)pCreateInfo.SetLayouts[0];
                Bindings = layout.Uniforms;
            }
            else
            {
                Bindings = new GLUniformBinding[0];
            }

            NoOfBindingPoints          = 0;
            NoOfStorageBuffers         = 0;
            NoOfExpectedDynamicOffsets = 0;

            Ranges             = new SortedDictionary <int, GLBindingPointOffsetInfo>();
            OffsetDestinations = ExtractBindingsInformation();
            SetupOffsetRangesByBindings();
        }