wglGetProcAddress не определен

Я следую этому руководству по OpenGL, но не могу связать библиотеки.

#define GLEW_STATIC

#include <glew.h>
#include <glfw3.h>
#include <thread>


typedef void (*GENBUFFERS) (GLsizei, GLuint*);

int main()
{
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);

    glfwMakeContextCurrent(window);

    while (glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    GENBUFFERS glGenBuffers = (GENBUFFERS) wglGetProcAddress("glGenBuffers");
    GLuint buffer;
    glGenBuffers(1, &buffer);


    glfwTerminate();
}

По какой-то причине функция wglGetProcAddress не определена. Это библиотеки, которые я связал: glew32.lib, glew32s.lib, glfw3.lib, opengl32.lib.

MSDN говорит что wglGetProcAddress включен в opengl32.lib. Что я делаю не так?

Ошибка 1 ошибка C3861: «wglGetProcAddress»: идентификатор не найден e:\workspaces\visual studio\learningopengl1\learningopengl1\main.cpp 32 1 LearningOpenGl1

2 IntelliSense: идентификатор wglGetProcAddress не определен e:\Workspaces\Visual Studio\LearningOpenGl1\LearningOpenGl1\main.cpp 34 41 LearningOpenGl1


person matt-pielat    schedule 18.02.2015    source источник
comment
Связывание — не единственная проблема, вам также необходимо включить правильный заголовок. Когда я проверил Google, он сказал, что функция определена в Wingdi.h.   -  person BonzaiThePenguin    schedule 18.02.2015
comment
Это приводит к нескольким сотням ошибок (в основном отсутствует ';').   -  person matt-pielat    schedule 18.02.2015
comment
В учебнике говорится, что не запускайте этот код   -  person Suici Doga    schedule 19.04.2017


Ответы (1)


Это не ошибка компоновщика, это ошибка компилятора, поэтому библиотеки, которые вы связываете, на данном этапе вообще не имеют значения.

Ваш компилятор говорит вам, что он не знает wglGetProcAddress, потому что он никогда не видел объявления для этого. Ваш компилятор также не должен знать GENBUFFERS, так как этот тип тоже нигде не определен. В официальном glext.h файле искомый тип называется PFNGLGENBUFFERS .

Если вы действительно хотите вручную использовать wgl API, вам, вероятно, следует включить GL/gl.h вместе с последней версией glext.h и использовать правильные имена типов.

Для меня большой вопрос: что вы вообще пытаетесь здесь сделать? Вы включаете glew.h, библиотеку, единственной целью которой является выполнение запросов указателя функции GL для вас. Все, что вам нужно сделать, это вызвать glewInit(), и все готово (ну, не забудьте установить glewExperimental=GL_TRUE перед основным профилем, так как GLEW не работает и не будет работать без этого в основных профилях). Совсем не нужно возиться с wglGetProcAddress() вручную.

Кроме того, вы также используете GLFW. Поэтому, если вы хотите вручную запрашивать указатели функций, вам лучше всего использовать абстракцию GLFW API-интерфейсов запросов указателей для конкретных платформ, которые будут glfwGetProcAddress() и должны быть уже объявлены - опять же, нет необходимости возиться с wglGetProcAddress().

person derhass    schedule 18.02.2015