diff options
| author | Foghrye4 <foghrye4@gmail.com> | 2017-08-10 18:52:45 +0300 |
|---|---|---|
| committer | Foghrye4 <foghrye4@gmail.com> | 2017-08-10 18:52:45 +0300 |
| commit | 0427ab89f1753a44b30cbc35ce021cbbdc845109 (patch) | |
| tree | abe418ff5ec174e712fe8dedd434548a945b15a3 /src/main/java/ihl/model/IHLBlockRenderer.java | |
| parent | 877312184c472d9845e5ef1008bc538f4634059f (diff) | |
fix missing source folder
Diffstat (limited to 'src/main/java/ihl/model/IHLBlockRenderer.java')
| -rw-r--r-- | src/main/java/ihl/model/IHLBlockRenderer.java | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/java/ihl/model/IHLBlockRenderer.java b/src/main/java/ihl/model/IHLBlockRenderer.java new file mode 100644 index 0000000..81efbd9 --- /dev/null +++ b/src/main/java/ihl/model/IHLBlockRenderer.java @@ -0,0 +1,78 @@ +package ihl.model;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import ihl.handpump.BlockWithCoordinates;
+import net.minecraft.client.renderer.GLAllocation;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.world.ChunkCache;
+import net.minecraft.world.World;
+
+@SideOnly(value=Side.CLIENT)
+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();
+ }
+}
|
