Черная текстура при получении FrameBuffer в LibGDX

В моей программе я сначала рендерил сцену, видимую какой-то камерой, а затем я хочу извлечь эту сцену (Colorbuffer) в объект текстуры, чтобы затем я мог нарисовать его в Quad, занимая весь экран. Хотя это выглядит глупо, идея состоит в том, чтобы просто посмотреть, работает ли текстура нормально, поэтому я могу использовать ее в другом, не столь глупом рендеринге (я пытаюсь применить отображение теней); и, к сожалению, это не работает, как я хотел. Вызов getColorBufferTexture() выглядит так, как будто он возвращает черную текстуру, независимо от того, какой окончательный цвет я даю FragColor в первом рендеринге Fragment Shader. Тестирование только первого рендера с ColorBuffer по умолчанию отображает на экране то, что ему нужно, поэтому с первым рендерингом проблем нет. Вот код:

Первый рендеринг,

FrameBuffer shadowBuffer = new FrameBuffer(Pixmap.Format.RGBA8888,20, 20, true);
        shadowBuffer.begin();
        shadowShaderProgram.begin();
        for(DisplayableObject obj : objects) {
            shadowShaderProgram.setUniformMatrix("u_modelViewProjectionMatrix", shadowCamera.getPVMatrix().mul(obj.getTMatrix()));
            shadowShaderProgram.setUniformMatrix("u_modelViewMatrix", shadowCamera.getVMatrix().mul(obj.getTMatrix()));
            obj.getTexture().bind();
            obj.getMesh().render(shadowShaderProgram, GL20.GL_TRIANGLES);
        }
        shadowShaderProgram.end();
        shadowBuffer.end();           
        Texture shadowMap = shadowBuffer.getColorBufferTexture();

А потом второй, пытаясь нарисовать текстуру,

Mesh mesh = new Mesh(true, 4, 6, new VertexAttribute(VertexAttributes.Usage.Position, 4, "a_position"), new VertexAttribute(VertexAttributes.Usage.TextureCoordinates, 2, "a_texCoord0"));
        mesh.setVertices(new float[] { //position, texCoord
            -1f, -1f, 0f, 1f, 0f, 0f,
            1f, -1f, 0f, 1f, 1f, 0f,
            1f, 1f, 0f, 1f, 1f, 1f,
            -1f, 1f, 0f, 1f, 0f, 1f
   });
        mesh.setIndices(new short[]{0,1,2,2,3,0});
        String vs = Gdx.files.internal("auxShaderVert.glsl").readString();
        String fs = Gdx.files.internal("auxShaderFrag.glsl").readString();
        ShaderProgram auxShader = new ShaderProgram(vs,fs);
        auxShader.begin();
        shadowMap.bind();
        auxShader.setUniformi("shadowMap", 0);
        mesh.render(auxShader,GL20.GL_TRIANGLES);
        auxShader.end();

Шейдеры этого второго рендеринга, соответственно:

VS,

attribute vec4 a_position;
attribute vec2 a_texCoord0;

varying vec2 v_texCoord;

void main() {
    v_texCoord = a_texCoord0;
    gl_Position = a_position;
}

FS,

uniform sampler2D shadowMap;
varying vec2 v_texCoord;

void main() {
    gl_FragColor = texture2D(shadowMap, v_texCoord);
}

Я не мог найти много помощи через сообщения и вопросы в Интернете, чтобы увидеть, что происходит с извлечением текстуры; надеюсь, вы можете помочь мне, я уверен, что это должно быть что-то действительно глупое...

Благодарю.

0 ответов

Другие вопросы по тегам