LearnOpenGL Notes (2) triangles

This is a learning LearnOpenGL CN tutorial notes, including my problems and my bad written. Article name corresponds with the site section.

------------------------------------split line------------ -------------------------------------------------- ------------------------------

Zhang put important first chart, the blue part is you can write shader control.

 

In the form of C ++ shader string

 

"#version 330 core\n"

"layout (location = 0) in vec3 aPos;\n"

"void main()\n"

"{\n"

"gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n"

"}\n";

Drawing Process

// initialize the buffer array object 
unsigned int the VAO;             // vertex array object the VAO 
unsigned int VBO;             // vertex buffer objects VBO
     // Create the VAO 
    glGenVertexArrays ( . 1 , & the VAO);
     // bind the VAO 
    glBindVertexArray (the VAO); 

    // Create VBO 
    glGenBuffers ( . 1 , & VBO);   // generating and buffering vbo ID
     // buffer bound 
    glBindBuffer (GL_ARRAY_BUFFER, VBO);
     // transmit data buffer currently bound to 
    glBufferData (GL_ARRAY_BUFFER, the sizeof (the vertices), the vertices, GL_STATIC_DRAW );
     //The fourth parameter: how to manage a given data
     //   GL_STATIC_DRAW: data with little or no change.
    //     GL_DYNAMIC_DRAW: data will be changed a lot.
    //     GL_STREAM_DRAW: will change each time the data is plotted. 

    // parse vertex data, the vertex attributes set pointer 
    glVertexAttribPointer ( 0 , . 3 , GL_FLOAT,, GL_FALSE,, . 3 * the sizeof ( a float ), ( void *) 0 ); 
    glEnableVertexAttribArray ( 0 ); 
// Create shader programs 
// vertex shader 
    unsigned int vertexshader; 
    vertexshader = glCreateShader (GL_VERTEX_SHADER);
     //附加
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    //编译
    glCompileShader(vertexShader);
    //检测失败
    int  success;
    char infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
        std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    //Fragment shader 
    unsigned int fragmentShader; 
    fragmentShader = glCreateShader (GL_FRAGMENT_SHADER); 
    glShaderSource (fragmentShader, . 1 , & fragmentShaderSource, NULL); 
    glCompileShader (fragmentShader); 

    // fragment shader 
    unsigned int fragmentShaderY; 
    fragmentShaderY = glCreateShader (GL_FRAGMENT_SHADER); 
    glShaderSource (fragmentShaderY , . 1 , & fragmentShaderYellowSource, NULL); 
    glCompileShader (fragmentShaderY); 

    shaderProgram = glCreateProgram ();
     // additional
    glAttachShader (shaderProgram, vertexshader); 
    glAttachShader (shaderProgram, fragmentShader); 
    // link 
    glLinkProgram (shaderProgram); 
    shaderYellowProram = glCreateProgram ();
     // additional 
    glAttachShader (shaderYellowProram, vertexshader); 
    glAttachShader (shaderYellowProram, fragmentShaderY); 
    // Link 
    glLinkProgram ( shaderYellowProram);
     // after a successful link, release the shader objects 
    glDeleteShader (vertexshader); 
    glDeleteShader (fragmentShader); 
    glDeleteShader (fragmentShaderY); 
// draw cycle rendering 
    // render loop 
    the while (!glfwWindowShouldClose (window)) {
         // Rendering instruction 
        glClearColor ( 0.2f , 0.3f , 0.3f , 1.0f ); 
        the glClear (GL_COLOR_BUFFER_BIT); 

        glUseProgram (shaderProgram); 
        glBindVertexArray (the VAO); 
        to glDrawArrays (GL_TRIANGLES, 0 , . 3 ); 



        / / exchange color buffer, the drawing display 
        glfwSwapBuffers (window);     
    }

Guess you like

Origin www.cnblogs.com/lxliiin/p/11795272.html