【发布时间】:2017-03-13 06:15:04
【问题描述】:
我正在对 FrameBufferObject 进行渲染过程,这样我就可以在下一个渲染过程中将结果用作纹理。看教程,我需要打电话:
glBindFramebuffer(GL_TEXTURE2D, mFrameBufferObjectID);
glViewport(0, 0, mWidth, mHeight);
其中 mWidth 和 mHeight 是帧缓冲区对象的宽度和高度。似乎没有这个 glViewport 调用,什么都不能正确绘制。奇怪的是,在开始下一帧时,我需要调用:
glViewport(0, 0, window_width, window_height);
这样我就可以回到之前的窗口宽度/高度;但调用它似乎只能以原始窗口大小的一半呈现我的东西。所以我实际上只看到我的屏幕的四分之一得到了渲染(是的,整个场景都在上面)。我尝试设置一个断点并查看宽度和高度值,它们是原始值(1024、640)。为什么会这样?我尝试将它们加倍,它正确地绘制在我的整个窗口上。
我在 Mac 上通过 xcode 和 glew 执行此操作。
【问题讨论】:
-
问题可能出在你没有显示的代码中。
-
这是带有视网膜屏幕的 Mac 吗?您可能会混淆逻辑像素的分辨率和屏幕上的实际物理像素。或者无论正确的术语是什么......
-
是的,我在 Mac xcode 上使用它。
-
在配备 Retina 显示器的 Mac 上,帧缓冲区在每个维度上比窗口大 2 倍。需要针对屏幕调整带有 window_width 和 window_height 的 glViewport 调用。如果您使用 glfw,您可以通过以下方式检索它们:glfw.org/docs/latest/window_guide.html#window_fbsize