bdkuhman Posted February 12, 2014 Posted February 12, 2014 I am trying to add a custom model to my block, but it crashes when placed in the world. BlockEggStand: public class BlockEggStand extends Block{ public BlockEggStand() { super(Material.iron); this.setCreativeTab(StrongholdCraft.tabStrongholdCraft); } public int getRenderType() { return BlockEggStandRenderer.myRenderID; } } ClientProxy: public class ClientProxy extends CommonProxy { public void registerRenderers(){ RenderingRegistry.registerBlockHandler(new BlockEggStandRenderer()); } @Override public int addArmor(String armor) { return RenderingRegistry.addNewArmourRendererPrefix(armor); } } BlockEggStandRenderer: public class BlockEggStandRenderer implements ISimpleBlockRenderingHandler { IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("strongholdcraft:models/eggStand.obj")); public static int myRenderID; public BlockEggStandRenderer() { BlockEggStandRenderer.myRenderID = RenderingRegistry.getNextAvailableRenderId(); } @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { GL11.glTranslatef(-0.5F, -0.5F, 0.5F); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/blocks/iron_block.png")); model.renderAll(); GL11.glTranslatef(0.5F, 0.5F, -0.5F); } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { GL11.glTranslatef(-0.5F, -0.5F, 0.5F); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("textures/blocks/iron_block.png")); model.renderAll(); GL11.glTranslatef(0.5F, 0.5F, -0.5F); return false; } @Override public boolean shouldRender3DInInventory(int modelId) { return true; } @Override public int getRenderId() { return BlockEggStandRenderer.myRenderID; } } crash report: [21:21:45] [Client thread/FATAL]: Unreported exception thrown! java.lang.IllegalStateException: Already tesselating! at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:301) ~[Tessellator.class:?] at net.minecraftforge.client.model.obj.WavefrontObject.renderAll(WavefrontObject.java:182) ~[WavefrontObject.class:?] at strongholdCraft.common.render.BlockEggStandRenderer.renderWorldBlock(BlockEggStandRenderer.java:41) ~[blockEggStandRenderer.class:?] at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:118) ~[RenderingRegistry.class:?] at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:53) ~[FMLRenderAccessLibrary.class:?] at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:522) ~[RenderBlocks.class:?] at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:246) ~[WorldRenderer.class:?] at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1672) ~[RenderGlobal.class:?] at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1325) ~[EntityRenderer.class:?] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1160) ~[EntityRenderer.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1064) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:951) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_40] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_40] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_40] at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?] ---- Minecraft Crash Report ---- // Oops. Time: 2/11/14 9:21 PM Description: Unexpected error java.lang.IllegalStateException: Already tesselating! at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:301) at net.minecraftforge.client.model.obj.WavefrontObject.renderAll(WavefrontObject.java:182) at strongholdCraft.common.render.BlockEggStandRenderer.renderWorldBlock(BlockEggStandRenderer.java:41) at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:118) at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:53) at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:522) at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:246) at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1672) at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1325) at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1160) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1064) at net.minecraft.client.Minecraft.run(Minecraft.java:951) at net.minecraft.client.main.Main.main(Main.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at net.minecraft.client.renderer.Tessellator.startDrawing(Tessellator.java:301) at net.minecraftforge.client.model.obj.WavefrontObject.renderAll(WavefrontObject.java:182) at strongholdCraft.common.render.BlockEggStandRenderer.renderWorldBlock(BlockEggStandRenderer.java:41) at cpw.mods.fml.client.registry.RenderingRegistry.renderWorldBlock(RenderingRegistry.java:118) at net.minecraft.src.FMLRenderAccessLibrary.renderWorldBlock(FMLRenderAccessLibrary.java:53) at net.minecraft.client.renderer.RenderBlocks.renderBlockByRenderType(RenderBlocks.java:522) at net.minecraft.client.renderer.WorldRenderer.updateRenderer(WorldRenderer.java:246) at net.minecraft.client.renderer.RenderGlobal.updateRenderers(RenderGlobal.java:1672) at net.minecraft.client.renderer.EntityRenderer.renderWorld(EntityRenderer.java:1325) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityClientPlayerMP['Player541'/206, l='MpServer', x=129.82, y=65.13, z=318.79]] Chunk stats: MultiplayerChunkCache: 256, 256 Level seed: 0 Level generator: ID 00 - default, ver 1. Features enabled: false Level generator options: Level spawn location: World: (132,64,295), Chunk: (at 4,4,7 in 8,18; contains blocks 128,0,288 to 143,255,303), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511) Level time: 32478 game time, 4313 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 113 total; [EntitySkeleton['Skeleton'/4135, l='MpServer', x=160.13, y=27.00, z=312.63], EntityBat['Bat'/4611, l='MpServer', x=73.44, y=17.54, z=384.75], EntityZombie['Zombie'/4139, l='MpServer', x=158.44, y=26.00, z=311.50], EntitySkeleton['Skeleton'/4141, l='MpServer', x=157.44, y=26.00, z=312.09], EntityCreeper['Creeper'/4151, l='MpServer', x=170.50, y=31.00, z=287.03], EntityCreeper['Creeper'/3002, l='MpServer', x=139.50, y=54.00, z=272.50], EntityItem['item.tile.eggStand'/1651, l='MpServer', x=129.09, y=61.13, z=314.38], EntityCreeper['Creeper'/5714, l='MpServer', x=81.50, y=21.00, z=384.50], EntityCreeper['Creeper'/5715, l='MpServer', x=84.50, y=21.00, z=384.50], EntityZombie['Zombie'/5716, l='MpServer', x=76.75, y=23.00, z=388.16], EntityBat['Bat'/5197, l='MpServer', x=62.34, y=36.00, z=386.72], EntitySpider['Spider'/6000, l='MpServer', x=165.50, y=26.00, z=377.50], EntityZombie['Zombie'/6001, l='MpServer', x=183.34, y=31.00, z=386.91], EntityCreeper['Creeper'/6002, l='MpServer', x=179.50, y=31.00, z=384.50], EntityZombie['Zombie'/6003, l='MpServer', x=190.50, y=25.00, z=316.50], EntityCow['Cow'/55, l='MpServer', x=63.16, y=71.00, z=312.19], EntitySkeleton['Skeleton'/2493, l='MpServer', x=58.50, y=61.00, z=338.50], EntityCow['Cow'/57, l='MpServer', x=59.41, y=74.00, z=322.63], EntityCow['Cow'/56, l='MpServer', x=50.22, y=75.00, z=314.81], EntityBat['Bat'/3788, l='MpServer', x=96.43, y=24.07, z=373.27], EntityBat['Bat'/1848, l='MpServer', x=173.25, y=23.10, z=285.25], EntityEnderman['Enderman'/6393, l='MpServer', x=81.50, y=40.00, z=285.50], EntityCreeper['Creeper'/6391, l='MpServer', x=97.50, y=42.00, z=377.50], EntityCow['Cow'/76, l='MpServer', x=71.28, y=68.00, z=303.75], EntitySquid['Squid'/3465, l='MpServer', x=175.41, y=57.66, z=370.44], EntityPig['Pig'/78, l='MpServer', x=76.19, y=71.00, z=379.91], EntityPig['Pig'/79, l='MpServer', x=78.50, y=78.00, z=376.50], EntitySquid['Squid'/3471, l='MpServer', x=169.28, y=57.88, z=362.50], EntitySquid['Squid'/3470, l='MpServer', x=171.25, y=59.19, z=365.13], EntityCreeper['Creeper'/3229, l='MpServer', x=87.50, y=36.00, z=376.50], EntitySquid['Squid'/3468, l='MpServer', x=169.50, y=56.00, z=366.19], EntityCreeper['Creeper'/3231, l='MpServer', x=83.50, y=36.00, z=380.50], EntitySquid['Squid'/3475, l='MpServer', x=185.88, y=55.22, z=373.84], EntityCreeper['Creeper'/3749, l='MpServer', x=90.50, y=25.00, z=283.50], EntityZombie['Zombie'/81, l='MpServer', x=65.50, y=30.00, z=387.50], EntityPig['Pig'/80, l='MpServer', x=78.47, y=72.00, z=377.53], EntityCow['Cow'/95, l='MpServer', x=91.31, y=63.00, z=303.47], EntityCow['Cow'/94, l='MpServer', x=80.50, y=72.00, z=293.38], EntityCow['Cow'/102, l='MpServer', x=81.38, y=64.00, z=331.34], EntityCow['Cow'/103, l='MpServer', x=87.06, y=64.00, z=322.03], EntityZombie['Zombie'/7146, l='MpServer', x=169.06, y=25.00, z=259.50], EntityCow['Cow'/100, l='MpServer', x=81.31, y=67.00, z=327.47], EntityCow['Cow'/101, l='MpServer', x=87.47, y=68.00, z=324.31], EntityCreeper['Creeper'/6602, l='MpServer', x=63.50, y=36.00, z=390.50], EntityCow['Cow'/98, l='MpServer', x=87.28, y=70.00, z=305.47], EntityZombie['Zombie'/4981, l='MpServer', x=199.50, y=37.00, z=325.50], EntityCow['Cow'/99, l='MpServer', x=88.59, y=63.00, z=317.31], EntityZombie['Zombie'/6600, l='MpServer', x=64.50, y=36.00, z=389.50], EntityCow['Cow'/96, l='MpServer', x=91.81, y=62.06, z=309.09], EntityCreeper['Creeper'/6601, l='MpServer', x=61.50, y=36.00, z=393.50], EntityCow['Cow'/97, l='MpServer', x=82.44, y=65.00, z=304.47], EntitySkeleton['Skeleton'/6598, l='MpServer', x=63.50, y=36.00, z=389.50], EntityZombie['Zombie'/6599, l='MpServer', x=60.50, y=36.00, z=388.50], EntitySkeleton['Skeleton'/6596, l='MpServer', x=62.50, y=36.00, z=393.50], EntitySkeleton['Skeleton'/6597, l='MpServer', x=62.50, y=36.00, z=389.50], EntityZombie['Zombie'/6594, l='MpServer', x=183.50, y=58.00, z=241.50], EntityBat['Bat'/6353, l='MpServer', x=192.97, y=20.33, z=275.82], EntityPig['Pig'/106, l='MpServer', x=82.50, y=76.00, z=377.50], EntityBat['Bat'/6352, l='MpServer', x=186.75, y=19.36, z=266.42], EntityZombie['Zombie'/6592, l='MpServer', x=175.88, y=55.00, z=243.47], EntityCow['Cow'/104, l='MpServer', x=94.88, y=69.00, z=340.03], EntityCow['Cow'/119, l='MpServer', x=106.97, y=64.00, z=259.03], EntityCow['Cow'/118, l='MpServer', x=111.69, y=63.00, z=267.50], EntityCow['Cow'/117, l='MpServer', x=110.31, y=60.00, z=272.47], EntitySkeleton['Skeleton'/7162, l='MpServer', x=55.40, y=61.00, z=365.61], EntityZombie['Zombie'/7165, l='MpServer', x=91.50, y=41.00, z=247.50], EntitySkeleton['Skeleton'/7152, l='MpServer', x=167.50, y=56.00, z=272.50], EntityBat['Bat'/125, l='MpServer', x=92.52, y=42.57, z=373.59], EntitySquid['Squid'/123, l='MpServer', x=109.50, y=57.00, z=321.51], EntitySquid['Squid'/122, l='MpServer', x=108.47, y=57.20, z=320.42], EntityCreeper['Creeper'/121, l='MpServer', x=96.50, y=21.00, z=296.50], EntityZombie['Zombie'/6608, l='MpServer', x=142.50, y=11.00, z=307.50], EntityCow['Cow'/120, l='MpServer', x=100.53, y=64.00, z=274.69], EntityCreeper['Creeper'/136, l='MpServer', x=138.47, y=42.00, z=309.97], EntityCreeper['Creeper'/135, l='MpServer', x=141.00, y=42.00, z=315.56], EntityCreeper['Creeper'/3943, l='MpServer', x=146.50, y=34.00, z=288.50], EntityBat['Bat'/5364, l='MpServer', x=168.08, y=37.49, z=277.80], EntitySkeleton['Skeleton'/158, l='MpServer', x=167.50, y=14.00, z=270.50], EntitySquid['Squid'/3416, l='MpServer', x=188.72, y=53.19, z=315.66], EntitySquid['Squid'/3415, l='MpServer', x=191.03, y=54.28, z=314.38], EntityCreeper['Creeper'/7260, l='MpServer', x=114.50, y=15.00, z=315.50], EntityClientPlayerMP['Player541'/206, l='MpServer', x=129.82, y=65.13, z=318.79], EntityBat['Bat'/6739, l='MpServer', x=149.00, y=14.89, z=252.25], EntityBat['Bat'/4606, l='MpServer', x=111.25, y=26.10, z=301.09], EntitySquid['Squid'/3343, l='MpServer', x=167.72, y=54.19, z=343.28], EntityBat['Bat'/4603, l='MpServer', x=117.63, y=25.10, z=301.25], EntityBat['Bat'/4602, l='MpServer', x=110.33, y=23.41, z=306.48], EntitySquid['Squid'/3355, l='MpServer', x=154.58, y=50.05, z=304.50], EntitySquid['Squid'/3354, l='MpServer', x=162.50, y=50.00, z=305.50], EntitySquid['Squid'/3353, l='MpServer', x=185.16, y=52.69, z=352.81], EntitySquid['Squid'/3358, l='MpServer', x=160.16, y=49.00, z=305.44], EntitySquid['Squid'/3357, l='MpServer', x=161.47, y=51.00, z=301.50], EntitySquid['Squid'/3356, l='MpServer', x=157.38, y=49.00, z=303.50], EntitySquid['Squid'/3346, l='MpServer', x=170.66, y=51.81, z=342.28], EntityBat['Bat'/5304, l='MpServer', x=150.46, y=24.18, z=319.85], EntitySquid['Squid'/3344, l='MpServer', x=161.06, y=54.13, z=335.31], EntitySpider['Spider'/5062, l='MpServer', x=164.03, y=53.00, z=261.34], EntitySquid['Squid'/3350, l='MpServer', x=172.66, y=54.34, z=345.75], EntitySpider['Spider'/2123, l='MpServer', x=68.06, y=34.00, z=380.75], EntitySquid['Squid'/3348, l='MpServer', x=177.06, y=54.34, z=346.50], EntityCreeper['Creeper'/5251, l='MpServer', x=166.13, y=15.00, z=280.78], EntitySquid['Squid'/3371, l='MpServer', x=151.81, y=48.00, z=343.38], EntityCreeper['Creeper'/5252, l='MpServer', x=163.50, y=20.00, z=292.50], EntityCreeper['Creeper'/5253, l='MpServer', x=160.94, y=20.00, z=291.38], EntitySquid['Squid'/3374, l='MpServer', x=143.09, y=49.34, z=349.72], EntitySquid['Squid'/3375, l='MpServer', x=144.51, y=47.45, z=336.06], EntityCreeper['Creeper'/7017, l='MpServer', x=102.50, y=45.00, z=276.50], EntitySkeleton['Skeleton'/7018, l='MpServer', x=100.50, y=45.00, z=274.50], EntityZombie['Zombie'/7025, l='MpServer', x=117.50, y=21.00, z=262.50], EntitySquid['Squid'/3377, l='MpServer', x=136.75, y=50.31, z=353.81], EntitySquid['Squid'/3379, l='MpServer', x=152.31, y=48.88, z=347.34], EntitySquid['Squid'/3378, l='MpServer', x=144.91, y=50.34, z=351.28], EntityItem['item.tile.eggStand'/1690, l='MpServer', x=128.25, y=62.13, z=315.16]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:418) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2557) at net.minecraft.client.Minecraft.run(Minecraft.java:980) at net.minecraft.client.main.Main.main(Main.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) -- System Details -- Details: Minecraft Version: 1.7.2 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.7.0_40, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 785425712 bytes (749 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M AABB Pool Size: 1834 (102704 bytes; 0 MB) allocated, 1800 (100800 bytes; 0 MB) used IntCache: cache: 1, tcache: 1, allocated: 12, tallocated: 94 FML: MCP v9.01-pre FML v7.2.116.1024 Minecraft Forge 10.12.0.1024 4 mods loaded, 4 mods active mcp{8.09} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available FML{7.2.116.1024} [Forge Mod Loader] (forgeSrc-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Forge{10.12.0.1024} [Minecraft Forge] (forgeSrc-1.7.2-10.12.0.1024.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available strongholdcraft{0.0.1} [strongholdCraft] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available Launched Version: 1.6 LWJGL: 2.9.0 OpenGL: AMD Radeon HD 6800 Series GL version 4.2.12002 Compatibility Profile Context 9.12.0.0, ATI Technologies Inc. Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [] Current Language: ~~ERROR~~ NullPointerException: null Profiler Position: N/A (disabled) Vec3 Pool Size: 2863 (160328 bytes; 0 MB) allocated, 2250 (126000 bytes; 0 MB) used Anisotropic Filtering: Off (1) #@!@# Game crashed! Crash report saved to: #@!@# E:\Minecraft Modding\StrongholdCraft\StrongholdCraft 1.7\.\crash-reports\crash-2014-02-11_21.21.45-client.txt [21:21:45] [server thread/INFO]: Stopping server [21:21:45] [Client Shutdown Thread/INFO]: Stopping server [21:21:45] [server thread/INFO]: Saving players [21:21:45] [Client Shutdown Thread/INFO]: Saving players [21:21:45] [server thread/INFO]: Saving worlds [21:21:45] [server thread/INFO]: Saving chunks for level 'New World'/Overworld AL lib: (EE) alc_cleanup: 1 device not closed Quote
bdkuhman Posted February 12, 2014 Author Posted February 12, 2014 update for lastest forge I updated to latest forge, updated obfuscations, and the crash is still happening. I updated the code in the post and the crash report is also updated. Quote
opssemnik Posted February 12, 2014 Posted February 12, 2014 i know can be a bit crazy but can you put a model = AdvancedModelLoader.loadModel(new ResourceLocation("strongholdcraft:models/eggStand.obj")); on the 1st line of renderWorldBlock ? Quote
bdkuhman Posted February 12, 2014 Author Posted February 12, 2014 i know can be a bit crazy but can you put a model = AdvancedModelLoader.loadModel(new ResourceLocation("strongholdcraft:models/eggStand.obj")); on the 1st line of renderWorldBlock ? Same crash happens Quote
ShetiPhian Posted March 2, 2014 Posted March 2, 2014 Before ISimpleBlockRenderingHandler is called the tessellator is started, the model render commands attempt to start the tessellator. This causes the crash. By adding a tile entity to your block you can use TileEntitySpecialRenderer to solve the problem. Or since your renderer is simple you can stop the tessellator before your code, and start it again after your code. Tessellator.instance.draw(); GL11.glPushMatrix() <your render code> GL11.glPopMatrix() FMLClientHandler.instance().getClient().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); // This is required or the textures will be messed up. Tessellator.instance.startDrawingQuads(); This has drawbacks, GL11.glRotatef and GL11.glScalef do not work as expected, both of move the model instead. There might be a better way to render models without tile entities but this is the only one I know of. Bantasaurusrex is correct GL11.glPushMatrix() and GL11.glPopMatrix() are required, otherwise any models drawn after yours messes up. Quote
Bantasaurusrex Posted March 3, 2014 Posted March 3, 2014 You forgot to put in GL11.glPushMatrix() and GL11.glPopMatrix() at the start and end. Quote
Glenn Posted March 4, 2014 Posted March 4, 2014 Minecraft uses a special class to render, the Tessellator. When the tessellator is used, it has to be started with tessellator.startDrawing(drawmode), where the drawmode is a specific way of drawing specified in OpenGL. When you send a coodinate (a vertex) to the tessellator, it is pushed into an array. This array will continue expanding until you do tessellator.draw(). At that point, the array of vertices is sent to your graphics processor so that it may render it. If tessellator.startDrawing(drawmode) is called while it is already collecting vertices, the "Already tessellating" exception is thrown. You get this problem because Forge's .obj renderer is designed to send its own vertices then draw them instantly. Therefore, it's calling tessellator.startDrawing(drawmode) and tessellator.draw() by itself, which must not be done during the block rendering phase. If you somehow were able to stop the model renderer from calling the suspected methods, there is still a potential problem. Blocks are rendered with the GL_QUADS drawmode, which means a square face will be drawn for every 4 vertices you send in. The model may not be rendered with this drawmode, which would completely mess up the rendering. The model renderer could even have several calls to both startDrawing and draw. Encasing your model.renderAll with Tessellator.instance.draw() above and Tessellator.instance.startDrawingQuads() below in BlockEggStandRenderer.renderWorldBlock is not a viable solution. Because of technical reasons, this can mess up the rendering of the blocks surrounding this one. It's fine to render your .obj model in renderInventoryBlock, but you need another solution for renderWorldBlock. You could try to render your block programmatically instead of using a model, or alternatively give the block a tile entity. Tile entity blocks can be rendered independently from other blocks, and their rendering does not suffer from the limitations of standard block rendering. Either solution should be covered by tutorials. Quote http://i.imgur.com/YOLa0KX.png[/img]
MoxEmerald Posted March 7, 2014 Posted March 7, 2014 I use the implementation that @Glenn advises against, but have not noticed rendering errors. There may be something else at work there. It should be noted that the frivolous use of tile entities is discouraged, so I would try to make it work by instructing the Tessellator instance to "draw" and "startDrawingQuads" at the beginning and end of your method respectively. After doing this, most rendering errors can be dealt with on a case by case basis. Having said that, rendering your block programmatically would be better, like Glenn Suggested, if inconvenient to your artistry. Technical Reason [tek-ni-kuhl ree-zuh n] (noun): You probably can't be bothered. (Shame on you) Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.