glew не получает glDrawArraysInstancedBaseInstance

Я пытаюсь использовать glDrawArraysInstancedBaseInstance, но компоновщик жалуется, что __glewDrawArraysInstancedBaseInstance не разрешен.

На машине установлен glew-1.9.0, и, насколько я могу судить, он должен его связывать.

В качестве временной работы я просто сам получаю функцию, которая работает. Но это не помогает мне понять, почему glew не работает для этой функции.

И на самом деле glew, похоже, не работает ни для чего opengl 3.3+

Чтобы убедиться, что функция должна быть доступна, я использую glfwExtensionSupported("GL_ARB_base_instance").

Чтобы было ясно, это функция GLFW, а не средство проверки расширений GLEW.

Я использую glfw для создания своего окна и контекста основного профиля 4.3.

Моя система:
NVidia gtx 550 ti с последними драйверами
Ubuntu 12.04

Чтобы скомпилировать это, я использую CMake для make-файлов и в CMakeLists.txt:
target_link_libraries(app GL GLU GLEW glfw)


person tamato    schedule 16.07.2013    source источник
comment
Какой компилятор вы используете, и можете ли вы отредактировать свой вопрос, чтобы включить полный вызов командной строки компилятора (что-то вроде g++ foo.cpp ...)   -  person anthonyvd    schedule 16.07.2013
comment
Кроме того, судя по этому сообщению об ошибке, вы пытаетесь вызвать glewDrawArraysInstancedBaseInstance там, где хотите glDrawArraysInstancedBaseInstance.   -  person anthonyvd    schedule 16.07.2013
comment
Я звоню glDrawArraysInstancedBaseInstance, но компоновщик сообщает __glewDrawArraysInstancedBaseInstance   -  person tamato    schedule 16.07.2013
comment
Работают ли другие функции расширения?   -  person Christian Rau    schedule 16.07.2013
comment
Все расширения для opengl 3.2 и ниже.   -  person tamato    schedule 16.07.2013
comment
Возможно, вам потребуется обновить драйверы и убедиться, что они поддерживают OpenGL 3.3+, если все расширения 3.3+ не работают.   -  person anthonyvd    schedule 16.07.2013
comment
В вопросе говорится, что у меня установлены последние версии драйверов nvidia и что я могу самостоятельно получить эту функцию.   -  person tamato    schedule 16.07.2013
comment
Вы пытались узнать, поддерживается ли OpenGL 3.3 чем-то вроде if (GLEW_VERSION_3_3)? Несмотря на это, ваши драйверы должны поддерживать OpenGL 4.3 в соответствии с developer.nvidia.com/opengl. -драйвер   -  person anthonyvd    schedule 16.07.2013
comment
@pwny Тем не менее, это (старые драйверы) в любом случае приведет к ошибке времени выполнения при их вызове, а не к ошибке компоновщика. Больше похоже на то, что GLEW вообще его не поддерживает (хотя 1.9.0, конечно, должен).   -  person Christian Rau    schedule 16.07.2013
comment
@ChristianRau Я согласен с тобой. Я не знаю, как GLEW работает внутри, но я почти уверен, что реализации OpenGL не полагаются на присутствие GLEW. Это и тот факт, что OP получает ошибку компоновщика для функции GLEW при вызове функции GL, заставляет меня думать, что где-то в GLEW есть #define glDrawArraysInstancedBaseInstance __glewDrawArraysInstancedBaseInstance или что-то подобное, что было бы странно, если бы GLEW не поддерживал эту функцию.   -  person anthonyvd    schedule 16.07.2013
comment
@pwny Я пробовал if (GLEW_VERSION_3_3), и это первое, что не удалось. Я просмотрел glew-1.9.0 в glew.c, и GL_ARB_base_instance поддерживается. Я просто не понимаю, почему это не работает.   -  person tamato    schedule 16.07.2013
comment
обновленный вопрос, чтобы показать, как я проверяю, доступна ли запрошенная функция.   -  person tamato    schedule 16.07.2013
comment
Извините, но на данный момент я исчерпал все, что мог придумать. GLEW 1.9.0 должен поддерживать до OpenGL 4.3, ваши драйверы, очевидно, поддерживают их, если они обновлены, и вы действительно можете пойти и получить (я предполагаю, что вы это сделали) указатель на реальную функцию. В этот момент я бы зарегистрировал ошибку в GLEW...   -  person anthonyvd    schedule 16.07.2013
comment
@pwny Спасибо, я так и сделаю.   -  person tamato    schedule 16.07.2013
comment
@tamato: Рассматривали ли вы... не использование GLEW? Это не 2008 год, где единственными вариантами являются GLEW или GLee, знаете ли. Существует количество альтернатив, некоторые из которых фактически работают с выше версии OpenGL.   -  person Nicol Bolas    schedule 16.07.2013
comment
@NicolBolas tbh Я действительно не изучал их, но теперь я думаю о том, чтобы попробовать OpenGL Loader Gen.   -  person tamato    schedule 16.07.2013


Ответы (1)


Оказывается, при установке glew-1.9.0 он устанавливался на /usr/lib64 и это была только одна из двух проблем, которые происходили.

Одна из проблем заключалась в том, что glew-1.7.0 был установлен в /usr/local/lib64, а мое приложение использовало эту версию glew.

  • Я нашел это, выполнив find /usr -name libGLEW*

А другой заключался в том, что ldconfig не знал о /usr/lib64.

  • Это было обнаружено, выполнив ldconfig -p > report.txt и посмотрев, в каких каталогах просматривается ldconfig. Это оказалось полезным, потому что я думал, что /usr/lib64 был «надежным» каталогом, а это не так.

Вооружившись этой информацией, glew-1.7.0 был удален, ldconfig обновлен, и теперь все работает как положено.

person tamato    schedule 17.07.2013