62 lines
1.6 KiB
Haxe
62 lines
1.6 KiB
Haxe
|
package kha.graphics4;
|
||
|
|
||
|
import kha.arrays.Float32Array;
|
||
|
import kha.arrays.Int16Array;
|
||
|
import kha.graphics4.Usage;
|
||
|
import kha.graphics4.VertexStructure;
|
||
|
import kha.graphics4.VertexData;
|
||
|
|
||
|
class VertexBuffer {
|
||
|
public var buffer: Dynamic;
|
||
|
public var _data: Float32Array;
|
||
|
|
||
|
var vertexCount: Int;
|
||
|
var structure: VertexStructure;
|
||
|
var mySize: Int;
|
||
|
var lockStart: Int = 0;
|
||
|
var lockEnd: Int = 0;
|
||
|
|
||
|
public function new(vertexCount: Int, structure: VertexStructure, usage: Usage, instanceDataStepRate: Int = 0, canRead: Bool = false) {
|
||
|
this.vertexCount = vertexCount;
|
||
|
this.structure = structure;
|
||
|
mySize = vertexCount;
|
||
|
buffer = Krom.createVertexBuffer(vertexCount, structure.elements, usage, instanceDataStepRate);
|
||
|
}
|
||
|
|
||
|
public function delete() {
|
||
|
Krom.deleteVertexBuffer(buffer);
|
||
|
buffer = null;
|
||
|
}
|
||
|
|
||
|
public function lock(?start: Int, ?count: Int): Float32Array {
|
||
|
lockStart = start != null ? start : 0;
|
||
|
lockEnd = count != null ? start + count : mySize;
|
||
|
_data = new kha.arrays.ByteArray(Krom.lockVertexBuffer(buffer, lockStart, lockEnd));
|
||
|
return _data;
|
||
|
}
|
||
|
|
||
|
public function lockInt16(?start: Int, ?count: Int): Int16Array {
|
||
|
return new Int16Array(untyped lock(start, count).buffer);
|
||
|
}
|
||
|
|
||
|
public function unlock(?count: Int): Void {
|
||
|
if (count != null) {
|
||
|
lockEnd = lockStart + count;
|
||
|
}
|
||
|
Krom.unlockVertexBuffer(buffer, lockEnd);
|
||
|
}
|
||
|
|
||
|
public function stride(): Int {
|
||
|
return structure.byteSize();
|
||
|
}
|
||
|
|
||
|
public function count(): Int {
|
||
|
return vertexCount;
|
||
|
}
|
||
|
|
||
|
public function set(offset: Int): Int {
|
||
|
Krom.setVertexBuffer(buffer);
|
||
|
return 0;
|
||
|
}
|
||
|
}
|