예제 #1
0
파일: GL.cs 프로젝트: telemething/GLUWP
        public static int GetShaderiv(int shader, ShaderParameter pname)
        {
            int result = 0;

            glGetShaderiv(shader, pname, ref result);
            return(result);
        }
예제 #2
0
 public int this[ShaderParameter param] {
     get {
         int value;
         GL.GetShader(mId, param, out value);
         return(value);
     }
 }
예제 #3
0
        public override void Load()
        {
            color_shader     = Content.Get <ShaderProgram>("color_shader");
            scanlines_shader = Content.Get <ShaderProgram>("scanlines");

            current_shader = color_shader;

            colors_shader_tint_color = color_shader.GetParameter("tint_color");

            colors_shader_tint_color.SetValue(Color.White);

            scanlines_shader_params = scanlines_shader.GetParameter("params");

            scanlines_params = new Vector4(
                1.0f, // Amount
                0.5f, // Intensity
                0.0f, // Time
                0.0f
                );

            scanlines_shader_params.SetValue(scanlines_params);

            sprite = new Sprite(Content.Get <Texture2D>("cat"));

            sprite.SetOrigin(0.5f, 0.5f);

            sprite2 = new Sprite(Content.Get <Texture2D>("seiken"));

            sprite.SetOrigin(0.5f, 0.5f);

            timer = new Timer();

            timer.Every(20, UpdateColor);
        }
예제 #4
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of texture type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamTextureGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.name);

            guiElem = new GUITextureField(title);

            switch (shaderParam.type)
            {
            case ShaderParameterType.Texture2D:
            case ShaderParameterType.Texture3D:
            case ShaderParameterType.TextureCube:
                guiElem.OnChanged += (x) =>
                {
                    Resource resource = x.Value;

                    if (resource is Texture tex)
                    {
                        material.SetTexture(shaderParam.name, tex);
                    }
                    else if (resource is SpriteTexture spriteTex)
                    {
                        material.SetSpriteTexture(shaderParam.name, spriteTex);
                    }

                    EditorApplication.SetDirty(material);
                };
                break;
            }

            layout.AddElement(guiElem);
        }
예제 #5
0
 public unsafe static void GetShaderInfo(int shaderId, ShaderParameter name, out int result)
 {
     fixed(int *ptr = &result)
     {
         GetShaderiv(shaderId, (int)name, ptr);
     }
 }
예제 #6
0
        public void DrawTransparent(Camera camera)
        {
            int     gameWidgetIndex = camera.GameWidget.GameWidgetIndex;
            Vector3 viewPosition    = camera.ViewPosition;
            Vector3 v     = new Vector3(MathUtils.Floor(viewPosition.X), 0f, MathUtils.Floor(viewPosition.Z));
            Matrix  value = Matrix.CreateTranslation(v - viewPosition) * camera.ViewMatrix.OrientationMatrix * camera.ProjectionMatrix;

            Display.BlendState        = BlendState.AlphaBlend;
            Display.DepthStencilState = DepthStencilState.Default;
            Display.RasterizerState   = ((m_subsystemSky.ViewUnderWaterDepth > 0f) ? RasterizerState.CullClockwiseScissor : RasterizerState.CullCounterClockwiseScissor);
            m_transparentShader.GetParameter("u_origin").SetValue(v.XZ);
            m_transparentShader.GetParameter("u_viewProjectionMatrix").SetValue(value);
            m_transparentShader.GetParameter("u_viewPosition").SetValue(viewPosition);
            m_transparentShader.GetParameter("u_texture").SetValue(m_subsystemAnimatedTextures.AnimatedBlocksTexture);
            m_transparentShader.GetParameter("u_samplerState").SetValue(SettingsManager.TerrainMipmapsEnabled ? m_samplerStateMips : m_samplerState);
            m_transparentShader.GetParameter("u_fogYMultiplier").SetValue(m_subsystemSky.VisibilityRangeYMultiplier);
            m_transparentShader.GetParameter("u_fogColor").SetValue(new Vector3(m_subsystemSky.ViewFogColor));
            ShaderParameter parameter = m_transparentShader.GetParameter("u_fogStartInvLength");

            for (int i = 0; i < m_chunksToDraw.Count; i++)
            {
                TerrainChunk terrainChunk = m_chunksToDraw[i];
                float        num          = MathUtils.Min(terrainChunk.FogEnds[gameWidgetIndex], m_subsystemSky.ViewFogRange.Y);
                float        num2         = MathUtils.Min(m_subsystemSky.ViewFogRange.X, num - 1f);
                parameter.SetValue(new Vector2(num2, 1f / (num - num2)));
                int subsetsMask = 64;
                DrawTerrainChunkGeometrySubsets(m_transparentShader, terrainChunk.Geometry, subsetsMask);
            }
        }
