glGetTexImage () не работает должным образом на картах ATI? терпит неудачу, когда miplevel> 0 - PullRequest
1 голос
/ 03 февраля 2010

Я использую эту функцию, чтобы получить мою текстуру с видеокарты, но по некоторым причинам он ничего не возвращает на некоторых картах, если miplevel> 0

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

glGetTexImage(GL_TEXTURE_2D, miplevel, GL_RGB, GL_UNSIGNED_BYTE, data);

вот код, который я использую, чтобы проверить, какой метод использовать для mipmapping:

ext = (char*)glGetString(GL_EXTENSIONS);

if(strstr(ext, "SGIS_generate_mipmap") == NULL){
 // use gluBuild2DMipmaps()
}else{
 // use GL_GENERATE_MIPMAP
}

Пока все работает правильно, поэтому говорится, что GL_GENERATE_MIPMAP поддерживается для этих карт ATI ниже.

Вот проверенные карты:

  1. ATI Radeon 9550 / X1050 Series
  2. ATI Mobility Radeon HD 3470
  3. ATI Radeon X700
  4. ATI Radeon HD 4870
  5. ATI Radeon HD 3450

В данный момент я беру miplevel 0 и генерирую mipmap по собственному коду. Есть ли лучшее решение для этого?

Также glGetError () возвращает 0 для всех карт, поэтому ошибки не возникает. это просто не работает. возможно проблема с драйвером?

Я все еще ищу лучшее решение, чем сам изменяю его размер на процессоре ...

1 Ответ

1 голос
/ 03 февраля 2010

Проверьте ошибку, о которой сообщает glGetTexImage. Скорее всего, это говорит вам об ошибке.

Edit: звучит как радость от использования плохо написанных драйверов ATI OpenGL. Предполагая, что ваши драйверы обновлены, используйте карту nVidia, обойдите ее или примите, что она не будет работать. Это в значительной степени ваши единственные варианты. Возможно, стоит побеспокоиться об этом с ATI, но они, скорее всего, ничего не сделают, увы.

Edit2: На проблемных картах вы используете GL_GENERATE_MIPMAP? Возможно, вы не сможете получить уровни MIP, если они явно не созданы ...? то есть попробуйте gluBuild2DMipmaps () для всего.

Редактировать 3: Дело в том, хотя. Это может быть причиной ваших проблем. Мне не кажется невероятным, что карта ATI захватывает текстуру из локальной копии, однако, если вы используете автогенерацию MIP-карт, она делает это полностью на карте и никогда не копирует их обратно. Явно попробуйте построить MIP-карты локально и посмотреть, исправит ли это ваши проблемы. Это может не произойти, однако вам нужно попробовать эти вещи, иначе вы никогда не поймете проблему. Увы, метод проб и ошибок - это все, что работает с такими проблемами. Вот почему довольно немногие игры имеют большие базы данных с именем драйвера, названием карты и версией драйвера, чтобы решить, будет ли функция работать или не работать.

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