glGetTexImage() не работает должным образом на картах ATI? терпит неудачу, когда milevel › 0

Я использую эту функцию, чтобы получить текстуру с видеокарты, но по какой-то причине она ничего не возвращает на некоторых картах, если 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
  2. Мобильная видеокарта ATI Radeon HD 3470
  3. АТИ Радеон Х700
  4. АТИ Радеон HD 4870
  5. АТИ Радеон HD 3450

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

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

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


person Newbie    schedule 02.02.2010    source источник
comment
Возвращает ли glGetError() что-нибудь полезное? Что именно вы подразумеваете под старыми картами? Примерно в 1998 году существовали неполные реализации OpenGL (например, Matrox G200 OpenGL MCD), но трудно сказать, относится ли это к вашим картам, если вы не сообщите нам о них больше (включая версии драйверов и ОС).   -  person Malte Clasen    schedule 03.02.2010
comment
Как вы генерируете свои MIP-карты? gluBuild2DMipmaps() или glTexParameteri(..., GL_GENERATE_MIPMAP,...)?   -  person genpfault    schedule 03.02.2010
comment
gluBuild2DMipmaps(), если GL_GENERATE_MIPMAP не поддерживается. и все эти карты могут видеть мип-карты ландшафта, поэтому он не пропускает мип-карты.   -  person Newbie    schedule 03.02.2010
comment
Была ли текстура создана в формате GL_RGB? Кроме того, это работает, когда miplevel = 0? я заметил, что функция действительно работает, кажется, это подразумевает, но я не был совсем уверен.   -  person genpfault    schedule 04.02.2010
comment
это работает с miplevel 0 да. и формат не имел значения, я тоже пробовал с GL_RGBA, и та же проблема. текстура создается в формате GL_RGBA.   -  person Newbie    schedule 04.02.2010
comment
Я обновил свой ответ другой возможностью?   -  person Goz    schedule 04.02.2010


Ответы (1)


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

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

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

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

person Goz    schedule 02.02.2010
comment
Ответы предназначены не для того, чтобы просить разъяснений, для этого и нужны комментарии. - person Georg Fritzsche; 03.02.2010
comment
Есть ли способ проверить, поддерживают ли они захват текстур на уровне miplevel › 0? поэтому мне не нужно сообщать пользователям вручную изменить некоторые настройки. - person Newbie; 04.02.2010
comment
Я заставил его выбирать, какой метод использовать, в зависимости от того, поддерживается он или нет. поэтому я не вижу причин пробовать это (это не мои компьютеры), так как это не решит никаких проблем. если вы думаете, что есть какое-то решение, то просто дайте мне услышать возможности. Посмотрите мои правки, я показал код, который используется для проверки его поддержки. - person Newbie; 04.02.2010
comment
но пользователи с этими проблемными картами могут видеть мип-уровни! так что это не проблема отсутствия milevel... - person Newbie; 04.02.2010
comment
Медленный ответ, но вы можете либо попробовать и посмотреть, сможете ли вы понять, в чем ошибка, либо вы можете просто предположить, что все работает так, как должно (это не так ... драйверы часто неполные или содержат ошибки) - person Goz; 13.02.2010