public override WriteableBitmap Initialize(Device device) { // Create device and swap chain. var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = device.CreateSwapChain(Width, Height, swapChainPresenter); _deviceContext = device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = Width, Height = Height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = device.CreateDepthStencilView(depthBuffer); // Create cube map resources. var cubeMapTexture = device.CreateTexture2D(new Texture2DDescription { Width = CubeMapSize, Height = CubeMapSize, ArraySize = 6, BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, MipLevels = 1 }); _renderTargetViewCube = device.CreateRenderTargetView(cubeMapTexture); _resourceViewCube = device.CreateShaderResourceView(cubeMapTexture); var depthBufferCube = device.CreateTexture2D(new Texture2DDescription { ArraySize = 6, MipLevels = 1, Width = CubeMapSize, Height = CubeMapSize, BindFlags = BindFlags.DepthStencil }); _depthViewCube = device.CreateDepthStencilView(depthBufferCube); // Load model. var modelLoader = new ModelLoader(device, TextureLoader.CreateTextureFromStream); _model = modelLoader.Load("Modules/SampleBrowser/Samples/EnvironmentMapping/teapot.obj"); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "VS_CubeMap", "vs_4_0"); _vertexShaderCubeMap = device.CreateVertexShader(vertexShaderByteCode); _vertexShaderStandard = device.CreateVertexShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "VS_Standard", "vs_4_0")); _geometryShaderCubeMap = device.CreateGeometryShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "GS_CubeMap", "gs_4_0")); _pixelShaderCubeMap = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_CubeMap", "ps_4_0")); _pixelShaderStandard = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_Standard", "ps_4_0")); _pixelShaderReflective = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_Reflective", "ps_4_0")); _model.SetInputLayout(device, vertexShaderByteCode.InputSignature); var sampler = device.CreateSamplerState(SamplerStateDescription.Default); // Create constant buffers. _vertexConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <VertexShaderData>(), BindFlags = BindFlags.ConstantBuffer }); _geometryConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <GeometryShaderData>(), BindFlags = BindFlags.ConstantBuffer }); var pixelConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <PixelShaderData>(), BindFlags = BindFlags.ConstantBuffer }); // Prepare all the stages _deviceContext.VertexShader.SetConstantBuffers(0, _vertexConstantBuffer); _deviceContext.GeometryShader.SetConstantBuffers(0, _geometryConstantBuffer); _deviceContext.PixelShader.SetConstantBuffers(0, pixelConstantBuffer); _deviceContext.PixelShader.SetSamplers(0, sampler); _vertexShaderData = new VertexShaderData(); _view1 = Matrix.LookAtLH(Vector3.Zero, new Vector3(1, 0, 0), Vector3.UnitY); _view2 = Matrix.LookAtLH(Vector3.Zero, new Vector3(-1, 0, 0), Vector3.UnitY); _view3 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 1, 0), -Vector3.UnitZ); _view4 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, -1, 0), Vector3.UnitZ); _view5 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 0, 1), Vector3.UnitY); _view6 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 0, -1), Vector3.UnitY); var from = new Vector3(0, 30, 70); var to = new Vector3(0, 0, 0); // Prepare matrices var view = Matrix.LookAtLH(from, to, Vector3.UnitY); _projectionCube = Matrix.PerspectiveFovLH(MathUtil.PiOverTwo, 1.0f, 1f, 10000.0f); _projection = Matrix.PerspectiveFovLH(MathUtil.Pi / 3.0f, Width / (float)Height, 1f, 10000.0f); _viewProjectionCube = Matrix.Multiply(view, _projectionCube); _viewProjection = Matrix.Multiply(view, _projection); var pixelShaderData = new PixelShaderData { LightDirection = new Vector4(Vector3.Normalize(new Vector3(0.5f, 0, -1)), 1), EyePosition = new Vector4(from, 1) }; _deviceContext.SetBufferData(pixelConstantBuffer, ref pixelShaderData); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); return(swapChainPresenter.Bitmap); }
public override WriteableBitmap Initialize(Device device) { const int width = 600; const int height = 400; // Create device and swap chain. var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = device.CreateSwapChain(width, height, swapChainPresenter); _deviceContext = device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = width, Height = height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = device.CreateDepthStencilView(depthBuffer); // Load model. var modelLoader = new ModelLoader(device, TextureLoader.CreateTextureFromStream); _model = modelLoader.Load("Modules/SampleBrowser/Samples/ModelLoading/Car/car.obj"); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/ModelLoading/ModelLoading.fx", "VS", "vs_4_0"); var vertexShader = device.CreateVertexShader(vertexShaderByteCode); var pixelShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/ModelLoading/ModelLoading.fx", "PS", "ps_4_0"); var pixelShader = device.CreatePixelShader(pixelShaderByteCode); _model.SetInputLayout(device, vertexShaderByteCode.InputSignature); var sampler = device.CreateSamplerState(new SamplerStateDescription { Filter = Filter.MinMagMipPoint, AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, BorderColor = Color4.Black, ComparisonFunction = Comparison.Never, MaximumAnisotropy = 16, MipLodBias = 0, MinimumLod = 0, MaximumLod = 16, }); // Create constant buffers. _vertexConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<VertexShaderData>(), BindFlags = BindFlags.ConstantBuffer }); _pixelConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<PixelShaderData>(), BindFlags = BindFlags.ConstantBuffer }); // Prepare all the stages _deviceContext.VertexShader.SetConstantBuffers(0, _vertexConstantBuffer); _deviceContext.VertexShader.Shader = vertexShader; _deviceContext.PixelShader.SetConstantBuffers(0, _pixelConstantBuffer); _deviceContext.PixelShader.Shader = pixelShader; _deviceContext.PixelShader.SetSamplers(0, sampler); _vertexShaderData = new VertexShaderData(); _pixelShaderData = new PixelShaderData { LightDirection = new Vector4(Vector3.Normalize(new Vector3(0.5f, 0, -1)), 1) }; _deviceContext.SetBufferData(_pixelConstantBuffer, ref _pixelShaderData); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, width, height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); //_deviceContext.Rasterizer.State = device.CreateRasterizerState(new Pipeline.Rasterizer.RasterizerStateDescription //{ // FillMode = Pipeline.Rasterizer.FillMode.Wireframe //}); // Prepare matrices _projection = Matrix.PerspectiveFovLH(MathUtil.Pi / 3.0f, width / (float) height, 1f, 1000.0f); return swapChainPresenter.Bitmap; }
public override WriteableBitmap Initialize(Device device) { // Create device and swap chain. var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = device.CreateSwapChain(Width, Height, swapChainPresenter); _deviceContext = device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = Width, Height = Height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = device.CreateDepthStencilView(depthBuffer); // Create cube map resources. var cubeMapTexture = device.CreateTexture2D(new Texture2DDescription { Width = CubeMapSize, Height= CubeMapSize, ArraySize = 6, BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource, MipLevels = 1 }); _renderTargetViewCube = device.CreateRenderTargetView(cubeMapTexture); _resourceViewCube = device.CreateShaderResourceView(cubeMapTexture); var depthBufferCube = device.CreateTexture2D(new Texture2DDescription { ArraySize = 6, MipLevels = 1, Width = CubeMapSize, Height = CubeMapSize, BindFlags = BindFlags.DepthStencil }); _depthViewCube = device.CreateDepthStencilView(depthBufferCube); // Load model. var modelLoader = new ModelLoader(device, TextureLoader.CreateTextureFromStream); _model = modelLoader.Load("Modules/SampleBrowser/Samples/EnvironmentMapping/teapot.obj"); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "VS_CubeMap", "vs_4_0"); _vertexShaderCubeMap = device.CreateVertexShader(vertexShaderByteCode); _vertexShaderStandard = device.CreateVertexShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "VS_Standard", "vs_4_0")); _geometryShaderCubeMap = device.CreateGeometryShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "GS_CubeMap", "gs_4_0")); _pixelShaderCubeMap = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_CubeMap", "ps_4_0")); _pixelShaderStandard = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_Standard", "ps_4_0")); _pixelShaderReflective = device.CreatePixelShader(ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/EnvironmentMapping/EnvironmentMapping.fx", "PS_Reflective", "ps_4_0")); _model.SetInputLayout(device, vertexShaderByteCode.InputSignature); var sampler = device.CreateSamplerState(SamplerStateDescription.Default); // Create constant buffers. _vertexConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<VertexShaderData>(), BindFlags = BindFlags.ConstantBuffer }); _geometryConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<GeometryShaderData>(), BindFlags = BindFlags.ConstantBuffer }); var pixelConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<PixelShaderData>(), BindFlags = BindFlags.ConstantBuffer }); // Prepare all the stages _deviceContext.VertexShader.SetConstantBuffers(0, _vertexConstantBuffer); _deviceContext.GeometryShader.SetConstantBuffers(0, _geometryConstantBuffer); _deviceContext.PixelShader.SetConstantBuffers(0, pixelConstantBuffer); _deviceContext.PixelShader.SetSamplers(0, sampler); _vertexShaderData = new VertexShaderData(); _view1 = Matrix.LookAtLH(Vector3.Zero, new Vector3(1, 0, 0), Vector3.UnitY); _view2 = Matrix.LookAtLH(Vector3.Zero, new Vector3(-1, 0, 0), Vector3.UnitY); _view3 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 1, 0), -Vector3.UnitZ); _view4 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, -1, 0), Vector3.UnitZ); _view5 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 0, 1), Vector3.UnitY); _view6 = Matrix.LookAtLH(Vector3.Zero, new Vector3(0, 0, -1), Vector3.UnitY); var from = new Vector3(0, 30, 70); var to = new Vector3(0, 0, 0); // Prepare matrices var view = Matrix.LookAtLH(from, to, Vector3.UnitY); _projectionCube = Matrix.PerspectiveFovLH(MathUtil.PiOverTwo, 1.0f, 1f, 10000.0f); _projection = Matrix.PerspectiveFovLH(MathUtil.Pi / 3.0f, Width / (float) Height, 1f, 10000.0f); _viewProjectionCube = Matrix.Multiply(view, _projectionCube); _viewProjection = Matrix.Multiply(view, _projection); var pixelShaderData = new PixelShaderData { LightDirection = new Vector4(Vector3.Normalize(new Vector3(0.5f, 0, -1)), 1), EyePosition = new Vector4(from, 1) }; _deviceContext.SetBufferData(pixelConstantBuffer, ref pixelShaderData); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, Width, Height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); return swapChainPresenter.Bitmap; }
public override WriteableBitmap Initialize(Device device) { const int width = 600; const int height = 400; // Create device and swap chain. var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = device.CreateSwapChain(width, height, swapChainPresenter); _deviceContext = device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = width, Height = height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = device.CreateDepthStencilView(depthBuffer); // Load model. var modelLoader = new ModelLoader(device, TextureLoader.CreateTextureFromStream); _model = modelLoader.Load("Modules/SampleBrowser/Samples/ModelLoading/Car/car.obj"); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/ModelLoading/ModelLoading.fx", "VS", "vs_4_0"); var vertexShader = device.CreateVertexShader(vertexShaderByteCode); var pixelShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/ModelLoading/ModelLoading.fx", "PS", "ps_4_0"); var pixelShader = device.CreatePixelShader(pixelShaderByteCode); _model.SetInputLayout(device, vertexShaderByteCode.InputSignature); var sampler = device.CreateSamplerState(new SamplerStateDescription { Filter = Filter.MinMagMipPoint, AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, BorderColor = Color4.Black, ComparisonFunction = Comparison.Never, MaximumAnisotropy = 16, MipLodBias = 0, MinimumLod = 0, MaximumLod = 16, }); // Create constant buffers. _vertexConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <VertexShaderData>(), BindFlags = BindFlags.ConstantBuffer }); _pixelConstantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <PixelShaderData>(), BindFlags = BindFlags.ConstantBuffer }); // Prepare all the stages _deviceContext.VertexShader.SetConstantBuffers(0, _vertexConstantBuffer); _deviceContext.VertexShader.Shader = vertexShader; _deviceContext.PixelShader.SetConstantBuffers(0, _pixelConstantBuffer); _deviceContext.PixelShader.Shader = pixelShader; _deviceContext.PixelShader.SetSamplers(0, sampler); _vertexShaderData = new VertexShaderData(); _pixelShaderData = new PixelShaderData { LightDirection = new Vector4(Vector3.Normalize(new Vector3(0.5f, 0, -1)), 1) }; _deviceContext.SetBufferData(_pixelConstantBuffer, ref _pixelShaderData); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, width, height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); //_deviceContext.Rasterizer.State = device.CreateRasterizerState(new Pipeline.Rasterizer.RasterizerStateDescription //{ // FillMode = Pipeline.Rasterizer.FillMode.Wireframe //}); // Prepare matrices _projection = Matrix.PerspectiveFovLH(MathUtil.Pi / 3.0f, width / (float)height, 1f, 1000.0f); return(swapChainPresenter.Bitmap); }
public Program() { var form = new RenderForm("SharpDX - Load Mesh Sample"); form.Width = 1280; form.Height = 720; // SwapChain description var desc = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(form.Width, form.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; // Create Device and SwapChain Device device; SwapChain swapChain; Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain); var context = device.ImmediateContext; // Ignore all windows events var factory = swapChain.GetParent<Factory>(); factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll); // New RenderTargetView from the backbuffer var backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0); var renderView = new RenderTargetView(device, backBuffer); //Load model String fileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "sponza/sponza.3ds"); ModelLoader modelLoader = new ModelLoader(device); Model model = modelLoader.Load(fileName); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderBytecode.CompileFromFile("LoadMesh.fx", "VS", "vs_5_0"); var vertexShader = new VertexShader(device, vertexShaderByteCode); var pixelShaderByteCode = ShaderBytecode.CompileFromFile("LoadMesh.fx", "PS", "ps_5_0"); var pixelShader = new PixelShader(device, pixelShaderByteCode); model.SetInputLayout(device, ShaderSignature.GetInputSignature(vertexShaderByteCode)); // Create Depth Buffer & View var depthBuffer = new Texture2D(device, new Texture2DDescription() { Format = Format.D32_Float_S8X24_UInt, ArraySize = 1, MipLevels = 1, Width = form.Width, Height = form.Height, SampleDescription = new SampleDescription(1, 0), Usage = ResourceUsage.Default, BindFlags = BindFlags.DepthStencil, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None }); var depthView = new DepthStencilView(device, depthBuffer); //create sampler from texture var sampler = new SamplerState(device, new SamplerStateDescription() { Filter = Filter.MinMagMipLinear, AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, BorderColor = Color.Black, ComparisonFunction = Comparison.Never, MaximumAnisotropy = 16, MipLodBias = 0, MinimumLod = 0, MaximumLod = 16, }); // Create Constant Buffers var vertexConstantBuffer = new Buffer(device, Utilities.SizeOf<VertexShaderData>(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); var pixelConstantBuffer = new Buffer(device, Utilities.SizeOf<PixelShaderData>(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); // Prepare some of the stages. The others are mesh dependent and will be set later context.VertexShader.Set(vertexShader); context.Rasterizer.SetViewport(new Viewport(0, 0, form.Width, form.Height, 0.0f, 1.0f)); context.PixelShader.Set(pixelShader); context.PixelShader.SetSampler(0, sampler); context.OutputMerger.SetTargets(depthView, renderView); context.VertexShader.SetConstantBuffer(0, vertexConstantBuffer); context.PixelShader.SetConstantBuffer(0, pixelConstantBuffer); //allocate data structs for the vertex and pixel constant buffers VertexShaderData vsData = new VertexShaderData(); PixelShaderData psData = new PixelShaderData(); //set light position psData.lightPos = new Vector4(0, 2.5f, 0, 0); //update pixel shader constant buffer. Only need to do this once. context.UpdateSubresource(ref psData, pixelConstantBuffer); // Calc projection matrix var proj = Matrix.PerspectiveFovLH((float)Math.PI / 4.0f, form.Width / (float)form.Height, 0.1f, 100.0f); // Use clock var clock = new Stopwatch(); clock.Start(); // Main loop RenderLoop.Run(form, () => { var time = clock.ElapsedMilliseconds / 1000.0f; // Prepare matrices Vector3 cameraPosition = new Vector3(0, 3, 5.0f); Vector3 cameraLookAt = new Vector3(0, 2.0f, 0); //rotate camera Vector4 tempPos = Vector3.Transform(cameraPosition, Matrix.RotationY(0.2f * time)); cameraPosition = new Vector3(tempPos.X, tempPos.Y, tempPos.Z); //calculate the view matrix var view = Matrix.LookAtLH(cameraPosition, cameraLookAt, Vector3.UnitY); var viewProj = Matrix.Multiply(view, proj); // Clear views context.ClearDepthStencilView(depthView, DepthStencilClearFlags.Depth, 1.0f, 0); context.ClearRenderTargetView(renderView, Color.Black); // Update transformation matrices vsData.world = Matrix.Translation(0, -model.AABoxCentre.Y / 2, 0); vsData.worldView = vsData.world * view; vsData.worldViewProj = vsData.world * viewProj; //transpose matrices before sending them to the shader vsData.world.Transpose(); vsData.worldView.Transpose(); vsData.worldViewProj.Transpose(); //update vertex shader constant buffer context.UpdateSubresource(ref vsData, vertexConstantBuffer); // Draw the cube model.Render(context); // Present swapChain.Present(0, PresentFlags.None); }); // Release all resources model.Dispose(); vertexShaderByteCode.Dispose(); vertexShader.Dispose(); pixelShaderByteCode.Dispose(); pixelShader.Dispose(); renderView.Dispose(); backBuffer.Dispose(); context.ClearState(); context.Flush(); device.Dispose(); context.Dispose(); swapChain.Dispose(); factory.Dispose(); }