Прозрачность фона OpenGL?

Я использую QGLFramebufferObject QT для рендеринга вне экрана. После рендеринга в буфер я прочитал результат с помощью glReadPixels ()
Проблема в том, что иногда цвет фона, который я читаю, равен 0 (прозрачный черный), а иногда 0xFF000000 (непрозрачный черный)
Похоже, это связано со временем инициализации буфера. Если буфер является членом класса, унаследованного от QGLWidget, тогда он равен 0. Если он инициализирован где-то еще, это 0xFF000000.

Кто-нибудь знает, что здесь происходит? Каков хороший ожидаемый результат этого чтения?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
3 316
2

Ответы 2

Вы устанавливаете правильный прозрачный цвет (glClearColor) и действительно делаете четкий (glClear)? Убедитесь, что ваша маска цветной записи (glColorMask) полностью включена (она также влияет на очистку). Затем вы можете проверить, устанавливает ли QT какую-то странную передачу копии пикселей (кроме значения по умолчанию, см. GlPixelStore, glPixelTransfer и glPixelMap). Вы уверены, что получаете (и читаете) буфер RGBA в обоих случаях, а не только RGB? Наконец, вполне возможно, что расширение объекта фреймбуфера содержит ошибки на вашей конкретной комбинации видеокарты / драйвера, тем более, если нет основного видимого окна. По крайней мере, проверьте карты обоих производителей. И, конечно же, всегда проверяйте glGetError после всех потенциально неудачных операций. Перечитав свой вопрос, получите ли вы вообще какой-либо другой действительный рендеринг в случае, отличном от QGLWidget? Разрешено ли говорить зеленый, вернуть зеленый? Потому что вполне может быть, что вы просто не инициализировали какой-либо действительный контекст OpenGL для начала в этом случае. Объекты Framebuffer, в отличие от pbuffers, нуждаются во внешнем контексте.

Тайна разгадана Кажется, что чистый цвет, который я даю GLWidget, равен 0, а чистый цвет по умолчанию - 0xff000000. В зависимости от того, когда я инициализирую объект фреймбуфера, он получает текущий прозрачный цвет GLWidget.

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