forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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;
 | 
						|
	}
 | 
						|
}
 |