So, I’m following this course and I made it to 28:28, and I really thought I followed everything correctly up until this point but the triangle displayed in my application is white instead of the orange shown in the video, I tried backtracking to see what I did wrong but no luck…
This is my first time working with OpenGL so I still don’t understand how many parts of the code work, if someone could point me to the line(s) responsible for coloring the vertices I’d be thankful, I mean, I hope it’s there, I’m pretty sure I didn’t miss a line so it should only be something related to passing arguments.
Sorry for the large block of code:
#include <iostream>
#include "glad/glad.h"
#include "GLFW/glfw3.h"
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";
const char* fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(0.8f, 0.3f, 0.02, 1.0;)\n"
"}\n\0";
int main() {
//Initialize GLFW.
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); //Specify GLFW version (3.3).
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //Specify we're using CORE profile (Modern functions).
GLfloat vertices[] = {
-0.5f,-0.5f * float(sqrt(3)) / 3, 0.0f,
0.5f,-0.5f * float(sqrt(3)) / 3, 0.0f,
0.0f, 0.5f * float(sqrt(3)) * 2 / 3, 0.0f
};
GLFWwindow* window = glfwCreateWindow(800, 800, "Window Name Here!", NULL, NULL); //Create Window
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window); //Introduce window to current context, allowing us to use it.
gladLoadGL(); //Load GLAD to configure OpenGL.
glViewport(0, 0, 800, 800); //Specify view port.
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);
GLuint VAO, VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glClearColor(0.07f, 0.13f, 0.17f, 1.0f); //Specify background color.
glClear(GL_COLOR_BUFFER_BIT); //Clean buffer and assign new color.
glfwSwapBuffers(window); //Swap back and front buffer.
while (!glfwWindowShouldClose(window)) { //Main loop.
glClearColor(0.07f, 0.13f, 0.17f, 1.0f); //Specify background color.
glClear(GL_COLOR_BUFFER_BIT); //Clean buffer and assign new color.
glUseProgram(shaderProgram);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
//Handle GLFW events here.
glfwPollEvents();
}
glDeleteVertexArrays(1, &VAO);
glDeleteBuffers(1, &VBO);
glDeleteProgram(shaderProgram);
glfwDestroyWindow(window); //Delete Window
glfwTerminate(); //Terminate GLFW and end program.
}