Refactor G2DRendererControl to initialize viewport dimensions with ImmutableCoordI2 and optimize viewport update logic
This commit is contained in:
@@ -23,9 +23,9 @@ public class G2DRendererControl implements RendererControl {
|
|||||||
|
|
||||||
private RendererData rendererData;
|
private RendererData rendererData;
|
||||||
|
|
||||||
private CoordI2 absoluteViewportDimension = REFERENCE_RESOLUTION;
|
private CoordI2 absoluteViewportDimension = ImmutableCoordI2.one();
|
||||||
|
|
||||||
private CoordI2 effectiveViewportDimension = REFERENCE_RESOLUTION;
|
private CoordI2 effectiveViewportDimension = ImmutableCoordI2.one();
|
||||||
|
|
||||||
private double scaleFactor = 1.0;
|
private double scaleFactor = 1.0;
|
||||||
|
|
||||||
@@ -153,15 +153,16 @@ public class G2DRendererControl implements RendererControl {
|
|||||||
public void updateViewPort(final boolean lockRenderer, final boolean async) {
|
public void updateViewPort(final boolean lockRenderer, final boolean async) {
|
||||||
// This method is called several times in a row by mainFrame resize event handler by intention
|
// This method is called several times in a row by mainFrame resize event handler by intention
|
||||||
// I've discovered in debugger that sometimes when only a black viewPort is displayed the volatile image backing the bufferStrategy is only a few pixels in size
|
// I've discovered in debugger that sometimes when only a black viewPort is displayed the volatile image backing the bufferStrategy is only a few pixels in size
|
||||||
// Letting the resize events do their job seemed to fix it
|
// Letting the resize events do their job seemed to fix it --> createBufferStrategy is called multiple times in a row here intentionally
|
||||||
|
|
||||||
final Runnable run = () -> {
|
final Runnable run = () -> {
|
||||||
if (lockRenderer) {
|
if (lockRenderer) {
|
||||||
this.renderer.getWriteLock().lock();
|
this.renderer.getWriteLock().lock();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.updateAbsoluteViewportPortDimension();
|
if (this.updateAbsoluteViewportPortDimension()) {
|
||||||
this.recalculate();
|
this.recalculate();
|
||||||
|
}
|
||||||
this.renderer.getMainFrame().createBufferStrategy();
|
this.renderer.getMainFrame().createBufferStrategy();
|
||||||
this.renderer.getMainFrame().resizeListenerEnabled = true;
|
this.renderer.getMainFrame().resizeListenerEnabled = true;
|
||||||
}
|
}
|
||||||
@@ -185,11 +186,14 @@ public class G2DRendererControl implements RendererControl {
|
|||||||
this.calculateViewportEffectiveDimension();
|
this.calculateViewportEffectiveDimension();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAbsoluteViewportPortDimension() {
|
private boolean updateAbsoluteViewportPortDimension() {
|
||||||
|
boolean changed = false;
|
||||||
final var absoluteDim = this.absoluteViewportDimension;
|
final var absoluteDim = this.absoluteViewportDimension;
|
||||||
if (absoluteDim == null || absoluteDim.getX() != this.renderer.getMainFrame().getWidth() || absoluteDim.getY() != this.renderer.getMainFrame().getHeight()) {
|
if (absoluteDim == null || absoluteDim.getX() != this.renderer.getMainFrame().getWidth() || absoluteDim.getY() != this.renderer.getMainFrame().getHeight()) {
|
||||||
this.absoluteViewportDimension = ImmutableCoordI2.create(this.renderer.getMainFrame().getWidth(), this.renderer.getMainFrame().getHeight());
|
this.absoluteViewportDimension = ImmutableCoordI2.create(this.renderer.getMainFrame().getWidth(), this.renderer.getMainFrame().getHeight());
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void calculateViewportEffectiveDimension() {
|
private void calculateViewportEffectiveDimension() {
|
||||||
@@ -242,7 +246,7 @@ public class G2DRendererControl implements RendererControl {
|
|||||||
public long getFrame() {
|
public long getFrame() {
|
||||||
return this.rendererData.getFrame();
|
return this.rendererData.getFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRendererData(final RendererData rendererData) {
|
public void setRendererData(final RendererData rendererData) {
|
||||||
this.rendererData = rendererData;
|
this.rendererData = rendererData;
|
||||||
|
|||||||
Reference in New Issue
Block a user