Esempio n. 1
0
        protected int LinkShaderProgram(int vertexId, int fragmentId)
        {
            int programId = Gl.CreateProgram();

            Gl.AttachShader(programId, vertexId);
            Gl.AttachShader(programId, fragmentId);
            Gl.LinkProgram(programId);

            Gl.GetProgram(programId, GetProgramParameterName.LinkStatus, out int success);
            if (success < 1)
            {
                string infoLog = null;
                Gl.GetProgram(programId, GetProgramParameterName.InfoLogLength, out int loglen);
                if (loglen > 0)
                {
                    string log;
                    Gl.GetProgramInfoLog(programId, loglen, out _, out log);
                    infoLog = log;
                }
                throw new ShaderException(this, "Program Link failed.", infoLog);
            }

            //Gl.ValidateProgram(programId);
            //Gl.GetProgram(programId, ProgramProperty.ValidateStatus, out success);
            //if (success < 1)
            //{
            //    string infoLog = null;
            //    Gl.GetProgram(programId, ProgramProperty.InfoLogLength, out int loglen);
            //    if (loglen > 0)
            //    {
            //        StringBuilder log = new StringBuilder(loglen);
            //        Gl.GetProgramInfoLog(programId, loglen, out _, log);
            //        infoLog = log.ToString();
            //    }
            //    throw new ShaderException(this, "Program Validation failed.", infoLog);
            //}

            return(programId);
        }