Unverified Commit a97f6e93 authored by Roman Sedaikin's avatar Roman Sedaikin Committed by GitHub

Fixed getting surface in SOFTWARE_FAST renderer. (#388)

parent 8be256ce
......@@ -83,16 +83,16 @@ extern "C"
JNIEnv *env, jobject redrawer, jlong devicePtr)
{
SoftwareDevice *device = fromJavaPointer<SoftwareDevice *>(devicePtr);
device->surface.get()->ref();
return toJavaPointer(device->surface.get());
return toJavaPointer(device->surface.release());
}
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_finishFrame(
JNIEnv *env, jobject redrawer, jlong devicePtr)
JNIEnv *env, jobject redrawer, jlong devicePtr, jlong surfacePtr)
{
SoftwareDevice *device = fromJavaPointer<SoftwareDevice *>(devicePtr);
SkSurface *surface = fromJavaPointer<SkSurface *>(surfacePtr);
SkPixmap pm;
if (!device->surface->peekPixels(&pm)) {
if (!surface->peekPixels(&pm)) {
return;
}
int bitsPerPixel = pm.info().bytesPerPixel() * 8;
......
......@@ -68,12 +68,11 @@ extern "C"
JNIEnv *env, jobject redrawer, jlong devicePtr)
{
SoftwareDevice *device = fromJavaPointer<SoftwareDevice *>(devicePtr);
device->surface.get()->ref();
return toJavaPointer(device->surface.get());
return toJavaPointer(device->surface.release());
}
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_finishFrame(
JNIEnv *env, jobject redrawer, jlong devicePtr)
JNIEnv *env, jobject redrawer, jlong devicePtr, jlong surfacePtr)
{
__try
{
......
......@@ -5,6 +5,7 @@ import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skiko.SkiaLayer
import org.jetbrains.skiko.redrawer.AbstractDirectSoftwareRedrawer
import java.lang.ref.Reference
internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandler(layer) {
var isInited = false
......@@ -46,6 +47,10 @@ internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandle
}
override fun flush() {
softwareRedrawer.finishFrame()
try {
softwareRedrawer.finishFrame(getPtr(surface!!))
} finally {
Reference.reachabilityFence(surface!!)
}
}
}
\ No newline at end of file
......@@ -51,7 +51,7 @@ internal abstract class AbstractDirectSoftwareRedrawer(
}
return Surface(surface)
}
open fun finishFrame() = finishFrame(device)
open fun finishFrame(surface: Long) = finishFrame(device, surface)
override fun dispose() {
frameDispatcher.cancel()
contextHandler.dispose()
......@@ -63,6 +63,6 @@ internal abstract class AbstractDirectSoftwareRedrawer(
private external fun resize(devicePtr: Long, width: Int, height: Int)
private external fun acquireSurface(devicePtr: Long): Long
private external fun finishFrame(devicePtr: Long)
private external fun finishFrame(devicePtr: Long, surfacePtr: Long)
private external fun disposeDevice(devicePtr: Long)
}
\ No newline at end of file
......@@ -36,8 +36,8 @@ internal class LinuxSoftwareRedrawer(
super.resize(width, height)
}
override fun finishFrame() = layer.backedLayer.lockLinuxDrawingSurface {
super.finishFrame()
override fun finishFrame(surface: Long) = layer.backedLayer.lockLinuxDrawingSurface {
super.finishFrame(surface)
}
private external fun createDevice(display: Long, window: Long, width: Int, height: Int): Long
......
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