public ShaderModel(Shader shader, byte[] code, ShaderTypes shaderType) #endif : base(shader) { try { #if WINRT || WP8 this.shader = shader; #endif var video = shader.FindParentOrSelfWithException <Video>(); com = new ShaderModelCom(); #if WIN32 string shaderLvl = ""; switch (shaderVersion) { case ShaderVersions.HLSL_2_0: shaderLvl = "_4_0_level_9_1"; break; case ShaderVersions.HLSL_2_a: shaderLvl = "_4_0_level_9_2"; break; case ShaderVersions.HLSL_3_0: shaderLvl = "_4_0_level_9_3"; break; case ShaderVersions.HLSL_4_0: shaderLvl = "_4_0"; break; case ShaderVersions.HLSL_4_1: shaderLvl = "_4_1"; break; case ShaderVersions.HLSL_5_0: shaderLvl = "_5_0"; break; default: Debug.ThrowError("ShaderModel", "Unsuported ShaderVersion: " + shaderVersion); break; } string errorText; var error = com.Init(video.com, code, code.Length, shaderType.ToString().ToLower() + shaderLvl, out errorText); #else var error = com.Init ( video.com, code, code.Length, shaderType == ShaderTypes.VS ? shader.vsVariableBufferSize : shader.psVariableBufferSize, shaderType == ShaderTypes.VS ? shader.vsResourceCount : shader.psResourceCount ); #endif switch (error) { #if WIN32 case ShaderModelErrors.CompileCode: Debug.ThrowError("ShaderModel", "Shader compiler error: " + errorText); break; #endif case ShaderModelErrors.VariableBuffer: Debug.ThrowError("ShaderModel", "Failed to create VariableBuffer"); break; case ShaderModelErrors.Reflect: Debug.ThrowError("ShaderModel", "Failed to Reflect the shader"); break; } } catch (Exception e) { Dispose(); throw e; } }
public ShaderModel(Shader shader, byte[] code, ShaderTypes shaderType) #endif : base(shader) { try { #if WINRT || WP8 this.shader = shader; #endif var video = shader.FindParentOrSelfWithException<Video>(); com = new ShaderModelCom(); #if WIN32 string shaderLvl = ""; switch (shaderVersion) { case ShaderVersions.HLSL_2_0: shaderLvl = "_4_0_level_9_1"; break; case ShaderVersions.HLSL_2_a: shaderLvl = "_4_0_level_9_2"; break; case ShaderVersions.HLSL_3_0: shaderLvl = "_4_0_level_9_3"; break; case ShaderVersions.HLSL_4_0: shaderLvl = "_4_0"; break; case ShaderVersions.HLSL_4_1: shaderLvl = "_4_1"; break; case ShaderVersions.HLSL_5_0: shaderLvl = "_5_0"; break; default: Debug.ThrowError("ShaderModel", "Unsuported ShaderVersion: " + shaderVersion); break; } string errorText; var error = com.Init(video.com, code, code.Length, shaderType.ToString().ToLower() + shaderLvl, out errorText); #else var error = com.Init ( video.com, code, code.Length, shaderType == ShaderTypes.VS ? shader.vsVariableBufferSize : shader.psVariableBufferSize, shaderType == ShaderTypes.VS ? shader.vsResourceCount : shader.psResourceCount ); #endif switch (error) { #if WIN32 case ShaderModelErrors.CompileCode: Debug.ThrowError("ShaderModel", "Shader compiler error: " + errorText); break; #endif case ShaderModelErrors.VariableBuffer: Debug.ThrowError("ShaderModel", "Failed to create VariableBuffer"); break; case ShaderModelErrors.Reflect: Debug.ThrowError("ShaderModel", "Failed to Reflect the shader"); break; } } catch (Exception e) { Dispose(); throw e; } }
public ShaderModel(IDisposableResource parent, string code, ShaderVersions shaderVersion, ShaderTypes shaderType) : base(parent) { try { var video = parent.FindParentOrSelfWithException <Video>(); string shaderLvl = ""; switch (shaderVersion) { case ShaderVersions.HLSL_2_0: shaderLvl = "_2_0"; break; case ShaderVersions.HLSL_2_a: shaderLvl = "_2_a"; break; case ShaderVersions.HLSL_3_0: shaderLvl = "_3_0"; break; default: Debug.ThrowError("ShaderModel", "Unsuported ShaderVersion: " + shaderVersion); break; } string shaderVersionType = shaderType.ToString().ToLower() + shaderLvl; com = new ShaderModelCom(); var codePtr = Marshal.StringToHGlobalAnsi(code); var shaderVersionTypePtr = Marshal.StringToHGlobalAnsi(shaderVersionType); string errorText; var error = com.Init(video.com, codePtr, code.Length, shaderVersionTypePtr, out errorText); if (codePtr != IntPtr.Zero) { Marshal.FreeHGlobal(codePtr); } if (shaderVersionTypePtr != IntPtr.Zero) { Marshal.FreeHGlobal(shaderVersionTypePtr); } switch (error) { case ShaderModelErrors.Compile: Debug.ThrowError("ShaderModel", string.Format("Failed to compile {0} shader: Errors: {1}", shaderType == ShaderTypes.VS ? "vs" : "ps", errorText)); break; } } catch (Exception e) { Dispose(); throw e; } }