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;
    }

  • 相关阅读:
    如何处理消息堆积
    如何避免消息的重复发送
    内存泄漏和内存溢出的关系
    数据挖掘
    servlet
    数据驱动安全需三大核心新技术
    JS 入门经典 第三章 判断、循环和函数
    JS 高级程序设计 第三章
    JS入门经典
    JS高级程序设计1-2章
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/6544126.html
Copyright © 2011-2022 走看看