Не могу запустить окно OpenGL - PullRequest
0 голосов
/ 16 сентября 2018

Насколько я могу судить, все библиотеки установлены правильно, но по какой-то причине glfwWindowCreate возвращает NULL. Сейчас я использую Dell XPS 15, поэтому мне интересно, связано ли это с тем фактом, что я, вероятно, запускаю его на интегрированной графике, поскольку он недостаточно требователен для ускорения 1050ti. Я новичок в OpenGL в общем, поэтому я не уверен, что мой код написан правильно, поэтому я также опубликую его здесь:

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

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

GLFWwindow* window;
window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
if (window == NULL)
{
    fprintf(stderr, "Failed to initialize the window.");
    std::cin.ignore();
    glfwTerminate();
    return -1;
}
glfwMakeContextCurrent(window);
glewExperimental = true;
if (glewInit() != GLEW_OK)
{
    fprintf(stderr, "Failed to initialize GLEW!");
    return -1;
}
std::cin.ignore();
std::cin.ignore();

Я только что обновил свои драйверы NVIDIA до последнего обновления, так что это (вероятно) не то, что я надеюсь. К сожалению, я просто не могу заставить его открыть окно.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Вы пропустили инициализацию библиотеки GLFW .GLFW должен быть инициализирован с помощью glfwInit, прежде чем его использовать.

Библиотека GLEW должна быть инициализирована после того, как действительный контекст OpenGL был создан и сталток.См. Инициализация GLEW .

Измените свой код как-то так, чтобы решить вашу проблему:

if ( glfwInit() != GLFW_TRUE ) // intialize GLFW
{
    // error handling 
}

glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

GLFWwindow* window;
window = glfwCreateWindow(1920, 1080, "Test Window", NULL, NULL);
if (window == NULL)
{
    // error handling
}
glfwMakeContextCurrent(window);

// now the OpenGL context is valid and current

glewExperimental = true;
if (glewInit() != GLEW_OK) // initialize GLEW
{
    // error handling
}
0 голосов
/ 16 сентября 2018

Если в Windows драйвер с поддержкой Optimus будет искать экспортированную переменную . То есть приложение должно экспортировать его, чтобы быть доступным для других модулей. Например:

extern "C" {
 _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
}

Значение 1 будет означать использование высокопроизводительной графики. 0 или отсутствие какого-либо экспорта означало бы использование низкого профиля.

Теперь, если вы работаете в MacO или Linux, или проблема может быть в другом месте ... MAc не любит профили ядра ... В Linux вы можете забыть отключить настройку режима ядра и драйвер с открытым исходным кодом по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...