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
15e9f823
Unverified
Commit
15e9f823
authored
Feb 01, 2022
by
Nikolay Igotti
Committed by
GitHub
Feb 01, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rework Android renderer (#468)
parent
1e1affd5
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
7 deletions
+19
-7
Renderer.android.kt
...ndroidMain/kotlin/org/jetbrains/skiko/Renderer.android.kt
+19
-7
No files found.
skiko/src/androidMain/kotlin/org/jetbrains/skiko/Renderer.android.kt
View file @
15e9f823
...
@@ -6,26 +6,38 @@ import android.opengl.GLSurfaceView
...
@@ -6,26 +6,38 @@ import android.opengl.GLSurfaceView
import
android.widget.LinearLayout
import
android.widget.LinearLayout
import
android.view.MotionEvent
import
android.view.MotionEvent
import
android.view.KeyEvent
import
android.view.KeyEvent
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.*
import
kotlinx.coroutines.channels.Channel
import
org.jetbrains.skia.*
import
org.jetbrains.skia.*
import
java.nio.IntBuffer
import
java.nio.IntBuffer
import
javax.microedition.khronos.egl.EGLConfig
import
javax.microedition.khronos.egl.EGLConfig
import
javax.microedition.khronos.opengles.GL10
import
javax.microedition.khronos.opengles.GL10
class
SkikoSurfaceView
(
context
:
Context
,
val
layer
:
SkiaLayer
)
:
GLSurfaceView
(
context
)
{
internal
interface
FrameManager
{
private
val
renderer
=
SkikoSurfaceRender
(
layer
)
fun
onFrameCompleted
()
}
class
SkikoSurfaceView
(
context
:
Context
,
val
layer
:
SkiaLayer
)
:
GLSurfaceView
(
context
),
FrameManager
{
private
val
renderer
=
SkikoSurfaceRender
(
layer
,
this
)
init
{
init
{
layoutParams
=
LinearLayout
.
LayoutParams
(
layoutParams
=
LinearLayout
.
LayoutParams
(
LinearLayout
.
LayoutParams
.
WRAP_CONTENT
,
LinearLayout
.
LayoutParams
.
WRAP_CONTENT
)
LinearLayout
.
LayoutParams
.
WRAP_CONTENT
,
LinearLayout
.
LayoutParams
.
WRAP_CONTENT
)
setEGLConfigChooser
(
8
,
8
,
8
,
0
,
24
,
8
)
setEGLConfigChooser
(
8
,
8
,
8
,
0
,
24
,
8
)
setEGLContextClientVersion
(
2
)
setEGLContextClientVersion
(
2
)
// setRenderMode(RENDERMODE_WHEN_DIRTY)
setRenderer
(
renderer
)
setRenderer
(
renderer
)
setRenderMode
(
RENDERMODE_WHEN_DIRTY
)
}
private
val
frameAck
=
Channel
<
Unit
>(
Channel
.
CONFLATED
)
override
fun
onFrameCompleted
()
{
frameAck
.
trySend
(
Unit
)
}
}
private
val
frameDispatcher
=
FrameDispatcher
(
Dispatchers
.
Main
)
{
private
val
frameDispatcher
=
FrameDispatcher
(
Dispatchers
.
Main
)
{
renderer
.
update
()
renderer
.
update
()
requestRender
()
requestRender
()
frameAck
.
receive
()
}
}
fun
scheduleFrame
()
{
fun
scheduleFrame
()
{
...
@@ -37,7 +49,7 @@ class SkikoSurfaceView(context: Context, val layer: SkiaLayer) : GLSurfaceView(c
...
@@ -37,7 +49,7 @@ class SkikoSurfaceView(context: Context, val layer: SkiaLayer) : GLSurfaceView(c
override
fun
onTouchEvent
(
event
:
MotionEvent
):
Boolean
{
override
fun
onTouchEvent
(
event
:
MotionEvent
):
Boolean
{
val
events
:
MutableList
<
SkikoTouchEvent
>
=
mutableListOf
()
val
events
:
MutableList
<
SkikoTouchEvent
>
=
mutableListOf
()
val
count
=
event
.
pointerCount
val
count
=
event
.
pointerCount
for
(
index
in
0
..
count
-
1
)
{
for
(
index
in
0
until
count
)
{
events
.
add
(
toSkikoTouchEvent
(
event
,
index
,
layer
.
contentScale
))
events
.
add
(
toSkikoTouchEvent
(
event
,
index
,
layer
.
contentScale
))
}
}
layer
.
skikoView
?.
onTouchEvent
(
events
.
toTypedArray
())
layer
.
skikoView
?.
onTouchEvent
(
events
.
toTypedArray
())
...
@@ -64,7 +76,7 @@ class SkikoSurfaceView(context: Context, val layer: SkiaLayer) : GLSurfaceView(c
...
@@ -64,7 +76,7 @@ class SkikoSurfaceView(context: Context, val layer: SkiaLayer) : GLSurfaceView(c
}
}
}
}
private
class
SkikoSurfaceRender
(
private
val
layer
:
SkiaLayer
)
:
GLSurfaceView
.
Renderer
{
private
class
SkikoSurfaceRender
(
private
val
layer
:
SkiaLayer
,
private
val
manager
:
FrameManager
)
:
GLSurfaceView
.
Renderer
{
private
var
width
:
Int
=
0
private
var
width
:
Int
=
0
private
var
height
:
Int
=
0
private
var
height
:
Int
=
0
...
@@ -123,8 +135,8 @@ private class SkikoSurfaceRender(private val layer: SkiaLayer) : GLSurfaceView.R
...
@@ -123,8 +135,8 @@ private class SkikoSurfaceRender(private val layer: SkiaLayer) : GLSurfaceView.R
canvas
?.
drawPicture
(
it
.
instance
)
canvas
?.
drawPicture
(
it
.
instance
)
Unit
Unit
}
}
context
?.
flush
()
context
?.
flush
()
manager
.
onFrameCompleted
()
}
}
private
var
context
:
DirectContext
?
=
null
private
var
context
:
DirectContext
?
=
null
...
...
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