Я работаю над проектом с opengl, используя glew и glfw
Проект больше, но только код инициализации работает неправильно. Я использую glew 2.2.0_1 и glfw 3.3.8. (кстати, я запустил это в отладчике, поэтому я на 100% уверен, что glewInit() вызывает segfault. И если я помещу это в файл без остального кода, это также вызовет segfault)
Код:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
const int WIDTH = 640;
const int HEIGHT = 480;
int main(int argc, char **argv) {
// Set up GLFW and create window
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Spinning Cube", nullptr, nullptr);
glfwMakeContextCurrent(window);
if (!window) {
return 1;
}
// Set up GLEW
glewInit();
// ...
}
Это ошибка библиотеки или я что-то не так делаю? (Для всех, кто спрашивает, этот код компилируется без каких-либо предупреждений или ошибок)
Какую версию GLEW вы используете? Видимо была ошибка в более ранних версиях с профилем ядра и окнами.
Это точно твой код? Каждый раз, когда создание окна завершается успешно (и, таким образом, возвращается допустимый указатель окна), выполняется оператор return. Итак, если вы дойдете до glewInit, то создание окна уже не удалось.
@AspectOfTheNoob я использую версию 2.2.0_1 Я читал, что ошибка была исправлена в версии 2.0, но другой пользователь помог мне с этим, и теперь это работает, спасибо
@Rabbid76 Спасибо, я на самом деле на macos, так что все отлично работает, спасибо
В macOS необходимо создать контекст основного профиля OpenGL с установленным флагом прямой совместимости:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
Какая у тебя ОС? Мак? Если да, добавьте
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);