1

私はいくつかのチュートリアルを読み、OpenGLES2.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

私に正しい方向を示してください、または私が私の仮定を間違えたときはいつでも。

チュートリアルが最適です。OpenGLES2.0のシャドウマップについてはあまり見つかりませんでした。

4

1 に答える 1

1

libGDXにバグがあり、glTexImage2Dテクスチャパラメータをnull以外にする必要がありました(アップロードするローカルテクスチャデータが常に存在する必要があることを意味します)。この変更で修正されました:https ://github.com/libgdx/libgdx/pull/228 。これは、0.9.8以降のリリースの一部になります(おそらく0.9.9リリース)。

于 2013-02-11T05:33:05.147 に答える