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