Exemple #1
0
        public override void CleanUp()
        {
            AttributeIDs.Clear();

            UniformIDs.Clear();

            GL.DeleteProgram(program);
        }
Exemple #2
0
 public void SetUniformVector4(string uniformName, ref Vector4 value)
 {
     if (UniformIDs.ContainsKey(uniformName))
     {
         int uniformID = UniformIDs[uniformName];
         if (uniformID != -1)
         {
             GL.Uniform4(uniformID, value);
         }
     }
 }
Exemple #3
0
 public void SetUniformMatrix4(string uniformName, bool transpose, ref Matrix4 value)
 {
     if (UniformIDs.ContainsKey(uniformName))
     {
         int uniformID = UniformIDs[uniformName];
         if (uniformID != -1)
         {
             GL.UniformMatrix4(uniformID, transpose, ref value);
         }
     }
 }
Exemple #4
0
 public void SetUniform1(string uniformName, double value)
 {
     if (UniformIDs.ContainsKey(uniformName))
     {
         int uniformID = UniformIDs[uniformName];
         if (uniformID != -1)
         {
             GL.Uniform1(uniformID, value);
         }
     }
 }
Exemple #5
0
        public Shader(string name)
            : base(name)
        {
            var    vsFileStream = Resources.GetFile(ShaderRootPath + Name + ".vs");
            string vsCode;

            using (var sr = new StreamReader(vsFileStream))
            {
                vsCode = sr.ReadToEnd();
            }
            int vs = GL.CreateShader(ShaderType.VertexShader);

            GL.ShaderSource(vs, vsCode);
            GL.CompileShader(vs);

            var    fsFileStream = Resources.GetFile(ShaderRootPath + Name + ".fs");
            string fsCode;

            using (var sr = new StreamReader(fsFileStream))
            {
                fsCode = sr.ReadToEnd();
            }
            int fs = GL.CreateShader(ShaderType.FragmentShader);

            GL.ShaderSource(fs, fsCode);
            GL.CompileShader(fs);

            program = GL.CreateProgram();
            GL.AttachShader(program, vs);
            GL.AttachShader(program, fs);
            GL.LinkProgram(program);
            GL.DetachShader(program, vs);
            GL.DetachShader(program, fs);


            int attributeCount;

            GL.GetProgramInterface(program, ProgramInterface.ProgramInput, ProgramInterfaceParameter.ActiveResources, out attributeCount);
            for (int i = 0; i < attributeCount; i++)
            {
                int size;
                int length;
                ActiveAttribType type;
                StringBuilder    attributeName = new StringBuilder();

                GL.GetActiveAttrib(program, i, (int)ProgramInterfaceParameter.MaxNameLength, out length, out size, out type, attributeName);

                AttributeIDs.Add(attributeName.ToString(), GL.GetAttribLocation(program, attributeName.ToString()));
            }

            int uniformCount;

            GL.GetProgramInterface(program, ProgramInterface.Uniform, ProgramInterfaceParameter.ActiveResources, out uniformCount);
            for (int i = 0; i < uniformCount; i++)
            {
                int size;
                int length;
                ActiveUniformType type;
                StringBuilder     uniformName = new StringBuilder();

                GL.GetActiveUniform(program, i, (int)ProgramInterfaceParameter.MaxNameLength, out length, out size, out type, uniformName);
                UniformIDs.Add(uniformName.ToString(), GL.GetUniformLocation(program, uniformName.ToString()));
            }
        }