예제 #7
0
        public static int GetShaderiv(int shader, ShaderParameter pname)
        {
            var ret = ES20.GL.GetShaderiv(shader, pname);

            CheckError();
            return(ret);
        }
예제 #8
0
        public static int GetShaderiv(uint shader, ShaderParameter parameter)
        {
            IntPtr result = IntPtr.Zero;

            getShaderiv(shader, parameter, ref result);
            return(result.ToInt32());
        }
        internal ShaderElementCollection(Shader shader, ShaderParameter parameter)
        {
            int count = parameter.ElementCount;

            _parameters = new ShaderParameter[count];

            for (int i = 0; i < count; i++)
                _parameters[i] = new ShaderParameter(shader, shader.Effect.GetParameterElement(parameter.Handle, i));
        }
        internal ShaderParameterCollection(Shader shader)
        {
            int count = shader.Effect.Description.Parameters;

            _parameters = new ShaderParameter[count];

            for (int i = 0; i < count; i++)
                _parameters[i] = new ShaderParameter(shader, shader.Effect.GetParameter(null, i));
        }
예제 #11
0
 public static void GetShader(uint shader, ShaderParameter param, out int value)
 {
     unsafe
     {
         fixed(int *a = &value)
         {
             Imports.glGetShaderiv(shader, (int)param, a);
         }
     }
 }
예제 #12
0
        internal ShaderParameterCollection(Shader shader)
        {
            int count = shader.Effect.Description.Parameters;

            _parameters = new ShaderParameter[count];

            for (int i = 0; i < count; i++)
            {
                _parameters[i] = new ShaderParameter(shader, shader.Effect.GetParameter(null, i));
            }
        }
예제 #13
0
        internal ShaderElementCollection(Shader shader, ShaderParameter parameter)
        {
            int count = parameter.ElementCount;

            _parameters = new ShaderParameter[count];

            for (int i = 0; i < count; i++)
            {
                _parameters[i] = new ShaderParameter(shader, shader.Effect.GetParameterElement(parameter.Handle, i));
            }
        }
예제 #14
0
        static void CheckShaderError(int shader, ShaderParameter shaderParam, string errorMessage)
        {
            int success;

            GL.GetShader(shader, shaderParam, out success);

            if (success == 0)
            {
                string error = GL.GetShaderInfoLog(shader);
                Console.WriteLine(errorMessage + ": '" + error + "'");
            }
        }
예제 #15
0
        public int this[ShaderParameter parameter]
        {
            get
            {
                if (!parameter.IsDefined())
                {
                    throw new ArgumentOutOfRangeException("parameter", parameter, "The specified shader parameter was not a defined OpenTK.Graphics.OpenGL.ShaderParameter value.");
                }

                int value;
                GL.GetShader(ID, parameter, out value);
                return(value);
            }
        }
예제 #16
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of color type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamColorGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.name);

            guiElem            = new GUIColorField(title);
            guiElem.OnChanged += (x) =>
            {
                material.SetColor(shaderParam.name, x);
                EditorApplication.SetDirty(material);
            };

            layout.AddElement(guiElem);
        }
예제 #17
0
        public int this[ShaderParameter parameter]
        {
            get
            {
                if (!parameter.IsDefined())
                {
                    throw new ArgumentOutOfRangeException("parameter", parameter, "The specified shader parameter was not a defined OpenTK.Graphics.OpenGL.ShaderParameter value.");
                }

                int value;
                GL.GetShader(ID, parameter, out value);
                return value;
            }
        }
