Держите лошадей ... Да, вы можете получить в настоящее время связанный дро и читать FBOs с:
GLint drawFboId = 0, readFboId = 0;
glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &drawFboId);
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &readFboId);
и для обратной совместимости, GL_FRAMEBUFFER_BINDING
эквивалентно GL_DRAW_FRAMEBUFFER_BINDING
:
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &drawFboId);
Но для описываемого вами сценария вы, скорее всего, не хотите использовать thi s. Диагностическое сообщение сообщает вам, что вы делаете избыточное изменение состояния. Но запрос текущего состояния сравнить его с вашим новым значением, скорее всего, намного хуже.
glGet*()
звонки могут вызывать определенный уровень синхронизации и быть достаточно вредными для производительности. Как правило, их следует избегать в критических частях вашего кода.
У вас есть два варианта, которые, как, вероятно, будет лучше, чем то, что вы планировали сделать:
- Ignore диагностического сообщения. Вероятно, драйвер обнаружит избыточное изменение и в любом случае избежит ненужной работы. И он может сделать это намного эффективнее, чем решение, которое включает приложение, вызывающее вызовы
glGet*()
.
- Следите за последним связанным FBO в своем собственном коде, чтобы вы могли отфильтровывать избыточные изменения без использования каких-либо звонков
glGet*()
.
В любом случае то, что вы имели в виду, было бы похоже на пресловутую «тушение огня с бензином».
функция glGet не работает – ammar26
ой право вам нужен вариант glGetIntergerv –
glGetIntergerv неопределен – ammar26