diff --git a/pog.cpp b/pog.cpp index 643db1d..ed20733 100644 --- a/pog.cpp +++ b/pog.cpp @@ -42,6 +42,75 @@ int main() { glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - std::cin >> x; + + + //compiling the shaders + const char *vertexShaderSource = + "#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" + "}\0"; + unsigned int vertexShader; + vertexShader = glCreateShader(GL_VERTEX_SHADER); //compile code + + 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; + } //check if compilation succesful + const char *fragmentShaderSource = + "#version 330 core\n" + "layout (location = 0) in vec3 aPos;\n" + "void main()\n" + "{\n" + " FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);" + "}\0"; + + unsigned int fragmentShader; + fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); + glCompileShader(fragmentShader); //compile fragment shader + + unsigned int shaderProgram; + shaderProgram = glCreateProgram(); //create shader program + + //attaching shaders to our program + glAttachShader(shaderProgram, vertexShader); + glAttachShader(shaderProgram, fragmentShader); + glLinkProgram(shaderProgram); + + glUseProgram(shaderProgram); //use it NOW + + //not needed anymore they're linked + glDeleteShader(vertexShader); + glDeleteShader(fragmentShader); + + //tell OpenGL's stupid existence how to interpret data + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0); + glEnableVertexAttribArray(0); + + // 0. copy our vertices array in a buffer for OpenGL to use + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + // 1. then set the vertex attributes pointers + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0); + glEnableVertexAttribArray(0); + // 2. use our shader program when we want to render an object + glUseProgram(shaderProgram); + // 3. now draw the object + + unsigned int VAO; + glGenVertexArrays(1, &VAO); + + glfwTerminate(); return 0; }