Переключение с GL_ARB_framebuffer на GL_EXT_framebuffer. Ошибка настройки Rendebuffer: GL_FRAMEBUFFER_UNSUPPORTED_EXT

В моей компании мы работаем над огромной библиотекой, которая является независимым от платформы средством рендеринга (но его главная задача не в играх, а в профессиональных и офисных приложениях).
Все идет хорошо, у нас уже есть очень эффективные рендеры D3D11 и OpenGL, а также «программные» рендеры для Windows и Linux (GDI / X11).

Недавно мы начали реализовывать дополнительные улучшения на нижних уровнях нашего API. Мы подумали, что это может быть хорошей идеей, чтобы проверить их также на более медленных машинах. Поскольку обновление взаимодействует с логикой, специфичной для OpenGL, эту конкретную версию необходимо протестировать.

Мы реализовали RTT (Render To Texture) в GL, используя основной объект framebuffer. Поскольку старый HW не мог работать с этим решением (без поддержки ARB_framebuffer), мы создали простую оболочку, которая определяет поддерживаемую версию FBO (ARB_fb_object или EXT_fb_object) и упаковывает все cals прозрачным способом. Пример создания трафаретного вложения:



gxFBO::gen_renderbuffers(1, &stencil_buffer_id);
gxFBO::bind_renderbuffer(GX_RENDERBUFFER, stencil_buffer_id);
gxFBO::renderbuffer_storage(GX_RENDERBUFFER, GX_DEPTH24_STENCIL8, width, height);
gxFBO::bind_renderbuffer(GX_RENDERBUFFER, 0);
gxFBO::framebuffer_renderbuffer(GX_FRAMEBUFFER, GX_DEPTH_STENCIL_ATTACHMENT, stencil_buffer_id);
gxFBO::check_framebuffer_status();


Краткое объяснение: вызовы функций эквивалентны версиям gl * (например, gxFBO :: renderbuffer_storage () вызывает внутренние вызовы glRenderbufferStorage () или glRenderbufferStorageEXT () в зависимости от поддерживаемой версии). Константы препроцессора также одинаковы (GX_DEPTH24_STENCIL8 = (GL_DEPTH24_STENCIL8 или GL_DEPTH24_STENCIL8_EXT)).

Это прекрасно работает на оборудовании с поддержкой 3.0+ (все отображается правильно). Сбой, однако на старом оборудовании (с поддержкой GL 2.1 и EXT_framebuffer).

Возвращенная ошибка в gxFBO :: check_framebuffer_status (): GL_FRAMEBUFFER_UNSUPPORTED_EXT.

Я также попытался создать отдельные рендер-буферы для глубины и трафарета:



gxFBO::gen_renderbuffers(1, &depth_buffer_id);
gxFBO::gen_renderbuffers(1, &stencil_buffer_id);

gxFBO::bind_renderbuffer(GX_RENDERBUFFER, depth_buffer_id);
gxFBO::renderbuffer_storage(GX_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);

gxFBO::bind_renderbuffer(GX_RENDERBUFFER, stencil_buffer_id);
gxFBO::renderbuffer_storage(GX_RENDERBUFFER, GX_STENCIL_INDEX8, width, height);
gxFBO::bind_renderbuffer(GX_RENDERBUFFER, 0);

gxFBO::framebuffer_renderbuffer(GX_FRAMEBUFFER,
GX_DEPTH_ATTACHMENT,
GX_RENDERBUFFER,
depth_buffer_id);

gxFBO::framebuffer_renderbuffer(GX_FRAMEBUFFER,
GX_STENCIL_ATTACHMENT,
GX_RENDERBUFFER,
stencil_buffer_id);

gxFBO::check_framebuffer_status();


Та же ошибка при проверке состояния кадрового буфера. Может ли кто-нибудь помочь с правильной настройкой в ​​этом случае? Можно ли сделать то, что я пытаюсь сделать, используя GL_EXT_framebuffer?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]