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