Project

General

Profile

« Previous | Next » 

Revision 3bc73279

Added by Leszek Koltunski 4 days ago

minor

View differences:

src/main/java/org/distorted/library/mesh/MeshBase.kt
48 48
abstract class MeshBase
49 49
{
50 50
    var showNormals: Boolean // when rendering this mesh, draw normal vectors?
51
    private var mVBO1: InternalBuffer? = null
52
    private var mVBO2: InternalBuffer? = null
51
    private lateinit var mVBO1: InternalBuffer
52
    private lateinit var mVBO2: InternalBuffer
53 53
    private var mTFO: InternalBuffer // main vertex buffer and transform feedback buffer
54 54
    private var numVertices: Int = 0
55 55
    private var mVertAttribs1: FloatArray? = null // packed: PosX,PosY,PosZ, NorX,NorY,NorZ
......
88 88
        private const val OFFSET_TEX = TEX_ATTRIB*BYTES_PER_FLOAT
89 89
        private const val OFFSET_COM = COM_ATTRIB*BYTES_PER_FLOAT
90 90

  
91
        private const val TRAN_SIZE = TRAN_ATTRIBS*BYTES_PER_FLOAT
91
        private const val TRAN_SIZE  = TRAN_ATTRIBS*BYTES_PER_FLOAT
92 92
        private const val VERT1_SIZE = VERT1_ATTRIBS*BYTES_PER_FLOAT
93 93
        private const val VERT2_SIZE = VERT2_ATTRIBS*BYTES_PER_FLOAT
94 94

  
95
        private val mCenterBlockIndex = IntArray(EffectQueue.MAIN_VARIANTS)
95
        private val mCenterBlockIndex= IntArray(EffectQueue.MAIN_VARIANTS)
96 96
        private val mAssocBlockIndex = IntArray(EffectQueue.MAIN_VARIANTS)
97 97

  
98 98
        private const val TEX_COMP_SIZE = 5 // 5 four-byte entities inside the component
......
161 161
        }
162 162
    }
163 163

  
164
    private var mTexComponent: ArrayList<TexComponent>? = null
165
    private var mEffComponent: ArrayList<Int>? = null
164
    private lateinit var mTexComponent: ArrayList<TexComponent>
165
    private lateinit var mEffComponent: ArrayList<Int>
166 166

  
167 167
    ///////////////////////////////////////////////////////////////////////////////////////////////////
168 168
    internal constructor()
......
223 223
    ///////////////////////////////////////////////////////////////////////////////////////////////////
224 224
    private fun shallowCopy(original: MeshBase)
