package openblocks.client.renderer.tileentity.guide;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import openblocks.Config;
import openblocks.OpenBlocks;
import openblocks.common.block.BlockGuide.Icons;
import openmods.Log;
import openmods.renderer.shaders.ArraysHelper;
import openmods.renderer.shaders.BufferHelper;
import openmods.renderer.shaders.ShaderHelper;
public class GuideRendererSelector {
private static Runnable createMarkerRenderer() {
return new Runnable() {
@Override
public void run() {
Tessellator t = Tessellator.instance;
RenderBlocks renderBlocks = new RenderBlocks();
renderBlocks.setRenderBounds(0.05D, 0.05D, 0.05D, 0.95D, 0.95D, 0.95D);
t.startDrawingQuads();
t.setBrightness(200);
renderBlocks.renderFaceXNeg(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
renderBlocks.renderFaceXPos(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
renderBlocks.renderFaceYNeg(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
renderBlocks.renderFaceYPos(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
renderBlocks.renderFaceZNeg(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
renderBlocks.renderFaceZPos(OpenBlocks.Blocks.guide, -0.5D, 0.0D, -0.5D, Icons.marker);
// important: don't draw!
}
};
}
private static IGuideRenderer createRenderer() {
final Runnable marker = createMarkerRenderer();
if (!ShaderHelper.isSupported() || !BufferHelper.isSupported() || !ArraysHelper.isSupported()) {
Log.debug("Advanced guide renderer not supported, falling back to legacy renderer.");
return new GuideLegacyRenderer(marker); // advanced renderer not supported :(
} else if (Config.useAdvancedRenderer == false) {
Log.debug("Advanced guide renderer disabled, falling back to legacy renderer.");
return new GuideLegacyRenderer(marker);
} else {
try {
return new GuideAdvancedRenderer(marker); // try to use the advanced renderer
} catch (Throwable e) {
Log.warn(e, "Error trying to create advanced renderer, falling back to legacy renderer");
return new GuideLegacyRenderer(marker); // fall back to the old renderer.
}
}
}
private static IGuideRenderer renderer;
public IGuideRenderer getRenderer() {
if (renderer == null) renderer = createRenderer();
return renderer;
}
}