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; | ||
|  | 	} | ||
|  | } |