zoukankan      html  css  js  c++  java
  • CompileGLShader

    //-----------------------------------------------------------------------------
    // Purpose: Compiles a GL shader program and returns the handle. Returns 0 if
    //            the shader couldn't be compiled for some reason.
    //-----------------------------------------------------------------------------
    GLuint CMainApplication::CompileGLShader( const char *pchShaderName, const char *pchVertexShader, const char *pchFragmentShader )
    {
        GLuint unProgramID = glCreateProgram();

        GLuint nSceneVertexShader = glCreateShader(GL_VERTEX_SHADER);
        glShaderSource( nSceneVertexShader, 1, &pchVertexShader, NULL);
        glCompileShader( nSceneVertexShader );

        GLint vShaderCompiled = GL_FALSE;
        glGetShaderiv( nSceneVertexShader, GL_COMPILE_STATUS, &vShaderCompiled);
        if ( vShaderCompiled != GL_TRUE)
        {
            dprintf("%s - Unable to compile vertex shader %d! ", pchShaderName, nSceneVertexShader);
            glDeleteProgram( unProgramID );
            glDeleteShader( nSceneVertexShader );
            return 0;
        }
        glAttachShader( unProgramID, nSceneVertexShader);
        glDeleteShader( nSceneVertexShader ); // the program hangs onto this once it's attached

        GLuint  nSceneFragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
        glShaderSource( nSceneFragmentShader, 1, &pchFragmentShader, NULL);
        glCompileShader( nSceneFragmentShader );

        GLint fShaderCompiled = GL_FALSE;
        glGetShaderiv( nSceneFragmentShader, GL_COMPILE_STATUS, &fShaderCompiled);
        if (fShaderCompiled != GL_TRUE)
        {
            dprintf("%s - Unable to compile fragment shader %d! ", pchShaderName, nSceneFragmentShader );
            glDeleteProgram( unProgramID );
            glDeleteShader( nSceneFragmentShader );
            return 0;    
        }

        glAttachShader( unProgramID, nSceneFragmentShader );
        glDeleteShader( nSceneFragmentShader ); // the program hangs onto this once it's attached

        glLinkProgram( unProgramID );

        GLint programSuccess = GL_TRUE;
        glGetProgramiv( unProgramID, GL_LINK_STATUS, &programSuccess);
        if ( programSuccess != GL_TRUE )
        {
            dprintf("%s - Error linking program %d! ", pchShaderName, unProgramID);
            glDeleteProgram( unProgramID );
            return 0;
        }

        glUseProgram( unProgramID );
        glUseProgram( 0 );

        return unProgramID;
    }

  • 相关阅读:
    【学习总结】SQL学习总结之SQL语法
    【学习总结】SQL学习总结之认识SQL
    【JAVA】JAVA8-String.join字符串拼接
    【JAVA】Scanner.next()与Scanner.nextLine()的区别
    【JAVA】java中split以"." 、""、“|”分隔字符串
    【问题解决方案】apple music取消订阅
    【问题解决方案】MacBook Pro那些坑
    【JAVA】Java循环语句中的continue跳转进入下一次循环是否判断循环条件
    【问题解决方案】Markdown中部分字符显示为格式因而得不到预期结果的问题解决
    【JAVA】哈希表HashMap中java8新增功能概述
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/6544126.html
Copyright © 2011-2022 走看看