// 在p1处开始画, p2p3是水平线, yStep为-1表示往下 void DrawTriangleInner(MyShaderBase obj, ShaderParameters shaderParams, ShaderSemantic p1, ShaderSemantic p2, ShaderSemantic p3, int yStep) { float x1 = p1.SV_POSITION.x; int y1 = (int)p1.SV_POSITION.y; float x2 = p2.SV_POSITION.x; int y2 = (int)p2.SV_POSITION.y; float x3 = p3.SV_POSITION.x; float y3 = p3.SV_POSITION.y; float m1 = (y1 - y2) / (x1 - x2); // 直线p1p2: y - y1 = m1*(x - x1), m1 = (y1-y2)/(x1-x2) float m2 = (y1 - y3) / (x1 - x3); // 直线p1p3: y - y1 = m2*(x - x1), m2 = (y1-y3)/(x1-x3) var type = p1.GetType(); for (int y = y1; y != y2;) { // scan line float xl = (y - y1) / m1 + x1; float leftWeight = (xl - x1) / (x2 - x1); ShaderSemantic left = ShaderSemantic.CreateInstance(type); left.Lerp(p1, p2, leftWeight); float xr = (y - y1) / m2 + x1; float rightWeight = (xr - x1) / (x3 - x1); ShaderSemantic right = ShaderSemantic.CreateInstance(type); right.Lerp(p1, p3, Mathf.Abs(rightWeight)); DrawLine(obj, shaderParams, left, right); y += yStep; } }
public ShaderParameters GetPixelShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); switch (albedo) { case Albedo.Diffuse_Only: result.AddSamplerWithoutXFormParameter("base_map"); break; case Albedo.Palettized: result.AddSamplerWithoutXFormParameter("base_map"); result.AddSamplerWithoutXFormParameter("palette"); break; case Albedo.Palettized_Plus_Alpha: result.AddSamplerWithoutXFormParameter("base_map"); result.AddSamplerWithoutXFormParameter("palette"); result.AddSamplerWithoutXFormParameter("alpha_map"); break; } return(result); }
/// <summary> /// Retrives shader parameters. /// </summary> /// <param name="Shader"></param> /// <param name="pname"></param> /// <returns></returns> public static int GetShaderiv(uint Shader, ShaderParameters pname) { int tmp = 0; Delegates.glGetShaderiv(Shader, pname, ref tmp); return(tmp); }
/* * public void Reload(Stream fontStream, int faceIndex) { * try { * SharpFont.Face currentFace = Face; * Load(fontStream, faceIndex); * * if (currentFace != null) { * currentFace.Dispose(); * } * } catch(System.Exception e) { * throw e; * } * } */ public Font Clone(float?size = null) { string[] filenames; if (Filenames != null) { filenames = new string[Filenames.Length]; Filenames.CopyTo(filenames, 0); } else { filenames = null; } RenderMap?.AddReferenceCount(); Font font = new Font() { Name = Name, Filenames = filenames, RenderMap = RenderMap, ShaderParameters = ShaderParameters?.Clone() }; if (size.HasValue) { font.Size = size.Value; } else { font.Size = _size; } return(font); }
public ShaderParameters GetVertexShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); result.AddPrefixedFloat4VertexParameter("albedo", "category_"); result.AddPrefixedFloat4VertexParameter("blend_mode", "category_"); result.AddPrefixedFloat4VertexParameter("specialized_rendering", "category_"); result.AddPrefixedFloat4VertexParameter("lighting", "category_"); result.AddPrefixedFloat4VertexParameter("fog", "category_"); switch (frame_blend) { case Frame_Blend.On: result.AddFloatVertexParameter("starting_uv_scale"); result.AddFloatVertexParameter("ending_uv_scale"); break; } result.AddPrefixedFloat4VertexParameter("frame_blend", "category_"); switch (self_illumination) { case Self_Illumination.Constant_Color: result.AddFloat4VertexParameter("self_illum_color"); break; } result.AddPrefixedFloat4VertexParameter("self_illumination", "category_"); return(result); }
public ShaderParameters GetVertexShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); //result.AddPrefixedFloat4VertexParameter("waveshape", "category_"); //result.AddPrefixedFloat4VertexParameter("global_shape", "category_"); //result.AddPrefixedFloat4VertexParameter("reach_compatibility", "category_"); result.AddCategoryVertexParameter("waveshape"); result.AddCategoryVertexParameter("global_shape"); result.AddCategoryVertexParameter("reach_compatibility"); switch (waveshape) { case Waveshape.Default: result.AddFloatVertexParameter("displacement_range_x"); result.AddFloatVertexParameter("displacement_range_y"); result.AddFloatVertexParameter("displacement_range_z"); result.AddSamplerVertexParameter("wave_displacement_array"); result.AddFloatVertexParameter("wave_height"); result.AddFloatVertexParameter("time_warp"); result.AddSamplerVertexParameter("wave_slope_array"); result.AddFloatVertexParameter("wave_height_aux"); result.AddFloatVertexParameter("time_warp_aux"); result.AddFloatVertexParameter("choppiness_forward"); result.AddFloatVertexParameter("choppiness_backward"); result.AddFloatVertexParameter("choppiness_side"); result.AddFloatVertexParameter("wave_visual_damping_distance"); break; } switch (global_shape) { case Global_Shape.Paint: result.AddSamplerVertexParameter("global_shape_texture"); //v break; case Global_Shape.Depth: result.AddFloatVertexParameter("globalshape_infuence_depth"); //v break; } switch (foam) { case Foam.Paint: result.AddSamplerVertexParameter("global_shape_texture"); //v break; case Foam.Both: result.AddSamplerVertexParameter("global_shape_texture"); //v break; } return(result); }
public ShaderParameters GetGlobalParameters() { var result = new ShaderParameters(); result.AddSamplerWithoutXFormParameter("depth_buffer", RenderMethodExtern.texture_global_target_z); result.AddFloat4Parameter("screen_constants", RenderMethodExtern.screen_constants); return(result); }
public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName) { ShaderParameters result = new ShaderParameters(); rmopName = ""; optionName = ""; return(result); }
public override void updateAll() { ShaderParameters.setFloat(ShaderParameters.PARAM_TIME, time); if (WhiskeyEditor.MonoHelp.WhiskeyControl.InputManager != null) { } time += .001f; base.updateAll(); }
public ShaderParameters GetPixelShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); return(result); }
public ShaderParameters GetGlobalParameters() { var result = new ShaderParameters(); result.AddFloat4Parameter("water_memory_export_addr", RenderMethodExtern.water_memory_export_address); result.AddSamplerWithoutXFormParameter("scene_ldr_texture", RenderMethodExtern.scene_ldr_texture); result.AddSamplerWithoutXFormParameter("scene_hdr_texture", RenderMethodExtern.scene_hdr_texture); result.AddSamplerWithoutXFormParameter("depth_buffer", RenderMethodExtern.texture_global_target_z); result.AddSamplerWithoutXFormParameter("lightprobe_texture_array", RenderMethodExtern.texture_lightprobe_texture); return(result); }
void DrawLine(MyShaderBase obj, ShaderParameters shaderParams, ShaderSemantic p1, ShaderSemantic p2) { int x1 = (int)p1.SV_POSITION.x; int y1 = (int)p1.SV_POSITION.y; int x2 = (int)p2.SV_POSITION.x; int y2 = (int)p2.SV_POSITION.y; // 令x1 < x2 && 0 < abs(dy) < dx bool isSteep = Mathf.Abs(y2 - y1) > Mathf.Abs(x2 - x1); if (isSteep) { MyUtility.Swap(ref x1, ref y1); MyUtility.Swap(ref x2, ref y2); } if (x1 > x2) { MyUtility.Swap(ref x1, ref x2); MyUtility.Swap(ref y1, ref y2); } int dy = System.Math.Abs(y2 - y1); int dx = x2 - x1; if (dy == 0 && dx == 0) { return; } int slope_err = dy - dx; int ystep = (y1 < y2) ? 1 : -1; var type = p1.GetType(); for (int x = x1, y = y1; x <= x2; x++) { int _x = isSteep ? y : x; int _y = isSteep ? x : y; if (_x > 0 && _x < tex.width && _y > 0 && _y < tex.height) { ShaderSemantic v2f = ShaderSemantic.CreateInstance(type); float w = ((float)x - x1) / (x1 - x2); v2f.Lerp(p1, p2, Mathf.Abs(w)); var color = obj.PixelShader(v2f, shaderParams); renderBuffer.Update(obj, _x, _y, v2f, color); } slope_err += dy; if (slope_err >= 0) { slope_err -= dx; y += ystep; } } }
public void SetVariable(string variableName, ShaderParameters parameter) { EffectHandle effectHandle = EffectHandle.FromString(variableName); if (variables.ContainsKey(effectHandle)) { variables[effectHandle] = parameter; } else { variables.Add(effectHandle, parameter); } }
void DrawCall(MyShaderBase obj, Mesh mesh) { var vertices = mesh.vertices; var triangles = mesh.triangles; float screenWidth = MyCamera.pixelWidth; float screenHeight = MyCamera.pixelHeight; var far = MyCamera.farClipPlane; var near = MyCamera.nearClipPlane; float w = screenWidth / 2; float h = screenHeight / 2; var shaderParams = new ShaderParameters(obj.transform, MyCamera); ShaderSemantic[] appFullData = new ShaderSemantic[vertices.Length]; for (int i = 0; i < vertices.Length; i++) { var appdata = (ShaderSemantic)System.Activator.CreateInstance(obj.CastType); var p = vertices[i]; appdata.POSITION = new Vector4(p.x, p.y, p.z, 1); appdata.NORMAL = mesh.normals[i]; appdata.TANGENT = mesh.tangents[i]; appdata.TEXCOORD0 = mesh.uv[i]; appFullData[i] = appdata; } // vertex shader for (int i = 0; i < vertices.Length; i++) { var appdata = appFullData[i]; // vertex shader: local space -> world space -> view space -> clip space ShaderSemantic v2f = obj.VertexShader(appdata, shaderParams); var p = v2f.SV_POSITION; // homogeneous divide: clip space -> NDC[-1, 1] p = new Vector4(p.x / p.w, p.y / p.w, p.z / p.w, 1); v2f.POSITION = p; // NDC -> screen space (window space) https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-semantics?redirectedfrom=MSDN#direct3d-9-vpos-and-direct3d-10-sv_position v2f.SV_POSITION = new Vector3(p.x * w + w, p.y * h + h, (far - near) * p.z / 2 + (far + near) / 2); appFullData[i] = v2f; } // pixel shader if (shadingMode == ShadingMode.Wireframe) { Wireframe(obj, shaderParams, mesh, appFullData); // Wireframe } else { Shaded(obj, shaderParams, mesh, appFullData); // Shaded } }
public ShaderParameters GetVertexShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); result.AddFloatVertexParameter("u_tiles"); result.AddFloatVertexParameter("v_tiles"); return(result); }
public ShaderParameters GetVertexShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); result.AddPrefixedFloat4VertexParameter("blend_mode", "category_"); result.AddPrefixedFloat4VertexParameter("fog", "category_"); return(result); }
void DrawTriangle(MyShaderBase obj, ShaderParameters shaderParams, ShaderSemantic p1, ShaderSemantic p2, ShaderSemantic p3) { // 令 y1 ≥ y2 ≥ y3 if (p2.SV_POSITION.y <= p3.SV_POSITION.y) { MyUtility.Swap(ref p2, ref p3); } if (p1.SV_POSITION.y <= p2.SV_POSITION.y) { MyUtility.Swap(ref p2, ref p1); } if (p2.SV_POSITION.y < p3.SV_POSITION.y) { MyUtility.Swap(ref p2, ref p3); } float y1 = p1.SV_POSITION.y; // A.y float y3 = p3.SV_POSITION.y; // C.y /* 将三角形在B点水平x轴切开上下两部分分开画: * BM为水平直线, M在AC线上 * 直线AC: y - y1 = m * (x - x1), 其中m = (y1-y3) / (x1-x3) * 将xy互换: x - x1 = m * (y - y1), 其中m = (x1-x3) / (y1-y3) * 已知: B.y == M.y(M_y), 求M.x 即(M_x) * 得: x = m * (y - y1) + x1 */ float M_y = p2.SV_POSITION.y; ShaderSemantic M = ShaderSemantic.CreateInstance(p1.GetType()); float w = (M_y - y1) / (y3 - y1); M.Lerp(p1, p3, Mathf.Abs(w)); // B和M的顺序 由x坐标确定 ShaderSemantic Left = p2.SV_POSITION.x < M.SV_POSITION.x ? p2 : M; ShaderSemantic Right = p2.SV_POSITION.x < M.SV_POSITION.x ? M : p2; DrawTriangleInner(obj, shaderParams, p1, Left, Right, -1); // draw 🔺ABM DrawTriangleInner(obj, shaderParams, p3, Left, Right, +1); // draw 🔺CBM DrawLine(obj, shaderParams, Left, Right); // draw line BM // debug /* * DrawPoint((int)p1.SV_POSITION.x, (int)p1.SV_POSITION.y, p1.COLOR); * DrawPoint((int)p3.SV_POSITION.x, (int)p3.SV_POSITION.y, p3.COLOR); * DrawPoint((int)M.SV_POSITION.x, (int)M.SV_POSITION.y, M.COLOR); * DrawPoint((int)p2.SV_POSITION.x, (int)p2.SV_POSITION.y, p2.COLOR); */ }
public ShaderParameters GetGlobalParameters() { var result = new ShaderParameters(); result.AddSamplerWithoutXFormParameter("albedo_texture", RenderMethodExtern.texture_global_target_texaccum); result.AddSamplerWithoutXFormParameter("normal_texture", RenderMethodExtern.texture_global_target_normal); result.AddSamplerWithoutXFormParameter("lightprobe_texture_array", RenderMethodExtern.texture_lightprobe_texture); result.AddSamplerWithoutXFormParameter("shadow_depth_map_1", RenderMethodExtern.texture_global_target_shadow_buffer1); result.AddSamplerWithoutXFormParameter("dynamic_light_gel_texture", RenderMethodExtern.texture_dynamic_light_gel_0); result.AddFloat4Parameter("debug_tint", RenderMethodExtern.debug_tint); result.AddSamplerWithoutXFormParameter("active_camo_distortion_texture", RenderMethodExtern.active_camo_distortion_texture); result.AddSamplerWithoutXFormParameter("scene_ldr_texture", RenderMethodExtern.scene_ldr_texture); result.AddSamplerWithoutXFormParameter("scene_hdr_texture", RenderMethodExtern.scene_hdr_texture); result.AddSamplerWithoutXFormParameter("scene_hdr_texture", RenderMethodExtern.texture_dominant_light_intensity_map); return(result); }
public ShaderParameters GetVertexShaderParameters() { var result = new ShaderParameters(); switch (transparency) { case Transparency.Default: result.AddFloatVertexParameter("noise_amount"); result.AddSamplerVertexParameter("fade_noise_map"); result.AddFloatVertexParameter("fade_offset"); result.AddFloat4VertexParameter("screen_constants", RenderMethodExtern.screen_constants); break; } return(result); }
void Wireframe(MyShaderBase obj, ShaderParameters shaderParams, Mesh mesh, ShaderSemantic[] appFullData) { var triangles = mesh.triangles; ShaderSemantic last = null; for (int i = 0; i < triangles.Length; i++) { var v2f = appFullData[triangles[i]]; v2f.COLOR = Color.white; if (i > 0 && i % 3 != 0) { DrawLine(obj, shaderParams, last, v2f); } last = v2f; } }
public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName) { ShaderParameters result = new ShaderParameters(); rmopName = null; optionName = null; if (methodName == "albedo") { optionName = ((Albedo)option).ToString(); switch ((Albedo)option) { case Albedo.Diffuse_Only: result.AddSamplerWithoutXFormParameter("base_map"); rmopName = @"shaders\contrail_options\albedo_diffuse_only"; break; case Albedo.Palettized: result.AddSamplerWithoutXFormParameter("base_map"); result.AddSamplerWithoutXFormParameter("palette"); rmopName = @"shaders\contrail_options\albedo_palettized"; break; case Albedo.Palettized_Plus_Alpha: result.AddSamplerWithoutXFormParameter("base_map"); result.AddSamplerWithoutXFormParameter("palette"); result.AddSamplerWithoutXFormParameter("alpha_map"); rmopName = @"shaders\contrail_options\albedo_palettized_plus_alpha"; break; } } if (methodName == "blend_mode") { optionName = ((Blend_Mode)option).ToString(); } if (methodName == "black_point") { optionName = ((Black_Point)option).ToString(); } if (methodName == "fog") { optionName = ((Fog)option).ToString(); } return(result); }
public ShaderParameters GetVertexShaderParameters() { var result = new ShaderParameters(); List <int> optionIndices = new List <int> { (int)albedo, (int)alpha_test, (int)material_model }; for (int i = 0; i < Enum.GetValues(typeof(FoliageMethods)).Length; i++) { string methodName = ((FoliageMethods)i).ToString().ToLower(); var parameters = GetParametersInOption(methodName, optionIndices[i], out _, out _).Parameters; parameters = parameters.Where(x => x.Flags.HasFlag(ShaderParameterFlags.IsVertexShader)).ToList(); result.Parameters.AddRange(parameters); } return(result); }
public EditorLevel(string name) { init(); Camera = new Camera(); BackgroundColor = Color.Orange; AmbientLight = Color.White; ShaderParameters = new ShaderParameters(); PreviewLighting = true; PreviewShadowing = true; LightingEnabled = true; ShadowingEnabled = true; BloomSettings = new BloomSettings(BloomSettings.PresetSettings[5]); LightBloomSettings = new BloomSettings(BloomSettings.PresetSettings[5]); LevelName = name; Layers = new List <CoreLayer>(); Layers.Add(defaultLayer); //Descriptors = new List<InstanceDescriptor>(); InstanceManager.Instance.addLevel(this); }
public ShaderParameters GetPixelShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); switch (albedo) { case Albedo.Diffuse_Only: result.AddSamplerWithoutXFormParameter("base_map"); break; case Albedo.Circular: result.AddFloatParameter("center_offset"); result.AddFloatParameter("falloff"); break; } return(result); }
public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName) { ShaderParameters result = new ShaderParameters(); rmopName = null; optionName = null; if (methodName == "test") { optionName = ((Test)option).ToString(); switch ((Test)option) { case Test.Default: result.AddSamplerParameter("base_map"); result.AddSamplerParameter("detail_map"); result.AddFloat4Parameter("albedo_color"); rmopName = @"shaders\shader_options\albedo_default"; break; } } return(result); }
void Shaded(MyShaderBase obj, ShaderParameters shaderParams, Mesh mesh, ShaderSemantic[] appFullData) { var triangles = mesh.triangles; for (int i = 0; i < triangles.Length; i += 3) { ShaderSemantic p1 = appFullData[triangles[i]]; ShaderSemantic p2 = appFullData[triangles[i + 1]]; ShaderSemantic p3 = appFullData[triangles[i + 2]]; //outline debug //DrawLine(obj, shaderParams, p1, p2); //DrawLine(obj, shaderParams, p2, p3); //DrawLine(obj, shaderParams, p3, p1); // debug color p1.COLOR = Color.red; p2.COLOR = Color.green; p3.COLOR = Color.blue; DrawTriangle(obj, shaderParams, p1, p2, p3); //break; // debug } }
public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName) { ShaderParameters result = new ShaderParameters(); rmopName = null; optionName = null; if (methodName == "albedo") { optionName = ((Albedo)option).ToString(); switch ((Albedo)option) { case Albedo.Diffuse_Only: result.AddSamplerWithoutXFormParameter("base_map"); rmopName = @"shaders\light_volume_options\albedo_diffuse_only"; break; case Albedo.Circular: result.AddFloatParameter("center_offset"); result.AddFloatParameter("falloff"); rmopName = @"shaders\light_volume_options\albedo_circular"; break; } } if (methodName == "blend_mode") { optionName = ((Blend_Mode)option).ToString(); } if (methodName == "fog") { optionName = ((Fog)option).ToString(); } return(result); }
public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName) { ShaderParameters result = new ShaderParameters(); rmopName = null; optionName = null; if (methodName == "albedo") { optionName = ((Albedo)option).ToString(); switch ((Albedo)option) { case Albedo.Default: result.AddSamplerParameter("base_map"); result.AddSamplerParameter("detail_map"); result.AddFloat4ColorParameter("albedo_color"); result.AddFloat4ColorParameter("detail_color"); result.AddFloatParameter("layer_depth"); result.AddFloatParameter("layer_contrast"); result.AddIntegerParameter("layer_count"); result.AddFloatParameter("texcoord_aspect_ratio"); result.AddFloatParameter("depth_darken"); rmopName = @"shaders\shader_options\cortana_albedo"; break; } } if (methodName == "bump_mapping") { optionName = ((Bump_Mapping)option).ToString(); switch ((Bump_Mapping)option) { case Bump_Mapping.Standard: result.AddSamplerParameter("bump_map"); rmopName = @"shaders\shader_options\bump_default"; break; } } if (methodName == "alpha_test") { optionName = ((Alpha_Test)option).ToString(); switch ((Alpha_Test)option) { case Alpha_Test.None: rmopName = @"shaders\shader_options\alpha_test_off"; break; case Alpha_Test.Simple: result.AddSamplerParameter("alpha_test_map"); rmopName = @"shaders\shader_options\alpha_test_on"; break; } } if (methodName == "material_model") { optionName = ((Material_Model)option).ToString(); switch ((Material_Model)option) { case Material_Model.Cook_Torrance: result.AddFloatParameter("diffuse_coefficient"); result.AddFloatParameter("specular_coefficient"); result.AddFloat3ColorParameter("specular_tint"); result.AddFloat3ColorParameter("fresnel_color"); result.AddFloatParameter("use_fresnel_color_environment"); result.AddFloat3ColorParameter("fresnel_color_environment"); result.AddFloatParameter("fresnel_power"); result.AddFloatParameter("roughness"); result.AddFloatParameter("area_specular_contribution"); result.AddFloatParameter("analytical_specular_contribution"); result.AddFloatParameter("environment_map_specular_contribution"); result.AddBooleanParameter("order3_area_specular"); result.AddBooleanParameter("use_material_texture"); result.AddSamplerParameter("material_texture"); result.AddBooleanParameter("no_dynamic_lights"); result.AddSamplerWithoutXFormParameter("g_sampler_cc0236", RenderMethodExtern.texture_cook_torrance_cc0236); result.AddSamplerWithoutXFormParameter("g_sampler_dd0236", RenderMethodExtern.texture_cook_torrance_dd0236); result.AddSamplerWithoutXFormParameter("g_sampler_c78d78", RenderMethodExtern.texture_cook_torrance_c78d78); result.AddFloatParameter("albedo_blend_with_specular_tint"); result.AddFloatParameter("albedo_blend"); result.AddFloatParameter("analytical_anti_shadow_control"); result.AddFloatParameter("rim_fresnel_coefficient"); result.AddFloat3ColorParameter("rim_fresnel_color"); result.AddFloatParameter("rim_fresnel_power"); result.AddFloatParameter("rim_fresnel_albedo_blend"); rmopName = @"shaders\shader_options\material_cook_torrance_option"; break; } } if (methodName == "environment_mapping") { optionName = ((Environment_Mapping)option).ToString(); switch ((Environment_Mapping)option) { case Environment_Mapping.Per_Pixel: result.AddSamplerWithoutXFormParameter("environment_map"); result.AddFloat3ColorParameter("env_tint_color"); result.AddFloatParameter("env_roughness_scale"); rmopName = @"shaders\shader_options\env_map_per_pixel"; break; case Environment_Mapping.Dynamic: result.AddFloat3ColorParameter("env_tint_color"); result.AddSamplerParameter("dynamic_environment_map_0", RenderMethodExtern.texture_dynamic_environment_map_0); result.AddSamplerParameter("dynamic_environment_map_1", RenderMethodExtern.texture_dynamic_environment_map_1); result.AddFloatParameter("env_roughness_scale"); rmopName = @"shaders\shader_options\env_map_dynamic"; break; } } if (methodName == "warp") { optionName = ((Warp)option).ToString(); switch ((Warp)option) { case Warp.Default: result.AddFloatParameter("warp_amount"); rmopName = @"shaders\shader_options\warp_cortana_default"; break; } } if (methodName == "lighting") { optionName = ((Lighting)option).ToString(); } if (methodName == "scanlines") { optionName = ((Scanlines)option).ToString(); switch ((Scanlines)option) { case Scanlines.Default: result.AddSamplerParameter("scanline_map"); result.AddFloatParameter("scanline_amount_opaque"); result.AddFloatParameter("scanline_amount_transparent"); result.AddFloat4Parameter("ss_constants", RenderMethodExtern.screen_constants); rmopName = @"shaders\shader_options\cortana_screenspace"; break; } } if (methodName == "transparency") { optionName = ((Transparency)option).ToString(); switch ((Transparency)option) { case Transparency.Default: result.AddSamplerParameter("fade_gradient_map"); result.AddFloatParameter("fade_gradient_scale"); result.AddFloatVertexParameter("noise_amount"); result.AddSamplerVertexParameter("fade_noise_map"); result.AddFloatVertexParameter("fade_offset"); result.AddFloatParameter("warp_fade_offset"); result.AddFloat4VertexParameter("screen_constants", RenderMethodExtern.screen_constants); rmopName = @"shaders\shader_options\cortana_transparency"; break; } } return(result); }
/// <summary> /// Retrive shader parameters. /// </summary> /// <param name="Shader"></param> /// <param name="pname"></param> /// <param name="params"></param> public static void GetShaderiv(uint Shader, ShaderParameters pname, int[] @params) { Delegates.glGetShaderiv(Shader, pname, ref @params[0]); }
/// <summary> /// Retrives shader parameters. /// </summary> /// <param name="Shader"></param> /// <param name="pname"></param> /// <returns></returns> public static int GetShaderiv(uint Shader, ShaderParameters pname) { int tmp = 0; Delegates.glGetShaderiv(Shader, pname, ref tmp); return tmp; }
public ShaderParameters GetPixelShaderParameters() { if (!TemplateGenerationValid) { return(null); } var result = new ShaderParameters(); switch (albedo) { case Albedo.Default: result.AddSamplerParameter("base_map"); result.AddSamplerParameter("detail_map"); result.AddFloat4ColorParameter("albedo_color"); result.AddFloat4ColorParameter("detail_color"); result.AddFloatParameter("layer_depth"); result.AddFloatParameter("layer_contrast"); result.AddIntegerParameter("layer_count"); result.AddFloatParameter("texcoord_aspect_ratio"); result.AddFloatParameter("depth_darken"); break; } switch (bump_mapping) { case Bump_Mapping.Standard: result.AddSamplerParameter("bump_map"); break; } switch (alpha_test) { case Alpha_Test.Simple: result.AddSamplerParameter("alpha_test_map"); break; } switch (material_model) { case Material_Model.Cook_Torrance: result.AddFloatParameter("diffuse_coefficient"); result.AddFloatParameter("specular_coefficient"); result.AddFloat3ColorParameter("specular_tint"); result.AddFloat3ColorParameter("fresnel_color"); result.AddFloatParameter("use_fresnel_color_environment"); result.AddFloat3ColorParameter("fresnel_color_environment"); result.AddFloatParameter("fresnel_power"); result.AddFloatParameter("roughness"); result.AddFloatParameter("area_specular_contribution"); result.AddFloatParameter("analytical_specular_contribution"); result.AddFloatParameter("environment_map_specular_contribution"); result.AddBooleanParameter("order3_area_specular"); result.AddBooleanParameter("use_material_texture"); result.AddSamplerParameter("material_texture"); result.AddBooleanParameter("no_dynamic_lights"); result.AddSamplerWithoutXFormParameter("g_sampler_cc0236", RenderMethodExtern.texture_cook_torrance_cc0236); result.AddSamplerWithoutXFormParameter("g_sampler_dd0236", RenderMethodExtern.texture_cook_torrance_dd0236); result.AddSamplerWithoutXFormParameter("g_sampler_c78d78", RenderMethodExtern.texture_cook_torrance_c78d78); result.AddFloatParameter("albedo_blend_with_specular_tint"); result.AddFloatParameter("albedo_blend"); result.AddFloatParameter("analytical_anti_shadow_control"); result.AddFloatParameter("rim_fresnel_coefficient"); result.AddFloat3ColorParameter("rim_fresnel_color"); result.AddFloatParameter("rim_fresnel_power"); result.AddFloatParameter("rim_fresnel_albedo_blend"); break; } switch (environment_mapping) { case Environment_Mapping.None: break; case Environment_Mapping.Per_Pixel: result.AddSamplerWithoutXFormParameter("environment_map"); result.AddFloat3ColorParameter("env_tint_color"); result.AddFloatParameter("env_roughness_scale"); break; case Environment_Mapping.Dynamic: result.AddFloat3ColorParameter("env_tint_color"); result.AddSamplerParameter("dynamic_environment_map_0", RenderMethodExtern.texture_dynamic_environment_map_0); result.AddSamplerParameter("dynamic_environment_map_1", RenderMethodExtern.texture_dynamic_environment_map_1); result.AddFloatParameter("env_roughness_scale"); break; } switch (warp) { case Warp.Default: result.AddFloatParameter("warp_amount"); break; } switch (scanlines) { case Scanlines.Default: result.AddSamplerParameter("scanline_map"); result.AddFloatParameter("scanline_amount_opaque"); result.AddFloatParameter("scanline_amount_transparent"); result.AddFloat4Parameter("ss_constants", RenderMethodExtern.screen_constants); break; } switch (transparency) { case Transparency.Default: result.AddSamplerParameter("fade_gradient_map"); result.AddFloatParameter("fade_gradient_scale"); result.AddFloatParameter("warp_fade_offset"); break; } return(result); }