Hi all,
I'm doing some custom rendering using the TickeEvent.RenderTickEvent event, and when the game is in fullscreen mode, i consistently get a lag spike every second. This doesn't happen when the game is not rendering using the full screen resolution. This makes me believe that it is something to do with the resolution that i render at with the custom render code. What i don't understand why it would spike every second and then run at a constant fps, until it then spikes again. I think it may have something to with memory management but i'm not sure.
Here is the code:
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onTick(TickEvent.RenderTickEvent event) {
Minecraft mc = Minecraft.getMinecraft();
if(!mc.inGameHasFocus)
return;
if(mc.skipRenderWorld)
return;
//backup all rendering information
Entity entityBackup = mc.getRenderViewEntity();
PortalRenderGlobal pgr = new PortalRenderGlobal(mc);
GameSettings settings = mc.gameSettings;
RenderGlobal renderBackup = mc.renderGlobal;
int framebufferBackup = GL11.glGetInteger(GL_DRAW_FRAMEBUFFER_BINDING);
int renderDistanceBackup = settings.renderDistanceChunks;
//get the width and height to render at
int width = mc.displayWidth;
int height = mc.displayHeight;;
//mc.renderGlobal = pgr;
mc.setRenderViewEntity(entity);
EntityRenderer entityRenderer = mc.entityRenderer;
//bind a new framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
//bind the texture to render to and set its parameters
glBindTexture(GL_TEXTURE_2D, renderedTexture);
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0,GL_RGB, GL_UNSIGNED_BYTE, BufferUtils.createByteBuffer(width * height*3));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//bind the deptjh render buffer
glBindRenderbuffer(GL_RENDERBUFFER, depthrenderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthrenderbuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderedTexture, 0);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glViewport(0,0,width,height);
//render the world
int fps = Math.min(30, settings.limitFramerate);
entityRenderer.renderWorld(event.renderTickTime,0L);
glBindFramebuffer(GL_FRAMEBUFFER, framebufferBackup);
mc.renderGlobal = renderBackup;
mc.setRenderViewEntity(entityBackup);
}
Where entity, frambuffer, renderedTexture and depthrenderbuffer are all global variables.
Any help or advice would be appreciated.