微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JOGL glDrawArrays 在调用 glClear(GL_COLOR_BUFFER_BIT) 后不起作用

如何解决JOGL glDrawArrays 在调用 glClear(GL_COLOR_BUFFER_BIT) 后不起作用

关于reshape方法的openGL初始化代码(GLEventListener):

join()

没有清除颜色缓冲区的显示方法。我使用了 FPS Animator。

    public void reshape(GLAutoDrawable glautodrawable,int x,int y,int width,int height) {
        final GL2 gl = glautodrawable.getGL().getGL2();

        //gl.glFrontFace(GL2.GL_CW);
        gl.glEnable(GL2.GL_DEPTH_TEST);
        gl.glDepthMask(true);
        gl.glClearDepth(1.0);
        gl.glDepthFunc(GL2.GL_ALWAYS);
        gl.glColorMask(true,true,true);
        gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT,1);
        gl.glClearColor(0.0f,1.0f,0.0f,0.5f);
        
        //build Buffers,program and extra;
    }

结果:

enter image description here



清除缓冲区的显示方法

    public void display( GLAutoDrawable drawable ) {
        final GL2 gl = drawable.getGL().getGL2();
        gl.glClear(GL2.GL_DEPTH_BUFFER_BIT);

        float time = (float)(System.currentTimeMillis() - startTime) / 1000.0f;
        System.out.println("Time: " + time);
        gl.gluniform1f(0,time);
        gl.glDrawArrays(GL.GL_TRIANGLE_STRIP,4);
    }

结果:

enter image description here



所以我认为,结果应该是一样的,因为我清除了缓冲区,然后画了一个正方形。但正如你在上面的结果中看到的,只有绿色清晰的颜色。

统一位置 0 是片段着色器中的浮点变量“时间”,它影响方形星星的亮度。但它并没有像我预期的那样随着时间的推移而改变。 但是只有第一次调用 gluniform1f() 是这样应用的(gl.gluniform1f(0,20)):

enter image description here

有趣的是,当我使用 glClear(GL_COLOR_BUFFER_BIT) 在互联网上尝试示例时,它工作正常。

    public void display( GLAutoDrawable drawable ) {
        final GL2 gl = drawable.getGL().getGL2();
        gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT);

        float time = (float)(System.currentTimeMillis() - startTime) / 1000.0f;
        System.out.println("Time: " + time);
        gl.gluniform1f(0,4);
    }

结果:

enter image description here


我的代码有什么问题?还是版本问题或错误?为什么示例工作正常,但我的不行?
或者有没有办法检查实际发生/调试的情况?

解决方法

寻找一些使用 glDrawArrays 或 glDrawElements 的例子,我找到了这个。

github link

与我的代码不同的是两行:

//after rendering in display method
gl.glUseProgram(0);
gl.glBindVertexArray(0);

在我的代码中添加两行后,它按我的预期工作。在 glClear(GL_COLOR_BUFFER_BIT) 之后绘制的正方形工作正常,并且统一值会随着我的预期而改变。 但我不确定为什么这是我的问题的解决方案。因为当我在 C++ 中使用 openGL 时,代码运行良好,无需添加两行代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。