forked from LeenkxTeam/LNXSDK
51 lines
1.3 KiB
Haxe
51 lines
1.3 KiB
Haxe
|
package kha.graphics4;
|
||
|
|
||
|
import js.html.webgl.GL;
|
||
|
import kha.arrays.Uint32Array;
|
||
|
import kha.graphics4.Usage;
|
||
|
|
||
|
class IndexBuffer {
|
||
|
public var _data: Uint32Array;
|
||
|
|
||
|
var buffer: Dynamic;
|
||
|
var mySize: Int;
|
||
|
var usage: Usage;
|
||
|
var lockStart: Int = 0;
|
||
|
var lockEnd: Int = 0;
|
||
|
|
||
|
public function new(indexCount: Int, usage: Usage, canRead: Bool = false) {
|
||
|
this.usage = usage;
|
||
|
mySize = indexCount;
|
||
|
buffer = SystemImpl.gl.createBuffer();
|
||
|
_data = new Uint32Array(indexCount);
|
||
|
}
|
||
|
|
||
|
public function delete(): Void {
|
||
|
_data = null;
|
||
|
SystemImpl.gl.deleteBuffer(buffer);
|
||
|
}
|
||
|
|
||
|
public function lock(?start: Int, ?count: Int): Uint32Array {
|
||
|
lockStart = start != null ? start : 0;
|
||
|
lockEnd = count != null ? start + count : mySize;
|
||
|
return _data.subarray(lockStart, lockEnd);
|
||
|
}
|
||
|
|
||
|
public function unlock(?count: Int): Void {
|
||
|
if (count != null)
|
||
|
lockEnd = lockStart + count;
|
||
|
SystemImpl.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer);
|
||
|
var data = _data.subarray(lockStart, lockEnd);
|
||
|
var glData: Dynamic = SystemImpl.elementIndexUint == null ? new js.lib.Uint16Array(data.buffer) : data;
|
||
|
SystemImpl.gl.bufferData(GL.ELEMENT_ARRAY_BUFFER, glData, usage == Usage.DynamicUsage ? GL.DYNAMIC_DRAW : GL.STATIC_DRAW);
|
||
|
}
|
||
|
|
||
|
public function set(): Void {
|
||
|
SystemImpl.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer);
|
||
|
}
|
||
|
|
||
|
public function count(): Int {
|
||
|
return mySize;
|
||
|
}
|
||
|
}
|