Ejemplo n.º 1
0
        private static int LoadShader(ShaderType shaderType, string shaderSource)
        {
            int shader = GL.CreateShader(shaderType);

            if (shader == 0)
            {
                Logger.Append("Unable to create shader");
                return(0);
            }

            GL.ShaderSource(shader, shaderSource);

            GL.CompileShader(shader);

            int status;

            GL.GetShader(shader, ShaderParameter.CompileStatus, out status);
            if (status == 0)
            {
                string errorString = string.Format("Failed to compile {0} shader: {1}", shaderType.ToString(), GL.GetShaderInfoLog(shader));
                Logger.Append(errorString);
                GL.DeleteShader(shader);
                return(0);
            }

            return(shader);
        }
Ejemplo n.º 2
0
        private static int LoadShader(ShaderType shaderType, string shaderSource)
        {
            // Create shader object
            int shader = GL.CreateShader(shaderType);

            if (shader == 0)
            {
                Logger.Append("Unable to create shader");
                return(0);
            }

            // Set the shader program
            GL.ShaderSource(shader, shaderSource);

            // Compile the shader
            GL.CompileShader(shader);

            // Check the result of compilation
            int status;

            GL.GetShader(shader, ShaderParameter.CompileStatus, out status);
            if (status == 0)
            {
                string errorString = string.Format("Failed to compile {0} shader: {1}", shaderType.ToString(), GL.GetShaderInfoLog(shader));
                Logger.Append(errorString);
                GL.DeleteShader(shader);
                return(0);
            }

            return(shader);
        }
Ejemplo n.º 3
0
        private static int CreateProgram(string vShader, string fShader)
        {
            int vertexShader   = LoadShader(ShaderType.VertexShader, vShader);
            int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader);

            if (vertexShader == 0 || fragmentShader == 0)
            {
                return(0);
            }

            int program = GL.CreateProgram();

            if (program == 0)
            {
                return(0);
            }

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

            GL.LinkProgram(program);

            GL.GetProgram(program, GetProgramParameterName.LinkStatus, out int status);
            if (status == 0)
            {
                string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program));
                Logger.Append(errorString);
                GL.DeleteProgram(program);
                GL.DeleteShader(vertexShader);
                GL.DeleteShader(fragmentShader);
                return(0);
            }

            return(program);
        }
Ejemplo n.º 4
0
        ///<summary>
        ///Create a program object and make current
        ///</summary>
        ///<param name="vShader">a vertex shader program</param>
        ///<param name="fShader">a fragment shader program</param>
        ///<param name="program">created program</param>
        ///<returns>
        ///return true, if the program object was created and successfully made current
        ///</returns>
        public static bool InitShaders(string vShaderSource, string fShaderSource, out int program)
        {
            program = CreateProgram(vShaderSource, fShaderSource);
            if (program == 0)
            {
                Logger.Append("Failed to create program");
                return(false);
            }

            GL.UseProgram(program);

            return(true);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Create a program
        /// </summary>
        /// <param name="vShader">Vertex Shader Source</param>
        /// <param name="fShader">Fragment Shader Source</param>
        /// <returns>a program Id or 0 if an error occurs creating the program object</returns>
        public static int CreateProgram(string vShader, string fShader)
        {
            // Create shader object
            int vertexShader   = LoadShader(ShaderType.VertexShader, vShader);
            int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader);

            if (vertexShader == 0 || fragmentShader == 0)
            {
                return(0);
            }

            // Create a program object
            int program = GL.CreateProgram();

            if (program == 0)
            {
                return(0);
            }

            // Attach the shader objects
            GL.AttachShader(program, vertexShader);
            GL.AttachShader(program, fragmentShader);

            // Link the program object
            GL.LinkProgram(program);

            // Check the result of linking
            int status;

            GL.GetProgram(program, GetProgramParameterName.LinkStatus, out status);
            if (status == 0)
            {
                string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program));
                Logger.Append(errorString);
                GL.DeleteProgram(program);
                GL.DeleteShader(vertexShader);
                GL.DeleteShader(fragmentShader);
                return(0);
            }

            return(program);
        }