Не удается развернуть GLFW 3.2 - PullRequest
6 голосов
/ 26 января 2012

Так что это дузи;
У меня довольно большое решение OpenGL, написанное в ядре версии 3.2 с GLSL 1.5 в Windows 7. Я использую GLEW и GLM в качестве вспомогательных библиотек. Когда я создаю окно, я использую следующие строки:

// Initialize main window
glewExperimental = GL_TRUE;
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // Use OpenGL Core v3.2
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if(!glfwOpenWindow(Game::WINDOW_X, Game::WINDOW_Y, 0, 0, 0, 0, 32, 0, GLFW_WINDOW))
{ ...

Если я опущу три функции glfwOpenWindowHint, приложение завершит работу моих видеодрайверов при вызове glDrawArrays (GL_TRIANGLES, 0, m_numIndices);

Но вот кикер. Когда кто-то в моей группе пытается обновить и запустить решение, он получает пустое окно без геометрии. Закомментирование трех строк делает программу работающей для них нормально. Существует довольно четкое разделение между работой с подсказкой 3.2core и без нее. Я не смог определить разницу между nVidia, AMD, настольным ПК или ноутбуком.

Лучшее, что я смог найти, было предложение добавить glewExperimental = GL_TRUE; как говорят, у Глю были проблемы с ядром. Это не имело никакого значения. Решение слишком велико для размещения кода, но я могу установить шейдеры, рендеринг кода и т. Д. По мере необходимости.

Большое спасибо! Это убивает нас уже несколько дней.

Ответы [ 2 ]

10 голосов
/ 26 января 2012

Попробуйте запросить окно GLFW для прямой совместимости:

GLFW_OPENGL_FORWARD_COMPAT - Укажите, должен ли контекст OpenGL быть совместимым с прямой версией (т. Е. Запретить устаревшие функции).Это следует использовать только при запросе OpenGL версии 3.0 или выше.

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

// Use OpenGL Core v3.2
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

Такжеубедитесь, что вы действительно получаете нужную версию:

int major, minor, rev;

glfwGetGLVersion(&major, &minor, &rev);

fprintf(stderr, "OpenGL version recieved: %d.%d.%d", major, minor, rev);

Не уверен, что вы также работаете на Mac, но все равно прочитайте это:

A.4OpenGL 3.0+ в Mac OS X

Поддержка OpenGL 3.0 и выше была представлена ​​в Mac OS X 10.7, и даже в этом случае поддерживаются совместимые с прямыми контексты профилей ядра OpenGL 3.2 и не существует механизма для запроса контекстов отладки.Более ранние версии Mac OS X поддерживают большинство версий OpenGL 2.1.

. Из-за этого в Mac OS X 10.7 подсказки GLFW_OPENGL_VERSION_MAJOR и GLFW_OPENGL_VERSION_MINOR завершатся ошибкой, если для них установлена ​​версия выше 3.2, GLFW_OPENGL_DEBUGWOR_FUNG_COMT_HRT_GT_HT_HT_WR_T_WT_WR_T_WR_T_WR_T_WR_T_T_WT_T_WT_T_WT_T_T_WT_WT_T_WT_T_W_T_WB_T_WB_WF_WR_WGи установка подсказки GLFW_OPENGL_PROFILE на что-либо, кроме нуля или GLFW_OPENGL_CORE_PROFILE, приведет к сбою glfwOpenWindow.

Кроме того, в Mac OS X 10.6 и ниже GLFW_OPENGL_VERSION_MAJOR и GLFWING_GLINGПодсказка не будет иметь никакого эффекта, а установка подсказок GLFW_OPENGL_PROFILE или GLFW_FORWARD_COMPAT в ненулевое значение приведет к сбою glfwOpenWindow.

0 голосов
/ 12 апреля 2013

Я столкнулся с той же проблемой. Я должен был создать VAO до моего VBO, и теперь он работает на OS X.

GLuint vertex_array;
glGenVertexArrays(1, &vertex_array);
glBindVertexArray(vertex_array);
...