У меня есть одна проблема с буфером кадров openGL. Я хочу достичь:Буфер кадров OpenGL + LibGDX
- Bind FBO1. Нарисуйте изображение1 в FBO1. Отвяжите FBO1.
- Bind FBO2. Нарисуйте FBO1 до FBO2. Отвяжите FBO2.
- Bind FBO1. Нарисуйте изображение2 в FBO1. Отвяжите FBO1.
- Draw FBO2 к экрану
То, что я ожидал увидеть: я ожидаю увидеть только image1 на экране, так как он обращается в первую FBO, а затем первый FBO обращается на второй FBO
В чем проблема: Я вижу как изображение1, так и изображение2 на нарисованном, что должно быть невозможным, потому что только первое изображение рисуется в FBO1, когда FBO1 рисуется в FBO2, и я рисую FBO2 только на экране.
Вот код, чтобы воспроизвести проблему:
// --- in show() method
this.img = new Texture(Gdx.files.internal("shaders/image.jpg"));
this.img2 = new Texture(Gdx.files.internal("shaders/image2.jpg"));
this.fbo = new FrameBuffer(Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
this.fbo2 = new FrameBuffer(Format.RGBA8888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
// --- in render() method
// start frame buffer 1 and draw image 1
this.fbo.begin();
{
this.batch.begin();
this.batch.draw(this.img, 0, 0, 400, 400, 0, 0, this.img.getWidth(), this.img.getHeight(), false, true);
this.batch.end();
}
this.fbo.end();
// start frame buffer 2 and frame buffer 1 output
this.fbo2.begin();
{
this.batch.begin();
this.batch.draw(this.fbo.getColorBufferTexture(), 500, 0, this.fbo.getColorBufferTexture().getWidth(), this.fbo.getColorBufferTexture().getHeight(), 0, 0, this.fbo.getColorBufferTexture()
.getWidth(), this.fbo.getColorBufferTexture().getHeight(), false, true);
this.batch.end();
}
this.fbo2.end();
// start frame buffer 1 again and draw image 2
this.fbo.begin();
{
this.batch.begin();
this.batch.draw(this.img2, 150, 150, 400, 400, 0, 0, this.img2.getWidth(), this.img2.getHeight(), false, true);
this.batch.end();
}
this.fbo.end();
// draw frame buffer 2 to the batch
this.batch.begin();
this.batch.draw(this.fbo2.getColorBufferTexture(), 0, 0);
this.batch.end();
Жеребьевка() методы немного долго, потому что я хочу передать flipY = True, так как OpenGL рисует кадр буферные вверх-вниз.
Параметры жеребьевке() метод, который я использую являются:
Texture texture, float x, float y, float width, float height, int srcX, int srcY, int srcWidth, int srcHeight, boolean flipX, boolean flipY
Что мне не хватает? Почему это происходит?
На самом деле я назвал glClear, но я сделал это, прежде чем связывать буфер, и каким-то образом я этого не заметил. Но теперь, увидев ваш комментарий, я снова просмотрел свой код и на этот раз увидел его. Спасибо! –