diff options
| author | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
|---|---|---|
| committer | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
| commit | 05c78126859231a68e199dc34613689bd0978e2f (patch) | |
| tree | 050bea104a18c72905095d29f31bec2935a27a24 /ihl/model/IHLBlockRenderer.java | |
Initial commit
Diffstat (limited to 'ihl/model/IHLBlockRenderer.java')
| -rw-r--r-- | ihl/model/IHLBlockRenderer.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/ihl/model/IHLBlockRenderer.java b/ihl/model/IHLBlockRenderer.java new file mode 100644 index 0000000..35c6e6c --- /dev/null +++ b/ihl/model/IHLBlockRenderer.java @@ -0,0 +1,75 @@ +package ihl.model;
+
+import ihl.handpump.BlockWithCoordinates;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import net.minecraft.client.renderer.GLAllocation;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import org.lwjgl.opengl.GL11;
+import net.minecraft.world.ChunkCache;
+import net.minecraft.world.World;
+
+public class IHLBlockRenderer {
+
+ private RenderBlocks renderBlocks;
+ private final Map<BlockWithCoordinates, Integer> renderCache = new HashMap<BlockWithCoordinates, Integer>();
+ public static IHLBlockRenderer instance;
+
+ public IHLBlockRenderer()
+ {
+ renderBlocks=RenderBlocks.getInstance();
+ instance=this;
+ }
+
+ public void refreshDisplayLists(int diplayLists, List<BlockWithCoordinates> bwc, ChunkCache iBlockAccess)
+ {
+ if (bwc==null || bwc.isEmpty())
+ {
+ return;
+ }
+ renderBlocks.blockAccess=iBlockAccess;
+ GL11.glNewList(diplayLists, 4864 /*GL_COMPILE*/);
+ Iterator<BlockWithCoordinates> bwci = bwc.iterator();
+ while(bwci.hasNext())
+ {
+ BlockWithCoordinates bwce = bwci.next();
+ renderBlock(bwce);
+ }
+ GL11.glEndList();
+ }
+
+
+ public int getBlockDisplayLists(BlockWithCoordinates bwc, World world) {
+ if (bwc.block == null)
+ {
+ return -1;
+ }
+ if(renderCache.containsKey(bwc))
+ {
+ return renderCache.get(bwc);
+ }
+ int diplayLists = GLAllocation.generateDisplayLists(1);
+ if(renderBlocks.blockAccess==null || !renderBlocks.blockAccess.equals(world))
+ {
+ renderBlocks.blockAccess=world;
+ }
+ GL11.glNewList(diplayLists, 4864 /*GL_COMPILE*/);
+ renderBlock(bwc);
+ GL11.glEndList();
+ renderCache.put(bwc, diplayLists);
+ return diplayLists;
+ }
+
+ private void renderBlock(BlockWithCoordinates bwc)
+ {
+ Tessellator tessellator = Tessellator.instance;
+ tessellator.startDrawingQuads();
+ renderBlocks.renderBlockByRenderType(bwc.block, bwc.x, bwc.y, bwc.z);
+ tessellator.draw();
+ }
+}
|
