GetCubeShaderResource() public method

public GetCubeShaderResource ( int mipLevel ) : ShaderResource
mipLevel int
return ShaderResource
コード例 #1
0
ファイル: Filter.cs プロジェクト: demiurghg/FusionEngine
		/// <summary>
		/// 
		/// </summary>
		/// <param name="dst"></param>
		/// <param name="cubeSrc"></param>
		/// <param name="sampleCount"></param>
		public void PrefilterEnvMap ( RenderTargetCube envMap )
		{
			SetDefaultRenderStates();

			int width  = envMap.Width / 2;
			int height = envMap.Height / 2;

			using( new PixEvent("PrefilterEnvMap") ) {

				var sides =	new[]{ ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.POSX, ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.NEGX, 
								   ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.POSY, ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.NEGY, 
								   ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.POSZ, ShaderFlags.PREFILTER_ENVMAP | ShaderFlags.NEGZ };

				//	loop through mip levels from second to last specular mip level :
				for (int mip=1; mip<RenderSystem.EnvMapSpecularMipCount; mip++) {

					float roughness = (float)mip / (float)(RenderSystem.EnvMapSpecularMipCount-1);
					float step		= 1.0f / width;

					vectorCB.SetData( new Vector4( roughness, step,0,0 ) );
					
								
					for (int face=0; face<6; face++) {

						rs.SetTargets( null, envMap.GetSurface( mip, (CubeFace)face ) );
					
						rs.SetViewport( 0,0, width, height );

						rs.PixelShaderConstants[0]	=	vectorCB;
						rs.PipelineState			=	factory[ (int)sides[face] ];
						rs.VertexShaderResources[0] =	envMap.GetCubeShaderResource( mip-1 );
						rs.PixelShaderResources[0]	=	envMap.GetCubeShaderResource( mip-1 );
						rs.PixelShaderSamplers[0]	=	SamplerState.LinearWrap;
						rs.VertexShaderConstants[0]	=	matrixCB;

						rs.Draw( 3, 0 );
					}

					width /= 2;
					height /= 2;
				}
			}


			rs.ResetStates();
		}