Что может помешать OpenGL glDrawPixels работать на некоторых видеокартах? - PullRequest
3 голосов
/ 25 августа 2008

Следующий код не записывает данные в задний буфер на встроенных видеокартах 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, поэтому я не знаю, предоставляю ли я достаточно информации.

Ответы [ 4 ]

2 голосов
/ 25 августа 2008

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

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

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

1 голос
/ 30 сентября 2008

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

Непосредственно перед вызовом glDrawPixels (), попробуйте

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

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

1 голос
/ 27 августа 2008

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

1 голос
/ 25 августа 2008

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

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

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

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

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

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