| 9 | import java.nio.ByteBuffer |
| 10 | import java.nio.ByteOrder |
| 11 | import java.nio.FloatBuffer |
| 12 | import java.nio.IntBuffer |
| 13 | |
| 14 | class RemoteLayer(val websocket: NewNanoHTTPD, val max_vertex: Int, val max_element: Int, val element_dim: Int, var channel_name: String) { |
| 15 | |
| 16 | var vertexBufferB: ByteBuffer |
| 17 | var vertexBufferF: FloatBuffer |
| 18 | var vertexChanged = false |
| 19 | |
| 20 | var colorBufferB: ByteBuffer |
| 21 | var colorBufferF: FloatBuffer |
| 22 | var colorChanged = false |
| 23 | |
| 24 | var textureBufferB: ByteBuffer |
| 25 | var textureBufferF: FloatBuffer |
| 26 | var textureChanged = false |
| 27 | |
| 28 | var elementBufferB: ByteBuffer |
| 29 | var elementBufferI: IntBuffer |
| 30 | var elementChanged = false |
| 31 | |
| 32 | var numVertex = 0 |
| 33 | var numElement = 0 |
| 34 | |
| 35 | init { |
| 36 | |
| 37 | if (channel_name.length > 30) { |
| 38 | channel_name = channel_name.substring(0, 15) + channel_name.hashCode() + channel_name.substring(channel_name.length - 2) |
| 39 | } |
| 40 | |
| 41 | vertexBufferB = ByteBuffer.allocate(4 * max_vertex * 3 + 2 * 64).order(ByteOrder.nativeOrder()) |
| 42 | vertexBufferF = vertexBufferB.position(2 * 64).asFloatBuffer() |
| 43 | |
| 44 | colorBufferB = ByteBuffer.allocate(4 * max_vertex * 4 + 2 * 64).order(ByteOrder.nativeOrder()) |
| 45 | colorBufferF = colorBufferB.position(2 * 64).asFloatBuffer() |
| 46 | |
| 47 | textureBufferB = ByteBuffer.allocate(4 * max_vertex * 2 + 2 * 64).order(ByteOrder.nativeOrder()) |
| 48 | textureBufferF = textureBufferB.position(2 * 64).asFloatBuffer() |
| 49 | |
| 50 | elementBufferB = ByteBuffer.allocate(4 * max_element * element_dim + 2 * 64).order(ByteOrder.nativeOrder()) |
| 51 | elementBufferI = elementBufferB.position(2 * 64).asIntBuffer() |
| 52 | |
| 53 | |
| 54 | } |
| 55 | |
| 56 | |
| 57 | fun writeHeaders() { |
| 58 | writeHeader('V', vertexBufferB, numVertex, 3); |
| 59 | writeHeader('C', colorBufferB, numVertex, 4); |
| 60 | writeHeader('T', textureBufferB, numVertex, 2); |
| 61 | writeHeader('E', elementBufferB, numElement, element_dim); |
| 62 | } |
| 63 | |
| 64 | fun writeHeader(c: Char, b: ByteBuffer, max: Int, dim: Int) { |
| 65 | b.rewind() |
| 66 | b.putInt(max) |
| 67 | b.putChar(c) |
| 68 | b.put(channel_name.length.toByte()) |