Hey there,
I am trying to store the last 20 frames of the display using FrameBuffer
currently I am storing them in a queue. if frame queue is more than 20, will remove first queue every tick and every tick it will add a FrameBuffer from (Minecraft#getFrameBuffer)
When I want to get last second of footage, I render every FrameBuffer using this method
private synchronized static BufferedImage getImageFromFrameBuffer(Framebuffer buffer, int width, int height) {
int k = buffer.framebufferTextureWidth * buffer.framebufferTextureHeight;
if (pixelBuffer == null || pixelBuffer.capacity() < k) {
pixelBuffer = BufferUtils.createIntBuffer(k);
pixelValues = new int[k];
}
GL11.glPixelStorei(GL11.GL_PACK_ALIGNMENT, 1);
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
pixelBuffer.clear();
GlStateManager.bindTexture(buffer.framebufferTexture);
GL11.glGetTexImage(GL11.GL_TEXTURE_2D, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, pixelBuffer);
pixelBuffer.get(pixelValues);
TextureUtil.processPixelValues(pixelValues, buffer.framebufferTextureWidth, buffer.framebufferTextureHeight);
BufferedImage bufferedimage = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR);
int l = buffer.framebufferTextureHeight - buffer.framebufferHeight;
bufferedimage.setRGB(0, 0, width, height, pixelValues, l*buffer.framebufferTextureWidth, buffer.framebufferTextureWidth);
return bufferedimage;
}
But the output frames is not the one I expected, it renders 20 seconds forward not backward that I stored in the queue,
is this problem with how i render framebuffer or anything? Help would be appreciated
SRC: https://github.com/HypixelCommunityClient/HCC/tree/master/src/main/java/com/hcc/mods/capturex
(Licensed under GNU AGPLv3)
- Cubxity