Example #1
0
        public Shader(string vertexPath, string fragmentPath) : base()
        {
            string[] reps = vertexPath.Split('/', '\\');
            this.Name = reps[reps.Length - 1].Split('.')[0];

            string shaderSource = LoadSource(vertexPath);
            int    vertexShader = GL.CreateShader(ShaderType.VertexShader);

            GL.ShaderSource(vertexShader, shaderSource);
            CompileShader(vertexShader);

            shaderSource = LoadSource(fragmentPath);
            int fragmentShader = GL.CreateShader(ShaderType.FragmentShader);

            GL.ShaderSource(fragmentShader, shaderSource);
            CompileShader(fragmentShader);

            this.Handle = GL.CreateProgram();

            GL.AttachShader(Handle, vertexShader);
            GL.AttachShader(Handle, fragmentShader);

            LinkProgram(Handle);

            GL.DetachShader(Handle, vertexShader);
            GL.DetachShader(Handle, fragmentShader);
            GL.DeleteShader(fragmentShader);
            GL.DeleteShader(vertexShader);


            GL.GetProgram(Handle, GetProgramParameterName.ActiveAttributes, out int nAttribs);
            Attributes = new ShaderAttributeData[nAttribs];

            for (int i = 0; i < nAttribs; i++)
            {
                GL.GetActiveAttrib(Handle, i, 16, out int ALength, out int ASize, out ActiveAttribType AType, out string AName);

                this.Attributes[i] = new ShaderAttributeData(AName, GL.GetAttribLocation(Handle, AName), ASize, ALength, AType);
            }


            GL.GetProgram(Handle, GetProgramParameterName.ActiveUniforms, out int nUniforms);
            Uniforms = new ShaderUniformData[nUniforms];

            for (int i = 0; i < nUniforms; i++)
            {
                string UName = GL.GetActiveUniform(Handle, i, out int USize, out ActiveUniformType UType);
                Uniforms[i] = new ShaderUniformData(UName, GL.GetUniformLocation(Handle, UName), USize, UType);
            }

            SetAttribute("position", AttributeTypes.Vertice);
            SetAttribute("uv", AttributeTypes.UV);
            SetAttribute("normal", AttributeTypes.Normal);

            Cache.Add(this);
        }
Example #2
0
        private Shader(string name, string vert, string frag) : base(name)
        {
            // define vertex shader
            int vertexShader = GL.CreateShader(ShaderType.VertexShader);

            GL.ShaderSource(vertexShader, vert);
            CompileShader(vertexShader);

            // define fragment shader
            int fragmentShader = GL.CreateShader(ShaderType.FragmentShader);

            GL.ShaderSource(fragmentShader, frag);
            CompileShader(fragmentShader);

            // create program
            this.Handle = GL.CreateProgram();

            // link shaders together and compile the program
            GL.AttachShader(Handle, vertexShader);
            GL.AttachShader(Handle, fragmentShader);
            LinkProgram(Handle);

            // cleaning
            GL.DetachShader(Handle, vertexShader);
            GL.DetachShader(Handle, fragmentShader);
            GL.DeleteShader(fragmentShader);
            GL.DeleteShader(vertexShader);

            GL.GetProgram(Handle, GetProgramParameterName.ActiveAttributes, out int nAttribs);
            Attributes = new ShaderAttributeData[nAttribs];

            for (int i = 0; i < nAttribs; i++)
            {
                GL.GetActiveAttrib(Handle, i, 16, out int ALength, out int ASize, out ActiveAttribType AType, out string AName);



                this.Attributes[i] = new ShaderAttributeData(AName, i, ASize, ALength, AType);
            }


            GL.GetProgram(Handle, GetProgramParameterName.ActiveUniforms, out int nUniforms);
            Uniforms = new ShaderUniformData[nUniforms];

            for (int i = 0; i < nUniforms; i++)
            {
                string UName = GL.GetActiveUniform(Handle, i, out int USize, out ActiveUniformType UType);
                Uniforms[i] = new ShaderUniformData(UName, GL.GetUniformLocation(Handle, UName), USize, UType);
            }

            this.SetAttribute("position", AttributeTypes.Vertice);
            this.SetAttribute("uv", AttributeTypes.UV);
            this.SetAttribute("normal", AttributeTypes.Normal);

            Cache.Add(this);
        }