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

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

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


person shoosh    schedule 08.11.2008    source источник


Ответы (2)


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

person starmole    schedule 08.11.2008

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

person shoosh    schedule 08.11.2008