0

I try this code from tutorial for learn Modern OpenGL in Visual Studio 2015: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/

With GLUT (from other tutorial), it workink fine (other project with glew32.lib and freeglut.lib). With GLEW Project after add glew32.lib and glfw3.lib, lesson 2 has problem in: glDrawArrays(GL_TRIANGLES, 0, 3);

It return linking error in compiling: LNK2019 unresolved external symbol __imp_ glDrawArrays@12 referenced in function _main

This code:

// Include standard headers
#include <stdio.h>
#include <stdlib.h>

// Include GLEW. Always include it before gl.h and glfw.h, since it's a bit magic.
#include <GL/glew.h>

// Include GLFW
#include <GL/glfw3.h>

// Include GLM
#include <glm/glm.hpp>
using namespace glm;

int main()
{
    // Initialise GLFW
    if (!glfwInit())
    {
        fprintf(stderr, "Failed to initialize GLFW\n");
        return -1;
    }

    glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // We want OpenGL 3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //We don't want the old OpenGL 

    // Open a window and create its OpenGL context
    GLFWwindow* window; // (In the accompanying source code, this variable is global)

    window = glfwCreateWindow(1024, 768, "Tutorial 01", NULL, NULL);

    if (window == NULL) {
        fprintf(stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\n");
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window); // Initialize GLEW
    glewExperimental = true; // Needed in core profile

    if (glewInit() != GLEW_OK) {
        fprintf(stderr, "Failed to initialize GLEW\n");
        return -1;
    }

    // Ensure we can capture the escape key being pressed below
    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

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

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

    GLuint vertexbuffer;
    glGenBuffers(1, &vertexbuffer);
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);

    do {
        // 1rst attribute buffer : vertices
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
        glVertexAttribPointer(
            0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
            3,                  // size
            GL_FLOAT,           // type
            GL_FALSE,           // normalized?
            0,                  // stride
            (void*)0            // array buffer offset
            );

        // Draw the triangle !
        glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle

        glDisableVertexAttribArray(0);

        // Swap buffers
        glfwSwapBuffers(window);
        glfwPollEvents();

        // Check if the ESC key was pressed or the window was closed
    } while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS && glfwWindowShouldClose(window) == 0);
    return 0;
}
Arlu
  • 41
  • 2
  • 9
  • @genpfault I think the problem is that glDrawArrays is part of VBO (OpenGL extension that need to be registered) so the duplicate is not valid to solve this issue or it is just me ? – Spektre Dec 08 '15 at 08:03
  • Use GLEW or something similar to enable OpenGL extensions. Your gfx card&driver have to support VBO to allow using it... see [Building glew on windows](http://stackoverflow.com/a/24839561/2521214) and [wglext - extension not installed in OpenGL context](http://stackoverflow.com/a/34064415/2521214) – Spektre Dec 08 '15 at 08:07
  • ***Link to OpenGL32.lib*** (`#pragma comment (lib, "OpenGL32.lib")`) *Marking this question duplicate and then pointing the OP to a post full of useless general information is not particularly helpful*. – Andon M. Coleman Dec 08 '15 at 13:23
  • It not same question, glewInit() no has problem. Only glDrawArray() has problem, if I delete this, this program compling and working without draw. – Arlu Dec 08 '15 at 22:15

0 Answers0