From d3e7a9b857df6030597f5c21bba34c7c04309e81 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 7 May 2024 16:16:46 +1000 Subject: [PATCH] Improve RBMK render CPU performance by switching to VBOs --- src/main/java/com/hbm/main/ResourceManager.java | 9 ++++++--- .../render/tileentity/RenderRBMKControlRod.java | 2 +- .../hbm/render/tileentity/RenderRBMKLid.java | 17 +++++++++-------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index bc2017527..fa6578bf5 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1465,12 +1465,15 @@ public class ResourceManager { public static final IModelCustom deco_computer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/puter.obj")); + // Some RBMK elements are loaded twice due to VBOs not supporting tessellation public static final IModelCustom rbmk_element = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_element.obj")); + public static final IModelCustom rbmk_element_vbo = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_element.obj")).asVBO(); public static final IModelCustom rbmk_reflector = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_reflector.obj")); public static final IModelCustom rbmk_rods = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_rods.obj")); - public static final IModelCustom rbmk_crane_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane_console.obj")); - public static final IModelCustom rbmk_crane = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane.obj")); - public static final IModelCustom rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")); + public static final IModelCustom rbmk_rods_vbo = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_rods.obj")).asVBO(); + public static final IModelCustom rbmk_crane_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane_console.obj")).asVBO(); + public static final IModelCustom rbmk_crane = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/crane.obj")).asVBO(); + public static final IModelCustom rbmk_console = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/rbmk/rbmk_console.obj")).asVBO(); public static final IModelCustom rbmk_debris = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/rbmk/debris.obj")); public static final ResourceLocation rbmk_crane_console_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crane_console.png"); public static final ResourceLocation rbmk_crane_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rbmk_crane.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKControlRod.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKControlRod.java index 0420f0ecb..2c19afce5 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKControlRod.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKControlRod.java @@ -48,7 +48,7 @@ public class RenderRBMKControlRod extends TileEntitySpecialRenderer { double level = control.lastLevel + (control.level - control.lastLevel) * i; GL11.glTranslated(0, level, 0); - ResourceManager.rbmk_rods.renderPart("Lid"); + ResourceManager.rbmk_rods_vbo.renderPart("Lid"); GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java index 465c33e67..2783e8508 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKLid.java @@ -71,36 +71,37 @@ public class RenderRBMKLid extends TileEntitySpecialRenderer { if(meta == RBMKBase.DIR_GLASS_LID.ordinal()) { bindTexture(texture_glass); } else { - if(control.getBlockType() instanceof RBMKBase) { bindTexture(((RBMKBase)control.getBlockType()).coverTexture); } else { bindTexture(texture); } + cherenkov = false; } - if((control instanceof TileEntityRBMKBoiler || control instanceof TileEntityRBMKHeater) && meta != RBMKBase.DIR_GLASS_LID.ordinal()) - ResourceManager.rbmk_rods.renderPart("Lid"); - ResourceManager.rbmk_element.renderPart("Lid"); + if((control instanceof TileEntityRBMKBoiler || control instanceof TileEntityRBMKHeater) && meta != RBMKBase.DIR_GLASS_LID.ordinal()) { + ResourceManager.rbmk_rods_vbo.renderPart("Lid"); + } else { + ResourceManager.rbmk_element_vbo.renderPart("Lid"); + } + GL11.glPopMatrix(); } if(hasRod) { - GL11.glPushMatrix(); bindTexture(texture_rods); for(int j = 0; j <= offset; j++) { - - ResourceManager.rbmk_element.renderPart("Rods"); + ResourceManager.rbmk_element_vbo.renderPart("Rods"); GL11.glTranslated(0, 1, 0); } + GL11.glPopMatrix(); } if(cherenkov) { - GL11.glTranslated(0, 0.75, 0); GL11.glDisable(GL11.GL_CULL_FACE);