diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java index b8767716aea..e8d0a8818d9 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java @@ -1182,9 +1182,9 @@ public class LWWindowPeer clearBackground(size.width, size.height); } - if (blit) { + /*if (blit) { blitSurfaceData(oldData, getSurfaceData()); - } + }*/ if (oldData != null && oldData != getSurfaceData()) { // TODO: drop oldData for D3D/WGL pipelines diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m index dbccd84db5b..3688499b248 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLClip.m @@ -136,6 +136,7 @@ - (void)copyFrom:(MTLClip *)other { - (void)reset { _clipType = NO_CLIP; _stencilMaskGenerationInProgress = JNI_FALSE; + [self resetStencilState]; } - (void)resetStencilState { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m index 9c37039be76..a0f1be86230 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLContext.m @@ -116,6 +116,7 @@ @implementation MTLContext { texturePool, paint=_paint; extern void initSamplers(id device); +extern void releaseSamplers(); - (id)initWithDevice:(id)d shadersLib:(NSString*)shadersLib { self = [super init]; @@ -178,6 +179,10 @@ - (void) reset { // Add code for context state reset here [_clip resetStencilState]; + releaseSamplers(); + + [_encoderManager release]; + _encoderManager = nil; } - (MTLCommandBufferWrapper *) getCommandBufferWrapper { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m index e312aab7db2..3eaf8deabe8 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLPaints.m @@ -876,15 +876,8 @@ - (NSString *)description { void initSamplers(id device) { // TODO: move this code into SamplerManager (need implement) - if (samplersInitialized) { - // Release old samplers if any - [samplerNearestClamp release]; - [samplerLinearClamp release]; - [samplerNearestRepeat release]; - [samplerLinearRepeat release]; - - samplersInitialized = false; - } + // release old samplers + releaseSamplers(); MTLSamplerDescriptor *samplerDescriptor = [[MTLSamplerDescriptor new] autorelease]; @@ -915,6 +908,18 @@ void initSamplers(id device) { samplersInitialized = true; } +void releaseSamplers() { + if (samplersInitialized) { + // Release old samplers if any + [samplerNearestClamp release]; + [samplerLinearClamp release]; + [samplerNearestRepeat release]; + [samplerLinearRepeat release]; + + samplersInitialized = false; + } +} + static void setSampler(id encoder, int interpolation, bool repeat) { id sampler; if (repeat) { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m index 0f829e93c44..47e0f12927c 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/java2d/metal/MTLRenderQueue.m @@ -609,7 +609,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { [mtlc.encoderManager endEncoder]; } mtlc = newMtlc; - dstOps = NULL; + //dstOps = NULL; } } break; @@ -621,7 +621,7 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { BMTLSDOps *mtlsdo = (BMTLSDOps *)jlong_to_ptr(pData); if (mtlsdo != NULL) { CONTINUE_IF_NULL(mtlc); - MTLTR_FreeGlyphCaches(); + //MTLTR_FreeGlyphCaches(); MTLSD_Delete(env, mtlsdo); } break; @@ -660,6 +660,17 @@ void MTLRenderQueue_CheckPreviousOp(jint op) { case sun_java2d_pipe_BufferedOpCodes_INVALIDATE_CONTEXT: { CHECK_PREVIOUS_OP(MTL_OP_OTHER); + + /*BMTLSDOps *dstOps = MTLRenderQueue_GetCurrentDestination(); + if (dstOps != NULL) { + MTLSDOps *dstMTLOps = (MTLSDOps *)dstOps->privOps; + MTLLayer *layer = (MTLLayer*)dstMTLOps->layer; + if (layer != NULL) { + [layer stopDisplayLink]; + } + }*/ + + // invalidate the references to the current context and // destination surface that are maintained at the native level if (mtlc != NULL) {