Черная текстура при получении 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);
}
Я не мог найти много помощи через сообщения и вопросы в Интернете, чтобы увидеть, что происходит с извлечением текстуры; надеюсь, вы можете помочь мне, я уверен, что это должно быть что-то действительно глупое...
Благодарю.