Exemple #1
0
        private void createUniformBuffers(VkContext context)
        {
            var bufferSize = Marshal.SizeOf <UniformBufferObject>();

            var usageFlags = Vk.BufferUsageFlags.UniformBuffer;
            var memProps   = Vk.MemoryPropertyFlags.HostVisible
                             | Vk.MemoryPropertyFlags.HostCoherent;

            var buffers = new BufferWithMemory[this.wrapper.ImageCapacity];

            for (int i = 0; i < this.wrapper.ImageCapacity; i++)
            {
                try {
                    buffers[i] = VkHelper.CreateBuffer(context, bufferSize, usageFlags,
                                                       memProps, this.wrapper.SharingMode);
                } catch (Vk.ResultException result) {
                    throw new VkException($"An error occurred while creating uniform buffer {i}.", result);
                }
            }

            this.wrapper.UniformBuffers       = new Vk.Buffer[this.wrapper.ImageCapacity];
            this.wrapper.UniformBuffersMemory = new Vk.DeviceMemory[this.wrapper.ImageCapacity];

            for (int i = 0; i < this.wrapper.ImageCapacity; i++)
            {
                this.wrapper.UniformBuffers[i]       = buffers[i].Buffer;
                this.wrapper.UniformBuffersMemory[i] = buffers[i].Memory;
            }
        }
Exemple #2
0
        private static void SetupUniformMatrices()
        {
            Matrix4 projectionMatrix =
                new Matrix4(
                    1.0f, 0.0f, 0.0f, 0.0f,
                    0.0f, -1.0f, 0.0f, 0.0f,
                    0.0f, 0.0f, 0.5f, 0.0f,
                    0.0f, 0.0f, 0.5f, 1.0f)
                * Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, Context.SurfaceWidth / (float)Context.SurfaceHeight, 0.1f, 100.0f);


            VulkanBase.Camera.Position = new Vector3(0.0f, 10f, 0.0f);
            VulkanBase.Camera.Rotation = new Vector3(0, (float)Math.PI / 2f, 0);

            Matrix4 viewMatrix = VulkanBase.Camera.CalculateViewMatrix();


            uint bufferSize = graphicsPipeline.ShaderUniformSets[0].GetSize();

            Matrix4[] matrices = new Matrix4[]
            {
                projectionMatrix,
                viewMatrix
            };

            uniformBuffer = Context.BufferManager.CreateBuffer(BufferUsageFlags.UniformBuffer, bufferSize, matrices);


            uniformDescriptorSet = graphicsPipeline.CreateDescriptorSet(0, 0, uniformBuffer);
        }
Exemple #3
0
        public DescriptorSet CreateDescriptorSet(int setIndex, int binding, BufferWithMemory buffer)
        {
            ValidateDiscriporPool();

            DescriptorSetLayout descriptorSetLayout = DescriptorSetLayouts[setIndex];
            ShaderUniformSet    shaderUniformSet    = ShaderUniformSets[setIndex];

            DescriptorSet descriptorSet = VContext.Instance.device.AllocateDescriptorSets(
                new DescriptorSetAllocateInfo()
            {
                DescriptorPool = VContext.Instance.descriptorPool,
                SetLayouts     = new DescriptorSetLayout[]
                {
                    descriptorSetLayout
                }
            }
                ).First();

            ShaderUniform shaderUniformWithCorrectBinding = shaderUniformSet.ShaderUniforms.Where(su => su.Binding == binding).First();

            VContext.Instance.device.UpdateDescriptorSet(
                new WriteDescriptorSet()
            {
                DescriptorType = shaderUniformWithCorrectBinding.DescriptorType,
                DstBinding     = (uint)shaderUniformWithCorrectBinding.Binding,
                DstSet         = descriptorSet,
                BufferInfo     = new DescriptorBufferInfo[]
                {
                    new DescriptorBufferInfo()
                    {
                        Buffer = buffer.Buffer,
                        Offset = 0,
                        Range  = buffer.Size,
                    }
                }
            },
                null
                );

            return(descriptorSet);
        }
Exemple #4
0
 public BufferviewWithMemory(BufferWithMemory bufferWithMemory)
 {
     Buffer = bufferWithMemory.Buffer;
     Memory = bufferWithMemory.Memory;
     Size   = bufferWithMemory.Size;
 }