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; } } }