コード例 #1
0
    // 在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;
        }
    }
コード例 #2
0
        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);
        }
コード例 #3
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);
        }
コード例 #4
0
        /*
         * 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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        public ShaderParameters GetParametersInOption(string methodName, int option, out string rmopName, out string optionName)
        {
            ShaderParameters result = new ShaderParameters();

            rmopName   = "";
            optionName = "";
            return(result);
        }
コード例 #9
0
ファイル: EditorLevel.cs プロジェクト: slagusev/whiskey2d
 public override void updateAll()
 {
     ShaderParameters.setFloat(ShaderParameters.PARAM_TIME, time);
     if (WhiskeyEditor.MonoHelp.WhiskeyControl.InputManager != null)
     {
     }
     time += .001f;
     base.updateAll();
 }
コード例 #10
0
        public ShaderParameters GetPixelShaderParameters()
        {
            if (!TemplateGenerationValid)
            {
                return(null);
            }
            var result = new ShaderParameters();

            return(result);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
    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;
            }
        }
    }
コード例 #13
0
ファイル: ShaderBase.cs プロジェクト: sionhannuna/rcdeskpilot
        public void SetVariable(string variableName, ShaderParameters parameter)
        {
            EffectHandle effectHandle = EffectHandle.FromString(variableName);

            if (variables.ContainsKey(effectHandle))
            {
                variables[effectHandle] = parameter;
            }
            else
            {
                variables.Add(effectHandle, parameter);
            }
        }
コード例 #14
0
    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
        }
    }
コード例 #15
0
        public ShaderParameters GetVertexShaderParameters()
        {
            if (!TemplateGenerationValid)
            {
                return(null);
            }

            var result = new ShaderParameters();

            result.AddFloatVertexParameter("u_tiles");
            result.AddFloatVertexParameter("v_tiles");

            return(result);
        }
コード例 #16
0
        public ShaderParameters GetVertexShaderParameters()
        {
            if (!TemplateGenerationValid)
            {
                return(null);
            }

            var result = new ShaderParameters();

            result.AddPrefixedFloat4VertexParameter("blend_mode", "category_");
            result.AddPrefixedFloat4VertexParameter("fog", "category_");

            return(result);
        }
コード例 #17
0
    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);
         */
    }
コード例 #18
0
        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);
        }
コード例 #19
0
        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);
        }
コード例 #20
0
    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;
        }
    }
コード例 #21
0
        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);
        }
コード例 #22
0
        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);
        }
コード例 #23
0
ファイル: EditorLevel.cs プロジェクト: slagusev/whiskey2d
        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);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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);
        }
コード例 #26
0
    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
        }
    }
コード例 #27
0
        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);
        }
コード例 #28
0
        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);
        }
コード例 #29
0
 /// <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]);
 }
コード例 #30
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;
 }
コード例 #31
0
 /// <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]);
 }
コード例 #32
0
        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);
        }