diff --git a/src/main/java/com/replaymod/render/capturer/CubicPboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/CubicPboOpenGlFrameCapturer.java index cac970ee..1896b8c0 100644 --- a/src/main/java/com/replaymod/render/capturer/CubicPboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/CubicPboOpenGlFrameCapturer.java @@ -4,7 +4,7 @@ import com.replaymod.render.frame.CubicOpenGlFrame; import com.replaymod.render.frame.OpenGlFrame; public class CubicPboOpenGlFrameCapturer extends - MultiFramePboOpenGlFrameCapturer { + PboOpenGlFrameCapturer { private final int frameSize; public CubicPboOpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo, int frameSize) { diff --git a/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/PboOpenGlFrameCapturer.java similarity index 92% rename from src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java rename to src/main/java/com/replaymod/render/capturer/PboOpenGlFrameCapturer.java index 873f1fbb..af2f1389 100644 --- a/src/main/java/com/replaymod/render/capturer/MultiFramePboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/PboOpenGlFrameCapturer.java @@ -10,12 +10,12 @@ import org.lwjgl.opengl.GL12; import java.io.IOException; import java.nio.ByteBuffer; -public abstract class MultiFramePboOpenGlFrameCapturer & CaptureData> +public abstract class PboOpenGlFrameCapturer & CaptureData> extends OpenGlFrameCapturer { private final D[] data; private PixelBufferObject pbo, otherPBO; - public MultiFramePboOpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo, Class type, int framePixels) { + public PboOpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo, Class type, int framePixels) { super(worldRenderer, renderInfo); data = type.getEnumConstants(); diff --git a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java index 0c422f6e..2543c2ba 100644 --- a/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/SimplePboOpenGlFrameCapturer.java @@ -1,81 +1,20 @@ package com.replaymod.render.capturer; import com.replaymod.render.frame.OpenGlFrame; -import com.replaymod.render.utils.ByteBufferPool; -import com.replaymod.render.utils.PixelBufferObject; -import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension; -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL12; -import java.io.IOException; -import java.nio.ByteBuffer; - -public class SimplePboOpenGlFrameCapturer extends OpenGlFrameCapturer { - private final int bufferSize; - private PixelBufferObject pbo, otherPBO; +public class SimplePboOpenGlFrameCapturer extends PboOpenGlFrameCapturer { public SimplePboOpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo) { - super(worldRenderer, renderInfo); - - ReadableDimension size = renderInfo.getFrameSize(); - bufferSize = size.getHeight() * size.getWidth() * 4; - pbo = new PixelBufferObject(bufferSize, PixelBufferObject.Usage.READ); - otherPBO = new PixelBufferObject(bufferSize, PixelBufferObject.Usage.READ); - } - - private void swapPBOs() { - PixelBufferObject old = pbo; - pbo = otherPBO; - otherPBO = old; + super(worldRenderer, renderInfo, SinglePass.class, + renderInfo.getFrameSize().getWidth() * renderInfo.getFrameSize().getHeight()); } @Override - public boolean isDone() { - return framesDone >= renderInfo.getTotalFrames() + 2; + protected OpenGlFrame create(OpenGlFrame[] from) { + return from[0]; } - @Override - public OpenGlFrame process() { - OpenGlFrame frame = null; - - if (framesDone > 1) { - // Read pbo to memory - pbo.bind(); - ByteBuffer pboBuffer = pbo.mapReadOnly(); - ByteBuffer buffer = ByteBufferPool.allocate(bufferSize); - buffer.put(pboBuffer); - buffer.rewind(); - pbo.unmap(); - pbo.unbind(); - frame = new OpenGlFrame(framesDone - 2, frameSize, 4, buffer); - } - - if (framesDone < renderInfo.getTotalFrames()) { - // Then fill it again - renderFrame(framesDone, renderInfo.updateForNextFrame()); - } - - framesDone++; - swapPBOs(); - return frame; - } - - @Override - protected OpenGlFrame captureFrame(int frameId, CaptureData data) { - pbo.bind(); - - frameBuffer().beginWrite(true); - GL11.glReadPixels(0, 0, getFrameWidth(), getFrameHeight(), GL12.GL_BGRA, GL11.GL_UNSIGNED_BYTE, 0); - frameBuffer().endWrite(); - - pbo.unbind(); - return null; - } - - @Override - public void close() throws IOException { - super.close(); - pbo.delete(); - otherPBO.delete(); + public enum SinglePass implements CaptureData { + SINGLE_PASS } } diff --git a/src/main/java/com/replaymod/render/capturer/StereoscopicPboOpenGlFrameCapturer.java b/src/main/java/com/replaymod/render/capturer/StereoscopicPboOpenGlFrameCapturer.java index 95b36ef9..130936d7 100644 --- a/src/main/java/com/replaymod/render/capturer/StereoscopicPboOpenGlFrameCapturer.java +++ b/src/main/java/com/replaymod/render/capturer/StereoscopicPboOpenGlFrameCapturer.java @@ -4,7 +4,7 @@ import com.replaymod.render.frame.OpenGlFrame; import com.replaymod.render.frame.StereoscopicOpenGlFrame; public class StereoscopicPboOpenGlFrameCapturer - extends MultiFramePboOpenGlFrameCapturer { + extends PboOpenGlFrameCapturer { public StereoscopicPboOpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo) { super(worldRenderer, renderInfo, StereoscopicOpenGlFrameCapturer.Data.class,