public void Compile(GraphicsDevice graphicsDevice, EffectDescriptorSetReflection descriptorSetLayouts, EffectBytecode effectBytecode) { hasResourceRenaming = graphicsDevice.Features.HasResourceRenaming; resourceGroupBindings = new ResourceGroupBinding[descriptorSetLayouts.Layouts.Count]; for (int setIndex = 0; setIndex < descriptorSetLayouts.Layouts.Count; setIndex++) { var layout = descriptorSetLayouts.Layouts[setIndex].Layout; if (layout == null) { resourceGroupBindings[setIndex] = new ResourceGroupBinding { ConstantBufferSlot = -1 }; continue; } var resourceGroupBinding = new ResourceGroupBinding(); for (int resourceIndex = 0; resourceIndex < layout.Entries.Count; resourceIndex++) { var layoutEntry = layout.Entries[resourceIndex]; if (layoutEntry.Class == EffectParameterClass.ConstantBuffer) { var constantBuffer = effectBytecode.Reflection.ConstantBuffers.First(x => x.Name == layoutEntry.Key.Name); resourceGroupBinding.ConstantBufferSlot = resourceIndex; resourceGroupBinding.ConstantBufferPreallocated = Buffer.Constant.New(graphicsDevice, constantBuffer.Size, graphicsDevice.Features.HasResourceRenaming ? GraphicsResourceUsage.Dynamic : GraphicsResourceUsage.Default); } } resourceGroupBindings[setIndex] = resourceGroupBinding; } }
public void Compile(GraphicsDevice graphicsDevice, EffectDescriptorSetReflection descriptorSetLayouts, EffectBytecode effectBytecode) { resourceGroupBindings = new ResourceGroupBinding[descriptorSetLayouts.Layouts.Count]; for (int setIndex = 0; setIndex < descriptorSetLayouts.Layouts.Count; setIndex++) { var layout = descriptorSetLayouts.Layouts[setIndex].Layout; if (layout == null) { resourceGroupBindings[setIndex] = new ResourceGroupBinding { ConstantBufferSlot = -1 }; continue; } var resourceGroupBinding = new ResourceGroupBinding(); for (int resourceIndex = 0; resourceIndex < layout.Entries.Count; resourceIndex++) { var layoutEntry = layout.Entries[resourceIndex]; if (layoutEntry.Class == EffectParameterClass.ConstantBuffer) { var constantBuffer = effectBytecode.Reflection.ConstantBuffers.First(x => x.Name == layoutEntry.Key.Name); resourceGroupBinding.ConstantBufferSlot = resourceIndex; resourceGroupBinding.ConstantBufferPreallocated = Buffer.Constant.New(graphicsDevice, constantBuffer.Size); } } resourceGroupBindings[setIndex] = resourceGroupBinding; } }