68 lines
2.0 KiB
C#

using System;
using SharpDX.D3DCompiler;
using System.IO;
using ANX.Framework.Graphics;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
#if DX10
namespace ANX.RenderSystem.Windows.DX10
#endif
#if DX11
namespace ANX.RenderSystem.Windows.DX11
#endif
{
public partial class EffectDX
{
protected Effect managedEffect;
#region Constructor
protected EffectDX(Effect managedEffect)
{
if (managedEffect == null)
throw new ArgumentNullException("managedEffect");
this.managedEffect = managedEffect;
}
#endregion
#region GetByteCode
protected ShaderBytecode GetByteCode(Stream stream)
{
if (stream.CanSeek)
stream.Seek(0, SeekOrigin.Begin);
return ShaderBytecode.FromStream(stream);
}
#endregion
#region CompileVertexShader (TODO)
public static byte[] CompileVertexShader(string effectCode, string directory = "")
{
// TODO: not all entry points are named VS!
ShaderBytecode vertexShaderByteCode = ShaderBytecode.Compile(effectCode, "VS", "vs_4_0", ShaderFlags.None, EffectFlags.None, null, new IncludeHandler(directory), "unknown");
return vertexShaderByteCode.Data;
}
#endregion
#region CompilePixelShader (TODO)
public static byte[] CompilePixelShader(string effectCode, string directory = "")
{
// TODO: not all entry points are named PS!
ShaderBytecode pixelShaderByteCode = ShaderBytecode.Compile(effectCode, "PS", "ps_4_0", ShaderFlags.None, EffectFlags.None, null, new IncludeHandler(directory), "unknown");
return pixelShaderByteCode.Data;
}
#endregion
protected static byte[] CompileShader(string profile, string effectCode, string directory = "")
{
ShaderBytecode effectByteCode = ShaderBytecode.Compile(effectCode, profile, ShaderFlags.None, EffectFlags.None, null, new IncludeHandler(directory), "unknown");
return effectByteCode.Data;
}
}
}