225 225
    {
226
        val texComSize = original.mTexComponent!!.size
226
        val texComSize = original.mTexComponent.size
227 227
        mTexComponent = ArrayList()
228 228

  
229 229
        for (i in 0 until texComSize)
230 230
        {
231
            val comp = TexComponent(original.mTexComponent!![i])
232
            mTexComponent!!.add(comp)
231
            val comp = TexComponent(original.mTexComponent[i])
232
            mTexComponent.add(comp)
233 233
        }
234 234

  
235 235
        mEffComponent = ArrayList()
236
        mEffComponent!!.addAll(original.mEffComponent!!)
236
        mEffComponent.addAll(original.mEffComponent)
237 237

  
238 238
        mVBO2 = InternalBuffer(GLES30.GL_ARRAY_BUFFER, GLES30.GL_STATIC_DRAW)
239 239
        mVertAttribs2 = original.mVertAttribs2?.copyOf()
......
242 242
    ///////////////////////////////////////////////////////////////////////////////////////////////////
243 243
    fun mergeTexComponentsNow()
244 244
    {
245
        val num = mTexComponent!!.size
245
        val num = mTexComponent.size
246 246

  
247 247
        if (num>1)
248 248
        {
249
            mTexComponent!!.clear()
250
            mTexComponent!!.add(TexComponent(numVertices-1))
251
            mVBO2!!.invalidate()
249
            mTexComponent.clear()
250
            mTexComponent.add(TexComponent(numVertices-1))
251
            mVBO2.invalidate()
252 252
        }
253 253
    }
254 254

  
255 255
    ///////////////////////////////////////////////////////////////////////////////////////////////////
256 256
    fun addEmptyTexComponentNow()
257 257
    {
258
        mTexComponent!!.add(TexComponent(numVertices-1))
258
        mTexComponent.add(TexComponent(numVertices-1))
259 259
    }
260 260

  
261 261
    ///////////////////////////////////////////////////////////////////////////////////////////////////
262 262
    fun mergeEffComponentsNow()
263 263
    {
264
        val num = mEffComponent!!.size
264
        val num = mEffComponent.size
265 265

  
266 266
        if (num>1)
267 267
        {
268
            mEffComponent!!.clear()
269
            mEffComponent!!.add(numVertices-1)
268
            mEffComponent.clear()
269
            mEffComponent.add(numVertices-1)
270 270

  
271 271
            for (index in 0 until numVertices)
272 272
            {
273 273
                mVertAttribs2!![VERT2_ATTRIBS*index+COM_ATTRIB] = 0f
274 274
            }
275 275

  
276
            mVBO2!!.invalidate()
276
            mVBO2.invalidate()
277 277
        }
278 278
    }
279 279

  
......
285 285
        val uniforms = FloatArray(7)
286 286
        var start: Int
287 287
        var end = -1
288
        val numComp = mEffComponent!!.size
288
        val numComp = mEffComponent.size
289 289

  
290 290
        matrixP[15] = 1f
291 291
        matrixP[10] = matrixP[15]
292
        matrixP[5] = matrixP[10]
293
        matrixP[0] = matrixP[5]
292
        matrixP[ 5] = matrixP[10]
293
        matrixP[ 0] = matrixP[5]
294 294
        matrixV[15] = 1f
295 295
        matrixV[10] = matrixV[15]
296
        matrixV[5] = matrixV[10]
297
        matrixV[0] = matrixV[5]
296
        matrixV[ 5] = matrixV[10]
297
        matrixV[ 0] = matrixV[5]
298 298

  
299 299
        effect.compute(uniforms, 0, 0, 0)
300 300
        effect.apply(matrixP, matrixV, uniforms, 0)
......
302 302
        for (comp in 0 until numComp)
303 303
        {
304 304
            start = end+1
305
            end = mEffComponent!![comp]
305
            end = mEffComponent[comp]
306 306

  
307 307
            if (mUBA.matchesAssociation(comp, andAssoc, equAssoc))
308 308
            {
......
310 310
            }
311 311
        }
312 312

  
313
        mVBO1!!.invalidate()
313
        mVBO1.invalidate()
314 314
    }
315 315

  
316 316
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
375 375

  
376 376
    ///////////////////////////////////////////////////////////////////////////////////////////////////
377 377
    // when a derived class is done computing its mesh, it has to call this method.
378
    fun setAttribs(vert1Attribs: FloatArray, vert2Attribs: FloatArray?)
378
    fun setAttribs(vert1Attribs: FloatArray, vert2Attribs: FloatArray)
379 379
    {
380 380
        numVertices = vert1Attribs.size/VERT1_ATTRIBS
381 381
        mVertAttribs1 = vert1Attribs
382 382
        mVertAttribs2 = vert2Attribs
383 383

  
384
        mTexComponent!!.add(TexComponent(numVertices-1))
385
        mEffComponent!!.add(numVertices-1)
384
        mTexComponent.add(TexComponent(numVertices-1))
385
        mEffComponent.add(numVertices-1)
386 386

  
387
        mVBO1!!.invalidate()
388
        mVBO2!!.invalidate()
387
        mVBO1.invalidate()
388
        mVBO2.invalidate()
389 389
    }
390 390

  
391 391
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
403 403

  
404 404
        if (origVertices>0)
