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