OpenGL: как проверить, поддерживает ли пользователь glGenBuffers ()? - PullRequest
2 голосов
/ 30 ноября 2010

Я проверил документы, и там написано, что версия OpenGL должна быть не менее 1,5, чтобы glGenBuffers() работал.У пользователя есть версия 1.5, но вызов функции вызовет сбой.Это ошибка в документации или проблема с драйвером для пользователя?

Я использую это glGenBuffers() для VBO. Как проверить, есть ли у пользователя поддержка для этого?

Редактировать: я использую glew с glewInit() для инициализации VBO

Edit2: Я получил его на пользователя с вызовами функций glGenBuffersARB().Но я все еще ищу способ узнать, когда я должен использовать glGenBuffers(), а когда я должен использовать glGenBuffersARB() И когда я должен использовать VertexArrays, если не поддерживается ни один из вызовов функций VBO.

Я также узналif(GLEW_VERSION_1_5) возвращает false пользователю, но GL_VERSION дает 1.5.0, что просто бессмысленно!

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

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

#ifndef STRINGIFY
  #define STRINGIFY(x) #x
#endif
#ifdef WIN32
  #include <windows.h>
  #define glGetProcAddress(a) wglGetProcAddress(a)
#endif
#ifdef X11
  #define glGetProcAddress(a) glXGetProcAddress ( \
    reinterpret_cast<const unsigned char*>(a)     \
  )
#endif

#ifndef GetExtension
  #define GetExtension(Type, ExtenName)     \
    ExtenName = (Type)                      \
    glGetProcAddress(STRINGIFY(ExtenName)); \
    if(!ExtenName)                          \
    {                                       \
      std:cout << "Your Computer Does Not " \
               << "Support GL Extension: "  \
               << STRINGIFY(ExtenName)      \
               << std::endl;                \
      exit(1);                              \         
    }                                       \
    else                                    \
    {                                       \
      std::cout << "Loadded Extension: "    \
                << STRINGIFY(ExtenName)     \
                << std::endl;               \
    }
#endif

// then just use this :D
GetExtension(PFNGLGENBUFFERSARBPROC, glGenBuffersARB)
// after your done you can do this
#undef GetExtension
#undef glGetProcAddress
// you can then also undef the STRINGIFY macro
// though it does come in handy.
0 голосов
/ 30 ноября 2010

Отметьте ссылку .Может быть, это поможет вам;)

if (GLEW_VERSION_1_5)
{
  /* You have OpenGL 1.5 */
}

Попробуйте glGenBuffersARB insted glGenBuffers;Я думаю, что вам нужно только проверить поддержку 1,5;

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