예제 #18
0
        public override void SetShaderParameters(Device device, DeviceContext deviceContext, MaterialParameters matParams)
        {
            base.SetShaderParameters(device, deviceContext, matParams);

            Shader_50760736Params parameters = new Shader_50760736Params();
            var material = matParams.MaterialData;

            if (material.Parameters.ContainsKey("C005"))
            {
                ShaderParameter param = material.Parameters["C005"];
                parameters.C005_EmissiveFacadeColorAndIntensity = new Vector4(param.Paramaters[0], param.Paramaters[1], param.Paramaters[2], param.Paramaters[3]);
            }
            else
            {
                parameters.C005_EmissiveFacadeColorAndIntensity = new Vector4(0f);
            }

            if (material == null)
            {
                ShaderResourceView texture = RenderStorageSingleton.Instance.TextureCache[0];
                deviceContext.PixelShader.SetShaderResource(0, texture);
                ShaderParams = parameters;
            }
            else
            {
                ShaderParameterSampler sampler;
                ShaderResourceView[]   textures = new ShaderResourceView[2];
                if (material.Samplers.TryGetValue("S000", out sampler))
                {
                    textures[0] = RenderStorageSingleton.Instance.TextureCache[sampler.TextureHash];
                }
                else
                {
                    textures[0] = RenderStorageSingleton.Instance.TextureCache[0];
                }

                if (material.Samplers.TryGetValue("S011", out sampler))
                {
                    textures[1] = RenderStorageSingleton.Instance.TextureCache[sampler.TextureHash];
                }
                else
                {
                    textures[1] = RenderStorageSingleton.Instance.TextureCache[0];
                }

                deviceContext.PixelShader.SetShaderResources(0, textures.Length, textures);
            }

            ShaderParams = parameters;
        }
예제 #19
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of texture type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamTextureGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.name);

            GUITextureFieldType type = shaderParam.type == ShaderParameterType.Texture2D ?
                                       GUITextureFieldType.TextureOrSpriteTexture :
                                       GUITextureFieldType.Texture;

            guiElem = new GUITextureField(type, title);

            switch (shaderParam.type)
            {
            case ShaderParameterType.Texture2D:
            case ShaderParameterType.Texture3D:
            case ShaderParameterType.TextureCube:
                guiElem.OnChanged += (x) =>
                {
                    string path = ProjectLibrary.GetPath(x.UUID);
                    if (!string.IsNullOrEmpty(path))
                    {
                        if (ProjectLibrary.GetEntry(path) is FileEntry fileEntry)
                        {
                            if (fileEntry.ResourceMetas.Length > 0)
                            {
                                ResourceMeta meta = fileEntry.ResourceMetas[0];
                                if (meta.ResType == ResourceType.SpriteTexture)
                                {
                                    material.SetSpriteTexture(shaderParam.name, x.As <SpriteTexture>());
                                }
                                else if (meta.ResType == ResourceType.Texture)
                                {
                                    material.SetTexture(shaderParam.name, x.As <Texture>());
                                }
                            }
                        }
                    }
                    else
                    {
                        material.SetTexture(shaderParam.name, null);
                    }

                    EditorApplication.SetDirty(material);
                };
                break;
            }

            layout.AddElement(guiElem);
        }
예제 #20
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of color type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamColorGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.name);

            var guiToggle = new GUIToggle(new GUIContent(
                                              EditorBuiltin.GetEditorToggleIcon(EditorToggleIcon.AnimateProperty), new LocString("Animate")));

            guiColor         = new GUIColorField(title);
            guiColorGradient = new GUIColorGradientField(title);

            bool isAnimated = material.IsAnimated(shaderParam.name);

            guiColor.Active         = !isAnimated;
            guiColorGradient.Active = isAnimated;

            fieldLayout = layout.AddLayoutX();
            fieldLayout.AddElement(guiColor);
            fieldLayout.AddElement(guiColorGradient);
            fieldLayout.AddSpace(10);
            fieldLayout.AddElement(guiToggle);

            guiColor.OnChanged += (x) =>
            {
                material.SetColor(shaderParam.name, x);
                EditorApplication.SetDirty(material);
            };

            guiColorGradient.OnChanged += x =>
            {
                material.SetColorGradient(shaderParam.name, x);
                EditorApplication.SetDirty(material);
            };

            guiToggle.OnToggled += x =>
            {
                guiColor.Active         = !x;
                guiColorGradient.Active = x;

                if (x)
                {
                    ColorGradient gradient = material.GetColorGradient(shaderParam.name);
                    if (gradient.NumKeys == 0)
                    {
                        material.SetColorGradient(shaderParam.name, new ColorGradient(material.GetColor(shaderParam.name)));
                    }
                }
            };
        }
예제 #21
0
        public override void SetShaderParamters(Device device, DeviceContext deviceContext, Material material)
        {
            Shader_601151254Params parameters = new Shader_601151254Params();

            if (material.Parameters.ContainsKey("C002"))
            {
                ShaderParameter param = material.Parameters["C002"];
                parameters.C002_MaterialColor = new Vector4(param.Paramaters[0], param.Paramaters[1], param.Paramaters[2], param.Paramaters[3]);
            }
            else
            {
                parameters.C002_MaterialColor = new Vector4(0f);
            }

            ShaderParams = parameters;
        }
