Что могло помешать 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, ничего не отрисовывается в задний буфер. Есть ли какое-то состояние трансформации, которое мне не хватает? Это 2D-приложение, поэтому преобразование вида - очень простое приложение glOrtho.

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

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

Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
1 271
4

Ответы 4

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

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

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

I've always had problems with OpenGL implementations from Intel

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

I think you're running into some byte-order issues

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

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

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

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

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

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

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

Другие вопросы по теме