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; } }
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); }
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); }
public BufferviewWithMemory(BufferWithMemory bufferWithMemory) { Buffer = bufferWithMemory.Buffer; Memory = bufferWithMemory.Memory; Size = bufferWithMemory.Size; }