예제 #22
0
        public static PixelShaderBlock GeneratePixelShaderBlock(HaloOnlineCacheContext cacheContext, ShaderGeneratorResult shader_gen_result)
        {
            var pixelShaderBlock = new PixelShaderBlock
            {
                PCShaderBytecode = shader_gen_result.Bytecode,
                PCParameters     = new List <ShaderParameter>()
            };

            foreach (var register in shader_gen_result.Registers)
            {
                ShaderParameter shaderParameter = new ShaderParameter
                {
                    RegisterIndex = (ushort)register.Register,
                    RegisterCount = (byte)register.Size
                };

                switch (register.registerType)
                {
                case HaloShaderGenerator.ShaderGeneratorResult.ShaderRegister.RegisterType.Boolean:
                    shaderParameter.RegisterType = ShaderParameter.RType.Boolean;
                    break;

                case HaloShaderGenerator.ShaderGeneratorResult.ShaderRegister.RegisterType.Integer:
                    shaderParameter.RegisterType = ShaderParameter.RType.Integer;
                    break;

                case HaloShaderGenerator.ShaderGeneratorResult.ShaderRegister.RegisterType.Sampler:
                    shaderParameter.RegisterType = ShaderParameter.RType.Sampler;
                    break;

                case HaloShaderGenerator.ShaderGeneratorResult.ShaderRegister.RegisterType.Vector:
                    shaderParameter.RegisterType = ShaderParameter.RType.Vector;
                    break;

                default:
                    throw new NotImplementedException();
                }

                shaderParameter.ParameterName = cacheContext.GetStringId(register.Name);

                pixelShaderBlock.PCParameters.Add(shaderParameter);
            }

            return(pixelShaderBlock);
        }
예제 #23
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of 4x4 matrix type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamMat4GUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title    = new LocEdString(shaderParam.name);
            GUILabel  guiTitle = new GUILabel(title, GUIOption.FixedWidth(100));

            mainLayout = layout.AddLayoutY();
            GUILayoutX titleLayout = mainLayout.AddLayoutX();

            titleLayout.AddElement(guiTitle);
            titleLayout.AddFlexibleSpace();

            GUILayoutY contentLayout = mainLayout.AddLayoutY();

            GUILayoutX[] rows = new GUILayoutX[MAT_SIZE];
            for (int i = 0; i < rows.Length; i++)
            {
                rows[i] = contentLayout.AddLayoutX();
            }

            for (int row = 0; row < MAT_SIZE; row++)
            {
                for (int col = 0; col < MAT_SIZE; col++)
                {
                    int index = row * MAT_SIZE + col;
                    guiMatFields[index] = new GUIFloatField(row + "," + col, 20, "", GUIOption.FixedWidth(80));

                    GUIFloatField field = guiMatFields[index];
                    rows[row].AddElement(field);
                    rows[row].AddSpace(5);

                    int hoistedRow = row;
                    int hoistedCol = col;
                    field.OnChanged += (x) =>
                    {
                        Matrix4 value = material.GetMatrix4(shaderParam.name);
                        value[hoistedRow, hoistedCol] = x;
                        material.SetMatrix4(shaderParam.name, value);
                        EditorApplication.SetDirty(material);
                    };
                }
            }
        }
예제 #24
0
        public RenderPrefabs()
        {
            GizmoRed                = new Material();
            GizmoBlue               = new Material();
            GizmoGreen              = new Material();
            GizmoRed.MaterialName   = "GizmoRed";
            GizmoRed.MaterialHash   = 1337;
            GizmoBlue.MaterialName  = "GizmoBlue";
            GizmoBlue.MaterialHash  = 1338;
            GizmoGreen.MaterialName = "GizmoGreen";
            GizmoGreen.MaterialHash = 1339;
            GizmoRed.UFO1           = GizmoBlue.UFO1 = GizmoGreen.UFO1 = 128;
            GizmoRed.ShaderID       = GizmoBlue.ShaderID = GizmoGreen.ShaderID = 3854590933660942049;
            GizmoRed.ShaderHash     = GizmoBlue.ShaderHash = GizmoGreen.ShaderHash = 601151254;

            GizmoRed.Parameters = new Dictionary <string, ShaderParameter>();

            ShaderParameter param = new ShaderParameter();

            param.ID         = "C002";
            param.Paramaters = new float[4] {
                1.0f, 0.0f, 0.0f, 1.0f
            };
            GizmoRed.Parameters.Add("C002", param);

            GizmoBlue.Parameters = new Dictionary <string, ShaderParameter>();

            param            = new ShaderParameter();
            param.ID         = "C002";
            param.Paramaters = new float[4] {
                0.0f, 1.0f, 0.0f, 1.0f
            };
            GizmoBlue.Parameters.Add("C002", param);

            GizmoGreen.Parameters = new Dictionary <string, ShaderParameter>();

            param            = new ShaderParameter();
            param.ID         = "C002";
            param.Paramaters = new float[4] {
                0.0f, 0.0f, 1.0f, 1.0f
            };
            GizmoGreen.Parameters.Add("C002", param);
        }
