modules/graphics/src/main/java/com/sun/javafx/tk/quantum/UploadingPainter.java
Print this page
*** 44,54 ****
// resolveRTT is a temporary render target to "resolve" a msaa render buffer
// into a normal color render target.
private RTTexture resolveRTT = null;
private QueuedPixelSource pixelSource = new QueuedPixelSource(true);
! private float penScale;
UploadingPainter(GlassScene view) {
super(view);
}
--- 44,54 ----
// resolveRTT is a temporary render target to "resolve" a msaa render buffer
// into a normal color render target.
private RTTexture resolveRTT = null;
private QueuedPixelSource pixelSource = new QueuedPixelSource(true);
! private float penScaleX, penScaleY;
UploadingPainter(GlassScene view) {
super(view);
}
*** 62,73 ****
resolveRTT = null;
}
}
@Override
! public float getPixelScaleFactor() {
! return sceneState.getRenderScale();
}
@Override public void run() {
renderLock.lock();
--- 62,78 ----
resolveRTT = null;
}
}
@Override
! public float getPixelScaleFactorX() {
! return sceneState.getRenderScaleX();
! }
!
! @Override
! public float getPixelScaleFactorY() {
! return sceneState.getRenderScaleY();
}
@Override public void run() {
renderLock.lock();
*** 86,104 ****
}
if (factory == null || !factory.isDeviceReady()) {
return;
}
! float scale = getPixelScaleFactor();
int bufWidth = sceneState.getRenderWidth();
int bufHeight = sceneState.getRenderHeight();
// Repaint everything on pen scale or view size change because
// texture contents are no longer correct.
// Repaint everything on new texture dimensions because otherwise
// our upload logic below may fail with index out of bounds.
! boolean needsReset = (penScale != scale ||
penWidth != viewWidth ||
penHeight != viewHeight ||
rttexture == null ||
rttexture.getContentWidth() != bufWidth ||
rttexture.getContentHeight() != bufHeight);
--- 91,111 ----
}
if (factory == null || !factory.isDeviceReady()) {
return;
}
! float scalex = getPixelScaleFactorX();
! float scaley = getPixelScaleFactorY();
int bufWidth = sceneState.getRenderWidth();
int bufHeight = sceneState.getRenderHeight();
// Repaint everything on pen scale or view size change because
// texture contents are no longer correct.
// Repaint everything on new texture dimensions because otherwise
// our upload logic below may fail with index out of bounds.
! boolean needsReset = (penScaleX != scalex ||
! penScaleY != scaley ||
penWidth != viewWidth ||
penHeight != viewHeight ||
rttexture == null ||
rttexture.getContentWidth() != bufWidth ||
rttexture.getContentHeight() != bufHeight);
*** 117,152 ****
rttexture = factory.createRTTexture(bufWidth, bufHeight, WrapMode.CLAMP_NOT_NEEDED,
sceneState.isMSAA());
if (rttexture == null) {
return;
}
! penScale = scale;
penWidth = viewWidth;
penHeight = viewHeight;
freshBackBuffer = true;
}
Graphics g = rttexture.createGraphics();
if (g == null) {
disposeRTTexture();
sceneState.getScene().entireSceneNeedsRepaint();
return;
}
! g.scale(scale, scale);
paintImpl(g);
freshBackBuffer = false;
int outWidth = sceneState.getOutputWidth();
int outHeight = sceneState.getOutputHeight();
! float outScale = sceneState.getOutputScale();
RTTexture rtt;
if (rttexture.isMSAA() || outWidth != bufWidth || outHeight != bufHeight) {
rtt = resolveRenderTarget(g, outWidth, outHeight);
} else {
rtt = rttexture;
}
! Pixels pix = pixelSource.getUnusedPixels(outWidth, outHeight, outScale);
IntBuffer bits = (IntBuffer) pix.getPixels();
int rawbits[] = rtt.getPixels();
if (rawbits != null) {
--- 124,161 ----
rttexture = factory.createRTTexture(bufWidth, bufHeight, WrapMode.CLAMP_NOT_NEEDED,
sceneState.isMSAA());
if (rttexture == null) {
return;
}
! penScaleX = scalex;
! penScaleY = scaley;
penWidth = viewWidth;
penHeight = viewHeight;
freshBackBuffer = true;
}
Graphics g = rttexture.createGraphics();
if (g == null) {
disposeRTTexture();
sceneState.getScene().entireSceneNeedsRepaint();
return;
}
! g.scale(scalex, scaley);
paintImpl(g);
freshBackBuffer = false;
int outWidth = sceneState.getOutputWidth();
int outHeight = sceneState.getOutputHeight();
! float outScaleX = sceneState.getOutputScaleX();
! float outScaleY = sceneState.getOutputScaleY();
RTTexture rtt;
if (rttexture.isMSAA() || outWidth != bufWidth || outHeight != bufHeight) {
rtt = resolveRenderTarget(g, outWidth, outHeight);
} else {
rtt = rttexture;
}
! Pixels pix = pixelSource.getUnusedPixels(outWidth, outHeight, outScaleX, outScaleY);
IntBuffer bits = (IntBuffer) pix.getPixels();
int rawbits[] = rtt.getPixels();
if (rawbits != null) {