public void Render() { var context = this.deviceResources.D3DContext; // Clear the render target and the depth stencil context.OutputMergerSetRenderTargets(new[] { this.deviceResources.D3DRenderTargetView }, this.deviceResources.D3DDepthStencilView); context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, new float[] { 0.176f, 0.196f, 0.667f, 1.0f }); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth, 1.0f, 0); // Get the projection & view matrix from the camera class XMMatrix mWorld = this.WorldMatrix; XMMatrix mView = this.ViewMatrix; XMMatrix mProj = this.ProjectionMatrix; XMMatrix mWorldViewProjection = mWorld * mView * mProj; // Set the constant buffers PerFrameConstantBuffer pVSPerFrame; pVSPerFrame.LightDir = new XMFloat3(0.0f, 0.707f, -0.707f); pVSPerFrame.Time = (float)this.totalSeconds; pVSPerFrame.LightDiffuse = new XMFloat4(1.0f, 1.0f, 1.0f, 1.0f); context.UpdateSubresource(this.perFrameConstantBuffer, 0, null, pVSPerFrame, 0, 0); PerObjectConstantBuffer pVSPerObject; pVSPerObject.WorldViewProjection = mWorldViewProjection.Transpose(); pVSPerObject.World = mWorld.Transpose(); pVSPerObject.MaterialAmbientColor = new XMFloat4(0.3f, 0.3f, 0.3f, 1.0f); pVSPerObject.MaterialDiffuseColor = new XMFloat4(0.7f, 0.7f, 0.7f, 1.0f); context.UpdateSubresource(this.perObjectConstantBuffer, 0, null, pVSPerObject, 0, 0); context.VertexShaderSetConstantBuffers(0, new[] { this.perObjectConstantBuffer, this.perFrameConstantBuffer }); // Set render resources context.InputAssemblerSetInputLayout(this.inputLayout); context.VertexShaderSetShader(this.vertexShader, null); context.PixelShaderSetShader(this.pixelShader, null); context.PixelShaderSetSamplers(0, new[] { this.samplerLinear }); // Render objects here... }
public void Render() { var context = this.deviceResources.D3DContext; context.OutputMergerSetRenderTargets(new[] { this.deviceResources.D3DRenderTargetView }, this.deviceResources.D3DDepthStencilView); // Clear the depth stencil context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, new float[] { 0.627f, 0.627f, 0.980f, 1.0f }); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth, 1.0f, 0); // Get the projection & view matrix from the camera class XMMatrix mWorld = this.WorldMatrix; XMMatrix mView = this.ViewMatrix; XMMatrix mProj = this.ProjectionMatrix; XMMatrix mWorldViewProjection = mWorld * mView * mProj; // Set the constant buffers ConstantBufferPerObject cbPerObject; cbPerObject.m_mWorldViewProjection = mWorldViewProjection.Transpose(); cbPerObject.m_mWorld = mWorld; context.UpdateSubresource(this.constantBufferPerObject, 0, null, cbPerObject, 0, 0); ConstantBufferPerFrame cbPerFrame; cbPerFrame.m_vLightDir = new XMFloat4(0.0f, 0.707f, -0.707f, 0.0f); context.UpdateSubresource(this.constantBufferPerFrame, 0, null, cbPerFrame, 0, 0); context.VertexShaderSetConstantBuffers(0, new[] { this.constantBufferPerObject, this.constantBufferPerFrame }); // Set render resources context.InputAssemblerSetInputLayout(this.inputLayout); context.VertexShaderSetShader(this.vertexShader, null); context.PixelShaderSetShader(this.pixelShader, null); context.PixelShaderSetShaderResources(0, new[] { this.textureView }); context.PixelShaderSetSamplers(0, new[] { this.sampler }); this.mesh.Render(-1, -1, -1); }
public void Render() { var context = this.deviceResources.D3DContext; context.OutputMergerSetRenderTargets(new[] { this.deviceResources.D3DRenderTargetView }, this.deviceResources.D3DDepthStencilView); context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, new float[] { 0.0f, 0.125f, 0.3f, 1.0f }); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth, 1.0f, 0); context.InputAssemblerSetInputLayout(this.inputLayout); context.InputAssemblerSetVertexBuffers( 0, new[] { this.vertexBuffer }, new uint[] { SimpleVertex.Size }, new uint[] { 0 }); context.InputAssemblerSetIndexBuffer(this.indexBuffer, DxgiFormat.R16UInt, 0); context.InputAssemblerSetPrimitiveTopology(D3D11PrimitiveTopology.TriangleList); // Update matrix variables and lighting variables ConstantBufferData cb; cb.World = this.worldMatrix.Transpose(); cb.View = this.viewMatrix.Transpose(); cb.Projection = this.projectionMatrix.Transpose(); cb.LightDir = new XMFloat4[2]; cb.LightColor = new XMFloat4[2]; for (int i = 0; i < 2; i++) { cb.LightDir[i] = this.lightDirs[i]; cb.LightColor[i] = this.lightColors[i]; } //cb.LightDir0 = this.lightDirs[0]; //cb.LightDir1 = this.lightDirs[1]; //cb.LightColor0 = this.lightColors[0]; //cb.LightColor1 = this.lightColors[1]; cb.OutputColor = new XMFloat4(0, 0, 0, 0); context.UpdateSubresource(this.constantBuffer, 0, null, cb, 0, 0); // Render the cube context.VertexShaderSetShader(this.vertexShader, null); context.VertexShaderSetConstantBuffers(0, new[] { this.constantBuffer }); context.PixelShaderSetShader(this.pixelShader, null); context.PixelShaderSetConstantBuffers(0, new[] { this.constantBuffer }); context.DrawIndexed((uint)MainGameComponent.Indices.Length, 0, 0); // Render each light context.PixelShaderSetShader(this.pixelShaderSolid, null); for (int m = 0; m < 2; m++) { XMMatrix light = XMMatrix.TranslationFromVector(5.0f * this.lightDirs[m].ToVector()); XMMatrix lightScale = XMMatrix.Scaling(0.2f, 0.2f, 0.2f); light = lightScale * light; // Update the world variable to reflect the current light cb.World = light.Transpose(); cb.OutputColor = this.lightColors[m]; context.UpdateSubresource(this.constantBuffer, 0, null, cb, 0, 0); context.DrawIndexed((uint)MainGameComponent.Indices.Length, 0, 0); } }
public void Render() { var context = this.deviceResources.D3DContext; context.OutputMergerSetRenderTargets(new[] { this.deviceResources.D3DRenderTargetView }, this.deviceResources.D3DDepthStencilView); // Clear the render target and depth stencil context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, new float[] { 0.0f, 0.25f, 0.25f, 0.55f }); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth, 1.0f, 0); // Get the projection & view matrix from the camera class XMMatrix mWorld = this.centerMesh * this.WorldMatrix; XMMatrix mView = this.ViewMatrix; XMMatrix mProj = this.ProjectionMatrix; XMMatrix mWorldViewProjection = mWorld * mView * mProj; XMFloat3 vLightDir = this.LightDirection; // Per frame cb update float fAmbient = 0.1f; ConstantBufferPSPerFrame cbPSPerFrame; cbPSPerFrame.m_vLightDirAmbient = new XMFloat4(vLightDir.X, vLightDir.Y, vLightDir.Z, fAmbient); context.UpdateSubresource(this.constantBufferPSPerFrame, 0, null, cbPSPerFrame, 0, 0); context.PixelShaderSetConstantBuffers(ConstantBufferPSPerFrameBind, new[] { this.constantBufferPSPerFrame }); // IA setup context.InputAssemblerSetInputLayout(this.inputLayout); // Set the shaders context.VertexShaderSetShader(this.vertexShader, null); context.PixelShaderSetShader(this.pixelShader, null); // Set the per object constant data // VS Per object ConstantBufferVSPerObject cbVSPerObject; cbVSPerObject.m_WorldViewProj = mWorldViewProjection.Transpose(); cbVSPerObject.m_World = mWorld.Transpose(); context.UpdateSubresource(this.constantBufferVSPerObject, 0, null, cbVSPerObject, 0, 0); context.VertexShaderSetConstantBuffers(ConstantBufferVSPerObjectBind, new[] { this.constantBufferVSPerObject }); // PS Per object ConstantBufferPSPerObject cbPSPerObject; cbPSPerObject.m_vObjectColor = new XMFloat4(1, 1, 1, 1); context.UpdateSubresource(this.constantBufferPSPerObject, 0, null, cbPSPerObject, 0, 0); context.PixelShaderSetConstantBuffers(ConstantBufferPSPerObjectBind, new[] { this.constantBufferPSPerObject }); // Set render resources context.PixelShaderSetSamplers(0, new[] { this.sampler }); // Render //// Get the mesh //context.InputAssemblerSetVertexBuffers( // 0, // new[] { this.mesh.Meshes[0].VertexBuffers[0].Buffer }, // new[] { this.mesh.Meshes[0].VertexBuffers[0].StrideBytes }, // new[] { 0U }); //context.InputAssemblerSetIndexBuffer( // this.mesh.Meshes[0].IndexBuffer.Buffer, // this.mesh.Meshes[0].IndexBuffer.IndexFormat, // 0); //for (int subsetIndex = 0; subsetIndex < this.mesh.Meshes.Count; subsetIndex++) //{ // // Get the subset // SdkMeshSubset subset = this.mesh.Meshes[0].Subsets[subsetIndex]; // context.InputAssemblerSetPrimitiveTopology(subset.PrimitiveTopology); // D3D11ShaderResourceView pDiffuseRV = this.mesh.Materials[subset.MaterialIndex].DiffuseTextureView; // context.PixelShaderSetShaderResources(0, new[] { pDiffuseRV }); // context.DrawIndexed((uint)subset.IndexCount, 0, subset.VertexStart); //} this.mesh.Render(0, -1, -1); }
public void Render() { var context = this.deviceResources.D3DContext; // WVP XMMatrix mProj = this.ProjectionMatrix; XMMatrix mView = this.ViewMatrix; XMMatrix mViewProjection = mView * mProj; // Update per-frame variables ConstantBufferConstants cb; cb.ViewProjection = mViewProjection.Transpose(); cb.CameraPosWorld = this.EyePt; cb.TessellationFactor = this.Subdivs; context.UpdateSubresource(this.g_pcbPerFrame, 0, null, cb, 0, 0); // Clear the render target and depth stencil context.OutputMergerSetRenderTargets(new[] { this.deviceResources.D3DRenderTargetView }, this.deviceResources.D3DDepthStencilView); context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, new float[] { 0.05f, 0.05f, 0.05f, 1.0f }); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth, 1.0f, 0); // Set state for solid rendering context.RasterizerStageSetState(this.g_pRasterizerStateSolid); // Render the meshes // Bind all of the CBs context.VertexShaderSetConstantBuffers(g_iBindPerFrame, new[] { this.g_pcbPerFrame }); context.HullShaderSetConstantBuffers(g_iBindPerFrame, new[] { this.g_pcbPerFrame }); context.DomainShaderSetConstantBuffers(g_iBindPerFrame, new[] { this.g_pcbPerFrame }); context.PixelShaderSetConstantBuffers(g_iBindPerFrame, new[] { this.g_pcbPerFrame }); // Set the shaders context.VertexShaderSetShader(this.g_pVertexShader, null); // For this sample, choose either the "integer", "fractional_even", // or "fractional_odd" hull shader switch (this.PartitionMode) { case PartitionMode.Integer: default: context.HullShaderSetShader(this.g_pHullShaderInteger, null); break; case PartitionMode.FractionalEven: context.HullShaderSetShader(this.g_pHullShaderFracEven, null); break; case PartitionMode.FractionalOdd: context.HullShaderSetShader(this.g_pHullShaderFracOdd, null); break; } context.DomainShaderSetShader(this.g_pDomainShader, null); context.GeometryShaderSetShader(null, null); context.PixelShaderSetShader(this.g_pPixelShader, null); // Optionally draw the wireframe if (this.DrawWires) { context.PixelShaderSetShader(this.g_pSolidColorPS, null); context.RasterizerStageSetState(this.g_pRasterizerStateWireframe); } // Set the input assembler // This sample uses patches with 16 control points each // Although the Mobius strip only needs to use a vertex buffer, // you can use an index buffer as well by calling IASetIndexBuffer(). context.InputAssemblerSetInputLayout(this.g_pPatchLayout); context.InputAssemblerSetVertexBuffers(0, new[] { this.g_pControlPointVB }, new[] { BezierControlPoint.Size }, new[] { 0U }); context.InputAssemblerSetPrimitiveTopology(D3D11PrimitiveTopology.PatchList16ControlPoint); // Draw the mesh context.Draw((uint)MobiusStrip.Points.Length, 0); context.RasterizerStageSetState(this.g_pRasterizerStateSolid); }
public void Render() { var context = this.deviceResources.D3DContext; D3D11RenderTargetView[] pRTV = new D3D11RenderTargetView[2]; D3D11ShaderResourceView[] pSRV = new D3D11ShaderResourceView[8]; // Array of our samplers D3D11SamplerState[] ppSamplerStates = new D3D11SamplerState[3] { this.g_pSamplePoint, this.g_pSampleLinear, this.g_pSamplePointCmp }; context.PixelShaderSetSamplers(0, ppSamplerStates); // Store off original render target, this is the back buffer of the swap chain D3D11RenderTargetView pOrigRTV = this.deviceResources.D3DRenderTargetView; D3D11DepthStencilView pOrigDSV = this.deviceResources.D3DDepthStencilView; // Clear the render target float[] ClearColor = { 0.0f, 0.25f, 0.25f, 1.0f }; context.ClearRenderTargetView(this.deviceResources.D3DRenderTargetView, ClearColor); context.ClearDepthStencilView(this.deviceResources.D3DDepthStencilView, D3D11ClearOptions.Depth | D3D11ClearOptions.Stencil, 1.0f, 0); // disable color writes context.OutputMergerSetBlendState(this.g_pBlendStateColorWritesOff, null, 0xffffffff); this.RenderShadowMap(out XMFloat4X4 mViewProjLight, out XMFloat3 vLightDir); // enable color writes context.OutputMergerSetBlendState(this.g_pBlendStateNoBlend, null, 0xffffffff); // Get the projection & view matrix from the camera class XMMatrix mView = this.ViewMatrix; XMMatrix mProj = this.ProjectionMatrix; XMMatrix mWorldViewProjection = mView * mProj; // Setup the constant buffer for the scene vertex shader ConstantBufferConstants pConstants = new ConstantBufferConstants { WorldViewProjection = mWorldViewProjection.Transpose(), WorldViewProjLight = mViewProjLight.ToMatrix().Transpose(), ShadowMapDimensions = new XMFloat4( g_fShadowMapWidth, g_fShadowMapHeight, 1.0f / g_fShadowMapWidth, 1.0f / g_fShadowMapHeight), LightDir = new XMFloat4(vLightDir.X, vLightDir.Y, vLightDir.Z, 0.0f), SunWidth = this.SunWidth }; context.UpdateSubresource(this.g_pcbConstants, 0, null, pConstants, 0, 0); context.VertexShaderSetConstantBuffers(g_iConstantsConstantBufferBind, new[] { this.g_pcbConstants }); context.PixelShaderSetConstantBuffers(g_iConstantsConstantBufferBind, new[] { this.g_pcbConstants }); // Set the shaders context.VertexShaderSetShader(this.g_pSceneVS, null); context.PixelShaderSetShader(this.g_pScenePS, null); // Set the vertex buffer format context.InputAssemblerSetInputLayout(this.g_pSceneVertexLayout); // Rebind to original back buffer and depth buffer pRTV[0] = pOrigRTV; context.OutputMergerSetRenderTargets(pRTV, pOrigDSV); // set the shadow map context.PixelShaderSetShaderResources(1, new[] { this.g_pDepthTextureSRV }); // Render the scene this.g_SceneMesh.Render(0, -1, -1); this.g_Poles.Render(0, -1, -1); // restore resources context.PixelShaderSetShaderResources(0, pSRV); }