OpenGL реализуется графическим драйвером как набор реализованных функций, а не как отдельная библиотека, поэтому его нельзя просто связать с вашим проектом. Чтобы вызвать функцию, вы должны запросить у OpenGL указатель на эту функцию, и вы должны сделать это со всеми функциями, которые вы будете вызывать.
Вы можете сделать это с помощью таких функций, как GetProcAddress ... но это зависит от на платформе, для которой вы разрабатываете. чтобы получить указатель на функцию для всех этих функций, это утомительная работа, для этого есть несколько библиотек, таких как GLEW / GLAD, чтобы делать это во время выполнения из драйвера для каждой функции OpenGL.
так что именно это и происходит с вашим кодом ваша программа не знает, что это за glCreateShader, чтобы исправить это, вам нужна только строка magi c в вашем коде, которая
#include <gl/glew.h>
#include <GLFW/glfw3.h>
, обратите внимание, что вам нужно включить GLEW перед GLFW. и ваша программа распознает функции.
также вам необходимо инициализировать GLEW после создания контекста, вы можете сделать это следующим образом:
glewExperimental = GL_TRUE; //to avoid using the deprecated GL functions
if (glewInit() != GLEW_OK) {
std::cerr << "GLEW::Error : failed to initialize GLEW"<< std::endl;
}
И не надо ' Забудьте о библиотеке, связывающей часть . Я нашел здесь руководство по установке GLEW с помощью Visual Studio http://www.mcihanozer.com/tips/setting-up-libraries/setting-up-glew-for-visual-studio/ и для загрузки GLEW http://glew.sourceforge.net/
PS: использовать GLEW в качестве динамического * Библиотека 1029 * (DLL) может вызвать некоторые проблемы, в этом случае вы можете использовать версию stati c, например, набрав #define GLEW_STATI C в начале вашего кода, а при связывании поместите stati c версия библиотеки. это просто пример с GLEW, который немного старше, чем GLAD, если вы sh используете GLAD, это тоже отличный вариант.