Unverified Commit f4b7585c authored by Elijah Semyonov's avatar Elijah Semyonov Committed by GitHub

ProMotion screen support (#709)

* Add method to MetalRedrawer for obtaining current UIView to which metalLayer is attached.

* Update caDisplayLink preferredFramesPerSecond when syncing metalLayer drawable size.

* Update skiko/src/iosMain/kotlin/org/jetbrains/skiko/redrawer/MetalRedrawer.ios.kt
Co-authored-by: 's avatardima.avdeev <99798741+dima-avdeev-jb@users.noreply.github.com>

---------
Co-authored-by: 's avatardima.avdeev <99798741+dima-avdeev-jb@users.noreply.github.com>
parent 47341c43
...@@ -15,10 +15,11 @@ import platform.Foundation.NSSelectorFromString ...@@ -15,10 +15,11 @@ import platform.Foundation.NSSelectorFromString
import platform.Metal.MTLCreateSystemDefaultDevice import platform.Metal.MTLCreateSystemDefaultDevice
import platform.Metal.MTLDeviceProtocol import platform.Metal.MTLDeviceProtocol
import platform.Metal.MTLPixelFormatBGRA8Unorm import platform.Metal.MTLPixelFormatBGRA8Unorm
import platform.QuartzCore.CADisplayLink import platform.QuartzCore.*
import platform.QuartzCore.CAMetalDrawableProtocol import platform.UIKit.UIScreen
import platform.QuartzCore.CAMetalLayer import platform.UIKit.UIView
import platform.QuartzCore.kCAGravityTopLeft import platform.UIKit.window
import platform.darwin.NSInteger
import platform.darwin.NSObject import platform.darwin.NSObject
internal class MetalRedrawer( internal class MetalRedrawer(
...@@ -42,7 +43,6 @@ internal class MetalRedrawer( ...@@ -42,7 +43,6 @@ internal class MetalRedrawer(
target = frameListener, target = frameListener,
selector = NSSelectorFromString(FrameTickListener::onDisplayLinkTick.name) selector = NSSelectorFromString(FrameTickListener::onDisplayLinkTick.name)
) )
init { init {
metalLayer.init(this.layer, contextHandler, device) metalLayer.init(this.layer, contextHandler, device)
caDisplayLink.setPaused(true) caDisplayLink.setPaused(true)
...@@ -74,6 +74,10 @@ internal class MetalRedrawer( ...@@ -74,6 +74,10 @@ internal class MetalRedrawer(
metalLayer.frame = osView.frame metalLayer.frame = osView.frame
metalLayer.init(layer, contextHandler, device) metalLayer.init(layer, contextHandler, device)
metalLayer.drawableSize = CGSizeMake(w * metalLayer.contentsScale, h * metalLayer.contentsScale) metalLayer.drawableSize = CGSizeMake(w * metalLayer.contentsScale, h * metalLayer.contentsScale)
osView.window?.screen?.maximumFramesPerSecond?.let {
caDisplayLink.preferredFramesPerSecond = it
}
} }
override fun needRedraw() { override fun needRedraw() {
......
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