Skip to content

Commit

Permalink
Share RenderManager between views (fixes #77)
Browse files Browse the repository at this point in the history
  • Loading branch information
Johni0702 committed Jun 9, 2019
1 parent af6df2c commit 46ad6a6
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import net.minecraft.client.gui.GuiBossOverlay
import net.minecraft.client.multiplayer.WorldClient
import net.minecraft.client.particle.ParticleManager
import net.minecraft.client.renderer.*
import net.minecraft.client.renderer.entity.RenderManager
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher
import net.minecraft.entity.Entity
import net.minecraft.network.*
Expand All @@ -31,14 +30,23 @@ internal class ClientViewImpl(
override val camera: EntityPlayerSP get() = player!!

private var itemRenderer: ItemRenderer? = null
private var renderManager: RenderManager? = null
private var renderGlobal: RenderGlobal? = null
private var entityRenderer: EntityRenderer? = null
private var particleManager: ParticleManager? = null
private var pointedEntity: Entity? = null
private var objectMouseOver: RayTraceResult? = null
private var guiBossOverlay: GuiBossOverlay? = null

// RenderManager
private var renderPosX = 0.0
private var renderPosY = 0.0
private var renderPosZ = 0.0
private var playerViewX = 0f
private var playerViewY = 0f
private var viewerPosX = 0.0
private var viewerPosY = 0.0
private var viewerPosZ = 0.0

// ClippingHelper
private val frustum = Array(6) { FloatArray(4) }
private val projectionMatrix = FloatArray(16)
Expand Down Expand Up @@ -69,7 +77,14 @@ internal class ClientViewImpl(
particleManager = mc.effectRenderer
renderGlobal = mc.renderGlobal
entityRenderer = mc.entityRenderer
renderManager = mc.renderManager
renderPosX = mc.renderManager.renderPosX
renderPosY = mc.renderManager.renderPosY
renderPosZ = mc.renderManager.renderPosZ
playerViewX = mc.renderManager.playerViewX
playerViewY = mc.renderManager.playerViewY
viewerPosX = mc.renderManager.viewerPosX
viewerPosY = mc.renderManager.viewerPosY
viewerPosZ = mc.renderManager.viewerPosZ
world = mc.world
player = mc.player
netManager = mc.connection?.netManager
Expand Down Expand Up @@ -104,7 +119,17 @@ internal class ClientViewImpl(
mc.effectRenderer = particleManager
mc.renderGlobal = renderGlobal
mc.entityRenderer = entityRenderer
mc.renderManager = renderManager
mc.renderManager.renderPosX = renderPosX
mc.renderManager.renderPosY = renderPosY
mc.renderManager.renderPosZ = renderPosZ
mc.renderManager.playerViewX = playerViewX
mc.renderManager.playerViewY = playerViewY
mc.renderManager.viewerPosX = viewerPosX
mc.renderManager.viewerPosY = viewerPosY
mc.renderManager.viewerPosZ = viewerPosZ
mc.renderManager.world = world
mc.renderManager.renderViewEntity = player
mc.renderManager.pointedEntity = pointedEntity
mc.player = player
mc.world = world
val connection = mc.connection
Expand Down Expand Up @@ -196,19 +221,16 @@ internal class ClientViewImpl(
} else {
LOGGER.debug("Reusing stored view")
view = ClientViewImpl(manager, viewId, world, camera, channel, networkManager)
view.renderManager = oldView.renderManager
view.itemRenderer = oldView.itemRenderer
view.renderGlobal = oldView.renderGlobal
view.entityRenderer = oldView.entityRenderer
view.particleManager = oldView.particleManager
}

view.withView {
if (view.renderManager == null) {
if (view.itemRenderer == null) {
// Need to initialize the newly create view state while it's active since several of the components
// get their own dependencies implicitly via the Minecraft instance
view.renderManager = RenderManager(mc.textureManager, mc.renderItem)
mc.renderManager = view.renderManager // Implicitly passed to RenderGlobal and ItemRenderer via mc
view.itemRenderer = ItemRenderer(mc)
mc.itemRenderer = view.itemRenderer // Implicitly passed to EntityRenderer via mc
view.renderGlobal = RenderGlobal(mc)
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/META-INF/betterportals_at.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public net.minecraft.network.NetHandlerPlayServer func_184342_d()V #captureCurre
public net.minecraft.client.network.NetHandlerPlayClient field_147300_g # clientWorldController
public-f net.minecraft.client.network.NetHandlerPlayClient field_147302_e # netManager
public-f net.minecraft.client.renderer.ActiveRenderInfo *
public net.minecraft.client.renderer.entity.RenderManager *
public net.minecraft.server.management.PlayerChunkMapEntry field_187283_c # players
public net.minecraft.server.management.PlayerChunkMap field_72699_b # players
public net.minecraft.entity.EntityTracker field_72793_b # entries
Expand Down

0 comments on commit 46ad6a6

Please sign in to comment.