当移动/调整大小时,OpenGL窗口会冻结

5

我正在使用LWJGL开发一款游戏。在移动窗口时(未来计划添加调整大小的代码),渲染循环会冻结。我希望在移动窗口时以某种方式继续运行。LWJGL不包括glutMainLoop。

显示属于OpenGL,而不是Java。

相关代码:

    regular = new DisplayMode(800,600);
    GL11.glClearColor(0.47f,0.55f,1.0f, 0.0f); 
    GL11.glClearDepth(1.0f); 
    try {
        Display.setDisplayMode(regular);
        Display.setTitle("Game Name");
        Display.setIcon(loadIcon("resources/icon.png"));
        Display.create();
        seedresult= new Random(seed);
    } catch (LWJGLException e) {
        e.printStackTrace();
    }
    while (!Display.isCloseRequested()) {
    Display.sync(60);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    //render objects
    Display.update();}
    System.exit(0);

当然,渲染循环会冻结,因为窗口正在处理移动事件,所以无法同时进行渲染。 - Christian Rau
我非常确定那是原因,但我想知道我该如何纠正它。 - Sean
1个回答

3

我做了这件事,而且并不花费很长时间,因为我已经将我的主渲染器包含在一个类中,我所要做的就是使它可运行,并在主函数中创建一个线程,但这并没有解决问题。 - Sean
好的,最后一次尝试......您能在游戏线程中设置最小休眠时间并告诉我状态吗? - Ayyappa
我在想的是,通常情况下,当事件被处理时 - 直到事件被服务,你的代码才会运行... - Ayyappa
将游戏运行方式更改为在画布内部运行已解决了屏幕冻结问题,但也带来了一些新问题,如果我真的想要解决它,我可以通过一些工作来解决。显然,如果您在显示器之外的线程中拥有画布,则在窗口事件期间它会继续运行游戏循环。由于我的游戏在渲染以外的所有方面都是多线程的,因此如果我能有效地使调整大小工作并且还有其他一些使移动窗口变得困难的事情,我可能会搁置这个问题。 - Sean
@Sean:抱歉,我不太明白你的意思:(。你能告诉我你做了哪些确切的更改使它工作吗? - Ayyappa
我创建了一个显示画布,启动了一个新线程,并创建了一个显示器并将画布设置为新线程中的父级(该线程还继续进行渲染循环)。 - Sean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接