public void Dispose() { DisposeBuffers(); if (BlendState != null) { BlendState.Dispose(); BlendState = null; } if (SampleStateLinear != null) { SampleStateLinear.Dispose(); SampleStateLinear = null; } if (SampleStatePoint != null) { SampleStatePoint.Dispose(); SampleStatePoint = null; } if (LightVSVars != null) { LightVSVars.Dispose(); LightVSVars = null; } if (LightPSVars != null) { LightPSVars.Dispose(); LightPSVars = null; } if (LightInstVars != null) { LightInstVars.Dispose(); LightInstVars = null; } if (LightQuadLayout != null) { LightQuadLayout.Dispose(); LightQuadLayout = null; } if (LightQuad != null) { LightQuad.Dispose(); LightQuad = null; } if (LightCone != null) { LightCone.Dispose(); LightCone = null; } if (LightSphere != null) { LightSphere.Dispose(); LightSphere = null; } if (LightCapsule != null) { LightCapsule.Dispose(); LightCapsule = null; } if (DirLightPS != null) { DirLightPS.Dispose(); DirLightPS = null; } if (DirLightMSPS != null) { DirLightMSPS.Dispose(); DirLightMSPS = null; } if (DirLightVS != null) { DirLightVS.Dispose(); DirLightVS = null; } if (LodLightPS != null) { LodLightPS.Dispose(); LodLightPS = null; } if (LodLightMSPS != null) { LodLightMSPS.Dispose(); LodLightMSPS = null; } if (LodLightVS != null) { LodLightVS.Dispose(); LodLightVS = null; } if (LightPS != null) { LightPS.Dispose(); LightPS = null; } if (LightMSPS != null) { LightMSPS.Dispose(); LightMSPS = null; } if (LightVS != null) { LightVS.Dispose(); LightVS = null; } if (SSAAPSVars != null) { SSAAPSVars.Dispose(); SSAAPSVars = null; } if (SSAAPS != null) { SSAAPS.Dispose(); SSAAPS = null; } if (FinalVS != null) { FinalVS.Dispose(); FinalVS = null; } }
public DeferredScene(DXManager dxman) { var device = dxman.device; byte[] bDirLightVS = File.ReadAllBytes("Shaders\\DirLightVS.cso"); byte[] bDirLightPS = File.ReadAllBytes("Shaders\\DirLightPS.cso"); byte[] bDirLightMSPS = File.ReadAllBytes("Shaders\\DirLightPS_MS.cso"); byte[] bLodLightVS = File.ReadAllBytes("Shaders\\LodLightsVS.cso"); byte[] bLodLightPS = File.ReadAllBytes("Shaders\\LodLightsPS.cso"); byte[] bLodLightMSPS = File.ReadAllBytes("Shaders\\LodLightsPS_MS.cso"); byte[] bLightVS = File.ReadAllBytes("Shaders\\LightVS.cso"); byte[] bLightPS = File.ReadAllBytes("Shaders\\LightPS.cso"); byte[] bLightMSPS = File.ReadAllBytes("Shaders\\LightPS_MS.cso"); byte[] bFinalVS = File.ReadAllBytes("Shaders\\PPFinalPassVS.cso"); byte[] bSSAAPS = File.ReadAllBytes("Shaders\\PPSSAAPS.cso"); DirLightVS = new VertexShader(device, bDirLightVS); DirLightPS = new PixelShader(device, bDirLightPS); LodLightVS = new VertexShader(device, bLodLightVS); LodLightPS = new PixelShader(device, bLodLightPS); LightVS = new VertexShader(device, bLightVS); LightPS = new PixelShader(device, bLightPS); try { //error could happen here if the device isn't supporting feature level 10.1 DirLightMSPS = new PixelShader(device, bDirLightMSPS); LodLightMSPS = new PixelShader(device, bLodLightMSPS); LightMSPS = new PixelShader(device, bLightMSPS); } catch { MSAASampleCount = 1; //can't do MSAA without at least 10.1 support } LightCone = new LightCone(device, bLodLightVS, 2); LightSphere = new UnitSphere(device, bLodLightVS, 3, true); LightCapsule = new UnitCapsule(device, bLodLightVS, 4, false); LightQuad = new UnitQuad(device, true); LightQuadLayout = new InputLayout(device, bDirLightVS, new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 16, 0), }); LightVSVars = new GpuVarsBuffer <DeferredLightVSVars>(device); LightPSVars = new GpuVarsBuffer <DeferredLightPSVars>(device); LightInstVars = new GpuVarsBuffer <DeferredLightInstVars>(device); FinalVS = new VertexShader(device, bFinalVS); SSAAPS = new PixelShader(device, bSSAAPS); SSAAPSVars = new GpuVarsBuffer <DeferredSSAAPSVars>(device); TextureAddressMode a = TextureAddressMode.Clamp; Color4 b = new Color4(0.0f, 0.0f, 0.0f, 0.0f); Comparison c = Comparison.Always; SampleStatePoint = DXUtility.CreateSamplerState(device, a, b, c, Filter.MinMagMipPoint, 0, 1.0f, 1.0f, 0.0f); SampleStateLinear = DXUtility.CreateSamplerState(device, a, b, c, Filter.MinMagMipLinear, 0, 1.0f, 1.0f, 0.0f); BlendState = DXUtility.CreateBlendState(device, false, BlendOperation.Add, BlendOption.One, BlendOption.Zero, BlendOperation.Add, BlendOption.One, BlendOption.Zero, ColorWriteMaskFlags.All); }