Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
ff381625
Unverified
Commit
ff381625
authored
Nov 08, 2021
by
Igor Demin
Committed by
GitHub
Nov 08, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix DIRECT_SOFTWARE, rename it to SOFTWARE (#347)
parent
1fd83777
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
53 additions
and
24 deletions
+53
-24
GraphicsApi.kt
.../src/commonMain/kotlin/org/jetbrains/skiko/GraphicsApi.kt
+19
-1
SoftwareRedrawer.cc
skiko/src/jvmMain/cpp/linux/SoftwareRedrawer.cc
+2
-2
SoftwareRedrawer.cc
skiko/src/jvmMain/cpp/windows/SoftwareRedrawer.cc
+3
-2
RenderFactory.kt
...o/src/jvmMain/kotlin/org/jetbrains/skiko/RenderFactory.kt
+5
-5
SkikoProperties.kt
...src/jvmMain/kotlin/org/jetbrains/skiko/SkikoProperties.kt
+5
-5
DirectSoftwareContextHandler.kt
...g/jetbrains/skiko/context/DirectSoftwareContextHandler.kt
+1
-1
AbstractDirectSoftwareRedrawer.kt
...etbrains/skiko/redrawer/AbstractDirectSoftwareRedrawer.kt
+6
-4
LinuxSoftwareRedrawer.kt
...lin/org/jetbrains/skiko/redrawer/LinuxSoftwareRedrawer.kt
+8
-0
SkiaLayerPerformanceTest.kt
...st/kotlin/org/jetbrains/skiko/SkiaLayerPerformanceTest.kt
+2
-2
SkiaLayerTest.kt
...o/src/jvmTest/kotlin/org/jetbrains/skiko/SkiaLayerTest.kt
+2
-2
No files found.
skiko/src/commonMain/kotlin/org/jetbrains/skiko/GraphicsApi.kt
View file @
ff381625
package
org.jetbrains.skiko
package
org.jetbrains.skiko
enum
class
GraphicsApi
{
enum
class
GraphicsApi
{
UNKNOWN
,
SOFTWARE
,
DIRECT_SOFTWARE
,
OPENGL
,
DIRECT3D
,
VULKAN
,
METAL
,
WEBGL
UNKNOWN
,
/**
* Fast software rendering that works in 95% of cases. If it doesn't work, Skiko will fallback to SOFTWARE_COMPAT.
*
* For example, on JVM it doesn't work if the system has 16-bit color.
*/
SOFTWARE_FAST
,
/**
* Slower software rendering that works in all cases. On JVM uses [java.awt.BufferedImage] as intermediate buffer.
*/
SOFTWARE_COMPAT
,
OPENGL
,
DIRECT3D
,
VULKAN
,
METAL
,
WEBGL
}
}
enum
class
GpuPriority
(
val
value
:
String
)
{
enum
class
GpuPriority
(
val
value
:
String
)
{
...
...
skiko/src/jvmMain/cpp/linux/SoftwareRedrawer.cc
View file @
ff381625
...
@@ -12,7 +12,6 @@ public:
...
@@ -12,7 +12,6 @@ public:
Display
*
display
;
Display
*
display
;
Window
window
;
Window
window
;
GC
gc
;
GC
gc
;
SkAutoMalloc
surfaceMemory
;
sk_sp
<
SkSurface
>
surface
;
sk_sp
<
SkSurface
>
surface
;
unsigned
int
depth
=
0
;
unsigned
int
depth
=
0
;
SkColorType
colorSpace
=
kUnknown_SkColorType
;
SkColorType
colorSpace
=
kUnknown_SkColorType
;
...
@@ -80,10 +79,11 @@ extern "C"
...
@@ -80,10 +79,11 @@ extern "C"
device
->
surface
=
SkSurface
::
MakeRaster
(
info
);
device
->
surface
=
SkSurface
::
MakeRaster
(
info
);
}
}
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_
get
Surface
(
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_
acquire
Surface
(
JNIEnv
*
env
,
jobject
redrawer
,
jlong
devicePtr
)
JNIEnv
*
env
,
jobject
redrawer
,
jlong
devicePtr
)
{
{
SoftwareDevice
*
device
=
fromJavaPointer
<
SoftwareDevice
*>
(
devicePtr
);
SoftwareDevice
*
device
=
fromJavaPointer
<
SoftwareDevice
*>
(
devicePtr
);
device
->
surface
.
get
()
->
ref
();
return
toJavaPointer
(
device
->
surface
.
get
());
return
toJavaPointer
(
device
->
surface
.
get
());
}
}
...
...
skiko/src/jvmMain/cpp/windows/SoftwareRedrawer.cc
View file @
ff381625
...
@@ -64,11 +64,12 @@ extern "C"
...
@@ -64,11 +64,12 @@ extern "C"
}
}
}
}
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_
get
Surface
(
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_
acquire
Surface
(
JNIEnv
*
env
,
jobject
redrawer
,
jlong
devicePtr
)
JNIEnv
*
env
,
jobject
redrawer
,
jlong
devicePtr
)
{
{
SoftwareDevice
*
device
=
fromJavaPointer
<
SoftwareDevice
*>
(
devicePtr
);
SoftwareDevice
*
device
=
fromJavaPointer
<
SoftwareDevice
*>
(
devicePtr
);
return
toJavaPointer
(
device
->
surface
.
release
());
device
->
surface
.
get
()
->
ref
();
return
toJavaPointer
(
device
->
surface
.
get
());
}
}
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_finishFrame
(
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skiko_redrawer_AbstractDirectSoftwareRedrawer_finishFrame
(
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/RenderFactory.kt
View file @
ff381625
...
@@ -18,18 +18,18 @@ private fun makeDefaultRenderFactory(): RenderFactory {
...
@@ -18,18 +18,18 @@ private fun makeDefaultRenderFactory(): RenderFactory {
properties
:
SkiaLayerProperties
properties
:
SkiaLayerProperties
):
Redrawer
=
when
(
hostOs
)
{
):
Redrawer
=
when
(
hostOs
)
{
OS
.
MacOS
->
when
(
renderApi
)
{
OS
.
MacOS
->
when
(
renderApi
)
{
GraphicsApi
.
SOFTWARE
,
GraphicsApi
.
DIRECT_SOFTWARE
->
SoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
SOFTWARE
_COMPAT
,
GraphicsApi
.
SOFTWARE_FAST
->
SoftwareRedrawer
(
layer
,
properties
)
else
->
MetalRedrawer
(
layer
,
properties
)
else
->
MetalRedrawer
(
layer
,
properties
)
}
}
OS
.
Windows
->
when
(
renderApi
)
{
OS
.
Windows
->
when
(
renderApi
)
{
GraphicsApi
.
SOFTWARE
->
SoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
SOFTWARE
_COMPAT
->
SoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
DIRECT_SOFTWARE
->
WindowsSoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
SOFTWARE_FAST
->
WindowsSoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
OPENGL
->
WindowsOpenGLRedrawer
(
layer
,
properties
)
GraphicsApi
.
OPENGL
->
WindowsOpenGLRedrawer
(
layer
,
properties
)
else
->
Direct3DRedrawer
(
layer
,
properties
)
else
->
Direct3DRedrawer
(
layer
,
properties
)
}
}
OS
.
Linux
->
when
(
renderApi
)
{
OS
.
Linux
->
when
(
renderApi
)
{
GraphicsApi
.
SOFTWARE
->
SoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
SOFTWARE
_COMPAT
->
SoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
DIRECT_SOFTWARE
->
LinuxSoftwareRedrawer
(
layer
,
properties
)
GraphicsApi
.
SOFTWARE_FAST
->
LinuxSoftwareRedrawer
(
layer
,
properties
)
else
->
LinuxOpenGLRedrawer
(
layer
,
properties
)
else
->
LinuxOpenGLRedrawer
(
layer
,
properties
)
}
}
OS
.
JS
,
OS
.
Ios
->
{
OS
.
JS
,
OS
.
Ios
->
{
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/SkikoProperties.kt
View file @
ff381625
...
@@ -36,8 +36,8 @@ internal object SkikoProperties {
...
@@ -36,8 +36,8 @@ internal object SkikoProperties {
internal
fun
parseRenderApi
(
text
:
String
?):
GraphicsApi
{
internal
fun
parseRenderApi
(
text
:
String
?):
GraphicsApi
{
when
(
text
)
{
when
(
text
)
{
"SOFTWARE
"
->
return
GraphicsApi
.
SOFTWARE
"SOFTWARE
_COMPAT"
->
return
GraphicsApi
.
SOFTWARE_COMPAT
"
DIRECT_SOFTWARE"
->
return
GraphicsApi
.
DIRECT_SOFTWARE
"
SOFTWARE_FAST"
,
"DIRECT_SOFTWARE"
,
"SOFTWARE"
->
return
GraphicsApi
.
SOFTWARE_FAST
"OPENGL"
->
return
GraphicsApi
.
OPENGL
"OPENGL"
->
return
GraphicsApi
.
OPENGL
"DIRECT3D"
->
{
"DIRECT3D"
->
{
return
if
(
hostOs
==
OS
.
Windows
)
GraphicsApi
.
DIRECT3D
return
if
(
hostOs
==
OS
.
Windows
)
GraphicsApi
.
DIRECT3D
...
@@ -62,9 +62,9 @@ internal object SkikoProperties {
...
@@ -62,9 +62,9 @@ internal object SkikoProperties {
fun
fallbackRenderApiQueue
(
initialApi
:
GraphicsApi
)
:
List
<
GraphicsApi
>
{
fun
fallbackRenderApiQueue
(
initialApi
:
GraphicsApi
)
:
List
<
GraphicsApi
>
{
var
fallbackApis
=
when
(
hostOs
)
{
var
fallbackApis
=
when
(
hostOs
)
{
OS
.
Linux
->
listOf
(
GraphicsApi
.
OPENGL
,
GraphicsApi
.
DIRECT_SOFTWARE
,
GraphicsApi
.
SOFTWARE
)
OS
.
Linux
->
listOf
(
GraphicsApi
.
OPENGL
,
GraphicsApi
.
SOFTWARE_FAST
,
GraphicsApi
.
SOFTWARE_COMPAT
)
OS
.
MacOS
->
listOf
(
GraphicsApi
.
METAL
,
GraphicsApi
.
SOFTWARE
)
OS
.
MacOS
->
listOf
(
GraphicsApi
.
METAL
,
GraphicsApi
.
SOFTWARE
_COMPAT
)
OS
.
Windows
->
listOf
(
GraphicsApi
.
DIRECT3D
,
GraphicsApi
.
OPENGL
,
GraphicsApi
.
DIRECT_SOFTWARE
,
GraphicsApi
.
SOFTWARE
)
OS
.
Windows
->
listOf
(
GraphicsApi
.
DIRECT3D
,
GraphicsApi
.
OPENGL
,
GraphicsApi
.
SOFTWARE_FAST
,
GraphicsApi
.
SOFTWARE_COMPAT
)
OS
.
JS
,
OS
.
Ios
->
TODO
(
"commonize me"
)
OS
.
JS
,
OS
.
Ios
->
TODO
(
"commonize me"
)
}
}
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/context/DirectSoftwareContextHandler.kt
View file @
ff381625
...
@@ -40,7 +40,7 @@ internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandle
...
@@ -40,7 +40,7 @@ internal class DirectSoftwareContextHandler(layer: SkiaLayer) : JvmContextHandle
if
(
isSizeChanged
(
w
,
h
))
{
if
(
isSizeChanged
(
w
,
h
))
{
disposeCanvas
()
disposeCanvas
()
softwareRedrawer
.
resize
(
w
,
h
)
softwareRedrawer
.
resize
(
w
,
h
)
surface
=
softwareRedrawer
.
get
Surface
()
surface
=
softwareRedrawer
.
acquire
Surface
()
canvas
=
surface
!!
.
canvas
canvas
=
surface
!!
.
canvas
}
}
}
}
...
...
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/redrawer/AbstractDirectSoftwareRedrawer.kt
View file @
ff381625
...
@@ -26,7 +26,7 @@ internal abstract class AbstractDirectSoftwareRedrawer(
...
@@ -26,7 +26,7 @@ internal abstract class AbstractDirectSoftwareRedrawer(
if
(
layer
.
isShowing
)
{
if
(
layer
.
isShowing
)
{
layer
.
update
(
System
.
nanoTime
())
layer
.
update
(
System
.
nanoTime
())
layer
.
inDrawScope
(
contextHandler
::
draw
)
draw
(
)
}
}
}
}
...
@@ -36,14 +36,16 @@ internal abstract class AbstractDirectSoftwareRedrawer(
...
@@ -36,14 +36,16 @@ internal abstract class AbstractDirectSoftwareRedrawer(
frameDispatcher
.
scheduleFrame
()
frameDispatcher
.
scheduleFrame
()
}
}
protected
open
fun
draw
()
=
layer
.
inDrawScope
(
contextHandler
::
draw
)
override
fun
redrawImmediately
()
{
override
fun
redrawImmediately
()
{
layer
.
update
(
System
.
nanoTime
())
layer
.
update
(
System
.
nanoTime
())
layer
.
inDrawScope
(
contextHandler
::
draw
)
layer
.
inDrawScope
(
contextHandler
::
draw
)
}
}
open
fun
resize
(
width
:
Int
,
height
:
Int
)
=
resize
(
device
,
width
,
height
)
open
fun
resize
(
width
:
Int
,
height
:
Int
)
=
resize
(
device
,
width
,
height
)
fun
get
Surface
():
Surface
{
fun
acquire
Surface
():
Surface
{
val
surface
=
get
Surface
(
device
)
val
surface
=
acquire
Surface
(
device
)
if
(
surface
==
0L
)
{
if
(
surface
==
0L
)
{
throw
RenderException
(
"Failed to create Surface"
)
throw
RenderException
(
"Failed to create Surface"
)
}
}
...
@@ -60,7 +62,7 @@ internal abstract class AbstractDirectSoftwareRedrawer(
...
@@ -60,7 +62,7 @@ internal abstract class AbstractDirectSoftwareRedrawer(
}
}
private
external
fun
resize
(
devicePtr
:
Long
,
width
:
Int
,
height
:
Int
)
private
external
fun
resize
(
devicePtr
:
Long
,
width
:
Int
,
height
:
Int
)
private
external
fun
get
Surface
(
devicePtr
:
Long
):
Long
private
external
fun
acquire
Surface
(
devicePtr
:
Long
):
Long
private
external
fun
finishFrame
(
devicePtr
:
Long
)
private
external
fun
finishFrame
(
devicePtr
:
Long
)
private
external
fun
disposeDevice
(
devicePtr
:
Long
)
private
external
fun
disposeDevice
(
devicePtr
:
Long
)
}
}
\ No newline at end of file
skiko/src/jvmMain/kotlin/org/jetbrains/skiko/redrawer/LinuxSoftwareRedrawer.kt
View file @
ff381625
...
@@ -20,6 +20,14 @@ internal class LinuxSoftwareRedrawer(
...
@@ -20,6 +20,14 @@ internal class LinuxSoftwareRedrawer(
}
}
}
}
override
fun
dispose
()
=
layer
.
backedLayer
.
lockLinuxDrawingSurface
{
super
.
dispose
()
}
override
fun
draw
()
=
layer
.
backedLayer
.
lockLinuxDrawingSurface
{
super
.
draw
()
}
override
fun
redrawImmediately
()
=
layer
.
backedLayer
.
lockLinuxDrawingSurface
{
override
fun
redrawImmediately
()
=
layer
.
backedLayer
.
lockLinuxDrawingSurface
{
super
.
redrawImmediately
()
super
.
redrawImmediately
()
}
}
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/SkiaLayerPerformanceTest.kt
View file @
ff381625
...
@@ -80,8 +80,8 @@ class SkiaLayerPerformanceTest {
...
@@ -80,8 +80,8 @@ class SkiaLayerPerformanceTest {
}
}
if
(
if
(
renderApi
==
GraphicsApi
.
SOFTWARE
||
renderApi
==
GraphicsApi
.
SOFTWARE
_COMPAT
||
renderApi
==
GraphicsApi
.
DIRECT_SOFTWARE
renderApi
==
GraphicsApi
.
SOFTWARE_FAST
)
{
)
{
val
slowFrames
=
frameTimeDeltas
.
filter
{
it
>
1
E9
/
55
}
val
slowFrames
=
frameTimeDeltas
.
filter
{
it
>
1
E9
/
55
}
val
fastFrames
=
frameTimeDeltas
.
filter
{
it
<
expectedFrameNanos
*
0.5
}
val
fastFrames
=
frameTimeDeltas
.
filter
{
it
<
expectedFrameNanos
*
0.5
}
...
...
skiko/src/jvmTest/kotlin/org/jetbrains/skiko/SkiaLayerTest.kt
View file @
ff381625
...
@@ -394,7 +394,7 @@ class SkiaLayerTest {
...
@@ -394,7 +394,7 @@ class SkiaLayerTest {
delay
(
1000
)
delay
(
1000
)
screenshots
.
assert
(
window
.
bounds
,
"frame2"
,
"testFallbackToSoftware"
)
screenshots
.
assert
(
window
.
bounds
,
"frame2"
,
"testFallbackToSoftware"
)
assertEquals
(
GraphicsApi
.
SOFTWARE
,
window
.
layer
.
renderApi
)
assertEquals
(
GraphicsApi
.
SOFTWARE
_COMPAT
,
window
.
layer
.
renderApi
)
}
finally
{
}
finally
{
window
.
close
()
window
.
close
()
}
}
...
@@ -408,7 +408,7 @@ class SkiaLayerTest {
...
@@ -408,7 +408,7 @@ class SkiaLayerTest {
renderApi
:
GraphicsApi
,
renderApi
:
GraphicsApi
,
properties
:
SkiaLayerProperties
properties
:
SkiaLayerProperties
):
Redrawer
{
):
Redrawer
{
return
if
(
renderApi
==
GraphicsApi
.
SOFTWARE
)
{
return
if
(
renderApi
==
GraphicsApi
.
SOFTWARE
_COMPAT
)
{
RenderFactory
.
Default
.
createRedrawer
(
layer
,
renderApi
,
properties
)
RenderFactory
.
Default
.
createRedrawer
(
layer
,
renderApi
,
properties
)
}
else
{
}
else
{
nonSoftwareRenderFactory
.
createRedrawer
(
layer
,
renderApi
,
properties
)
nonSoftwareRenderFactory
.
createRedrawer
(
layer
,
renderApi
,
properties
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment