public void Init(SharpDX.Direct3D11.Device device) { vertexBuffer = Buffer.Create(device, BindFlags.VertexBuffer, vertices, vertices.Length * ImmediateVertexSize, ResourceUsage.Dynamic, CpuAccessFlags.Write); vertexBufferBinding = new VertexBufferBinding() { Buffer = vertexBuffer, Offset = 0, Stride = ImmediateVertexSize }; var cb = new ImmediateConstantBuffer() { WVPMatrix = Matrix.Identity, iResolution = Vector4.Zero, iTime = 0, CameraPos = Vector3.Zero, CameraDir = Matrix.Identity, }; worldViewProjectionBuffer = Buffer.Create(device, BindFlags.ConstantBuffer, ref cb); this.ConstantBuffer = cb; for (int i = 0; i < textures.Length; ++i) { textures[i].texture = null; textures[i].view = null; textures[i].sampler = new SamplerState(device, new SamplerStateDescription() { Filter = Filter.MinMagMipLinear, AddressU = TextureAddressMode.Clamp, AddressV = TextureAddressMode.Clamp, AddressW = TextureAddressMode.Clamp, BorderColor = Color.Black, ComparisonFunction = Comparison.Never, MaximumAnisotropy = 16, MipLodBias = 0, MinimumLod = 0, MaximumLod = float.MaxValue, }); } ShaderBank = new ShaderBank(device); ShaderBank.LoadShader("raytracer", "raytracer.fx", new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0)); Shader = ShaderBank["raytracer"]; Context = device.ImmediateContext; }
public void Dispose() { ShaderBank.Dispose(); for (int i = 0; i < textures.Length; ++i) { textures[i].texture = null; if (textures[i].view != null) { textures[i].view.Dispose(); } textures[i].sampler.Dispose(); } worldViewProjectionBuffer.Dispose(); vertexBuffer.Dispose(); worldViewProjectionBuffer = null; vertexBuffer = null; Context = null; }