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





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