X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fsixth%2Fe3d%2Fgui%2FViewPanel.java;h=e068bf50f670c49f2e2fdbf9446d37d22bbcbc84;hb=HEAD;hp=a511bc78a1217611b2e0abbb67d10d38d40e1765;hpb=e87345f40ecb4ea526bd8d5dca58afaaee9ec6b3;p=sixth-3d.git diff --git a/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java b/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java index a511bc7..e068bf5 100755 --- a/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java +++ b/src/main/java/eu/svjatoslav/sixth/e3d/gui/ViewPanel.java @@ -18,6 +18,7 @@ import java.util.concurrent.ConcurrentHashMap; /** * Java Swing GUI panel that contains canvas for 3D rendering. + * Usually it is used as a part of {@link ViewFrame}. */ public class ViewPanel extends JPanel implements ComponentListener { private static final long serialVersionUID = 1683277888885045387L; @@ -27,11 +28,18 @@ public class ViewPanel extends JPanel implements ComponentListener { private final ShapeCollection rootShapeCollection = new ShapeCollection(); private final Set viewRenderListeners = ConcurrentHashMap.newKeySet(); public Color backgroundColor = Color.BLACK; + /** - * Last time this view was updated. + * Stores milliseconds when last frame was updated. This is needed to calculate time delta between frames. + * Time delta is used to calculate smooth animation. */ private long lastUpdateMillis = 0; + + /** + * Timer that is used to update canvas at target FPS rate. + */ private Timer canvasUpdateTimer; + private ViewUpdateTimerTask canvasUpdateTimerTask; private RenderingContext renderingContext = null; @@ -191,7 +199,7 @@ public class ViewPanel extends JPanel implements ComponentListener { * It tells view to update itself. View can decide if actual re-rendering of * graphics is needed. */ - void updateView() { + void ensureThatViewIsUpToDate() { maintainRenderingContext(); final int millisecondsPassedSinceLastUpdate = getMillisecondsPassedSinceLastUpdate(); @@ -220,6 +228,7 @@ public class ViewPanel extends JPanel implements ComponentListener { return; } + // create new rendering context if window size has changed if ((renderingContext == null) || (renderingContext.width != panelWidth) || (renderingContext.height != panelHeight)) {