Skip to content

Commit d7c48de

Browse files
committed
fix(android): webgl rendering
1 parent fb638fb commit d7c48de

File tree

2 files changed

+182
-60
lines changed

2 files changed

+182
-60
lines changed

packages/canvas/src-native/canvas-android/canvas/src/main/java/com/github/triniwiz/canvas/TNSWebGL2RenderingContext.kt

Lines changed: 64 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,12 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
231231
) {
232232
val lock = CountDownLatch(1)
233233
runOnGLThread(Runnable {
234-
val buffer = ByteBuffer.wrap(srcData)
235234
var size = srcData.size
236-
val offset = srcOffset * SIZE_OF_BYTE
237-
val overrideLength = srcLengthOverride * SIZE_OF_BYTE
235+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
236+
buffer.put(srcData)
237+
buffer.rewind()
238+
val offset = srcOffset
239+
val overrideLength = srcLengthOverride
238240
if (srcLengthOverride == 0) {
239241
size = size - offset
240242
} else if (overrideLength > size - offset) {
@@ -1204,7 +1206,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
12041206
val lock = CountDownLatch(1)
12051207
runOnGLThread(Runnable {
12061208
source?.let {
1207-
val buffer = ByteBuffer.wrap(it)
1209+
val size = it.size
1210+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1211+
buffer.put(it)
1212+
buffer.rewind()
12081213
nativeTexImage3DBuffer(
12091214
target,
12101215
level,
@@ -1256,7 +1261,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
12561261
val lock = CountDownLatch(1)
12571262
runOnGLThread(Runnable {
12581263
source?.let {
1259-
val buffer = ShortBuffer.wrap(it)
1264+
val size = it.size * SIZE_OF_SHORT
1265+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1266+
buffer.asShortBuffer().put(it)
1267+
buffer.rewind()
12601268
nativeTexImage3DBuffer(
12611269
target,
12621270
level,
@@ -1308,7 +1316,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
13081316
val lock = CountDownLatch(1)
13091317
runOnGLThread(Runnable {
13101318
source?.let {
1311-
val buffer = IntBuffer.wrap(it)
1319+
val size = it.size * SIZE_OF_INT
1320+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1321+
buffer.asIntBuffer().put(it)
1322+
buffer.rewind()
13121323
nativeTexImage3DBuffer(
13131324
target,
13141325
level,
@@ -1360,7 +1371,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
13601371
val lock = CountDownLatch(1)
13611372
runOnGLThread(Runnable {
13621373
source?.let {
1363-
val buffer = LongBuffer.wrap(it)
1374+
val size = it.size * SIZE_OF_LONG
1375+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1376+
buffer.asLongBuffer().put(it)
1377+
buffer.rewind()
13641378
nativeTexImage3DBuffer(
13651379
target,
13661380
level,
@@ -1412,7 +1426,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
14121426
val lock = CountDownLatch(1)
14131427
runOnGLThread(Runnable {
14141428
source?.let {
1415-
val buffer = FloatBuffer.wrap(it)
1429+
val size = it.size * SIZE_OF_FLOAT
1430+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1431+
buffer.asFloatBuffer().put(it)
1432+
buffer.rewind()
14161433
nativeTexImage3DBuffer(
14171434
target,
14181435
level,
@@ -1463,7 +1480,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
14631480
val lock = CountDownLatch(1)
14641481
runOnGLThread(Runnable {
14651482
source?.let {
1466-
val buffer = DoubleBuffer.wrap(it)
1483+
val size = it.size * SIZE_OF_DOUBLE
1484+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1485+
buffer.asDoubleBuffer().put(it)
1486+
buffer.rewind()
14671487
nativeTexImage3DBuffer(
14681488
target,
14691489
level,
@@ -1549,6 +1569,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
15491569
val ss = source.snapshot()
15501570
val lock = CountDownLatch(1)
15511571
runOnGLThread(Runnable {
1572+
val size = ss.size
1573+
val buf = ByteBuffer.allocateDirect(size)
1574+
buf.put(ss)
1575+
buf.rewind()
15521576
nativeTexImage3DBuffer(
15531577
target,
15541578
level,
@@ -1559,7 +1583,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
15591583
border,
15601584
format,
15611585
type,
1562-
ByteBuffer.wrap(ss),
1586+
buf,
15631587
flipYWebGL
15641588
)
15651589
lock.countDown()
@@ -1725,6 +1749,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
17251749
val ss = srcData.snapshot()
17261750
val lock = CountDownLatch(1)
17271751
runOnGLThread(Runnable {
1752+
val size = ss.size
1753+
val buf = ByteBuffer.allocateDirect(size)
1754+
buf.put(ss)
1755+
buf.rewind()
17281756
nativeTexSubImage3DBuffer(
17291757
target,
17301758
level,
@@ -1736,7 +1764,7 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
17361764
depth,
17371765
format,
17381766
type,
1739-
ByteBuffer.wrap(ss),
1767+
buf,
17401768
flipYWebGL
17411769
)
17421770
lock.countDown()
@@ -1803,7 +1831,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
18031831
val lock = CountDownLatch(1)
18041832
runOnGLThread(Runnable {
18051833
srcData?.let {
1806-
val buffer = ByteBuffer.wrap(it)
1834+
val size = it.size
1835+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1836+
buffer.put(it)
1837+
buffer.rewind()
18071838
buffer.position(srcOffset)
18081839
nativeTexSubImage3DBuffer(
18091840
target,
@@ -1860,7 +1891,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
18601891
val lock = CountDownLatch(1)
18611892
runOnGLThread(Runnable {
18621893
srcData?.let {
1863-
val buffer = ShortBuffer.wrap(it)
1894+
val size = it.size * SIZE_OF_SHORT
1895+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1896+
buffer.asShortBuffer().put(it)
1897+
buffer.rewind()
18641898
buffer.position(srcOffset)
18651899
nativeTexSubImage3DBuffer(
18661900
target,
@@ -1916,7 +1950,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
19161950
val lock = CountDownLatch(1)
19171951
runOnGLThread(Runnable {
19181952
srcData?.let {
1919-
val buffer = IntBuffer.wrap(it)
1953+
val size = it.size * SIZE_OF_INT
1954+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
1955+
buffer.asIntBuffer().put(it)
1956+
buffer.rewind()
19201957
buffer.position(srcOffset)
19211958
nativeTexSubImage3DBuffer(
19221959
target,
@@ -1973,7 +2010,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
19732010
val lock = CountDownLatch(1)
19742011
runOnGLThread(Runnable {
19752012
srcData?.let {
1976-
val buffer = LongBuffer.wrap(it)
2013+
val size = it.size * SIZE_OF_LONG
2014+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
2015+
buffer.asLongBuffer().put(it)
2016+
buffer.rewind()
19772017
buffer.position(srcOffset)
19782018
nativeTexSubImage3DBuffer(
19792019
target,
@@ -2030,7 +2070,10 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
20302070
val lock = CountDownLatch(1)
20312071
runOnGLThread(Runnable {
20322072
srcData?.let {
2033-
val buffer = FloatBuffer.wrap(it)
2073+
val size = it.size * SIZE_OF_FLOAT
2074+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
2075+
buffer.asFloatBuffer().put(it)
2076+
buffer.rewind()
20342077
buffer.position(srcOffset)
20352078
nativeTexSubImage3DBuffer(
20362079
target,
@@ -2086,7 +2129,11 @@ class TNSWebGL2RenderingContext : TNSWebGLRenderingContext {
20862129
val lock = CountDownLatch(1)
20872130
runOnGLThread(Runnable {
20882131
srcData?.let {
2089-
val buffer = DoubleBuffer.wrap(it)
2132+
val size = it.size * SIZE_OF_DOUBLE
2133+
val buffer = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder())
2134+
buffer.asDoubleBuffer().put(it)
2135+
buffer.rewind()
2136+
buffer.position(srcOffset)
20902137
nativeTexSubImage3DBuffer(
20912138
target,
20922139
level,

0 commit comments

Comments
 (0)