【问题标题】:Lwjgl 3 white screenLwjgl 3 白屏
【发布时间】:2015-04-17 22:42:12
【问题描述】:

我尝试使用 VAO、VBO 和 DrawArrays() 渲染一个 Rectangle。现在我已经用 GLFW 设置了我的窗口,并出现了一个窗口。即使我更改了清除颜色并调用 glClear(),窗口也始终为白色。

我的窗口创建代码:

public static long createWindow(int width, int height, String title){

    long window;
    window = GLFW.glfwCreateWindow(width, height, title, MemoryUtil.NULL, MemoryUtil.NULL);

    if (window == MemoryUtil.NULL) {
        GLFW.glfwTerminate();
        System.out.println("Couldn't create window");
        System.exit(-1);
    }

    GLFW.glfwMakeContextCurrent(window);
    GLFW.glfwSwapInterval(1);
    GLFW.glfwShowWindow(window);
    GLContext.createFromCurrent();
    GL11.glClearColor(0.0f, 0.0f, 0.5f, 1.0f);
    GLFW.glfwSwapInterval(1);
    GLFW.glfwShowWindow(window);
    System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION));
    return window;

我的主循环:

public class Mainloop {
public static void mainloop(int vaoID,int vboID, int vertexCount, long window, ShaderProgram Shader){
    //Setup Before Rendering
    GL11.glClearColor(0.0f, 0.5f, 0.5f, 1.0f);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
    GLFW.glfwPollEvents();
    //Bind Arrays
    GL30.glBindVertexArray(vaoID);
    GL20.glEnableVertexAttribArray(0);
    //Bind Shader
    Shader.start();
    //Render
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexCount);
    //Clean-up Shader
    Shader.stop();
    //Clean-up Array
    GL20.glDisableVertexAttribArray(0);
    GL30.glBindVertexArray(0);

    }
}

【问题讨论】:

    标签: java opengl window lwjgl glfw


    【解决方案1】:

    GLFW 窗口使用两个颜色缓冲区。缓冲区之一是当前显示的缓冲区(即保存您现在看到的窗口内容的缓冲区)。另一个在后台缓冲区中。所有 OpenGL 绘制命令(glClearglDrawArrays)都渲染到后台缓冲区中。这样做是为了避免screen tearing,当您在显示缓冲区时绘制到缓冲区时会发生这种情况,导致部分图像被绘制并因此比其他部分更早显示,从而导致闪烁效果。

    现在因为所有命令都只在后台缓冲区中绘制,它们实际上并没有显示在窗口中,这意味着你看到的只有白色背景。你必须通过调用glfwSwapBuffers(window) 告诉 GLFW 你想交换缓冲区。然后显示的缓冲区变成背景缓冲区(并为新的绘制命令做好准备),背景缓冲区变成显示的缓冲区,这意味着您在前一帧中绘制的所有内容现在都显示在窗口中。然后就可以清空后台缓冲区,渲染下一帧了。

    简而言之:mainloop的末尾添加GLFW.glfwSwapBuffers(window);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多