显示窗口前GLFW OpenGL渲染

a11xaf1n  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(155)

我有一个非常简单的程序:

glfwInit();
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
long w = glfwCreateWindow(400, 400, "test", 0, 0);
glfwMakeContextCurrent(w);
GL.createCapabilities();
// Frame start
GL11.glBegin(GL11.GL_LINE_LOOP);
GL11.glVertex2d(0.3, 0.3);
GL11.glVertex2d(0.7, 0.3);
GL11.glVertex2d(0.5, 0.7);
GL11.glEnd();
// Frame end
glfwSwapBuffers(w); // -- move this after showwindow to make it work, but causes white window to flash white when appearing because it has nothing rendered yet

glfwShowWindow(w);
while (!glfwWindowShouldClose(w)) {
    glfwWaitEvents();
    glfwPollEvents();
}
glfwDestroyWindow(w);
glfwTerminate();

但是执行后我得到了一个白色的窗口。我想你可以预先渲染一个框架,这样当你显示窗口时,你就可以立即在上面绘制一些东西,而不是在显示窗口后绘制框架,这样会产生白色的闪光。基本上,我该如何设置窗口,使其在不显示的情况下绘制一些东西,因为我认为当它不可见时,它会忽略绘制调用

x33g5p2x

x33g5p2x1#

一个实际上隐藏的窗口(即未Map或未最小化)不拥有任何活动像素,因此您无法渲染到它。但是,如果您看到“白色闪光”,则说明窗口设置了非零背景色/画笔,这也会干扰正常渲染。因此,首先要做的是确保背景色/画笔未设置。以便它不会在暴露事件上闪烁。
如果你真的想准备一个渲染在窗口Map上可用,那么你可以通过渲染屏幕外的帧缓冲区对象来实现,然后在Map时可以使用glBlitFramebuffer快速填充窗口帧缓冲区

相关问题