我正在使用OpenGL帧缓冲对象。我创建了一个具有2种颜色纹理和深度纹理的帧缓冲对象。
我正在使用
glBindFramebuffer(GL_READ_FRAMEBUFFER, ID);
要绑定我的帧缓冲区,但在控制台上我收到此警告
Redundant State change in glBindFramebuffer call, FBO 1 already bound
如何检查我的哪些帧缓冲区已被绑定?我的意思是哪个OpenGL函数允许我检查已经绑定的帧缓冲区的ID,以便我可以防止多余的绑定。
答案 0 :(得分:18)
抓住你的马......是的,你可以获得当前受约束的抽奖并阅读FBO:
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);
但是对于您描述的情景,您很可能不想使用此。诊断消息告诉您正在进行冗余状态更改。但是查询当前状态以将其与新值进行比较很可能更糟糕。
glGet*()
次调用可能会导致某种程度的同步,并且对性能造成相当大的影响。通常应该避免在代码的性能关键部分中使用它们。
您有两个选项可能比您计划做的更好:
glGet*()
调用的解决方案更有效。glGet*()
来电的情况下过滤掉冗余更改。无论如何,你所想到的就像众所周知的“用汽油灭火”。
答案 1 :(得分:6)
只是glGetIntegerv(GL_FRAMEBUFFER_BINDING, &result);