glGetTexImage возвращает 0 - PullRequest
0 голосов
/ 06 мая 2018

Возникла проблема: glGetTexImage возвращает пустой буфер байтов. В этом случае пустой буфер возвращается только в том случае, если вы пытаетесь получить его из сгенерированного изображения (в данном случае - карты глубины). В других случаях (когда текстура загружается из памяти) - все хорошо. Сгенерированная текстура визуализируется без проблем. Вот код ниже.

gl.glBindTexture(GL.GL_TEXTURE_2D, depthMap.get(0));
ByteBuffer pixels = TextureArray.createByteBuffer(1024, 1024, 4);
gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixels);

System.out.println(pixels.get(3)); // 0

Генерация текстуры:

gl.glBindTexture(GL.GL_TEXTURE_2D, depthMap.get(0));
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, width, height, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_FLOAT, null);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,GL. GL_NEAREST);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, depthMapFBO.get(0));
gl.glFramebufferTexture2D(GL.GL_FRAMEBUFFER, GL.GL_DEPTH_ATTACHMENT, GL.GL_TEXTURE_2D, depthMap.get(0), 0);
gl.glDrawBuffer(GL.GL_NONE);
gl.glReadBuffer(GL.GL_NONE);
gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0);
gl.glBindTexture(GL.GL_TEXTURE_2D, 0);

Буду благодарен за помощь

1 Ответ

0 голосов
/ 06 мая 2018

Как сказал BDL , я изменил GL.GL_RGBA на GL.GL_DEPTH_COMPONENT, и все заработало. Финальная версия кода:

gl.glGetTexImage(GL.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT, GL.GL_UNSIGNED_BYTE, pixels);
...