Commit f8a2c387 authored by Roman Sedaikin's avatar Roman Sedaikin

Added support to disable/enable vsync in DirectXRedrawer.

parent 0173ed41
...@@ -311,7 +311,7 @@ HRESULT D3DCompile( ...@@ -311,7 +311,7 @@ HRESULT D3DCompile(
} }
JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_Direct3DRedrawer_finishFrame( JNIEXPORT void JNICALL Java_org_jetbrains_skiko_redrawer_Direct3DRedrawer_finishFrame(
JNIEnv *env, jobject redrawer, jlong devicePtr, jlong contextPtr, jlong surfacePtr) JNIEnv *env, jobject redrawer, jlong devicePtr, jlong contextPtr, jlong surfacePtr, jboolean isVsyncEnabled)
{ {
DirectXDevice *d3dDevice = fromJavaPointer<DirectXDevice*>(devicePtr); DirectXDevice *d3dDevice = fromJavaPointer<DirectXDevice*>(devicePtr);
...@@ -323,7 +323,7 @@ HRESULT D3DCompile( ...@@ -323,7 +323,7 @@ HRESULT D3DCompile(
fContext->submit(true); fContext->submit(true);
// 1 value in [Present(1, 0)] enables vblank wait so this is how vertical sync works in DirectX. // 1 value in [Present(1, 0)] enables vblank wait so this is how vertical sync works in DirectX.
GR_D3D_CALL_ERRCHECK(d3dDevice->swapChain->Present(1, 0)); GR_D3D_CALL_ERRCHECK(d3dDevice->swapChain->Present((int)isVsyncEnabled, 0));
const UINT64 fence = d3dDevice->fenceValue; const UINT64 fence = d3dDevice->fenceValue;
GR_D3D_CALL_ERRCHECK(d3dDevice->queue->Signal(d3dDevice->fence.get(), fence)); GR_D3D_CALL_ERRCHECK(d3dDevice->queue->Signal(d3dDevice->fence.get(), fence));
......
...@@ -65,7 +65,7 @@ internal val platformOperations: PlatformOperations by lazy { ...@@ -65,7 +65,7 @@ internal val platformOperations: PlatformOperations by lazy {
properties: SkiaLayerProperties properties: SkiaLayerProperties
) = when(renderApi) { ) = when(renderApi) {
GraphicsApi.SOFTWARE -> SoftwareRedrawer(layer) GraphicsApi.SOFTWARE -> SoftwareRedrawer(layer)
GraphicsApi.DIRECT3D -> Direct3DRedrawer(layer) GraphicsApi.DIRECT3D -> Direct3DRedrawer(layer, properties)
else -> WindowsOpenGLRedrawer(layer, properties) else -> WindowsOpenGLRedrawer(layer, properties)
} }
} }
......
...@@ -6,9 +6,11 @@ import org.jetbrains.skija.BackendRenderTarget ...@@ -6,9 +6,11 @@ import org.jetbrains.skija.BackendRenderTarget
import org.jetbrains.skija.DirectContext import org.jetbrains.skija.DirectContext
import org.jetbrains.skiko.FrameDispatcher import org.jetbrains.skiko.FrameDispatcher
import org.jetbrains.skiko.HardwareLayer import org.jetbrains.skiko.HardwareLayer
import org.jetbrains.skiko.SkiaLayerProperties
internal class Direct3DRedrawer( internal class Direct3DRedrawer(
private val layer: HardwareLayer private val layer: HardwareLayer,
private val properties: SkiaLayerProperties
) : Redrawer { ) : Redrawer {
private var isDisposed = false private var isDisposed = false
...@@ -57,9 +59,13 @@ internal class Direct3DRedrawer( ...@@ -57,9 +59,13 @@ internal class Direct3DRedrawer(
return device return device
} }
fun finishFrame(device: Long, context: Long, surface: Long) {
finishFrame(device, context, surface, properties.isVsyncEnabled)
}
external fun createDirectXDevice(windowHandle: Long): Long external fun createDirectXDevice(windowHandle: Long): Long
external fun makeDirectXContext(device: Long): Long external fun makeDirectXContext(device: Long): Long
external fun makeDirectXRenderTarget(device: Long, width: Int, height: Int): Long external fun makeDirectXRenderTarget(device: Long, width: Int, height: Int): Long
external fun finishFrame(device: Long, context: Long, surface: Long) private external fun finishFrame(device: Long, context: Long, surface: Long, isVsyncEnabled: Boolean)
external fun disposeDevice(device: Long) external fun disposeDevice(device: 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