public ShaderGeneratorResult GenerateSharedPixelShader(ShaderStage entryPoint, int methodIndex, int optionIndex) { if (!IsEntryPointSupported(entryPoint) || !IsPixelShaderShared(entryPoint)) { return(null); } Alpha_Test alphaTestOption = Alpha_Test.None; switch ((FoliageMethods)methodIndex) { case FoliageMethods.Alpha_Test: alphaTestOption = (Alpha_Test)optionIndex; break; default: return(null); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Alpha_Test>()); macros.Add(ShaderGeneratorBase.CreateMacro("calc_alpha_test_ps", alphaTestOption, "calc_alpha_test_", "_ps")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"glps_foliage.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GenerateSharedVertexShader(VertexType vertexType, ShaderStage entryPoint) { if (!IsVertexFormatSupported(vertexType) || !IsEntryPointSupported(entryPoint)) { return(null); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_VERTEX_SHADER_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <VertexType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.Add(ShaderGeneratorBase.CreateMacro("calc_vertex_transform", vertexType, "calc_vertex_transform_", "")); macros.Add(ShaderGeneratorBase.CreateMacro("transform_dominant_light", vertexType, "transform_dominant_light_", "")); macros.Add(ShaderGeneratorBase.CreateVertexMacro("input_vertex_format", vertexType)); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("vertextype", vertexType, "k_vertextype_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Cortana, "shadertype_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource(@"glvs_cortana.hlsl", macros, $"entry_{entryPoint.ToString().ToLower()}", "vs_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Test>()); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.ZOnly, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("test_arg", test, "k_test_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_zonly.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Albedo>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Render_Pass>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Specular>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Bump_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Tinting>()); // // Convert to shared enum // var sAlbedo = Enum.Parse(typeof(Shared.Albedo), albedo.ToString()); var sBlendMode = Enum.Parse(typeof(Shared.Blend_Mode), blend_mode.ToString()); // // The following code properly names the macros (like in rmdf) // // TODO fix //macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_blend_mode", blend_mode, "blend_mode_")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_ps", sAlbedo, "calc_albedo_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_render_pass", render_pass, "render_pass_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_specular", specular, "specular_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_bump_mapping", bump_mapping, "bump_mapping_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_tinting", tinting, "tinting_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Decal, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("albedo_arg", sAlbedo, "k_albedo_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_render_pass_arg", render_pass, "k_decal_render_pass_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_specular_arg", specular, "k_decal_specular_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_bump_mapping_arg", bump_mapping, "k_decal_bump_mapping_")); macros.Add(ShaderGeneratorBase.CreateMacro("decal_tinting_arg", tinting, "k_decal_tinting_")); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); macros.Add(ShaderGeneratorBase.CreateMacro("DECAL_IS_SIMPLE", DecalIsSimple ? 1 : 0)); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_decal.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Waveshape>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Watercolor>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Reflection>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Refraction>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Bankalpha>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Appearance>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Global_Shape>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Foam>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Reach_Compatibility>()); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Water, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_waveshape_ps", waveshape, "calc_waveshape_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_watercolor_ps", watercolor, "calc_watercolor_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_reflection_ps", reflection, "calc_reflection_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_refraction_ps", refraction, "calc_refraction_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_bankalpha_ps", bankalpha, "calc_bankalpha_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_foam_ps", foam, "calc_foam_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("waveshape_arg", waveshape, "k_waveshape_")); macros.Add(ShaderGeneratorBase.CreateMacro("watercolor_arg", watercolor, "k_watercolor_")); macros.Add(ShaderGeneratorBase.CreateMacro("reflection_arg", reflection, "k_reflection_")); macros.Add(ShaderGeneratorBase.CreateMacro("refraction_arg", refraction, "k_refraction_")); macros.Add(ShaderGeneratorBase.CreateMacro("bankalpha_arg", bankalpha, "k_bankalpha_")); macros.Add(ShaderGeneratorBase.CreateMacro("appearance_arg", appearance, "k_appearance_")); macros.Add(ShaderGeneratorBase.CreateMacro("global_shape_arg", global_shape, "k_global_shape_")); macros.Add(ShaderGeneratorBase.CreateMacro("foam_arg", foam, "k_foam_")); macros.Add(ShaderGeneratorBase.CreateMacro("reach_compatibility_arg", reach_compatibility, "k_reach_compatibility_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_water.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GenerateSharedVertexShader(VertexType vertexType, ShaderStage entryPoint) { if (!IsVertexFormatSupported(vertexType) || !IsEntryPointSupported(entryPoint)) { return(null); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <VertexType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Waveshape>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Watercolor>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Reflection>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Refraction>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Bankalpha>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Appearance>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Global_Shape>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Foam>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Reach_Compatibility>()); macros.Add(ShaderGeneratorBase.CreateMacro("calc_vertex_transform", vertexType, "calc_vertex_transform_", "")); macros.Add(ShaderGeneratorBase.CreateMacro("transform_unknown_vector", vertexType, "transform_unknown_vector_", "")); macros.Add(ShaderGeneratorBase.CreateVertexMacro("input_vertex_format", vertexType)); macros.Add(ShaderGeneratorBase.CreateMacro("transform_dominant_light", vertexType, "transform_dominant_light_", "")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("vertextype", vertexType, "k_vertextype_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Water, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); macros.Add(ShaderGeneratorBase.CreateMacro("waveshape_arg", waveshape, "k_waveshape_")); macros.Add(ShaderGeneratorBase.CreateMacro("watercolor_arg", watercolor, "k_watercolor_")); macros.Add(ShaderGeneratorBase.CreateMacro("reflection_arg", reflection, "k_reflection_")); macros.Add(ShaderGeneratorBase.CreateMacro("refraction_arg", refraction, "k_refraction_")); macros.Add(ShaderGeneratorBase.CreateMacro("bankalpha_arg", bankalpha, "k_bankalpha_")); macros.Add(ShaderGeneratorBase.CreateMacro("appearance_arg", appearance, "k_appearance_")); macros.Add(ShaderGeneratorBase.CreateMacro("global_shape_arg", global_shape, "k_global_shape_")); macros.Add(ShaderGeneratorBase.CreateMacro("foam_arg", foam, "k_foam_")); macros.Add(ShaderGeneratorBase.CreateMacro("reach_compatibility_arg", reach_compatibility, "k_reach_compatibility_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource(@"glvs_water.hlsl", macros, $"entry_{entryPoint.ToString().ToLower()}", "vs_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Albedo>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Black_Point>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Fog>()); // // Convert to shared enum // var sAlbedo = Enum.Parse(typeof(Shared.Albedo), albedo.ToString()); var sBlendMode = Enum.Parse(typeof(Shared.Blend_Mode), blend_mode.ToString()); var sBlackPoint = Enum.Parse(typeof(Shared.Black_Point), black_point.ToString()); var sFog = Enum.Parse(typeof(Shared.Fog), fog.ToString()); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_ps", sAlbedo, "calc_albedo_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); //macros.Add(ShaderGeneratorBase.CreateMacro("black_point", sBlackPoint, "black_point_")); //macros.Add(ShaderGeneratorBase.CreateMacro("fog", sFog, "fog_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Beam, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("albedo_arg", sAlbedo, "k_albedo_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); macros.Add(ShaderGeneratorBase.CreateMacro("black_point_arg", sBlackPoint, "k_black_point_")); macros.Add(ShaderGeneratorBase.CreateMacro("fog_arg", sFog, "k_fog_")); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_beam.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.Add(new D3D.SHADER_MACRO { Name = "_TERRAIN_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Blending>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Environment_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Material>()); // // Convert to shared enum // var sEnvironmentMapping = Enum.Parse(typeof(Shared.Environment_Mapping), environment_mapping.ToString()); // // The following code properly names the macros (like in rmdf) // Material material_3_translated = material_3 == Material_No_Detail_Bump.Off ? Material.Off : material_3 == Material_No_Detail_Bump.Diffuse_Only ? Material.Diffuse_Only : Material.Diffuse_Plus_Specular; macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", blending)); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type", sEnvironmentMapping, "envmap_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Terrain, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", blending, "k_blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type_arg", sEnvironmentMapping, "k_environment_mapping_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_0_arg", material_0, "k_material_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_1_arg", material_1, "k_material_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_2_arg", material_2, "k_material_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_3_arg", material_3_translated, "k_material_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_terrain.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public static ShaderGeneratorResult GenerateVertexShader(string name, string entry, bool chud = false) { string template = $"{(chud ? "chud" : "explicit")}\\{name}.hlsl"; List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.Add(new D3D.SHADER_MACRO { Name = "VERTEX_SHADER", Definition = "1" }); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource(template, macros, $"vs_{entry.ToLower()}", "vs_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Warp>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Base>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Overlay_A>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Overlay_B>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); // // Convert to shared enum // var sBlendMode = Enum.Parse(typeof(Shared.Blend_Mode), blend_mode.ToString()); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("calc_screen_warp", warp, "calc_screen_warp_")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_base", _base, "calc_base_")); macros.Add(ShaderGeneratorBase.CreateMacro("overlay_type_a", overlay_a, "overlay_")); macros.Add(ShaderGeneratorBase.CreateMacro("overlay_type_b", overlay_b, "overlay_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Screen, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); //macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_screen.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!IsEntryPointSupported(entryPoint)) { return(null); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_shader_black.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GenerateSharedVertexShader(VertexType vertexType, ShaderStage entryPoint) { if (!IsVertexFormatSupported(vertexType) || !IsEntryPointSupported(entryPoint)) { return(null); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.Add(ShaderGeneratorBase.CreateMacro("calc_vertex_transform", vertexType, "calc_vertex_transform_", "")); macros.Add(ShaderGeneratorBase.CreateMacro("transform_unknown_vector", vertexType, "transform_unknown_vector_", "")); macros.Add(ShaderGeneratorBase.CreateVertexMacro("input_vertex_format", vertexType)); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource(@"glvs_light_volume.hlsl", macros, $"entry_{entryPoint.ToString().ToLower()}", "vs_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Albedo>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Bump_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Alpha_Test>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Material_Model>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Environment_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Self_Illumination>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); // // Convert to shared enum // var sAlphaTest = Enum.Parse(typeof(Shared.Alpha_Test), alpha_test.ToString()); var sMaterialModel = Enum.Parse(typeof(Shared.Material_Model), material_model.ToString()); var sEnvironmentMapping = Enum.Parse(typeof(Shared.Environment_Mapping), environment_mapping.ToString()); var sBlendMode = Shared.Blend_Mode.Opaque; // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_ps", albedo, "calc_albedo_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_bumpmap_ps", bump_mapping, "calc_bumpmap_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_bumpmap_vs", bump_mapping, "calc_bumpmap_", "_vs")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_alpha_test_ps", sAlphaTest, "calc_alpha_test_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_material_analytic_specular", sMaterialModel, "calc_material_analytic_specular_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_material_area_specular", sMaterialModel, "calc_material_area_specular_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_lighting_ps", sMaterialModel, "calc_lighting_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_dynamic_lighting_ps", sMaterialModel, "calc_dynamic_lighting_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type", sMaterialModel, "material_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type", sEnvironmentMapping, "envmap_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Cortana, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("albedo_arg", albedo, "k_albedo_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_arg", sMaterialModel, "k_material_model_")); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type_arg", sEnvironmentMapping, "k_environment_mapping_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_cortana.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Albedo>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Bump_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Alpha_Test>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Specular_Mask>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Material_Model>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Environment_Mapping>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Self_Illumination>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Parallax>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Misc>()); // // Convert to shared enum // var sAlbedo = Enum.Parse(typeof(Shared.Albedo), albedo.ToString()); var sAlphaTest = Enum.Parse(typeof(Shared.Alpha_Test), alpha_test.ToString()); var sMaterialModel = Enum.Parse(typeof(Shared.Material_Model), material_model.ToString()); var sEnvironmentMapping = Enum.Parse(typeof(Shared.Environment_Mapping), environment_mapping.ToString()); var sSelfIllumination = Enum.Parse(typeof(Shared.Self_Illumination), self_illumination.ToString()); var sBlendMode = Enum.Parse(typeof(Shared.Blend_Mode), blend_mode.ToString()); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_ps", sAlbedo, "calc_albedo_", "_ps")); if (albedo == Albedo.Constant_Color) { macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_vs", sAlbedo, "calc_albedo_", "_vs")); } macros.Add(ShaderGeneratorBase.CreateMacro("calc_alpha_test_ps", sAlphaTest, "calc_alpha_test_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_bumpmap_ps", bump_mapping, "calc_bumpmap_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_bumpmap_vs", bump_mapping, "calc_bumpmap_", "_vs")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_specular_mask_ps", specular_mask, "calc_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_parallax_ps", parallax, "calc_parallax_", "_ps")); switch (parallax) { case Parallax.Simple_Detail: macros.Add(ShaderGeneratorBase.CreateMacro("calc_parallax_vs", Parallax.Simple, "calc_parallax_", "_vs")); break; default: macros.Add(ShaderGeneratorBase.CreateMacro("calc_parallax_vs", parallax, "calc_parallax_", "_vs")); break; } macros.Add(ShaderGeneratorBase.CreateMacro("calc_self_illumination_ps", sSelfIllumination, "calc_self_illumination_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_material_analytic_specular", sMaterialModel, "calc_material_analytic_specular_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_material_area_specular", sMaterialModel, "calc_material_area_specular_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_lighting_ps", sMaterialModel, "calc_lighting_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("calc_dynamic_lighting_ps", sMaterialModel, "calc_dynamic_lighting_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type", sMaterialModel, "material_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type", sEnvironmentMapping, "envmap_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("albedo_arg", sAlbedo, "k_albedo_")); macros.Add(ShaderGeneratorBase.CreateMacro("material_type_arg", sMaterialModel, "k_material_model_")); macros.Add(ShaderGeneratorBase.CreateMacro("envmap_type_arg", sEnvironmentMapping, "k_environment_mapping_")); macros.Add(ShaderGeneratorBase.CreateMacro("self_illumination_arg", sSelfIllumination, "k_self_illumination_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); macros.Add(ShaderGeneratorBase.CreateMacro("misc_arg", misc, "k_misc_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Custom, "shadertype_")); // prevent crash macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Distortion>()); macros.Add(ShaderGeneratorBase.CreateMacro("distortion_arg", "Off", "k_distortion_")); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Soft_Fade>()); macros.Add(ShaderGeneratorBase.CreateMacro("soft_fade_arg", Shared.Soft_Fade.Off, "k_soft_fade_")); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_custom.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }
public ShaderGeneratorResult GeneratePixelShader(ShaderStage entryPoint) { if (!TemplateGenerationValid) { throw new System.Exception("Generator initialized with shared shader constructor. Use template constructor."); } List <D3D.SHADER_MACRO> macros = new List <D3D.SHADER_MACRO>(); macros.Add(new D3D.SHADER_MACRO { Name = "_DEFINITION_HELPER_HLSLI", Definition = "1" }); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <ShaderStage>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.ShaderType>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Albedo>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Blend_Mode>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Specialized_Rendering>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Lighting>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Render_Targets>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Depth_Fade>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Black_Point>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Fog>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Frame_Blend>()); macros.AddRange(ShaderGeneratorBase.CreateMethodEnumDefinitions <Shared.Self_Illumination>()); // // Convert to shared enum // var sAlbedo = Enum.Parse(typeof(Shared.Albedo), albedo.ToString()); var sBlendMode = Enum.Parse(typeof(Shared.Blend_Mode), blend_mode.ToString()); var sSelfIllumination = Enum.Parse(typeof(Shared.Self_Illumination), self_illumination.ToString()); var sDepthFade = Enum.Parse(typeof(Shared.Depth_Fade), depth_fade.ToString()); var sBlackPoint = Enum.Parse(typeof(Shared.Black_Point), black_point.ToString()); var sFog = Enum.Parse(typeof(Shared.Fog), fog.ToString()); // // The following code properly names the macros (like in rmdf) // macros.Add(ShaderGeneratorBase.CreateMacro("calc_albedo_ps", sAlbedo, "calc_albedo_", "_ps")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type", sBlendMode, "blend_type_")); macros.Add(ShaderGeneratorBase.CreateMacro("particle_specialized_rendering", specialized_rendering, "specialized_rendering_")); macros.Add(ShaderGeneratorBase.CreateMacro("particle_lighting", lighting, "lighting_")); macros.Add(ShaderGeneratorBase.CreateMacro("particle_render_targets", render_targets, "render_targets_")); //macros.Add(ShaderGeneratorBase.CreateMacro("calc_depth_fade", sDepthFade, "calc_depth_fade_")); //macros.Add(ShaderGeneratorBase.CreateMacro("calc_black_point", sBlackPoint, "calc_black_point_")); //macros.Add(ShaderGeneratorBase.CreateMacro("calc_fog", sFog, "calc_fog_")); //macros.Add(ShaderGeneratorBase.CreateMacro("calc_frame_blend", frame_blend, "calc_frame_blend_")); //macros.Add(ShaderGeneratorBase.CreateMacro("calc_self_illumination_ps", sSelfIllumination, "calc_self_illumination_")); macros.Add(ShaderGeneratorBase.CreateMacro("shaderstage", entryPoint, "k_shaderstage_")); macros.Add(ShaderGeneratorBase.CreateMacro("shadertype", Shared.ShaderType.Particle, "k_shadertype_")); macros.Add(ShaderGeneratorBase.CreateMacro("albedo_arg", sAlbedo, "k_albedo_")); macros.Add(ShaderGeneratorBase.CreateMacro("blend_type_arg", sBlendMode, "k_blend_mode_")); macros.Add(ShaderGeneratorBase.CreateMacro("specialized_rendering_arg", specialized_rendering, "k_specialized_rendering_")); macros.Add(ShaderGeneratorBase.CreateMacro("lighting_arg", lighting, "k_lighting_")); macros.Add(ShaderGeneratorBase.CreateMacro("render_targets_arg", render_targets, "k_render_targets_")); macros.Add(ShaderGeneratorBase.CreateMacro("depth_fade_arg", sDepthFade, "k_depth_fade_")); macros.Add(ShaderGeneratorBase.CreateMacro("black_point_arg", sBlackPoint, "k_black_point_")); macros.Add(ShaderGeneratorBase.CreateMacro("fog_arg", sFog, "k_fog_")); macros.Add(ShaderGeneratorBase.CreateMacro("frame_blend_arg", frame_blend, "k_frame_blend_")); macros.Add(ShaderGeneratorBase.CreateMacro("self_illumination_arg", sSelfIllumination, "k_self_illumination_")); macros.Add(ShaderGeneratorBase.CreateMacro("APPLY_HLSL_FIXES", ApplyFixes ? 1 : 0)); byte[] shaderBytecode = ShaderGeneratorBase.GenerateSource($"pixl_particle.hlsl", macros, "entry_" + entryPoint.ToString().ToLower(), "ps_3_0"); return(new ShaderGeneratorResult(shaderBytecode)); }