OpenGL ES 2.0 - 渲染深度缓冲区

时间:2013-01-30 08:12:15

标签: java opengl-es opengl-es-2.0 libgdx shadow-mapping

我已经阅读了一些教程并尝试围绕OpenGL ES 2.0。在尝试创建深度缓冲区时,我的JVM崩溃了。顺便说一句,我正在使用LibGDX框架。

  IntBuffer depthBuffer = BufferUtils.newIntBuffer(1);

  // AFAIK this puts 1 texture name into depthBuffer.
  Gdx.gl20.glGenTextures(1, depthBuffer);
  int depthBufferValue = depthBuffer.get();

  // I now bind the texture, so I can use it.
  Gdx.gl20.glBindTexture(GL20.GL_TEXTURE_2D, depthBufferValue);

我不知道glTexImage2D做了什么,我想它应该会生成深度纹理。

下一行崩溃了JVM

Gdx.gl20.glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT,  BufferUtils.newIntBuffer(1));

下一行会导致NullPointerException

我不知道应该将glTexImage2D最后一个参数放在哪里。我见过iOS的例子,他们放了NULL

Gdx.gl20.glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, null);

代码的其余部分

  // This code should attach the depth texture into frame buffer
  IntBuffer depthFrameBuffer = BufferUtils.newIntBuffer(1);
  glGenFramebuffers(1, depthFrameBuffer);
  int depthFrameBufferValue = depthBuffer.get();
  glBindFramebuffer(GL_FRAMEBUFFER, depthFrameBufferValue);
  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthFrameBufferValue, 0);
  // I dont know what should I call next or what type of shader should I use

请指出正确的方向,或者在我的假设中确实犯了错误。

教程是最好的,我在OpenGL ES 2.0中没有找到太多关于阴影贴图

1 个答案:

答案 0 :(得分:1)

libGDX中存在一个错误,要求glTexImage2D纹理参数为非空(意味着必须始终存在一些本地纹理数据才能上传)。通过此更改修复了此问题:https://github.com/libgdx/libgdx/pull/228。这将是0.9.8之后发布的一部分(很可能是0.9.9版本)。

相关问题