Commit 0556e3e7 authored by Roman Sedaikin's avatar Roman Sedaikin

Fixed memory leak when closing window with Metal rendering.

parent b1dcc60a
......@@ -6,6 +6,8 @@ import org.jetbrains.skija.SurfaceColorFormat
import org.jetbrains.skija.SurfaceOrigin
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.MetalRedrawer
import org.jetbrains.skija.impl.Native
import org.jetbrains.skiko.destroyContext
internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
val metalRedrawer: MetalRedrawer
......@@ -48,4 +50,8 @@ internal class MetalContextHandler(layer: SkiaLayer) : ContextHandler(layer) {
surface!!.flushAndSubmit()
metalRedrawer.finishFrame()
}
override fun destroyContext() {
destroyContext(Native.getPtr(context!!))
}
}
......@@ -122,6 +122,7 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_HardwareLayer_nativeDispose(JNIE
{
[layerStorage removeObject: layer];
[layer disposeLayer: env];
[layer release];
}
}
......
......@@ -63,6 +63,16 @@
return self;
}
-(void)dealloc {
NSLog(@"dealock");
[self.layer removeFromSuperlayer];
[self.layer release];
[self.device release];
[self.queue release];
[self.drawableHandle release];
[super dealloc];
}
@end
extern "C"
......@@ -82,6 +92,7 @@ JNIEXPORT jlong JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_makeMeta
JNIEnv * env, jobject redrawer, jlong devicePtr, jint width, jint height)
{
MetalDevice *device = (MetalDevice *) devicePtr;
[device.drawableHandle release];
id<CAMetalDrawable> currentDrawable = [device.layer nextDrawable];
GrMtlTextureInfo info;
info.fTexture.retain(currentDrawable.texture);
......@@ -173,9 +184,7 @@ JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_MetalRedrawer_disposeDe
JNIEnv *env, jobject redrawer, jlong devicePtr)
{
MetalDevice *device = (MetalDevice *) devicePtr;
[device.layer removeFromSuperlayer];
env->DeleteGlobalRef(device.layer.javaRef);
[device.layer release];
[device release];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment