OpenGL прозрачность фона? - PullRequest
       8

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

1 голос
/ 08 ноября 2008

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

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

Ответы [ 2 ]

1 голос
/ 08 ноября 2008

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

0 голосов
/ 08 ноября 2008

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

...