我正在通过渲染传递到FrameBufferObject,以便我可以在下一个渲染过程中将结果用作纹理。看一下教程,我需要打电话:
[[ "file1" -nt ../../build/"file1" ]] && echo "file1"
[[ "file2" -nt ../../build/"file2" ]] && echo "file2"
[[ "file3" -nt ../../build/"file3" ]] && echo "file3"
其中mWidth和mHeight是帧缓冲区对象的宽度和高度。似乎没有这个glViewport调用,没有任何东西被正确绘制。奇怪的是,在开始下一帧时,我需要打电话:
parallel
这样我就可以回到之前窗口的宽度/高度;但是调用它似乎只能将我的东西渲染到原始窗口大小的一半。所以我实际上只看到我的屏幕的四分之一被渲染到的东西(是的,整个场景就在它上面)。我尝试设置断点并查看宽度和高度值,它们是原始值(1024,640)。为什么会这样?我尝试将这些加倍,并且它正确地绘制在我的整个窗口上。
我是通过xcode和glew在Mac上执行此操作。
答案 0 :(得分:0)
视口设置存储在全局状态中。因此,如果您更改它,它将保持新值,直到您再次致电=IF(ISNUMBER(MATCH("*"&B1&"*",A1:A10,0)),1,0)
。正如您已经指出的那样,每当您想要渲染到FBO(或后备缓冲区)时,您必须设置大小,该FBO的大小与先前绑定的大小不同。
答案 1 :(得分:0)
如果您使用
启用了剪刀测试,请尝试调整剪刀盒和视口glEnable(GL_SCISSOR_TEST);
要解决您的问题,请写
glViewport(0, 0, mWidth, mHeight);
glScissor(0, 0, mWidth, mHeight);
和
glViewport(0, 0, window_width, window_height);
glScissor(0, 0, window_width, window_height);
每当你切换到一个与前一个不同大小的新帧缓冲,或者总是为了安全。
请参阅参考glScissor的此链接 或者这篇其他帖子解释了它的目的https://gamedev.stackexchange.com/questions/40704/what-is-the-purpose-of-glscissor