Exemple #1
0
		public ImposterFloat(int width, int height, Format format, Color4 background, ImposterOverlayType overlayType)
		{
			if (Effect == null)
			{
				Effect = SharedEffects.Effects["ImposterFloat"] as ImposterFloatEffect; 
			}

			m_Disposed = true;
			m_BackupState = new RenderTargetBackupState();
			m_ImposterView = new View3D(new System.Drawing.Rectangle(0, 0, width, height), width, height, (float)Math.PI / 4, 1f);
			m_Format = format;
			m_Background = background;
			m_OverlayType = overlayType; 
		}
		public void RenderImposter(ImposterOverlayType overlay, VertexBufferBinding bindings, ShaderResourceView imposterTexture)
		{
			RenderImposter(overlay, bindings, imposterTexture, 1f);
		}
		public void RenderImposter(ImposterOverlayType overlay, VertexBufferBinding bindings, ShaderResourceView imposterTexture, float brightPassThreshold)
		{
			if (m_Disposed == true)
			{
				return;
			}

			SlimDX.Direct3D11.DeviceContext context = GameEnvironment.Device.ImmediateContext;

			m_ImposterTextureResource.SetResource(imposterTexture);

			context.InputAssembler.InputLayout = m_Layout;
			context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;
			context.InputAssembler.SetVertexBuffers(0, bindings);
			context.InputAssembler.SetIndexBuffer(null, Format.Unknown, 0);

			m_BrightPassThreshold.Set(brightPassThreshold);

			if (overlay == ImposterOverlayType.None)
			{
				m_Pass_NoBlend.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Add)
			{
				m_Pass_OverlayAdd.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Subtract)
			{
				m_Pass_OverlaySubtract.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Invert)
			{
				m_Pass_OverlayInvert.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Alpha)
			{
				m_Pass_OverlayAlpha.Apply(context);
			}
			else if (overlay == ImposterOverlayType.None_BrightPass)
			{
				m_Pass_NoBlend_BrightPass.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Add_BrightPass)
			{
				m_Pass_OverlayAdd_BrightPass.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Subtract_BrightPass)
			{
				m_Pass_OverlaySubtract_BrightPass.Apply(context);
			}
			else if (overlay == ImposterOverlayType.Alpha_BrightPass)
			{
				m_Pass_OverlayAlpha_BrightPass.Apply(context);
			}
			else
			{
				throw new Exception("Unknown imposter overlay mode '" + overlay.ToString() + "'");
			}

			context.Draw(4, 0);
		}
		public void RenderImposter(ImposterOverlayType overlay, ShaderResourceView imposterTexture)
		{
			RenderImposter(overlay, imposterTexture, 1f); 
		}