OpenGL doesn't draw anything

Hello,

I want to learn OpenGL but it doesn’t work. The actually problem is that OpenGL opened a window but it doesn’t draw a triangle like in the tutorial.
It appears only a dark blue background. I think I made a mistake… :frowning:

Code:

main.cpp
[SUB]


#include <cstdlib>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "loadShaders.h"

// Window sizes
#define WIN_SIZE_X 1024
#define WIN_SIZE_Y 768

// The window
GLFWwindow *window;

// WinMain to avoid a console application
int main() {
    // Init GLFW
    if (!glfwInit()) {
        exit(-1);
    }

    // Settings for GLFW
    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // Create the window
    window = glfwCreateWindow(WIN_SIZE_X, WIN_SIZE_Y, "OpenGL", NULL, NULL);

    // Center the window on the desktop
    const GLFWvidmode *MODE = glfwGetVideoMode(glfwGetPrimaryMonitor());
    const int WIDTH = MODE->width;
    const int HEIGHT = MODE->height;
    glfwSetWindowPos(window, (WIDTH - WIN_SIZE_X) / 2, (HEIGHT - WIN_SIZE_Y) / 2);

    // If it fail then will terminate the program
    if (window == NULL) {
        glfwTerminate();
        exit(-1);
    }

    // Make a context to OpenGL
    glfwMakeContextCurrent(window);

    // Activate GLEW
    glewExperimental = GL_TRUE;
    GLenum err = glewInit();

    if (err != GLEW_OK) {
        exit(-1);
    }

    // VAO
    GLuint VertexArrayID;
    glGenVertexArrays(1, &VertexArrayID);
    glBindVertexArray(VertexArrayID);

    // 3 vertices to make a triangle
    static const GLfloat g_vertex_buffer_data[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f,
    };

    // This will identify our vertex buffer
    GLuint vertexbuffer;
    // Generate 1 buffer, put the resulting identifier in vertexbuffer
    glGenBuffers(1, &vertexbuffer);
    // The following commands will talk about our 'vertexbuffer' buffer
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    // Give our vertices to OpenGL.
    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);

    // Main loop with press the escape key to terminate the program
    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

    GLuint programID = loadShaders("C:/Users/AMD-Power/Documents/Visual Studio 2015/Projects/OpenGL/OpenGL2/simpleVertexShader.glsl", "C:/Users/AMD-Power/Documents/Visual Studio 2015/Projects/OpenGL/OpenGL2/simpleFragmentShader.glsl");
    glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

    // 1rst attribute buffer : vertices
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

    do {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glfwSwapBuffers(window);
        glfwPollEvents();

        glUseProgram(programID);

        // Draw the triangle !
        glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle
        glDisableVertexAttribArray(0);

    } while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && glfwWindowShouldClose(window) == 0);

    glfwDestroyWindow(window);
    glfwTerminate();

    return 0;
}

[/SUB]

Problem is solved. :slight_smile: