Allow custom resolution for all video rendering modes

Remove tiled rendering
Choose different rendering strategy based on video size and framebuffer support
Make size of video writer queue configurable via system properties
This commit is contained in:
johni0702
2015-06-03 21:19:41 +02:00
parent 6b038adaa1
commit d171ff4346
25 changed files with 855 additions and 452 deletions

View File

@@ -59,15 +59,51 @@ public class GuiRenderSettings extends GuiScreen {
fontRendererObj, 0, 0, 200, 5);
rendererDropdown.addSelectionListener(new RendererDropdownListener());
int i = 0;
for (RendererSettings r : RendererSettings.values()) {
rendererDropdown.addElement(r);
rendererDropdown.setHoverText(i, r.getDescription());
i++;
}
renderButton = new GuiButton(GuiConstants.RENDER_SETTINGS_RENDER_BUTTON, 0, 0, I18n.format("replaymod.gui.render"));
cancelButton = new GuiButton(GuiConstants.RENDER_SETTINGS_CANCEL_BUTTON, 0, 0, I18n.format("replaymod.gui.cancel"));
advancedButton = new GuiButton(GuiConstants.RENDER_SETTINGS_ADVANCED_BUTTON, 0, 0, I18n.format("replaymod.gui.rendersettings.advanced"));
customResolution = new GuiCheckBox(GuiConstants.RENDER_SETTINGS_RESOLUTION_CHECKBOX, 0, 0, I18n.format("replaymod.gui.rendersettings.customresolution"), false);
customResolution.enabled = false;
xRes = new GuiNumberInput(GuiConstants.RENDER_SETTINGS_RESOLUTION_X, fontRendererObj, 0, 0, 50, 1, 100000, mc.displayWidth, false);
yRes = new GuiNumberInput(GuiConstants.RENDER_SETTINGS_RESOLUTION_Y, fontRendererObj, 0, 0, 50, 1, 100000, mc.displayHeight, false);
xRes = new GuiNumberInput(GuiConstants.RENDER_SETTINGS_RESOLUTION_X, fontRendererObj, 0, 0, 50, 1, 100000, mc.displayWidth, false) {
@Override
public void setCursorPosition(int p_146190_1_) {
super.setCursorPosition(p_146190_1_);
RendererSettings renderer = rendererDropdown.getElement(rendererDropdown.getSelectionIndex());
Integer value = getIntValueNullable();
if (value != null) {
if (renderer == RendererSettings.CUBIC) {
yRes.text = Integer.toString(Math.max(1, value * 3 / 4));
}
if (renderer == RendererSettings.EQUIRECTANGULAR) {
yRes.text = Integer.toString(Math.max(1, value / 2));
}
}
}
};
yRes = new GuiNumberInput(GuiConstants.RENDER_SETTINGS_RESOLUTION_Y, fontRendererObj, 0, 0, 50, 1, 100000, mc.displayHeight, false) {
@Override
public void setCursorPosition(int p_146190_1_) {
super.setCursorPosition(p_146190_1_);
RendererSettings renderer = rendererDropdown.getElement(rendererDropdown.getSelectionIndex());
Integer value = getIntValueNullable();
if (value != null) {
if (renderer == RendererSettings.CUBIC) {
xRes.text = Integer.toString(value * 4 / 3);
}
if (renderer == RendererSettings.EQUIRECTANGULAR) {
xRes.text = Integer.toString(value * 2);
}
}
}
};
xRes.setEnabled(false);
yRes.setEnabled(false);
@@ -101,13 +137,6 @@ public class GuiRenderSettings extends GuiScreen {
youtubeExport = new GuiCheckBox(GuiConstants.RENDER_SETTINGS_YOUTUBE_READY, 0, 0, I18n.format("replaymod.gui.rendersettings.exportyoutube"), true);
ignoreCamDir.enabled = youtubeExport.enabled = false;
int i = 0;
for(RendererSettings r : RendererSettings.values()) {
rendererDropdown.addElement(r);
rendererDropdown.setHoverText(i, r.getDescription());
i++;
}
permanentButtons.add(advancedButton);
permanentButtons.add(renderButton);
permanentButtons.add(cancelButton);
@@ -320,7 +349,6 @@ public class GuiRenderSettings extends GuiScreen {
private enum RendererSettings {
DEFAULT("default"),
TILED("tiled"),
STEREOSCOPIC("stereoscopic"),
CUBIC("cubic"),
EQUIRECTANGULAR("equirectangular");
@@ -363,10 +391,11 @@ public class GuiRenderSettings extends GuiScreen {
options.setSkyColor(colorPicker.getPickedColor());
}
options.setWidth(getWidthSetting());
options.setHeight(getHeightSetting());
if(r == RendererSettings.DEFAULT) {
renderer = new DefaultFrameRenderer(options);
} else if(r == RendererSettings.TILED) {
renderer = new TilingFrameRenderer(options, getWidthSetting(), getHeightSetting());
} else if(r == RendererSettings.STEREOSCOPIC) {
renderer = new StereoscopicFrameRenderer(options);
} else if(r == RendererSettings.CUBIC) {
@@ -393,32 +422,18 @@ public class GuiRenderSettings extends GuiScreen {
RendererSettings s = rendererDropdown.getElement(selectionIndex);
if(s == RendererSettings.DEFAULT) {
customResolution.enabled = false;
xRes.setEnabled(false);
yRes.setEnabled(false);
youtubeExport.enabled = ignoreCamDir.enabled = false;
} else if(s == RendererSettings.TILED) {
customResolution.enabled = true;
xRes.setEnabled(customResolution.isChecked());
yRes.setEnabled(customResolution.isChecked());
youtubeExport.enabled = ignoreCamDir.enabled = false;
} else if(s == RendererSettings.STEREOSCOPIC) {
customResolution.enabled = false;
xRes.setEnabled(false);
yRes.setEnabled(false);
youtubeExport.enabled = ignoreCamDir.enabled = false;
} else if(s == RendererSettings.CUBIC) {
customResolution.enabled = false;
xRes.setEnabled(false);
yRes.setEnabled(false);
youtubeExport.enabled = true;
ignoreCamDir.enabled = false;
} else if(s == RendererSettings.EQUIRECTANGULAR) {
customResolution.enabled = false;
xRes.setEnabled(false);
yRes.setEnabled(false);
youtubeExport.enabled = ignoreCamDir.enabled = true;
}
xRes.setCursorPositionEnd();
yRes.setCursorPositionEnd();
}
}
}