public void run() { init(); engine = new Engine(); long lastTime = System.nanoTime(); double delta = 0.0; // Amout of nanoseconds in 1/60th of a second double ns = 1000000000.0 / 60.0; long timer = System.currentTimeMillis(); int updates = 0; int frames = 0; while (running) { long now = System.nanoTime(); delta += (now - lastTime) / ns; lastTime = now; // if delta >= than one then the amount of time >= 1/60th of a second if (delta >= 1.0) { update(); updates++; delta--; } render(); frames++; // If a second has passed, we print the stats if (System.currentTimeMillis() - timer > 1000) { timer += 1000; System.out.println(updates + " ups, " + frames + " fps"); updates = 0; frames = 0; } if (glfwWindowShouldClose(window) == GL_TRUE) running = false; } engine.CleanUp(); keyCallback.release(); sizeCallback.release(); mouseCallback.release(); focusCallback.release(); glfwDestroyWindow(window); glfwTerminate(); }
private void displayDebugInfo(long l) { long l1 = 0xfe502aL; if (prevFrameTime == -1L) { prevFrameTime = System.nanoTime(); } long l2 = System.nanoTime(); tickTimes[numRecordedFrameTimes & frameTimes.length - 1] = l; frameTimes[numRecordedFrameTimes++ & frameTimes.length - 1] = l2 - prevFrameTime; prevFrameTime = l2; GL11.glClear(256); GL11.glMatrixMode(5889 /*GL_PROJECTION*/); GL11.glLoadIdentity(); GL11.glOrtho(0.0D, displayWidth, displayHeight, 0.0D, 1000D, 3000D); GL11.glMatrixMode(5888 /*GL_MODELVIEW0_ARB*/); GL11.glLoadIdentity(); GL11.glTranslatef(0.0F, 0.0F, -2000F); GL11.glLineWidth(1.0F); GL11.glDisable(3553 /*GL_TEXTURE_2D*/); Tessellator tessellator = Tessellator.instance; tessellator.startDrawing(7); int i = (int) (l1 / 0x30d40L); tessellator.setColorOpaque_I(0x20000000); tessellator.addVertex(0.0D, displayHeight - i, 0.0D); tessellator.addVertex(0.0D, displayHeight, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight - i, 0.0D); tessellator.setColorOpaque_I(0x20200000); tessellator.addVertex(0.0D, displayHeight - i * 2, 0.0D); tessellator.addVertex(0.0D, displayHeight - i, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight - i, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight - i * 2, 0.0D); tessellator.draw(); long l3 = 0L; for (int j = 0; j < frameTimes.length; j++) { l3 += frameTimes[j]; } int k = (int) (l3 / 0x30d40L / (long) frameTimes.length); tessellator.startDrawing(7); tessellator.setColorOpaque_I(0x20400000); tessellator.addVertex(0.0D, displayHeight - k, 0.0D); tessellator.addVertex(0.0D, displayHeight, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight, 0.0D); tessellator.addVertex(frameTimes.length, displayHeight - k, 0.0D); tessellator.draw(); tessellator.startDrawing(1); for (int i1 = 0; i1 < frameTimes.length; i1++) { int j1 = ((i1 - numRecordedFrameTimes & frameTimes.length - 1) * 255) / frameTimes.length; int k1 = (j1 * j1) / 255; k1 = (k1 * k1) / 255; int i2 = (k1 * k1) / 255; i2 = (i2 * i2) / 255; if (frameTimes[i1] > l1) { tessellator.setColorOpaque_I(0xff000000 + k1 * 0x10000); } else { tessellator.setColorOpaque_I(0xff000000 + k1 * 256); } long l4 = frameTimes[i1] / 0x30d40L; long l5 = tickTimes[i1] / 0x30d40L; tessellator.addVertex((float) i1 + 0.5F, (float) ((long) displayHeight - l4) + 0.5F, 0.0D); tessellator.addVertex((float) i1 + 0.5F, (float) displayHeight + 0.5F, 0.0D); tessellator.setColorOpaque_I(0xff000000 + k1 * 0x10000 + k1 * 256 + k1 * 1); tessellator.addVertex((float) i1 + 0.5F, (float) ((long) displayHeight - l4) + 0.5F, 0.0D); tessellator.addVertex( (float) i1 + 0.5F, (float) ((long) displayHeight - (l4 - l5)) + 0.5F, 0.0D); } tessellator.draw(); GL11.glEnable(3553 /*GL_TEXTURE_2D*/); }
public void run() { running = true; try { startGame(); } catch (Exception exception) { exception.printStackTrace(); onMinecraftCrash(new UnexpectedThrowable("Failed to start game", exception)); return; } try { long l = System.currentTimeMillis(); int i = 0; do { if (!running) { break; } try { if (mcApplet != null && !mcApplet.isActive()) { break; } AxisAlignedBB.clearBoundingBoxPool(); Vec3D.initialize(); if (mcCanvas == null && Display.isCloseRequested()) { shutdown(); } if (isGamePaused && theWorld != null) { float f = timer.renderPartialTicks; timer.updateTimer(); timer.renderPartialTicks = f; } else { timer.updateTimer(); } long l1 = System.nanoTime(); for (int j = 0; j < timer.elapsedTicks; j++) { ticksRan++; try { runTick(); continue; } catch (MinecraftException minecraftexception1) { theWorld = null; } changeWorld1(null); displayGuiScreen(new GuiConflictWarning()); } long l2 = System.nanoTime() - l1; checkGLError("Pre render"); RenderBlocks.fancyGrass = gameSettings.fancyGraphics; sndManager.func_338_a(thePlayer, timer.renderPartialTicks); GL11.glEnable(3553 /*GL_TEXTURE_2D*/); if (theWorld != null) { theWorld.updatingLighting(); } if (!Keyboard.isKeyDown(65)) { Display.update(); } if (thePlayer != null && thePlayer.isEntityInsideOpaqueBlock()) { gameSettings.thirdPersonView = false; } if (!skipRenderWorld) { if (playerController != null) { playerController.setPartialTime(timer.renderPartialTicks); } entityRenderer.updateCameraAndRender(timer.renderPartialTicks); } if (!Display.isActive()) { if (fullscreen) { toggleFullscreen(); } Thread.sleep(10L); } if (gameSettings.showDebugInfo) { displayDebugInfo(l2); } else { prevFrameTime = System.nanoTime(); } guiAchievement.updateAchievementWindow(); Thread.yield(); if (Keyboard.isKeyDown(65)) { Display.update(); } screenshotListener(); if (mcCanvas != null && !fullscreen && (mcCanvas.getWidth() != displayWidth || mcCanvas.getHeight() != displayHeight)) { displayWidth = mcCanvas.getWidth(); displayHeight = mcCanvas.getHeight(); if (displayWidth <= 0) { displayWidth = 1; } if (displayHeight <= 0) { displayHeight = 1; } resize(displayWidth, displayHeight); } checkGLError("Post render"); i++; isGamePaused = !isMultiplayerWorld() && currentScreen != null && currentScreen.doesGuiPauseGame(); while (System.currentTimeMillis() >= l + 1000L) { debug = (new StringBuilder()) .append(i) .append(" fps, ") .append(WorldRenderer.chunksUpdated) .append(" chunk updates") .toString(); WorldRenderer.chunksUpdated = 0; l += 1000L; i = 0; } } catch (MinecraftException minecraftexception) { theWorld = null; changeWorld1(null); displayGuiScreen(new GuiConflictWarning()); } catch (OutOfMemoryError outofmemoryerror) { func_28002_e(); displayGuiScreen(new GuiErrorScreen()); System.gc(); } } while (true); } catch (MinecraftError minecrafterror) { } catch (Throwable throwable) { func_28002_e(); throwable.printStackTrace(); onMinecraftCrash(new UnexpectedThrowable("Unexpected error", throwable)); } finally { shutdownMinecraftApplet(); } }