#region File Description
//-----------------------------------------------------------------------------
// EnvironmentMappedMaterialProcessor.cs
//
// Microsoft XNA Community Game Platform
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#endregion
#region Using Statements
using System.IO;
using System.ComponentModel;
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Processors;
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
#endregion
namespace CustomModelEffectPipeline
{
///
/// Custom content pipeline processor derives from the built-in
/// MaterialProcessor. This changes the material to use our custom
/// environment mapping effect, and also builds the environment map
/// texture in a special way.
///
[ContentProcessor]
public class EnvironmentMappedMaterialProcessor : MaterialProcessor
{
private string environmentMap = "seattle.bmp";
[DisplayName("Environment Map")]
[DefaultValue("seattle.bmp")]
[Description("The environment map applied to the model.")]
public string EnvironmentMap
{
get { return environmentMap; }
set { environmentMap = value; }
}
///
/// Converts a material.
///
public override MaterialContent Process(MaterialContent input,
ContentProcessorContext context)
{
// Create a new effect material.
EnvironmentMapMaterialContent customMaterial = new EnvironmentMapMaterialContent();
// Copy texture data across from the original material.
BasicMaterialContent basicMaterial = (BasicMaterialContent)input;
if (basicMaterial.Texture != null)
customMaterial.Texture = basicMaterial.Texture;
// Add the reflection texture.
string envmap = Path.GetFullPath(EnvironmentMap);
customMaterial.EnvironmentMap = new ExternalReference(envmap);
// Chain to the base material processor.
return base.Process(customMaterial, context);
}
///
/// Builds a texture for use by this material.
///
protected override ExternalReference BuildTexture(
string textureName,
ExternalReference texture,
ContentProcessorContext context)
{
// Use our custom CubemapProcessor for the environment map texture.
if (textureName == "EnvironmentMap")
{
return context.BuildAsset(texture, "CubemapProcessor");
}
// Apply default processing to all other textures.
return base.BuildTexture(textureName, texture, context);
}
}
}