Что может помешать OpenGL glDrawPixels работать на некоторых видеокартах?

Следующий код не записывает данные в задний буфер на встроенных видеокартах Intel, например, на MacBook. На картах ATI, таких как в iMac, он обращается к заднему буферу. Ширина и высота правильные (и буфер 800x600), а m_PixelBuffer правильно заполнен 0xAA00AA00.

Мое лучшее предположение на данный момент заключается в том, что с набором glWindowPos что-то не так. Я в настоящее время не устанавливаю его (или положение растра), и когда я получаю GL_CURRENT_RASTER_POSITION, я заметил, что по умолчанию на карте ATI 0,0,0,0, а Intel - 0,0,0,1. Когда я устанавливаю растровое положение на карте ATI равным 0,0,0,1, я получаю тот же результат, что и карта Intel, в задний буфер ничего не выводится. Я пропускаю какое-то состояние трансформации? Это двумерное приложение, поэтому преобразование вида очень простое.

glDrawPixels(GetBufferWidth(), GetBufferHeight(), GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, m_PixelBuffer);

Любую дополнительную информацию, которую я могу предоставить, пожалуйста, спросите. Я в значительной степени новичок в OpenGL и Mac, поэтому я не знаю, предоставляю ли я достаточно информации.

25.08.2008 04:11:49
4 ОТВЕТА

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

http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_tips/chapter_5_section_25.html

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

2
25.08.2008 11:12:06

У меня всегда были проблемы с реализациями OpenGL от Intel

Это то, из-за чего я волнуюсь, но мне трудно поверить, что они испортили что-то столь же простое, как glDrawPixels, а также, поскольку я могу «продублировать» проблему, изменив вектор положения растра, это заставляет меня думаю, это моя вина, и я упускаю что-то основное.

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

Это было мое первое желание, и я пробовал упаковывать вещи по-другому, но безрезультатно. Я также попытался заполнить буфер значениями, которые представляли бы пригодную для использования альфу, если бы она была переполнена без результата. Вот почему я лаю в растровом дереве, но честно говоря, я не уверен на 100%. Обратите внимание, что я ориентируюсь только на Intel Mac, если это имеет значение.

Спасибо за ссылку, это было хорошее чтение, и это хорошо, чтобы убрать для дальнейшего использования. Я бы улучшил, но не смогу, пока не получу еще 3 очка репутации :)

1
25.08.2008 17:40:46

Маловероятно, что такая базовая функция, как glDrawPixels, может не работать. Вы пробовали действительно простые настройки, такие как GL_RGB или GL_RGBA для формата и GL_UNSIGNED_BYTE или GL_FLOAT для типа? Если нет, можете ли вы поделиться с нами минимально возможной программой, которая повторяет вашу проблему?

1
27.08.2008 04:55:03

Положение растра по умолчанию должно быть (0,0,0,1), но вы можете сбросить его, чтобы убедиться.

Перед вызовом glDrawPixels () попробуйте

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

Это должно сказать вам, если текущая позиция растра является действительной. Если это так, то это не ваша проблема.

1
30.09.2008 18:57:06