예제 #25
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of texture type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamTextureGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.Name);

            guiElem = new GUITextureField(title);

            switch (shaderParam.Type)
            {
            case ShaderParameterType.Texture2D:
                guiElem.OnChanged += (x) =>
                {
                    Texture2D texture = Resources.Load <Texture2D>(x);

                    material.SetTexture2D(shaderParam.Name, texture);
                    EditorApplication.SetDirty(material);
                };
                break;

            case ShaderParameterType.Texture3D:
                guiElem.OnChanged += (x) =>
                {
                    Texture3D texture = Resources.Load <Texture3D>(x);

                    material.SetTexture3D(shaderParam.Name, texture);
                    EditorApplication.SetDirty(material);
                };
                break;

            case ShaderParameterType.TextureCube:
                guiElem.OnChanged += (x) =>
                {
                    TextureCube texture = Resources.Load <TextureCube>(x);

                    material.SetTextureCube(shaderParam.Name, texture);
                    EditorApplication.SetDirty(material);
                };
                break;
            }

            layout.AddElement(guiElem);
        }
예제 #26
0
            public void Read(Stream r)
            {
                HashPart1    = r.ReadValueU32();
                HashPart2    = r.ReadValueU32();
                HashComplete = ((ulong)HashPart2 << 32 | (ulong)HashPart1);
                int length = r.ReadValueS32();

                byte[] bytes = r.ReadBytes(length);
                Name       = Encoding.ASCII.GetString(bytes);
                alpha1     = r.ReadValueU8();
                alpha2     = r.ReadValueU8();
                unk3       = r.ReadValueS32();
                unk4       = r.ReadValueU8();
                this.unk5  = r.ReadValueS32();
                unk6       = r.ReadValueS32();
                UnkHash    = r.ReadValueS32(); // mafia 3
                ShaderHash = r.ReadValueU64();
                AdaptHash  = r.ReadValueU32();

                int count = r.ReadValueS32();

                Parameters = new ShaderParameter[count];
                for (int i = 0; i < count; i++)
                {
                    Parameters[i] = new ShaderParameter(r);
                }

                count    = r.ReadValueS32();
                Samplers = new ShaderParameterSampler[count];
                for (int j = 0; j < count; j++)
                {
                    Samplers[j] = new ShaderParameterSampler(r);
                }

                count = r.ReadValueS32();
                for (int j = 0; j < count; j++)
                {
                    var fourcc = Encoding.ASCII.GetString(r.ReadBytes(4));
                    var unk5   = r.ReadBytes(12);
                }
            }
예제 #27
0
 public ModelShader(bool useAlphaThreshold, int maxInstancesCount = 1)
     : base(ContentManager.Get <string>("Shaders/ModelVsh"), ContentManager.Get <string>("Shaders/ModelPsh"), PrepareShaderMacros(useAlphaThreshold, maxInstancesCount))
 {
     m_worldMatrixParameter = GetParameter("u_worldMatrix");
     m_worldViewProjectionMatrixParameter = GetParameter("u_worldViewProjectionMatrix");
     m_textureParameter            = GetParameter("u_texture");
     m_samplerStateParameter       = GetParameter("u_samplerState");
     m_materialColorParameter      = GetParameter("u_materialColor");
     m_emissionColorParameter      = GetParameter("u_emissionColor");
     m_alphaThresholdParameter     = GetParameter("u_alphaThreshold", allowNull: true);
     m_ambientLightColorParameter  = GetParameter("u_ambientLightColor");
     m_diffuseLightColor1Parameter = GetParameter("u_diffuseLightColor1");
     m_directionToLight1Parameter  = GetParameter("u_directionToLight1");
     m_diffuseLightColor2Parameter = GetParameter("u_diffuseLightColor2");
     m_directionToLight2Parameter  = GetParameter("u_directionToLight2");
     m_fogColorParameter           = GetParameter("u_fogColor");
     m_fogStartInvLengthParameter  = GetParameter("u_fogStartInvLength");
     m_fogYMultiplierParameter     = GetParameter("u_fogYMultiplier");
     m_worldUpParameter            = GetParameter("u_worldUp");
     Transforms = new ShaderTransforms(maxInstancesCount);
 }
