Войти
ПрограммированиеФорумГрафика

OpenGL: Extensions (Расширения). (комментарии)

#0
1:07, 13 сен. 2009

OpenGL: Extensions (Расширения). (комментарии)

Это сообщение сгенерировано автоматически.


#1
17:38, 13 сен. 2009

в OpenGL 3.x вызов glGetString( GL_EXTENSIONS )  --  ошибка.
вместо этого есть glGetStringi
для совместимости можно написать такую обвязку:

std::string GetExtensions( void )
{
    std::string ret = "";
    int numExt = 0;
    glGetIntegerv( GL_NUM_EXTENSIONS, &numExt );
    for ( int i = 0; i < numExt; ++i )
    {
  ret += reinterpret_cast<const int8 *>(glGetStringi(GL_EXTENSIONS, i));
  if ( i + 1 < numExt )
    ret += " ";
    }
    return ret;
}

#2
19:30, 13 сен. 2009

main
> Прекрасная статья!

Статье тыщу лет...

#3
22:33, 13 сен. 2009

можно еще проще:

    char *cString = (char *) glGetString(GL_EXTENSIONS);

    if ((strstr(cString, "GL_ARB_shader_objects" ) == NULL)
    {.....................}

#4
8:56, 14 сен. 2009

WanRus
> можно еще проще:
нельзя так.
потому что может появится потом расширение к примеру GL_ARB_shader_objects_with_very_cool_features_non_compatible
при котором GL_ARB_shader_objects не обязан присутствовать и твоя проверка - FAIL.
пишите правильно

#5
10:14, 14 сен. 2009

Вставлю свои 5 копеек:

int glgExtensionSupportedGL2(const char *name)
{
  char *str = (char *)glGetString(GL_EXTENSIONS);
  if (str == NULL)
    return GLG_EXT_ERROR;
  stringstream ss(str);
  string token;
  while (ss >> token)
  {
    if (token == name)
      return GLG_EXT_SUPPORTED;
  }
  return GLG_EXT_NOTSUPPORTED;
}

int glgExtensionSupportedGL3(const char *name)
{
  GLint n = 0;
  glGetIntegerv(GL_NUM_EXTENSIONS, &n);
  for (int i = 0; i < n; i++)
  {
    if (!strcmp(name, (const char *)glGetStringi(GL_EXTENSIONS, i)))
      return GLG_EXT_SUPPORTED;
  }
  return GLG_EXT_NOTSUPPORTED;
}

int wglgExtensionSupported(const char *name)
{
  char *str = (char *)wglGetExtensionsStringARB(wglGetCurrentDC());
  if (str == NULL)
    return GLG_EXT_ERROR;
  stringstream ss(str);
  string token;
  while (ss >> token)
  {
    if (token == name)
      return GLG_EXT_SUPPORTED;
  }
  return GLG_EXT_NOTSUPPORTED;
}
#6
10:50, 14 сен. 2009

main
> а юзать, например, как это сделано в некоторых демках XProgera
Это как?

#7
11:34, 14 сен. 2009

main
Можно и так, но тут я вижу проблему, например расширение может быть на стадии разработки, но функции уже доступны - может работать чтото не так как надо... Лучше уж перестраховаться и не использовать такое...

> Посмотри на дату, когда сообщение сгенерировано ))

Бот просто эстонец... :)
Статья от 15 февраля 2002...

#8
18:42, 5 фев. 2010

Спасибо за статью.
Сегодня вот очень помогло.

#9
21:19, 5 фев. 2010

Вот почему у wgl надо передавать HDC? Что, на одной машине в одном HDC может поддерживать, а в дргуом не-не-не?

#10
21:39, 5 фев. 2010

MarkoPolo
Да.

#11
23:24, 5 фев. 2010

@!!ex
О.о

#12
23:56, 5 фев. 2010

MarkoPolo
HDC может быть не только окна, но ещё MemoryDC или даже принтера.
Правка: ну и соотвественно для них будет софтварная реализация от МС

ПрограммированиеФорумГрафика

Тема в архиве.