Add OpenEXR export option
In preparation for depth map export.
This commit is contained in:
@@ -12,6 +12,7 @@ import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.capturer.StereoscopicPboOpenGlFrameCapturer;
|
||||
import com.replaymod.render.capturer.WorldRenderer;
|
||||
import com.replaymod.render.frame.CubicOpenGlFrame;
|
||||
import com.replaymod.render.frame.EXRFrame;
|
||||
import com.replaymod.render.frame.ODSOpenGlFrame;
|
||||
import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.frame.BitmapFrame;
|
||||
@@ -25,7 +26,23 @@ import com.replaymod.render.processor.OpenGlToBitmapProcessor;
|
||||
import com.replaymod.render.processor.StereoscopicToBitmapProcessor;
|
||||
import com.replaymod.render.utils.PixelBufferObject;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class Pipelines {
|
||||
public static Pipeline newEXRPipeline(RenderSettings.RenderMethod method, RenderInfo renderInfo, FrameConsumer<EXRFrame> consumer) {
|
||||
return newPipeline(method, renderInfo, new FrameConsumer<BitmapFrame>() {
|
||||
@Override
|
||||
public void consume(BitmapFrame frame) {
|
||||
consumer.consume(new EXRFrame(frame.getFrameId(), frame.getSize(), frame.getByteBuffer()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
consumer.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static Pipeline newPipeline(RenderSettings.RenderMethod method, RenderInfo renderInfo, FrameConsumer<BitmapFrame> consumer) {
|
||||
switch (method) {
|
||||
case DEFAULT:
|
||||
|
||||
@@ -43,6 +43,8 @@ import org.lwjgl.opengl.GL11;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
import com.replaymod.render.EXRWriter;
|
||||
import com.replaymod.render.frame.EXRFrame;
|
||||
import com.replaymod.render.mixin.MainWindowAccessor;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
@@ -120,12 +122,23 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
this.renderingPipeline = Pipelines.newBlendPipeline(this);
|
||||
this.ffmpegWriter = null;
|
||||
//#if MC>=11400
|
||||
} else if (settings.getEncodingPreset() == RenderSettings.EncodingPreset.EXR) {
|
||||
this.renderingPipeline = Pipelines.newEXRPipeline(settings.getRenderMethod(), this, new EXRWriter(settings.getOutputFile().toPath()) {
|
||||
@Override
|
||||
public void consume(EXRFrame frame) {
|
||||
gui.updatePreview(frame.getBgraBuffer(), frame.getSize());
|
||||
super.consume(frame);
|
||||
}
|
||||
});
|
||||
this.ffmpegWriter = null;
|
||||
//#endif
|
||||
} else {
|
||||
this.renderingPipeline = Pipelines.newPipeline(settings.getRenderMethod(), this,
|
||||
ffmpegWriter = new FFmpegWriter(this) {
|
||||
@Override
|
||||
public void consume(BitmapFrame frame) {
|
||||
gui.updatePreview(frame);
|
||||
gui.updatePreview(frame.getByteBuffer(), frame.getSize());
|
||||
super.consume(frame);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user