Сведения о вопросе

Fhohir

09:48, 12th August, 2020

Теги

macos   opengl   graphics    

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

Просмотров: 466   Ответов: 4

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

Мое лучшее предположение до сих пор заключается в том, что что-то не так с набором glWindowPos. В настоящее время я не устанавливаю его (или положение растра), и когда я получаю GL_CURRENT_RASTER_POSITION, я заметил, что значение по умолчанию на карте ATI составляет 0,0,0,0, а Intel-0,0,0,1. Когда я устанавливаю растровый pos на карте 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 newb, поэтому я не знаю, предоставляю ли я достаточно информации.



  Сведения об ответе

davran

13:07, 10th August, 2020

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

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

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


  Сведения об ответе

JUST___

14:03, 20th August, 2020

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


  Сведения об ответе

PAGE

02:32, 20th August, 2020

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

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

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

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

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


  Сведения об ответе

appple

13:43, 13th August, 2020

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

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

GLint valid;
glGet(GL_CURRENT_RASTER_POSITION_VALID, &valid);

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться