2015-12-06 15 views
2

В настоящее время я разрабатываю игровой движок/фреймворк для игры, которую я намерен развивать. Я проектирую систему как можно более развязанную через абстрактные классы и инъекции зависимостей. В идеале я стараюсь, чтобы каждая подсистема не зависела от других частей движка.Можно ли определить размер фреймбуфера по умолчанию только с помощью OpenGL?

В моей системе рендеринга я хотел бы предоставить возможность сброса области просмотра и области ножниц/обрезки до размера привязанного в данный момент целевого объекта для рендеринга (будь то OpenGL FrameBuffer, Direct3D RenderTarget или бэкбуффер по умолчанию) без необходимости заставить программиста следить за ним и не полагаться на оконную подсистему/другую библиотеку или писать код, зависящий от системы.

В настоящее время я кодирую реализацию подсистемы рендеринга OpenGL, и я хотел проверить, можно ли получить размер буфера кадров backbuffer/default, используя только вызовы функций OpenGL 3.3. Раньше я писал код, используя GLX/WGL, хотя я бы хотел этого избежать.

Я наткнулся на этот вопрос, который был задан ранее: How to get/set the width and height of the default framebuffer?

Однако ни окончательного ответа не было дано. Ответ, говорящий о получении ширины/высоты области области просмотра/scissor, работает только в том случае, если окно никогда не изменяется, что очень хорошо может в моем приложении, а другой ответ не будет работать, потому что фреймбуфер по умолчанию не является фактический объект фреймбуфера и, следовательно, не может быть запрошен как таковой (если комментаторы верны)

Итак, существует ли какой-либо метод определения размера фреймбуфера/backbuffer по умолчанию на лету, используя только OpenGL 3.3, или мне нужно будет зависит от другого подсистемы/записи, зависящей от кода?

ответ

3

Заключительный ответ? Заключительный ответ: №

OpenGL 4.5 и все версии под ним не предоставляют средства для запроса экстентов стандартного фреймбуфера. Он также не обеспечивает средства для контроля его размера.

По умолчанию фреймбуфер принадлежит окну; объект framebuffer по умолчанию OpenGL - это просто способ привлечь его.

+1

Спасибо за быстрый и решительный ответ! Я боялся столько же, поэтому я, вероятно, просто оставлю это для пользователя в этом случае. Также я просто хотел сказать, что я использую glLoadGen, когда мне нужен заголовок GL, благодаря созданию такого фантастического инструмента! – LivePastTheEnd