405 405
        {
406
            origTexComponents = mTexComponent!!.size
406
            origTexComponents = mTexComponent.size
407 407
            numVertices += (if (numVertices%2==1) 2 else 1)
408
            mTexComponent!![origTexComponents-1].mEndIndex = numVertices-1
409
            origEffComponents = mEffComponent!!.size
410
            mEffComponent!![origEffComponents-1] = numVertices-1
408
            mTexComponent[origTexComponents-1].mEndIndex = numVertices-1
409
            origEffComponents = mEffComponent.size
410
            mEffComponent[origEffComponents-1] = numVertices-1
411 411
        }
412 412

  
413 413
        for (i in 0 until numMeshes)
414 414
        {
415 415
            mesh = meshes[i]
416
            numTexComponents = mesh.mTexComponent!!.size
417
            numEffComponents = mesh.mEffComponent!!.size
416
            numTexComponents = mesh.mTexComponent.size
417
            numEffComponents = mesh.mEffComponent.size
418 418
            numVert = mesh.numVertices
419 419

  
420 420
            val extraVerticesBefore = if (numVertices==0) 0 else 1
......
422 422

  
423 423
            for (j in 0 until numTexComponents)
424 424
            {
425
                comp = TexComponent(mesh.mTexComponent!![j])
425
                comp = TexComponent(mesh.mTexComponent[j])
426 426
                comp.mEndIndex += (extraVerticesBefore+numVertices)
427 427
                if (j==numTexComponents-1) comp.mEndIndex += extraVerticesAfter
428
                mTexComponent!!.add(comp)
428
                mTexComponent.add(comp)
429 429
            }
430 430

  
431 431
            for (j in 0 until numEffComponents)
432 432
            {
433
                var index = mesh.mEffComponent!![j]
433
                var index = mesh.mEffComponent[j]
434 434
                index += (extraVerticesBefore+numVertices)
435 435
                if (j==numEffComponents-1) index += extraVerticesAfter
436
                mEffComponent!!.add(index)
436
                mEffComponent.add(index)
437 437

  
438 438
                if (origEffComponents<maxEffComponents)
439 439
                {
......
541 541

  
542 542
        var endIndex: Int
543 543
        var index = 0
544
        val numEffComp = mEffComponent!!.size
544
        val numEffComp = mEffComponent.size
545 545

  
546 546
        for (component in 0 until numEffComp)
547 547
        {
548
            endIndex = mEffComponent!![component]
548
            endIndex = mEffComponent[component]
549 549

  
550 550
            while (index<=endIndex)
551 551
            {
......
556 556

  
557 557
        mVertAttribs1 = newAttribs1
558 558
        mVertAttribs2 = newAttribs2
559
        mVBO1!!.invalidate()
560
        mVBO2!!.invalidate()
559
        mVBO1.invalidate()
560
        mVBO2.invalidate()
561 561
    }
562 562

  
563 563
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
582 582
    ///////////////////////////////////////////////////////////////////////////////////////////////////
583 583
    fun textureMap(maps: Array<Static4D?>, startComponent: Int)
584 584
    {
585
        val num_comp = mTexComponent!!.size
585
        val num_comp = mTexComponent.size
586 586
        if (startComponent>num_comp) return
587 587

  
588 588
        val num_maps = maps.size
589 589
        val min = min((num_comp-startComponent).toDouble(), num_maps.toDouble()).toInt()
590
        var vertex = if (startComponent>0) mTexComponent!![startComponent-1].mEndIndex+1 else 0
590
        var vertex = if (startComponent>0) mTexComponent[startComponent-1].mEndIndex+1 else 0
591 591
        var newMap: Static4D?
592 592
        var oldMap: Static4D
593 593
        var comp: TexComponent
......
601 601
        for (i in 0 until min)
602 602
        {
603 603
            newMap = maps[i]
604
            comp = mTexComponent!![i+startComponent]
604
            comp = mTexComponent[i+startComponent]
605 605

  
606 606
            if (newMap!=null)
607 607
            {
......
619 619
                    var index = vertex*VERT2_ATTRIBS+TEX_ATTRIB
620 620
                    while (vertex<=comp.mEndIndex)
621 621
                    {
622
                        mVertAttribs2!![index] = ratW*mVertAttribs2!![index]+movX
622
                        mVertAttribs2!![index  ] = ratW*mVertAttribs2!![index]+movX
623 623
                        mVertAttribs2!![index+1] = ratH*mVertAttribs2!![index+1]+movY
624 624
                        vertex++
625 625
                        index += VERT2_ATTRIBS
......
631 631
            vertex = comp.mEndIndex+1
632 632
        }
633 633

  
634
        mVBO2!!.invalidate()
634
        mVBO2.invalidate()
635 635
    }
636 636

  
637 637
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
647 647

  
648 648
        val feedback = buffer.order(ByteOrder.nativeOrder()).asFloatBuffer()
649 649
        feedback[mVertAttribs1, 0, VERT1_ATTRIBS*numVertices]
650
        mVBO1!!.updateFloat(mVertAttribs1)
650
        mVBO1.updateFloat(mVertAttribs1)
651 651

  
652 652
        GLES30.glUnmapBuffer(GLES30.GL_TRANSFORM_FEEDBACK_BUFFER)
653 653
    }
......
678 678
     */
679 679
    fun printTexComponent(comp: Int)
680 680
    {
681
        if (comp>=0&&comp<numTexComponents)
681
        if( comp in 0..<numTexComponents )
682 682
        {
683
            val beg = if (comp>0) mTexComponent!![comp-1].mEndIndex+1 else 0
684
            val end = mTexComponent!![comp].mEndIndex
683
            val beg = if (comp>0) mTexComponent[comp-1].mEndIndex+1 else 0
684
            val end = mTexComponent[comp].mEndIndex
685 685
            val sb = StringBuilder()
686 686

  
687 687
            for (vert in beg..end)
......
799 799

  
800 800
        for (i in 0 until num)
801 801
        {
802
            val end = mTexComponent!![i].mEndIndex
802
            val end = mTexComponent[i].mEndIndex
803 803
            sb.append("\n")
804 804

  
805 805
            while (vert<=end)
......
846 846
    {
847 847
        if (mJobNode[0]!=null) mJobNode[0]!!.execute() // this will set itself to null
848 848

  
849
        val index1 = mVBO1!!.createImmediatelyFloat(numVertices*VERT1_SIZE, mVertAttribs1)
850
        val index2 = mVBO2!!.createImmediatelyFloat(numVertices*VERT2_SIZE, mVertAttribs2)
849
        val index1 = mVBO1.createImmediatelyFloat(numVertices*VERT1_SIZE, mVertAttribs1)
850
        val index2 = mVBO2.createImmediatelyFloat(numVertices*VERT2_SIZE, mVertAttribs2)
851 851
        val attr = program.mAttribute
852 852

  
853 853
        when (program.mAttributeLayout)
......
1002 1002
                tex = TexComponent(index)
1003 1003
                tex.setMap(Static4D(x, y, z, w))
1004 1004

  
1005
                mTexComponent!!.add(tex)
1005
                mTexComponent.add(tex)
1006 1006
                texComp++
1007 1007
            }
1008 1008

  
1009 1009
            for (effComp in 0 until numEff)
1010 1010
            {
1011 1011
                index = tmp[TEX_COMP_SIZE*texComp+effComp].toInt()
1012
                mEffComponent!!.add(index)
1012
                mEffComponent.add(index)
1013 1013
            }
1014 1014

  
1015 1015
            //////////////////////////////////////////////////////////////////////////////////////////
......
1024 1024
                    var vert = 0
1025 1025
                    while (vert<numVertices)
1026 1026
                    {
1027
                        mVertAttribs1!![VERT1_ATTRIBS*vert+POS_ATTRIB] = floatBuf[index+POS_ATTRIB]
1027
                        mVertAttribs1!![VERT1_ATTRIBS*vert+POS_ATTRIB  ] = floatBuf[index+POS_ATTRIB  ]
1028 1028
                        mVertAttribs1!![VERT1_ATTRIBS*vert+POS_ATTRIB+1] = floatBuf[index+POS_ATTRIB+1]
1029 1029
                        mVertAttribs1!![VERT1_ATTRIBS*vert+POS_ATTRIB+2] = floatBuf[index+POS_ATTRIB+2]
1030
                        mVertAttribs1!![VERT1_ATTRIBS*vert+NOR_ATTRIB] = floatBuf[index+NOR_ATTRIB]
1030
                        mVertAttribs1!![VERT1_ATTRIBS*vert+NOR_ATTRIB  ] = floatBuf[index+NOR_ATTRIB  ]
1031 1031
                        mVertAttribs1!![VERT1_ATTRIBS*vert+NOR_ATTRIB+1] = floatBuf[index+NOR_ATTRIB+1]
1032 1032
                        mVertAttribs1!![VERT1_ATTRIBS*vert+NOR_ATTRIB+2] = floatBuf[index+NOR_ATTRIB+2]
1033 1033
                        index += vert1InFile
......
1070 1070
    ///////////////////////////////////////////////////////////////////////////////////////////////////
1071 1071
    fun getLastVertexEff(effComponent: Int): Int
1072 1072
    {
1073
        if (effComponent>=0&&effComponent<mTexComponent!!.size)
1073
        if (effComponent>=0&&effComponent<mTexComponent.size)
1074 1074
        {
1075
            return mEffComponent!![effComponent]
1075
            return mEffComponent[effComponent]
1076 1076
        }
1077 1077

  
1078 1078
        return 0
......
1081 1081
    ///////////////////////////////////////////////////////////////////////////////////////////////////
1082 1082
    fun getLastVertexTex(texComponent: Int): Int
1083 1083
    {
1084
        if (texComponent>=0&&texComponent<mTexComponent!!.size)
1084
        if (texComponent>=0&&texComponent<mTexComponent.size)
1085 1085
        {
1086
            return mTexComponent!![texComponent].mEndIndex
1086
            return mTexComponent[texComponent].mEndIndex
1087 1087
        }
1088 1088

  
1089 1089
        return 0
......
1099 1099
    {
1100 1100
        var tex: TexComponent
1101 1101

  
1102
        val numTex = mTexComponent!!.size
1103
        val numEff = mEffComponent!!.size
1102
        val numTex = mTexComponent.size
1103
        val numEff = mEffComponent.size
1104 1104

  
1105 1105
        try
1106 1106
        {
......
1111 1111

  
1112 1112
            for (i in 0 until numTex)
1113 1113
            {
1114
                tex = mTexComponent!![i]
1114
                tex = mTexComponent[i]
1115 1115

  
1116 1116
                stream.writeFloat(tex.mEndIndex.toFloat())
1117 1117
                stream.writeFloat(tex.mTextureMap.get0())
......
1122 1122

  
1123 1123
            for (i in 0 until numEff)
1124 1124
            {
1125
                stream.writeFloat(mEffComponent!![i].toFloat())
1125
                stream.writeFloat(mEffComponent[i].toFloat())
1126 1126
            }
1127 1127

  
1128 1128
            val centers = if (useCenters) mUBC!!.backingArray else FloatArray(4*numEff)
......
1154 1154
     */
1155 1155
    fun mergeTexComponents()
1156 1156
    {
1157
        if (mJobNode[0]==null)
1158
        {
1159
            mergeTexComponentsNow()
1160
        }
1161
        else
1162
        {
1163
            mJobNode[0] = DeferredJobs.mergeTex(this)
1164
        }
1157
        if (mJobNode[0]==null) mergeTexComponentsNow()
1158
        else mJobNode[0] = DeferredJobs.mergeTex(this)
1165 1159
    }
1166 1160

  
1167 1161
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
1170 1164
     */
1171 1165
    fun mergeEffComponents()
1172 1166
    {
1173
        if (mJobNode[0]==null)
1174
        {
1175
            mergeEffComponentsNow()
1176
        }
1177
        else
1178
        {
1179
            mJobNode[0] = DeferredJobs.mergeEff(this)
1180
        }
1167
        if (mJobNode[0]==null) mergeEffComponentsNow()
1168
        else mJobNode[0] = DeferredJobs.mergeEff(this)
1181 1169
    }
1170

  
1182 1171
    ///////////////////////////////////////////////////////////////////////////////////////////////////
1183 1172
    /**
1184 1173
     * Return the number of vertices in this Mesh.
......
1194 1183
        mVertAttribs1 = null
1195 1184
        mVertAttribs2 = null
1196 1185

  
1197
        mVBO1!!.markForDeletion()
1198
        mVBO2!!.markForDeletion()
1186
        mVBO1.markForDeletion()
1187
        mVBO2.markForDeletion()
1199 1188
        mTFO.markForDeletion()
1200 1189
        mUBA.markForDeletion()
1201 1190

  
......
1218 1207
     */
1219 1208
    fun apply(effect: MatrixEffect, andAssoc: Int, equAssoc: Int)
1220 1209
    {
1221
        if (mJobNode[0]==null)
1222
        {
1223
            applyMatrix(effect, andAssoc, equAssoc)
1224
        }
1225
        else
1226
        {
1227
            mJobNode[0] = DeferredJobs.matrix(this, effect, andAssoc, equAssoc)
1228
        }
1210
        if (mJobNode[0]==null) applyMatrix(effect, andAssoc, equAssoc)
1211
        else mJobNode[0] = DeferredJobs.matrix(this, effect, andAssoc, equAssoc)
1229 1212
    }
1230 1213

  
1231 1214
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
1241 1224
     */
1242 1225
    fun apply(effect: VertexEffect)
1243 1226
    {
1244
        mJobNode[0] = DeferredJobs.vertex(this, effect)
1227
        mJobNode[0] = DeferredJobs.vertex(this,effect)
1245 1228
    }
1246 1229

  
1247 1230
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
1268 1251
     */
1269 1252
    fun setTextureMap(maps: Array<Static4D?>, startComponent: Int)
1270 1253
    {
1271
        if (mJobNode[0]==null)
1272
        {
1273
            textureMap(maps, startComponent)
1274
        }
1275
        else
1276
        {
1277
            mJobNode[0] = DeferredJobs.textureMap(this, maps, startComponent)
1278
        }
1254
        if (mJobNode[0]==null) textureMap(maps, startComponent)
1255
        else mJobNode[0] = DeferredJobs.textureMap(this, maps, startComponent)
1279 1256
    }
1280 1257

  
1281 1258
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
1286 1263
     */
1287 1264
    fun getTextureMap(component: Int): Static4D?
1288 1265
    {
1289
        return if ((component>=0&&component<mTexComponent!!.size)) mTexComponent!![component].mTextureMap else null
1266
        return if ((component>=0&&component<mTexComponent.size)) mTexComponent[component].mTextureMap else null
1290 1267
    }
1291 1268

  
1292 1269
    ///////////////////////////////////////////////////////////////////////////////////////////////////
......
1404 1381
     *
1405 1382
     * @return The number of Texture Components of this Mesh.
1406 1383
     */
1407
    val numTexComponents: Int get() = mTexComponent!!.size
1384
    val numTexComponents: Int get() = mTexComponent.size
1408 1385

  
1409 1386
    ///////////////////////////////////////////////////////////////////////////////////////////////////
1410 1387
    /**
......
1413 1390
     *
1414 1391
     * @return The number of Effect Components of this Mesh.
1415 1392
     */
1416
    val numEffComponents: Int get() = mEffComponent!!.size
1393
    val numEffComponents: Int get() = mEffComponent.size
1417 1394

  
1418 1395
    ///////////////////////////////////////////////////////////////////////////////////////////////////
1419 1396
    /**

Also available in: Unified diff