예제 #28
0
        private void AddShaderParam(List <ShaderParamNames> paramNames, List <ShaderParameter> paramValues, ShaderParamNames paramName, object paramValue)
        {
            var p = new ShaderParameter();

            p.Data = paramValue;
            if (paramValue is TextureBase)
            {
                p.DataType   = 0;
                p.Unknown_1h = (byte)((paramNames.Count > 0) ? paramNames.Count + 1 : 0);//seriously wtf is this?
            }
            else if (paramValue is Vector4)
            {
                p.DataType = 1;
            }
            else
            {
            }

            paramNames.Add(paramName);
            paramValues.Add(p);
        }
예제 #29
0
        /// <summary>
        /// Creates a new material parameter GUI.
        /// </summary>
        /// <param name="shaderParam">Shader parameter to create the GUI for. Must be of floating point type.</param>
        /// <param name="material">Material the parameter is a part of.</param>
        /// <param name="layout">Layout to append the GUI elements to.</param>
        internal MaterialParamFloatGUI(ShaderParameter shaderParam, Material material, GUILayout layout)
            : base(shaderParam)
        {
            LocString title = new LocEdString(shaderParam.name);

            var guiToggle = new GUIToggle(new GUIContent(
                                              EditorBuiltin.GetEditorToggleIcon(EditorToggleIcon.AnimateProperty), new LocString("Animate")));

            guiConstant = new GUIFloatField(title);
            guiCurves   = new GUICurvesField(title);

            bool isAnimated = material.IsAnimated(shaderParam.name);

            guiConstant.Active = !isAnimated;
            guiCurves.Active   = isAnimated;

            fieldLayout = layout.AddLayoutX();
            fieldLayout.AddElement(guiConstant);
            fieldLayout.AddElement(guiCurves);
            fieldLayout.AddSpace(10);
            fieldLayout.AddElement(guiToggle);

            guiConstant.OnChanged += (x) =>
            {
                material.SetFloat(shaderParam.name, x);
                EditorApplication.SetDirty(material);
            };

            guiCurves.OnChanged += x =>
            {
                material.SetFloatCurve(shaderParam.name, x);
                EditorApplication.SetDirty(material);
            };

            guiToggle.OnToggled += x =>
            {
                guiConstant.Active = !x;
                guiCurves.Active   = x;
            };
        }
예제 #30
0
 public static void GetShader(int shader, ShaderParameter pname, out int parm)
 {
     ES20.GL.GetShader(shader, pname, out parm);
     CheckError();
 }
예제 #31
0
 internal int GetInt(ShaderParameter pname)
 {
     int result; using (Context.Lock()) GL.GetShader(Id, pname, out result); return result;
 }
예제 #32
0
 /// <summary>
 /// Creates a new material parameter GUI.
 /// </summary>
 /// <param name="shaderParam">Shader parameter to create the GUI for.</param>
 protected MaterialParamGUI(ShaderParameter shaderParam)
 {
     this.shaderParam = shaderParam;
 }
예제 #33
0
 public static void GetShader(uint shader, ShaderParameter shaderParameter, out int parameter)
 {
     InvokeExtensionFunction <glGetShaderiv>()(shader, (uint)shaderParameter, out parameter);
 }
예제 #34
0
        public bool GetShaderStatus(int handle, ShaderParameter pname)
        {
            GraphicsContext.Assert();
            int @params;
            GL.GetShader(handle, pname, out @params);
            OpenGlErrorHelper.CheckGlError();

            return @params == 0 ? false : true;
        }
예제 #35
0
 public static int GetShader(uint shader, ShaderParameter pname)
 {
     sint1[0] = 0;
     GetShaderiv(shader, pname, sint1);
     return(sint1[0]);
 }
 public extern object GetShaderParameter(WebGLShader shader, ShaderParameter pname);